← Use cases

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

The public search form on OR CCB (Socrata)
OR CCB (Socrata) — the official search. One record at a time.

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/"
}
FieldExample valueMeaning
stateORAlways ‘OR’ for this actor
license_number100215CCB license number
business_nameBRUCE HUIELicensed business / full name
person_nameBRUCE HUIEResponsible Managing Individual (RMI)
license_typeRGCCCB license type / endorsement
issue_date06/20/1994Original 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.

Last updated 2026-07-22