CSLB California Contractor License Scraper avatar

CSLB California Contractor License Scraper

Pricing

from $19.00 / 1,000 results

Go to Apify Store
CSLB California Contractor License Scraper

CSLB California Contractor License Scraper

Bulk CSLB contractor license scraper for California. Full public record per license: status, all classifications, bond info, workers-comp, disciplinary actions, personnel. Search by license number or business name; narrow by city, county, ZIP, classification, or status. Pay-per-result.

Pricing

from $19.00 / 1,000 results

Rating

0.0

(0)

Developer

Tony

Tony

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Bulk-scrape California contractor licenses from the CSLB (Contractors State License Board) public database. One result = one California contractor's full public record — license status, all classifications, bond info, workers-comp coverage, disciplinary history, personnel, and addresses.

Built for compliance teams verifying subcontractors, insurance underwriters pricing contractor policies, construction PMs vetting subs, and B2B sales teams prospecting California contractors (roofing, HVAC, electrical, plumbing, general building — every CSLB classification is searchable).

What makes this actor different

CSLB publishes one of the richest public contractor datasets of any state board — bond info, workers-comp, and disciplinary history are all on file. Most competing CSLB scrapers return only license number, name, and status. This actor returns all of it, with a stable JSON schema.

FeatureThis actorTypical CSLB actor
Search by license number
Search by business namePartial
Narrow by city / county / ZIP / classification / status
All license classifications per rowPrimary only
Bond info (company, amount, effective / cancellation dates)
Workers-comp (carrier, policy number, effective / expiration dates)
Disciplinary actions
ZIP → county auto-fill (all 58 CA counties)
Transparent pay-per-result pricingOften pay-per-event, opaque

How search works

Pick ONE primary search field:

  • licenseNumber — direct lookup (fastest, cheapest)
  • businessName — partial or full, matched case-insensitively against both the legal business name and associated personnel/owner names. "Acme" matches "Acme Construction Co", "Acme Plumbing Inc", etc.; "Smith" also matches "Johnie Cement Work" (owned by John Smith). If you need strict business-name-only matching, filter downstream on the business_name output field.

