← Health board

17 States

Contractor License Verify - AI Agent Tool (17 States)

Ask one question, get one structured verdict: is this contractor licensed in this state? Enumerated verdicts built for an AI agent to branch on - not prose.

100%golden-diff pass
Run it on Apify verified nightly

Verification

100%golden-diff success
92canary runs
0days since last canary run

Output fields

Authoritative field set from the dataset schema.

FieldType
verdictstring|null
verdict_reasonstring|null
verdict_basisstring|null
requested_companystring|null
requested_license_numberstring|null
requested_statestring|null
entity_namestring|null
license_numberstring|null
license_typestring|null
status_rawstring|null
expiry_datestring|null
days_to_expiryinteger|null
citystring|null
source_portalstring|null
checked_atstring|null
coverage_notestring|null
source_urlstring|null
scraped_atstring|null

Sample row

{
  "verdict": "active",
  "verdict_reason": "status 'This license is current and active.', expires 2027-10-31",
  "verdict_basis": "status+expiry_date",
  "requested_company": null,
  "requested_license_number": "22726",
  "requested_state": "CA",
  "entity_name": "RANSOME COMPANY",
  "license_number": "22726",
  "license_type": null,
  "status_raw": "This license is current and active.",
  "expiry_date": "10/31/2027",
  "days_to_expiry": 451,
  "source_portal": "CSLB",
  "checked_at": "2026-08-06T19:20:11+00:00",
  "source_url": "https://www.cslb.ca.gov/OnlineServices/CheckLicenseII/LicenseDetail.aspx?LicNum=22726"
}

Inputs

FieldTypeReqDefaultDescription
state string no "CA" REQUIRED. The 2-letter US state code of the licensing board to check, e.g. 'TX'. Supported: AL, AR, CA, CT, FL, MA, MI, MN, NC, NM, NV, OR, SC, TN, TX, VA, WA. Pass any other state and every result comes back with verdict 'unverifiable_state_not_covered', which means the check was NOT performed - do not report that as the contractor being unlicensed. Contractor licensing is per-state, so you must know the state before you can verify anything; if the user has not told you which state, ask them rather than guessing.
company string no The business or licensee name to look up, e.g. 'Ransome Company'. Use this when you do not have a licence number. Matching is EXACT on the full name once case, punctuation and company suffixes (LLC, Inc, Corp) are ignored - so 'ABC Roofing' will NOT match 'ABC Roofing & Siding', by design. If a name matches more than one licence you get verdict 'check_failed' rather than a guess, because returning the wrong contractor's licence is worse than returning nothing. Supply 'licenseNumber' instead whenever you have it: it is exact and cannot mis-match.
licenseNumber string no The contractor's licence number, e.g. '22726'. This is the most reliable input - prefer it over the company name whenever the user has given you one. Punctuation and leading zeros are ignored, so 'CCB-123456' and '123456' both work. If the number is not in the state's registry you get verdict 'not_found', which means the registry had no such record - it is NOT evidence that the contractor is unlicensed.
companies array no [] Batch form of 'company' - check many names in ONE run instead of starting a run per name. All entries must be in the same state. You are billed per verdict returned, not per run, so batching costs the same and is much faster.
licenseNumbers array no [] Batch form of 'licenseNumber' - check many licence numbers in ONE run. All entries must be in the same state. Billing is per verdict returned, so batching costs the same as separate runs and is much faster.

Pricing

Pay per result (license-verified) — no charge for empty runs.
Example: 100 verdicts resolved on a state board at $0.004/result ≈ $0.40.

FAQ

Which states are covered?

Seventeen: AL, AR, CA, CT, FL, MA, MI, MN, NC, NM, NV, OR, SC, TN, TX, VA and WA. Any other state returns verdict 'unverifiable_state_not_covered', which means no check was performed - it is not a finding about the contractor.

Does 'not_found' mean the contractor is unlicensed?

No, and this is the most important line in the whole listing. It means the state registry returned no match for what was searched. A typo, a DBA that differs from the licensed entity, or a licence held under a parent company all produce 'not_found'. If your agent reports that as 'unlicensed' to an end user, it has made a false and damaging claim about a real business. Treat it as 'go and check', never as a finding.

Why is there an 'inactive' verdict as well as 'revoked'?

Because the boards publish both, and conflating them would be defamatory. 'Revoked' and 'suspended' are disciplinary actions. 'Lapsed', 'Voluntary Surrender', 'Archived' and 'Voluntary Termination' are administrative or the licensee's own choice - all real strings from real boards. Those map to 'inactive', and the reason field says so explicitly.

How fast is it?

Measured on 2026-08-06: median 13.3 seconds, fastest around 10.6s (Florida, California, Washington), slowest 30.8s for South Carolina, whose board puts a reCAPTCHA on the search itself and so costs a solve per check. New Mexico is 19.6s for the same reason. Set an agent timeout above 35 seconds.

What is 'verdict_basis' for?

It tells you what the verdict is standing on, because the boards do not all publish the same fields. Alabama, Texas and Virginia publish no status field, so a verdict there rests on the expiration date alone. North Carolina and South Carolina publish no expiration date, so those rest on status alone. Everywhere else you get both.

Can I check several contractors at once?

Yes - use 'companies' or 'licenseNumbers' with a list, all in the same state. Billing is per verdict returned, so a batch costs the same as separate runs and is much faster. The single-value fields exist for the agent case, where one question is the whole point.

Can I search Virginia by license number?

No. Virginia's DPOR data is a name-filtered roster with no license-number search axis, so a number-only request there returns 'check_failed' telling you to supply the company name. Reporting 'not_found' would imply the licence does not exist, which we cannot know from a search that was never possible.

Is this personal data?

It is public professional-licence data as the state boards publish it. Some boards license individuals rather than companies, so a licensed person's name can appear where the board publishes it that way. No personal or PII enrichment is added.

Guides & use cases

Related actors