🏗️ California CSLB Contractor Scraper — Licenses & Leads
Pricing
from $2.00 / 1,000 contractor results
🏗️ California CSLB Contractor Scraper — Licenses & Leads
Find and verify California CSLB contractors by license, classification, county, city, or ZIP. Export license status, phone, bonds, workers’ compensation, and personnel.
Pricing
from $2.00 / 1,000 contractor results
Rating
0.0
(0)
Developer
Zapticx
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
16 hours ago
Last modified
Categories
Share
Find licensed contractors in California and export clean CSLB license records by classification, county, city, ZIP code, exact business name, or license number. This California contractor scraper combines official bulk CSLB data with optional live California contractor license lookup, giving you a low-cost contractor database for leads, compliance research, bond checks, and workers’ compensation review.
Basic results cost $0.002 per unique contractor record ($2.00 per 1,000) under the configured pay-per-event model. Enabling personnel enrichment adds $0.015 once per run, never per person. One dataset row represents one CSLB license; classifications, bonds, workers’ compensation, and personnel stay nested instead of creating duplicate billable rows.
Data comes from the official CSLB Public Data Portal and, when requested, the official live license-detail page.
CSLB does not provide contractor email addresses, so this Actor does not return fabricated emails.
What can you do with this Actor?
- Build California contractor leads by trade and geography.
- Verify a list of CSLB license numbers and refresh current status/date fields.
- Find electrical, plumbing, roofing, HVAC, landscaping, solar, and general contractors.
- Screen subcontractors using license standing, expiration, bond, and workers’ compensation data.
- Research contractor classifications, counties, cities, and ZIP codes.
- Export structured records through the Apify API for analytics or automation.
How to use
- Create a free Apify account. The current Free plan includes $5 of monthly usage credit.
- Open the Actor, choose classifications or another meaningful filter, and set
maxResults. - Enable bonds, workers’ compensation, personnel, or live verification as needed.
- Run the Actor and export the default dataset as JSON, CSV, Excel, or another supported format.
The default C-36 + Los Angeles example returns 10 real results and is designed to finish within the Store’s five-minute expectation under observed source conditions.
Features
- Official statewide CSLB bulk source; no page-per-contractor discovery crawl.
- Direct license-number lookup and case-insensitive exact business-name matching.
- Classification, county, city, ZIP, and license-status filtering.
- AND between filter categories and OR within each array.
- One normalized record per license number, with classification aggregation and deduplication.
- Structured contractor, workers/employee, and disciplinary bond arrays.
- Current/most-recent workers’ compensation fields as supplied by CSLB.
- Optional current personnel associations without one paid result per person.
- Optional direct-HTTP live verification; bulk data is retained if verification fails.
- Source dates, record dates, provenance URLs, concise run statistics, and schema-change detection.
- A validated cross-run cache that serves the last-known-good CSLB snapshot during source refreshes or temporary upstream failures. Output keeps the actual snapshot date in
sourceUpdatedAt, and live verification remains available when current status matters. - No residential proxy, browser automation, login, or email inference.
Data fields
| Field | Description |
|---|---|
licenseNumber | CSLB contractor license number as a string |
businessName, fullBusinessName, dba | Legal/full business and doing-business-as names where supplied |
businessType | CSLB entity/business type |
licenseStatus | Derived ACTIVE, INACTIVE, EXPIRED, SUSPENDED, or UNKNOWN |
statusCode, secondaryStatus | Source standing/status values retained for fidelity |
issueDate, reissueDate, expirationDate | ISO dates when confidently parseable |
address | Street, city, state, ZIP, county, and country |
phone | Digits-only phone string |
classifications[] | Display code, raw source code, and official name where mapped |
bonds[] | Bond type, surety, number, amount, dates, and disciplinary metadata where present |
workersComp[] | Coverage type, insurer, policy, and relevant dates |
personnel[] | Current public associations, titles, classifications, dates, and qualifier bond where present |
personnelSourceUpdatedAt, personnelSourceState | Optional personnel-snapshot date and cache state when enrichment is requested |
sourceUpdatedAt, recordUpdatedAt | Bulk-source and record freshness |
verifiedLive, verifiedAt | Live verification outcome and time |
sourceUrl | Official CSLB license-detail URL |
null means CSLB did not supply a usable value. Empty arrays mean the related collection was not present or not requested.
Input
searchMode:auto(default),master, or identifier-orientedlookup.licenseNumbers: 1–8 digit license numbers. Identifier searches take precedence over discovery filters.businessNames: case-insensitive exact matches; fuzzy matching is not claimed.classifications: codes such asA,B,B-2,C-10,C-36, orC-61/D-49.counties,cities,zipCodes: geography filters.licenseStatuses: friendly status values.includeBond,includeWorkersComp: related-data controls included in the contractor-result price.includePersonnel: attach personnel and charge one $0.015personnel-enrichmentevent for the run.verifyLive: verify selected licenses against current CSLB pages.maxResults: 1–10,000 unique license records.
{"classifications": ["C-36"],"counties": ["Los Angeles"],"licenseStatuses": ["ACTIVE"],"includeBond": true,"includeWorkersComp": true,"includePersonnel": false,"verifyLive": false,"maxResults": 1000}
If identifiers and discovery filters are both supplied, identifiers win and the Actor logs that discovery filters were ignored.
Output
Illustrative structure (values are sanitized, not represented as a real contractor):
{"licenseNumber": "1234567","businessName": "EXAMPLE CONSTRUCTION INC","dba": null,"businessType": "Corporation","licenseStatus": "ACTIVE","statusCode": "CLEAR","issueDate": "2018-01-10","expirationDate": "2027-01-31","address": {"street": "123 MAIN ST","city": "LOS ANGELES","state": "CA","zip": "90001","county": "Los Angeles","country": "US"},"phone": "5551234567","classifications": [{ "code": "B", "rawCode": "B", "name": "General Building Contractor" }],"bonds": [{ "type": "contractor", "suretyCompany": "EXAMPLE SURETY", "bondNumber": "EXAMPLE-1", "amount": 25000, "effectiveDate": "2026-01-01", "cancellationDate": null }],"workersComp": [],"personnel": [],"dataSource": "CSLB","sourceMode": "master","sourceUpdatedAt": "2026-10-05","verifiedLive": false,"verifiedAt": null,"sourceUrl": "https://www.cslb.ca.gov/1234567"}
Pricing
The PPE configuration has two events:
contractor-result— $0.002, fired exactly once for each unique contractor record successfully written.personnel-enrichment— $0.015, fired exactly once before the larger personnel acquisition whenincludePersonnelistrue. It is not charged whenincludePersonnelisfalse, and it never varies with the number of personnel attached.
| Records | Basic run | With personnel |
|---|---|---|
| 100 | $0.200 | $0.215 |
| 1,000 | $2.000 | $2.015 |
| 5,000 | $10.000 | $10.015 |
| 10,000 | $20.000 | $20.015 |
Bonds and workers’ compensation add no surcharge. Personnel remains nested rather than creating paid rows, but requesting its expensive related-file scan adds the single $0.015 run charge even if the optional source ultimately returns no associations or cannot be acquired. The charge is attempted before that work so Apify spending limits can stop it. Live verification remains included in the contractor-result price for V1. See the measured and estimated docs/ECONOMICS.md.
Examples / Tasks
- Los Angeles Plumbing Contractors — C-36 + Los Angeles County + active status.
- California Electrical Contractor Leads — C-10 statewide, up to 5,000 records.
- Roofing Contractors with Insurance Data — C-39 across Los Angeles, Orange, and San Diego counties.
- Verify a License List — license numbers +
searchMode: "lookup"+verifyLive: true.
Ready-to-copy inputs are in the examples/ directory.
API & integrations
Run the Actor through the Apify API or ApifyClient for JavaScript/Python, then read the default dataset. You can also trigger runs with schedules or webhooks and connect the output through Apify’s Make and Zapier integrations. n8n, Google Sheets workflows, MCP clients, and AI agents can call the API or consume exported dataset data; availability depends on how you configure those external tools.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('ZAPTICX_ACTOR_ID').call({classifications: ['C-10'],counties: ['San Diego'],maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Limitations
- CSLB bulk data is periodic; license status can change after a file is published. Use live verification for consequential checks.
- During a new CSLB publication or temporary portal outage, discovery may use the last validated snapshot instead of failing. The precise snapshot date remains visible in
sourceUpdatedAtand the run log identifies stale-cache use. - CSLB does not provide contractor email addresses. This Actor does not guess or synthesize them.
- Some source fields are legitimately absent, and personnel reflects public associations supplied by CSLB.
- Exact business-name matching is supported; fuzzy business search is not.
- Personnel adds a large source download and may materially extend runtime.
- Source availability and CSLB’s documented weekly maintenance window can affect runs.
About Zapticx
Zapticx builds structured, automation-ready public-data products on Apify.
This Actor is unofficial and is not affiliated with or endorsed by the California Contractors State License Board (CSLB). It processes publicly available licensing information. Users are responsible for complying with applicable laws and source terms.