Intel Terrain

Contractor License Data Catalog

Nightly license verification across 6 state and municipal boards in CA, TX, FL, and NYC, normalized into a single schema. Sourced directly from board portals and rolled up with a disciplinary feed and a 4-level risk tier.

Geographic Coverage

4 states (CA, TX, FL, NY) and growing. NY contractor licensing is municipal in NYC (DOB + DCWP); upstate NY uses DOS for some licenses.

Board Coverage

6 boards: CA CSLB, TX TDLR, FL DBPR, NY DOS, NYC DOB, NYC DCWP. Additional states added quarterly based on subscriber demand.

Refresh Cadence

Board crawls run nightly. Risk tier recomputes on the same cycle. Insurer-tier subscribers receive webhooks the moment a status diff is observed.

License Boards Registry

All plans

Canonical list of every licensing board we crawl. State, board name, source URL, and a `last_scraped_at` timestamp showing when each board was most recently refreshed. The anchor table for every other contractor dataset.

Source

Curated registry — state and municipal contractor licensing portals

Update Frequency

Stable (updated when new boards are added; `last_scraped_at` updates per scraper pass)

Coverage

6 boards at launch (CA CSLB, TX TDLR, FL DBPR, NY DOS, NYC DOB, NYC DCWP), expanding quarterly

Key Fields

idnamestateurllast_scraped_atcreated_at

Sample Data

idca-cslb
nameCalifornia Contractors State License Board
stateCA
last_scraped_at2026-04-25T08:14:00Z

Contractors

All plans (risk_tier: Insurer only)

Per-contractor license records, normalized across boards. License number, board, business name, DBA, owner name, license type, specialty codes, status, issue/expiration dates, address, phone. Updated nightly on UPSERT against `(license_number, board_id)`.

Source

Nightly board crawls

Update Frequency

Nightly (UPSERT — current state, not append-only)

Coverage

Every contractor licensed by one of the 6 boards. Initial backfill seeds the table; nightly passes keep status, expiration, and address current.

Key Fields

license_numberboard_idbusiness_namedba_nameowner_namelicense_typespecialty_codesstatusissue_dateexpiration_dateaddresscitystatezipphonerisk_tiercomplaint_countdisciplinary_action_count

Sample Data

license_number1234567
board_idca-cslb
business_nameACME Construction Inc.
license_typeB — General Building Contractor
statusactive
expiration_date2027-08-15

Discipline-Only Licensees

All plans (visibility + license_type) · Platform+ (full reason text + history)

Licensees with public regulatory action records but no current active license on file — denied applications, revocations, and voluntary surrenders. Most lookup tools return 'not found' for these and discard the regulatory record. We surface them through the same lookup endpoint with `result_type='discipline_only'` and `license_type` populated for collision disambiguation. Multi-row response when a license number is shared across trades on the same board.

Source

Board enforcement portals (nightly) — surfaced when license_number does not resolve to an active contractors-table row

Update Frequency

Nightly (append-only)

Coverage

Live today: TX TDLR + NYC DOB. Roadmap: CA CSLB revoked-licensee expansion, FL DBPR surrender feed, NY DOS, NYC DCWP. NOT 100% coverage — bound to the boards that publish disciplinary feeds we can scrape.

Key Fields

result_typelicense_numberboard_idlicense_typeentity_nameaction_dateaction_typecase_numberviolation_descriptionsource_url

Sample Data

result_typediscipline_only
license_number1094
board_idnyc-dob
license_typeMaster Plumber
action_typerevocation
entity_name[respondent name on file]

Disciplinary Actions

Platform+

Every disciplinary action filed against a licensed contractor — citation, suspension, revocation, voluntary surrender — with action date, source case number, and short description. Append-only (we never overwrite history); same case appears once per board per filing event. Action rows are linked to the contractor when the license resolves; otherwise they live on the discipline-only surface above.

Source

Board enforcement portals (nightly)

Update Frequency

Nightly (append-only)

Coverage

All boards in the registry. Depth grows daily from launch; we capture historical filings where the board exposes them.

Key Fields

contractor_idboard_idaction_dateaction_typecase_numberdescriptionsource_url

Sample Data

action_typecitation
action_date2025-11-12
case_numberC-2025-04829
descriptionFailure to maintain workers' comp on active project

Risk Tier

Insurer

Rolled-up 4-level risk score per contractor (`low / moderate / elevated / high`), recomputed nightly from disciplinary frequency, complaint count, license currency, and specialty volatility. Surfaced as a column on the contractors table for Insurer-tier subscribers.

Source

Computed in-platform from contractors + disciplinary_actions

Update Frequency

Nightly

Coverage

Every contractor in the registry with a baseline of disciplinary + license history (a contractor is 'low' by default until enough history accumulates to escalate).

Key Fields

risk_tiercomplaint_countdisciplinary_action_count

Sample Data

risk_tierelevated
complaint_count7
disciplinary_action_count3

Bulk Lookup

Platform+

POST a list of license numbers or business names to a single endpoint; get back a normalized status report across every board in one response. Designed for marketplace re-verification and book-of-business sweeps.

Source

Live query against the contractors registry

Update Frequency

On demand (per Platform/Insurer-tier rate limit)

