California Construction Trades Directory & Leads (CSLB) avatar

California Construction Trades Directory & Leads (CSLB)

Pricing

$0.002 / 13 building trades across sonoma, napa, solano and contra costa counties

Go to Apify Store
California Construction Trades Directory & Leads (CSLB)

California Construction Trades Directory & Leads (CSLB)

Sweep every construction trade across every California county you pick, in one run. Deduplicated licensed-contractor leads from the official CSLB register — name, address, phone, licence, bond and workers' comp.

Pricing

$0.002 / 13 building trades across sonoma, napa, solano and contra costa counties

Rating

0.0

(0)

Developer

ScrapeBench

ScrapeBench

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Categories

Share

Pain points

  • Building a regional contractor list means running one search per trade per county — thirteen trades across four counties is fifty-two separate searches, then a manual merge.
  • The same contractor holds several classifications, so merging those searches by hand leaves duplicates that inflate your list and your outreach.
  • CSLB's own export gives you one classification and one county at a time, with no way to say 'every building trade in the North Bay'.

What we solve

  • One run takes a list of trades and a list of counties and returns the whole sweep.
  • Every county you ask for is fetched in a single request per trade, so widening the geography costs no extra requests and no extra time.
  • Results are deduplicated by licence number before you are charged — a contractor holding three of your trades is one row and one charge.
  • Each row is tagged with which of your requested trades matched, while still listing every classification that contractor holds.

Summary

Pick your trades, pick your counties, get one clean construction-contractor list for the whole region — deduplicated, billed once per contractor, straight from California's official licence register.

Who it's for

  • Building-material suppliers and distributors prospecting contractors in a sales territory
  • Trade-focused staffing and recruiting firms mapping licensed contractors by region
  • Insurance and surety brokers targeting contractors by bond and workers' comp status
  • Agencies and RevOps teams building regional construction lead lists for outbound

How to use

Set the input, run the actor, and collect results from the run's dataset (export to JSON/CSV/Excel, or pull via the Apify API). Example input:

{
"licenseClasses": [
"B",
"C-10",
"C-20",
"C-27",
"C-36",
"C-39"
],
"counties": [
"Sonoma",
"Napa",
"Solano",
"Contra Costa"
],
"maxResults": 500
}

See Inputs below for every available field.

What you get

One row per record:

FieldDescription
license_numberCSLB licence number
business_nameLicensed business name
matched_tradeWhich of your requested trades this contractor was found under
business_typeSole Owner, Corporation, LLC, Partnership…
addressBusiness street address
cityCity
countyCalifornia county
zip_codeZIP code
phoneBusiness phone as CSLB holds it
classificationsEvery classification this contractor holds, not just the one you searched
statusLicence status, e.g. CLEAR
issue_dateLicence issue date
expiration_dateLicence expiry date
surety_companyContractor bond surety company
bond_numberContractor bond number
workers_comp_typeWorkers' comp coverage type or exemption
workers_comp_companyWorkers' comp insurance carrier
source_urlCSLB licence detail page for this contractor

Sample:

{
"license_number": "975545",
"business_name": "TAYLOR ENERGY SYSTEMS INC",
"matched_trade": "C-46",
"business_type": "Corporation",
"address": "7171 EVAN AVENUE",
"city": "SEBASTOPOL",
"county": "Sonoma",
"zip_code": "95472",
"phone": "(707) 494 6053",
"classifications": [
"C10",
"C46"
],
"status": "CLEAR",
"issue_date": "08/03/2012",
"expiration_date": "08/31/2028",
"surety_company": "AMERICAN CONTRACTORS INDEMNITY COMPANY",
"bond_number": "100201394",
"workers_comp_type": "Workers' Compensation Insurance",
"workers_comp_company": "STATE COMPENSATION INSURANCE FUND",
"source_url": "https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=975545"
}

Inputs

