Use case
Check an Oregon Contractor's Bond and Insurance
Look up an Oregon CCB licence and read the bond and liability insurance on file with it - the fields that decide whether a contractor can legally take your job.
Say you manage a run of rental properties around Bend and a roofer you have not used before has come in cheapest on a re-roof. Oregon does not let a contractor work without a CCB registration, and a registration is not just a number — it carries a surety bond and a liability insurance policy behind it. Those are the two things that matter to you if the job goes wrong, and they are the two things a bid never mentions.
The useful part is that Oregon publishes them. The CCB record names the bond company, the bond amount and the liability carrier on the same row as the licence — so you can see whether anything is on file at all without asking the contractor for a certificate first.
The manual way, and what it costs
CCB’s search is public and free and shows you the bond and insurance block on the contractor’s detail page. For one roofer, go and use it. It is the board’s own screen, it takes a minute, and paying for a single lookup would be silly.
Two things change the arithmetic. Volume: a bench of subs re-checked at renewal is the same three clicks repeated until someone quietly stops doing it. And shape — the portal hands you a page, not a row, so the bond amount ends up in a screenshot in a folder rather than a column you can sort.
There is an honest third option. This is Oregon’s official Socrata open-data feed: public, documented, free. If you can write a SoQL filter you can pull it yourself and pay nobody. What the actor sells is not access, it is the same fields normalised without you learning Socrata first.
The faster way
Oregon Contractor License Lookup & Verify (CCB) does the same search once and hands back every row at once.
{
"query": "CONSTRUCTION",
"maxResults": 25
}
query does double duty. Paste a CCB licence number and it is an exact match — that is the version
you want for a named roofer, because it returns one row and one row only. The CONSTRUCTION above is
the other mode: a substring search against the CCB name index, which is what you use when all you
have off the bid is a business name and you need to see which registrations it could be.
maxResults: 25 is the cost ceiling — you are billed per match returned, and a common word like
CONSTRUCTION matches a great many Oregon businesses.
What comes back
{
"state": "OR",
"license_number": "100215",
"business_name": "BRUCE HUIE",
"person_name": "BRUCE HUIE",
"license_type": "RGC",
"status": "Active",
"issue_date": "06/20/1994",
"expiration_date": "02/06/2028",
"bond_amount": "25000",
"bond_company": "WESTERN SURETY COMPANY",
"insurance_company": "SCOTTSDALE INDEMNITY CO",
"city": "BROOKINGS",
"county": "Curry",
"address": "PO BOX 543",
"zip_code": "97415",
"phone": "5412150829",
"matched_by": "license_number",
"source_url": "https://search.ccb.state.or.us/search/"
}
| Field | Example value | Meaning |
|---|---|---|
state | OR | Always ‘OR’ for this actor |
license_number | 100215 | CCB license number |
business_name | BRUCE HUIE | Licensed business / full name |
person_name | BRUCE HUIE | Responsible Managing Individual (RMI) |
license_type | RGC | CCB license type / endorsement |
issue_date | 06/20/1994 | Original registration date |
Three fields decide whether you sign. bond_amount and bond_company are the surety behind the
registration — the amount is the number a claim would be made against, and the company is who you
would be making it to. insurance_company is the liability carrier the CCB has on file. Read them
together with license_type: Oregon’s endorsements are not interchangeable, and a residential
endorsement with a residential-sized bond is a different proposition from a commercial one.
What matters most is what a null means. These fields come back empty when the feed publishes
nothing for that record — not because the lookup half-worked. An empty bond_company is a finding:
a question to put to the contractor before you sign, not a gap to shrug at. Read expiration_date
alongside them, because a registration that lapses two weeks into a re-roof takes the bond with it.
What you’d do with it
File the row against the contractor in whatever holds your vendor records — licence number, type,
bond company and amount, carrier, expiry, plus source_url and the run date so it is clear what was
true when. Sort a whole bench on expiration_date and you have the re-check list for the next
quarter. If the bond or carrier field is empty, that is the item that goes on the call list: ask for
the certificate directly, because the register is not going to give it to you.
Worth knowing
Active licences only, and status is a constant. The underlying registry is CCB’s Active
Licenses dataset. Every row therefore reads Active — it is stamped on by the actor because that
is what the dataset contains, not read off the individual record. The consequence matters: a
suspended, lapsed or revoked contractor does not come back as “Expired”, they come back as no
result at all, and a no-result run is not proof of anything. It could be a lapsed registration, a
name you spelled differently, or a contractor who was never registered.
A name search matches the licensed name only. The CCB name index is what the substring runs against; the RMI comes back on the row but is not itself searchable. A licence filed under a name you do not know about will not turn up, so a missing match is not evidence someone is unlicensed.
maxResults is what you get, and a very broad word can return hundreds of rows you pay for. It
used to cap silently at 50 no matter what you set; that is fixed, which means the number now really
does bound the run. Narrow the query rather than relying on a low cap to do it for you.
It is the published snapshot, not CCB’s live screen, so it can lag; for a formal decision, confirm on the board. And the row names a surety and a carrier as the state has them on file — it does not tell you the policy is paid up, what it covers, or what the limits are.
Run it yourself: How to run Oregon Contractor License Lookup & Verify (CCB) walks the whole thing step by step.
- Look Up Oregon Contractors by Name — the same CCB data from the multi-state actor, worth it when you are checking Oregon alongside WA, TX or CT.
- California Contractor License Lookup — reach for it when the sub is Californian: CSLB publishes bond and workers’ comp on its own record.
Last updated 2026-07-22