Coverage

All 6 boards in a single call. Throughput governed by the API rate-limit on your plan.

Key Fields

request_payloadresponse_envelopematch_confidence

Sample Data

matched2,322
expired41
suspended9
unmatched28

Webhook Alerts

Insurer

Subscribe a contractor or a license number; get a webhook the moment status changes — license suspended/revoked, new disciplinary action filed, or risk tier escalates. Built for bond-monitoring and trust-and-safety systems.

Source

Triggered on diff between consecutive nightly snapshots (real-time delivery on the next pass)

Update Frequency

Real time (next nightly pass after the change is observed)

Coverage

All contractors + boards in the registry

Key Fields

event_typecontractor_idboard_idlicense_numberprevious_statusnew_statusoccurred_at

Sample Data

event_typelicense.suspended
license_number482991
previous_statusactive
new_statussuspended

Sample API Response

Every endpoint returns the same envelope shape: data for the result and meta for plan + rate-limit context.

GET /api/v1/contractors/lookup?license_number=1234567&board_id=ca-cslb

200 OK
{
  "data": {
    "license_number": "1234567",
    "board_id": "ca-cslb",
    "business_name": "ACME Construction Inc.",
    "dba_name": null,
    "owner_name": "Jane Doe",
    "license_type": "B - General Building Contractor",
    "specialty_codes": ["B"],
    "status": "active",
    "issue_date": "2014-03-22",
    "expiration_date": "2027-08-15",
    "address": "1234 Market St, San Francisco, CA 94103",
    "phone": "415-555-0142",
    "risk_tier": "low",
    "complaint_count": 0,
    "disciplinary_action_count": 0,
    "disciplinary_actions": []
  },
  "meta": {
    "plan": "con-platform",
    "rate_limit_remaining": 1923,
    "rate_limit_reset": "2026-05-01T00:00:00Z"
  }
}

Methodology

We pull contractor license records directly from the authoritative state and municipal portals nightly. Records are UPSERTed against the natural key (license_number, board_id), so the contractors table reflects current state — status, expiration, address — at the most recent nightly pass. Disciplinary actions are append-only (we never overwrite history) and are deduplicated against a heuristic key of (contractor_id, board_id, action_date, action_type, case_number). Risk tier is recomputed on every nightly pass from disciplinary frequency, complaint count, license currency, and specialty volatility — it is a screening signal, not a substitute for full underwriting. New York contractor licensing is largely municipal in NYC (DOB and DCWP), so we treat those as separate boards rather than rolling them under NY DOS; the NY DOS row remains seeded as a state-level catch-all for non-construction NY occupational licenses.

Discipline-only surface: licensees with public regulatory action records but no active license on file (denied applications, revocations, voluntary surrenders) are NOT discarded. They're surfaced through the same lookup endpoint with result_type='discipline_only' and a populated license_type field. Coverage today: TX TDLR + NYC DOB; CA CSLB / FL DBPR / NY DOS / NYC DCWP follow on the roadmap. We're honest about the limits — discipline-only is bound to boards that publish disciplinary feeds we can scrape, so coverage is not 100% across the corpus.

Identity tuple is per-trade: some boards (most prominently NYC DOB) issue colliding license numbers across license_types — the same numeric license_no can belong to two different humans in two different trades. The correct identity tuple is (license_number, board_id, license_type), not the (number, board) pair tools usually assume. Our lookup returns multi-row responses when license_number is shared across trades, with each row labeled by license_type so customers can disambiguate. The discriminator field ships on every plan, including General Contractor, because without it a customer can't tell which row is “their” licensee.

Dataset Access by Plan

Higher-tier plans unlock additional datasets, programmatic access, and webhook delivery.

DatasetGCPlatformInsurer
License Boards Registry
Contractors (license verification)
Discipline-Only Surface (visibility + license_type)
Disciplinary Actions (full reason text + history)
Bulk Lookup endpoint
API access
Risk Tier classification
Bond Status tracking
Webhook Alerts

State + Board Coverage

6 boards across 4 states at launch. Additional states prioritized by subscriber demand.

California

CA CSLB statewide contractor licensing

Texas

TX TDLR statewide licensing & regulation

Florida

FL DBPR Business & Professional Regulation

New York

NY DOS statewide + NYC DOB + NYC DCWP municipal

Boards Covered

California Contractors State License Board

CA

Statewide contractor licensing — the canonical CA source

ca-cslb

Texas Department of Licensing and Regulation

TX

Statewide specialty trade + occupational licensing

tx-tdlr

Florida Department of Business and Professional Regulation

FL

Statewide construction industry licensing

fl-dbpr

New York Department of State

NY

Statewide catch-all for occupational licenses (sparse on contractors — see NYC)

ny-dos

NYC Department of Buildings

NY

NYC general construction + specialty trade licenses (electrical, plumbing, asbestos abatement, site safety)

nyc-dob

NYC Department of Consumer and Worker Protection

NY

NYC Home Improvement Contractors and Home Improvement Salespersons

nyc-dcwp

Crawls run nightly. New boards evaluated quarterly based on market demand and data accessibility.

Access contractor data today

7-day free trial on every plan. No credit card required.