FieldRequiredTypeDefaultDescription
licenseClassesnoarray["B", "C-5", "C-8", "C-9", "C-10", "C-15", "C-20", "C-27", "C-33", "C-35", "C-36", "C-39", "C-43"]The CSLB trades to sweep. Defaults to the 13 building trades most lead lists want — general building plus framing, concrete, drywall, electrical, flooring, HVAC, landscaping, painting, plastering, plumbing, roofing and sheet metal. Add or remove any code you like: A, B, B-2, C-2 … C-60, and the C-61/D-xx limited specialties (e.g. 'C-46' solar, 'C-53' swimming pool, 'C-61/D-49' tree service). Each trade is one request; a contractor holding two of your trades is returned — and billed — once.
licenseClassnostringOne CSLB classification code, added to whatever is in 'Construction trades'. Here so a saved task built around a single trade keeps working; most runs should use the list above.
countiesnoarray["Sonoma", "Napa", "Solano", "Contra Costa"]California counties to sweep, e.g. Sonoma and Napa and Solano. ALL of them are fetched in a single request per trade, so adding counties costs no extra requests. Case, spacing and a trailing 'County' do not matter. Turn on Discovery Mode to list every valid name.
countynostringOne California county, added to whatever is in 'Counties'. Here so a saved task built around a single county keeps working.
maxResultsnointegerCap on records returned PER TRADE (each trade is one download covering all your counties), not per run — so adding trades can never silently truncate the ones later in the list. Leave empty to return everything. A wide trade list across large counties can return tens of thousands of rows; set this if you want a bounded bill.
listCountiesOnlynobooleanfalseIf true, skip the sweep and return every valid California county name from the live CSLB form. Free — not charged. Use it to check spellings before a real run.
proxyConfigurationnoobject{"useApifyProxy": false}Optional, and off by default. CSLB answers Apify's platform IPs directly — measured 2026-08-19 — so a proxy is not needed and only adds latency. Enable one only if a run returns no data and the log shows CSLB refusing the request.

Pricing (Pay Per Event)

You pay per result (dataset-item) — no charge for empty runs. Example: 2400 13 building trades across Sonoma, Napa, Solano and Contra Costa counties at $0.002/result$4.80.

Charged per deduplicated contractor, so a contractor holding several of your trades costs you once. A wide trade list across large counties returns tens of thousands of rows — set 'Maximum results per trade' if you want a bounded bill. Apify platform usage (compute) is billed separately per your plan.

Use cases

  • Build a territory list of every licensed building trade across a metro area in one run
  • Segment prospects by trade using matched_trade while keeping each contractor's full classification set
  • Filter for contractors whose workers' comp is an exemption rather than a policy, for insurance outreach
  • Refresh a regional contractor list on a schedule and diff it to spot new licences

Why this actor

  • One run instead of one per trade per county — the sweep this actor is built for takes 8 requests where a per-pair approach takes 56.
  • Deduplicated before charging, so overlapping classifications never bill you twice for the same contractor.
  • Straight from California's official CSLB register — the same data the state publishes, parsed into a clean, typed dataset.

Limitations & updates

Covers California only, and only what the CSLB register publishes — there are no email addresses in the source, and inactive or expired licences appear with their status rather than being filtered out. Contact details are the business details CSLB holds on file, which can lag a contractor's current website.

FAQ

What does one run return?

Every active licensed contractor holding any of your chosen trades in any of your chosen California counties, deduplicated by licence number, with business, contact, classifications, bond and workers' comp details.

How is this different from the California Contractor Directory actor?

That actor is built around one trade and one county at a time and is unchanged. This one is built for the sweep: give it a list of trades and a list of counties and it returns the whole region in a single run, deduplicated across trades.

Which trades can I ask for?

Any CSLB classification — A, B, B-2, the C-2 to C-60 specialty trades, and the C-61/D-xx limited specialties such as C-61/D-49 tree service. The default is the thirteen building trades most lead lists want; edit the list to suit.

Am I charged twice for a contractor who holds two of my trades?

No. Results are deduplicated by licence number before charging, so each contractor is one row and one charge no matter how many of your trades they hold.

What happens if I mistype a county?

Nothing fails. Case, spacing and a trailing 'County' are all handled, and anything still unrecognised is logged and skipped. If none of your counties resolve, the run returns the free county list so you can see the exact spellings.

Does it need a proxy?

No. CSLB answers Apify's platform IPs directly, so the proxy is off by default. The option is there if you ever need it, but enabling it only adds latency.

Which actor to choose

Three CSLB actors, three different jobs:

  • California Contractor Directory by Trade & County (CSLB) — You want one trade in one county, or you already have a saved task built that way.
  • California Contractor License Lookup & Verify (CSLB) — You want to verify specific contractors by licence number or business name, rather than build a list.

Guides & use cases

Written up on scrapebench.dev — the bench that runs and verifies this actor against the live source every night:

More actors, coverage and nightly verification results: scrapebench.dev