CSLB California Contractor Scraper
Pricing
from $2.00 / 1,000 leads
CSLB California Contractor Scraper
233K California contractors with phone numbers, filtered by when their workers-comp policy expires. Timed insurance leads: find contractors whose coverage renews in the next 30/60/90 days. No login, no API key. Optionally sync new leads to Notion, HubSpot, Airtable or Supabase — free.
Pricing
from $2.00 / 1,000 leads
Rating
0.0
(0)
Developer
K O
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
California Contractor Insurance Leads — sorted by Workers-Comp renewal date
Reach contractors when their insurance is about to renew — not at random.
Built from CSLB public license records (California Contractors State License Board): every active California contractor with a phone number and a workers'-comp policy expiration date, sorted so the ones renewing soonest come out first.
Pain points
- Generic "contractor leads" lists give you a name and maybe an email. They can't tell you when a contractor is actually in-market for a new policy — you're cold-calling on a schedule that has nothing to do with theirs.
- CSLB's own public license lookup is a one-license-at-a-time web form. There is no bulk export, no phone-number guarantee, and no way to sort by "who renews soonest."
- Buying a generic California contractor list gets you the same static roster everyone else already called. By the time you reach someone, their policy renewed months ago and they already re-upped with their current carrier.
What we solve
- The renewal date is the product. Every record carries the contractor's exact workers'-comp policy expiration date, computed days-to-renewal, and current carrier — the buying-window signal no generic list has.
- Sorted soonest-first. Results come back ranked by renewal urgency, so the hottest leads are always at the top even when you cap the run with
maxResults. - 99.9% phone fill on active, dated records — this is a call list, not a spreadsheet of names.
- You are billed once per contractor, per run — never twice. A contractor that matches more than one county or license class you requested still appears once and is charged once. Filtering narrows the list; it never multiplies the bill.
- Free discovery before you spend anything. Set
listCountiesOnly: trueto get back the exact list of California county names in the dataset — spelled exactly as thecountiesfilter expects — at zero cost, no leads charged. Get the filter right before your first billed run.
Live inventory (California, active licenses with phone + WC date), refreshed continuously:
- ~8,300 contractors renewing in the next 30 days
- ~20,400 in the next 60 days
- ~28,300 in the next 90 days
- 117,000 total dated contractors across all 58 California counties
Who buys this
- Workers-comp & contractor insurance agents — call contractors right before renewal, when they'll actually take the quote.
- Insurance agencies & wholesalers building a California contractor pipeline.
- B2B sellers targeting contractors by trade and location.
Input
{"renewalWindowDays": 60,"counties": ["Riverside", "Orange"],"licenseClasses": ["C-10", "C-33"],"activeOnly": true,"maxResults": 1000}
| Field | What it does |
|---|---|
listCountiesOnly | Free. Skips the paid query and returns every valid California county name in the dataset. No leads charged. |
renewalWindowDays | Only contractors whose WC policy expires within this many days. 30 = hottest, 0 = ignore timing. |
counties | Limit to California counties. Empty = all of CA. Run listCountiesOnly first to get exact spellings. |
cities | Limit to specific cities. |
licenseClasses | CSLB class prefixes, e.g. B (general building), C-10 (electrical), C-33 (painting). |
activeOnly | Active licenses only (default true). |
maxResults | Hard cap. You are billed per lead returned, so this bounds your cost. |
webhookUrl | Optional — the result batch is POSTed here as JSON on finish. |
syncEnabled | Optional, off by default. Also send each matched lead to a connected app — see Sync below. |
syncDestination, syncWriteTool, syncFieldMap, syncExtraArgs | Only used when syncEnabled is on. |
Output
One record per lead, sorted soonest-renewal first. This is a real record from the current dataset — not a placeholder:
{"company": "VALLEY PREMIUM PAINTING","license": "1001033","licenseType": "B General Building","classifications": "B General Building; C-33 Painting & Decorating","phone": "(760) 702-7557","address": "47-412 LAGOON CT, INDIO, CA, 92201 (Riverside County)","city": "Indio","county": "Riverside","zip": "92201","state": "CA","status": "Active","wcExpire": "2026-08-22","daysToRenewal": 12,"wcCarrier": "HARTFORD CASUALTY INSURANCE COMPANY","wcPriorCarrier": ""}
| Field | Description |
|---|---|
company | Licensed business name. |
license | CSLB license number. |
licenseType / classifications / classDesc | Trade classification(s), CSLB class codes and descriptions. |
phone | Business/license contact phone. |
address, city, county, zip, state | License-of-record location. |
status | CSLB license status (e.g. Active). |
wcExpire | Workers'-comp policy expiration date (ISO). The buying signal. |
daysToRenewal | Computed days from today to wcExpire. Determines sort order. |
wcCarrier | Current workers'-comp carrier on file. |
wcPriorCarrier | Prior carrier, when CSLB records a change. |
Sync to your CRM, Notion, HubSpot, Airtable or Supabase (optional)
Turn on syncEnabled to also send each matched lead straight to a connected
app — free, with no extra charge. Connect the app under Integrations in
Apify Console, pick it as syncDestination, and set syncWriteTool to the
name of the tool that creates one record there (run the
dataset-sync-connector
Actor in list-tools mode against the same connector if you don't know the
name). A sync failure is logged as a warning and never blocks the dataset —
your leads always land here first regardless of what the destination does.
Pricing
Pay per lead returned. You set maxResults, so you always control the bill. No subscription, no minimum. A run that returns 500 leads charges for 500 leads — nothing more. A contractor matching several of your filters is still one lead, billed once. listCountiesOnly runs charge nothing.
- Sync to a connected app (optional) — free. No event is charged for records sent to a destination; it's an added convenience on top of the leads you already paid for.
Notes & compliance
- Source: CSLB public contractor license data (public record).
- Phone numbers are business/license contact numbers from the public register. You are responsible for TCPA / DNC compliance when calling — scrub against the National Do Not Call Registry as required.
- Coverage is California (plus a small Arizona set). Records without a valid WC expiration date are excluded, because timing is the point.
Run frequency
Schedule it weekly. Each run surfaces the contractors newly entering your chosen renewal window, so your call list stays current with almost no overlap.
FAQ
How am I charged?
Pay-per-lead. Each contractor returned by your filters and maxResults cap is one billed "lead" event. Matching multiple counties, cities, or license classes you specified does not multiply the charge — one contractor, one charge, per run. listCountiesOnly: true runs are entirely free.
Where does the data come from?
The California Contractors State License Board (CSLB) public license register — the same records CSLB itself publishes, extracted, normalized, and paired with each license's on-file workers'-comp policy expiration date so you can filter and sort by renewal timing.
How fresh is it?
The bundled dataset is refreshed on an ongoing basis as CSLB updates licenses and policy records. Run the actor on a weekly schedule to catch newly entering renewal windows.
I ran it and got 0 results — why?
Usually the county or city spelling didn't match. Run with listCountiesOnly: true first (free) to confirm the exact county names, or widen renewalWindowDays.
Do you have contractors outside California?
This actor is California-focused (plus a small Arizona subset already in the dataset). For dedicated Arizona coverage with owner names and license issue dates, see az-contractor-leads. For Texas tow companies and vehicle storage facilities with current insurance carrier on file, see texas-tow-vsf-insurance-leads.
Need the rest of the record on these companies?
This actor returns one source. KYB Company Data Enrichment takes a company name and returns what the public record says about it across up to nine sources — state business registries, UCC lien filings, tax warrants and WARN layoff notices, the FMCSA motor-carrier census, the CMS NPI Registry, USAspending federal awards, EPA ECHO compliance, SEC EDGAR filings and CourtListener federal dockets.
Every enriched field carries its source and its match confidence. Only matches above the accept threshold are merged — anything weaker is surfaced as a suggestion and never folded into the record, because a false join is worse than returning nothing.