Contractor Licence Check (OR & WA) avatar

Contractor Licence Check (OR & WA)

Pricing

from $4.00 / 1,000 license record returneds

Go to Apify Store
Contractor Licence Check (OR & WA)

Contractor Licence Check (OR & WA)

Verifies Oregon CCB and Washington L&I contractor licences from official daily open data: active status, bond and insurance with expiry dates, and whether each is valid today.

Pricing

from $4.00 / 1,000 license record returneds

Rating

0.0

(0)

Developer

Nico Poland

Nico Poland

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Verifies Oregon CCB and Washington L&I contractor licences from official daily open data: active status, bond and insurance with expiry dates, and whether each is valid today.

What it does

Give it licence numbers or business names and it answers the question you actually have: is this contractor licensed, active, bonded and insured right now?

Both states publish their licensing registers as open data, refreshed daily. This Actor reads those registers directly (Oregon's CCB file, and Washington's L&I licence, bond and insurance files joined on the licence number) and computes three plain booleans:

FieldMeans
is_activeThe licence is usable today, by the state's own status.
is_bondedA surety bond is in force today.
is_insuredLiability cover is in force today.

Both states publish expiry dates and leave the arithmetic to you. A licence can look perfectly healthy while the bond behind it lapsed three weeks ago.

Two things this surfaces that the state portals do not:

  1. Bond impairment (Washington). Claims have been paid out against the contractor's bond. It stays true after they file a replacement bond, because it is a fact about the contractor rather than the paperwork, so it is computed from the whole bond history, not the current record.
  2. Continuous bonds. Washington records an open-ended bond by writing text where a date would go. Read as a date that is simply missing, and 45,078 of the 177,029 bond records look like "cover unknown" when they are in fact the strongest cover there is.

What it does not do. It is a verification tool, not a directory. You look up contractors you already have, by licence number or business name. There is no way to ask "which licences does this person hold", and no bulk export by city or trade.

Input

Give licenseNumbers, businessNames, or both.

FieldTypeRequiredDefaultDescription
licenseNumbersarray of stringsone ofn/aUp to 100. OR numbers are digits (260124); WA are alphanumeric (247PRPM916QW).
businessNamesarray of stringsone ofn/aUp to 50. Partial names match.
statesarrayno["OR","WA"]Which registers to search.
maxResultsintegerno500Stop after this many records.
failOnEmptybooleannofalseOperator health check; leave off.
{
"licenseNumbers": ["247PRPM916QW", "260124"],
"businessNames": ["ACME CONSTRUCTION"],
"states": ["OR", "WA"]
}

Output

One row per licence record. A real Washington row from a real run:

{
"state": "WA",
"license_number": "247PRPM916QW",
"business_name": "24-7 PROPERTY MAINTENANCE LLC",
"status": "ACTIVE",
"is_active": true,
"is_bonded": true,
"is_insured": true,
"license_type_description": "CONSTRUCTION CONTRACTOR",
"license_expires_on": "2027-12-29",
"bond_company": "Travelers Casualty & Surety Co of America",
"bond_amount": 30000.0,
"bond_is_continuous": true,
"bond_impaired": true,
"bond_impaired_on": "2026-03-10",
"insurance_company": "FEDERATED RESERVE INSURANCE CO",
"insurance_amount": 1000000.0,
"insurance_expires_on": "2027-06-17",
"principal_name": "THOMPSON, FRANK EDWARD",
"phone": "(509) 826-6895",
"record_url": "https://secure.lni.wa.gov/verify/Detail.aspx?UBI=602874170"
}

Read that row: currently licensed, bonded and insured, but a previous bond was impaired in March. That is the contractor you want to ask a question or two before signing.

is_bonded and is_insured are absent, not false, when the state records no cover at all. "Expired" and "never recorded" are different facts and you should be able to act on the difference.

Full field documentation is on the Output tab (37 fields, three views).

Pricing

Pay per event. You are charged $0.004 per licence record returned, plus Apify's standard $0.00005 Actor start event.

Example: verifying 25 subcontractors = 25 × $0.004 + $0.00005 = $0.10.

You are never charged for a "not found" explanation, for failed runs, or for anything beyond your maxResults.

Limits and refresh cadence

  • Coverage: Oregon and Washington only. California is deliberately not included: CSLB is well served by existing tools and publishes no comparable bulk feed.
  • Freshness: both registers are refreshed daily by the states. Responses are cached for 6 hours.
  • Oregon publishes only current licences. A contractor whose licence has lapsed simply is not in the file, so "not found" in Oregon can mean "not licensed today". The Actor says so rather than returning silence. Washington publishes expired and suspended licences with their status.
  • bond_impaired is Washington-only. Oregon publishes no equivalent, so its absence in an Oregon row means "not published", not "clean".
  • This is a record check, not an endorsement. It reports what the states publish. It cannot tell you whether the work will be any good.
  • Verification only: no reverse lookup from a person to their licences, and no bulk export by city or trade.

Attribution and privacy

Source, licence and retrieval time are stamped on every row.

These registers exist so the public can check a contractor, and both states publish the responsible individual's name for that purpose, so principal_name is included. What this Actor deliberately does not do is let you search from a person to their businesses, or export contact lists by area or trade. It answers questions about a named contractor; it is not a lead list.

Changelog

See the Changelog tab.

Issues

Report problems on the Issues tab. Please include the licence number and state. Breakage is normally fixed within one working day.