CSLB California Contractor License Scraper
Pricing
from $19.00 / 1,000 results
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
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.
| Feature | This actor | Typical CSLB actor |
|---|---|---|
| Search by license number | ✅ | ✅ |
| Search by business name | ✅ | Partial |
| Narrow by city / county / ZIP / classification / status | ✅ | ❌ |
| All license classifications per row | ✅ | Primary 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 pricing | ✅ | Often 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 thebusiness_nameoutput 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_numberis the stable primary key — use it to deduplicate across runs.classifications,qualifiers,bonds, anddisciplinary_actionsare always arrays (may be empty[], nevernull).workers_compis an object ornull(null when the contractor has a valid exemption).countyis derived fromzip_codevia a bundled 2,623-ZIP California crosswalk; out-of-state mailing addresses returnnull.mailing_addressis alwaysnullfrom 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_atis 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: activefor a clean ICP list. - Subcontractor due diligence — verify license status, bond coverage, workers-comp, and disciplinary history before hiring. Pull by
licenseNumberor 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: 8and 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.