Optionally narrow the results with any combination of city, county, zipCode, classification, and status. These filters apply client-side after the primary search (CSLB doesn't publish a way to enumerate contractors by city/county alone — so a primary search is required).

Example inputs

Single-license lookup — cheapest, one record:

{
"licenseNumber": "123456"
}

Find SMITH-named contractors in the City of Los Angeles, cap at 25:

{
"businessName": "SMITH",
"city": "Los Angeles",
"maxResults": 25
}

Find every "Green Building" in the ZIP 94703, active status:

{
"businessName": "Green Building",
"zipCode": "94703",
"status": "active"
}

Bulk scrape "Acme" businesses, cap at 1,000:

{
"businessName": "Acme",
"maxResults": 1000
}

Example output (one record)

{
"license_number": "123456",
"business_name": "ACME CONSTRUCTION CO",
"business_address": "123 MAIN ST, LOS ANGELES, CA 90012",
"business_phone": "(213) 555-1234",
"mailing_address": null,
"city": "Los Angeles",
"county": "Los Angeles",
"zip_code": "90012",
"issue_date": "2015-06-14",
"expiration_date": "2026-06-30",
"status": "active",
"entity_type": "corporation",
"classifications": [
{ "code": "B", "description": "GENERAL BUILDING CONTRACTOR" },
{ "code": "C-10", "description": "ELECTRICAL" }
],
"qualifiers": [
{ "name": "JANE SMITH", "association": "RESPONSIBLE MANAGING OFFICER" }
],
"bonds": [
{
"type": "contractor_bond",
"company": "OLD REPUBLIC SURETY",
"amount_usd": 25000,
"effective_date": "2023-07-01",
"cancellation_date": null
}
],
"workers_comp": {
"carrier": "STATE COMPENSATION INSURANCE FUND",
"policy_number": "9999999",
"effective_date": "2024-01-01",
"expiration_date": "2025-01-01"
},
"disciplinary_actions": [],
"source_url": "https://www.cslb.ca.gov/OnlineServices/CheckLicenseII/LicenseDetail.aspx?LicNum=123456",
"scraped_at": "2026-04-22T10:00:00.000Z"
}

Field notes

  • license_number is the stable primary key — use it to deduplicate across runs.
  • classifications, qualifiers, bonds, and disciplinary_actions are always arrays (may be empty [], never null).
  • workers_comp is an object or null (null when the contractor has a valid exemption).
  • county is derived from zip_code via a bundled 2,623-ZIP California crosswalk; out-of-state mailing addresses return null.
  • mailing_address is always null from this source — CSLB's detail page does not expose it separately from the business address. (Kept in schema for downstream compatibility.)
  • Dates are ISO-8601 (YYYY-MM-DD); scraped_at is ISO-8601 UTC.

Common use cases

  • Lead generation for companies selling TO California contractors — insurance, fleet, SaaS, equipment, supplies, workwear. Filter by classification (C-10 electrical, C-36 plumbing, C-20 HVAC, C-33 painting, C-39 roofing, C-27 landscaping, B general building, A general engineering) and status: active for a clean ICP list.
  • Subcontractor due diligence — verify license status, bond coverage, workers-comp, and disciplinary history before hiring. Pull by licenseNumber or business name.
  • Insurance underwriting — score contractors by active disciplinary actions, bond cancellation history, and workers-comp status.
  • Compliance monitoring — schedule weekly runs to flag newly expired, suspended, or revoked licenses in your vendor list.
  • Market research — count active C-10 electrical contractors per county, map bond-amount distributions, track new-license issuance trends.

Pricing

Pay-per-result. See the Store listing for the current per-1,000-records rate.

Only fully-formed records are pushed to the Dataset. If a scrape fails mid-record we discard the row — you don't pay for broken data. The maxResults input caps spend per run.

Limitations

  • California only. For Texas licenses, see the companion TDLR Texas Contractor License Scraper. For other states, see the portfolio.
  • No email addresses. CSLB's public record set does not include contractor emails — only business phone and address. For email enrichment, feed the business name + address to LinkedIn, Apollo, ZoomInfo, or Clearbit downstream.
  • Mailing address is always null. CSLB's public detail page does not separate mailing from business address.
  • Disciplinary action summaries are short codes only (e.g. "10/16/2023 - WC EXEMPT CANCELLED-LIC INACTIVATED"). Full complaint narratives live on a separate CSLB page and are not scraped here.
  • Workers-comp data lags real-world changes by up to ~30 days (CSLB filing delay, not this actor).
  • CSLB occasionally rate-limits aggressive scraping. Default maxConcurrency: 8 and 3 retries handle this; lower concurrency further if needed.
  • Not affiliated with CSLB or the State of California. Only publicly available data is scraped.

FAQ

Is scraping CSLB legal? Yes. California license data is public record by statute (Business and Professions Code §7000 et seq.) and explicitly published by CSLB for public use. This actor does not use login, does not bypass any paywall, and collects only data CSLB publishes on its public license-check pages.

Does this include contractor email addresses? No — CSLB's public record set does not include email. You get business_phone and business_address on every record (plus a full personnel list with names and titles). If you need emails, pipe business_name + business_address into LinkedIn Sales Navigator, Apollo, ZoomInfo, or Clearbit — the combo resolves most CA contractors cleanly.

Why does businessName: "Smith" return a contractor whose business name doesn't contain "Smith"? CSLB's name search matches against both the legal business name and associated personnel/owner names. So "Smith" returns Smith Construction Co (business-name match) and Johnie Cement Work owned by John Smith (personnel match). This is useful for due-diligence and background-check workflows — you can find every CA license associated with a person, not just the ones with their name on the door. If you need strict business-name-only matching, filter the output downstream on the business_name field.

How fresh is the data? Each record is scraped live at run time — data is as current as CSLB's published detail page (typically same-day for most fields; workers-comp and bond filings can lag 1–30 days upstream of CSLB).

Can I run this on a schedule? Yes. Apify Schedules handles cron. Weekly is a common cadence for keeping a contractor database fresh; daily is fine for narrow active-status monitoring.

How do I export to Google Sheets / CSV / Airbyte / my database? Every field is available via the Apify Dataset API in JSON, CSV, Excel, and HTML formats. Native integrations cover Zapier, Make, n8n, Airbyte, and direct Google Sheets push.

Can I call this from Claude / Cursor / Cline or another MCP client? Yes — any Apify actor is callable via Apify's official MCP server. Point your MCP client at apify-mcp-server and invoke this actor with the same input shape documented above.

Why isn't there a "search everything" option (no primary filter)? CSLB's public search doesn't expose a way to enumerate every California contractor — you must search by license number or business name (which as noted above also matches personnel/owner names). City, county, ZIP, and classification are narrowing filters only. This is a CSLB constraint, not a product choice.

How do I deduplicate across runs? Use license_number — it's CSLB's stable primary key. Re-running the same search returns the same license numbers.

Can you add TDLR Texas / Florida DBPR / other state contractor boards? Yes — that's the roadmap. Each state ships as a separate actor so you only pay for the states you need.

Changelog

  • 0.1 (April 2026) — Initial release. Direct license lookup, business-or-owner-name search with pagination (matches CSLB's native business + personnel name index), post-filters for city/county/ZIP/classification/status, ZIP→county auto-fill for all 58 California counties, normalized status and classification codes, full schema per record.