Contractor License Aggregator - CSLB California
Pricing
from $21.00 / 1,000 license records
Contractor License Aggregator - CSLB California
Scrape California CSLB contractor licenses by ZIP code and trade (plumbing, electrical, HVAC and 75 more): business, phone, status, bonding, workers comp and officers. Export CSV, Excel, JSON. No login or API key. A 3-ZIP test returned 10 licenses in 65 seconds.
Pricing
from $21.00 / 1,000 license records
Rating
0.0
(0)
Developer
RecordsData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Contractor License Aggregator - CSLB California
Contractor License Aggregator scrapes the California Contractors State License Board (CSLB) for licensed contractors by ZIP code and trade. Each license returns business name, address, phone, entity type, issue and expiry dates and status, plus optional classifications, bonding, workers' comp and personnel. Export CSV, Excel, JSON or API. No login, no API key. Tested against live CSLB on 2026-10-03. Base price $25 per 1,000 licenses.
Contractor License Aggregator is a CSLB contractor license scraper for California. Enter one or more 5-digit ZIP codes and one of the 78 CSLB trade classifications (plumbing, electrical, HVAC, roofing, solar and more). In one cloud test, 3 ZIP codes and the plumbing classification (C-36) returned 10 licenses with all extras on in 65 seconds. It is built for lead generation teams, insurance and bonding analysts, and compliance staff who need license data in a spreadsheet instead of one CSLB web page at a time.
๐ What does Contractor License Aggregator do?
It searches the public CSLB "Check a License" ZIP code search, opens the detail page of every license it finds, and saves the result as clean rows. Typical searches people run with it:
- Find licensed plumbers, electricians or HVAC contractors in a California ZIP code.
- Check a contractor's license status and expiry date before hiring.
- Pull the surety bond company and amount for licensed contractors in a market.
- Check whether a contractor carries workers' compensation insurance or has an exemption.
- List the officers and qualifying individuals (RMO, CEO, owner) behind a license.
CSLB's ZIP search returns a bounded list per ZIP and trade (5 to 9 licenses in the ZIP codes I tested: 90210 returned 5, 90001 and 92101 returned 9, 94105 returned 3). To cover a city or county, pass many ZIP codes in one run.
๐ What data can you extract from CSLB?
| Field | Description |
|---|---|
licenseNumber | CSLB license number |
businessName | Licensed business or contractor name |
address | Business address on file |
phone | Business phone (omitted when CSLB shows none) |
entity | Corporation, Sole Ownership, Partnership or LLC |
issueDate / expireDate | License issue and expiration dates (MM/DD/YYYY) |
status | License status text as published by CSLB |
code / description | Trade classification code and name (classification rows) |
bonding | Surety bond text: company, bond number, amount, effective date, or exemption (bonding rows) |
workersComp | Workers' compensation insurer, policy and dates, or exemption (workers' comp rows) |
name / title | Officer or qualifying individual and role (personnel rows) |
Fields CSLB does not publish for a license are left out of the row instead of being filled with placeholders, so you never get empty "N/A" columns.
๐งพ Contractor license sample output
One row per license, taken from a real cloud run (ZIP 90210, classification C-36):
{"licenseNumber": "1080058","businessName": "SITKA DEVELOPMENT","address": "9663 SANTA MONICA BLVD, STE 815, BEVERLY HILLS, CA 90210","phone": "(818) 532-8400","entity": "Sole Ownership","issueDate": "08/20/2021","expireDate": "08/31/2027","status": "This license is current and active.All information below should be reviewed."}
With the extras turned on, the same license also produces separate rows:
{ "licenseNumber": "1080058", "code": "C36", "description": "PLUMBING" }{ "licenseNumber": "1080058", "name": "ARIAN ETHAN MOSHTAGHIAN", "title": "SOLE OWNER" }
The status value is CSLB's own text, passed through as published.
๐ฐ Contractor license scraper pricing: how much does it cost?
The actor uses Pay Per Event. These are the live prices on the Free plan tier (higher Apify plans pay less per license, down to $0.021 on Gold):
| Event | Price | When it is charged |
|---|---|---|
| License record | $0.025 | One per license saved |
| Classification record | $0.01 | One per trade classification row, only if enabled |
| Bonding record | $0.01 | One per license with real bond data, only if enabled |
| Workers' comp record | $0.01 | One per license with real workers' comp data, only if enabled |
| Personnel record | $0.01 | One per officer or qualifying individual row, only if enabled |
1,000 licenses cost about $25 with no extras. You are not charged for failed or empty searches, error rows, or extras that CSLB has no data for. The run stops cleanly when it reaches your maximum charge limit.
Measured example: the cloud test with all four extras on returned 63 rows (10 license, 19 classification, 10 bonding, 10 workers' comp, 14 personnel). That is 10 x $0.025 plus 53 x $0.01, which is $0.78 on the Free tier.
๐ How to scrape CSLB contractor licenses in 3 steps
- Open the Input tab and add one or more California ZIP codes, for example
90210. - Pick a trade classification (for example
C-36plumbing,C-10electrical,C-20HVAC) and turn on only the extras you need. - Click Run, then download the dataset as JSON, CSV or Excel.
โ๏ธ Input
| Field | Type | Description |
|---|---|---|
zipCodes | array | 5-digit California ZIP codes. Default ["90210"]. |
classification | string | CSLB trade classification. Default C-36. |
maxItems | integer | Maximum licenses to return (free plan: 10). |
includeClassifications | boolean | Add one row per trade classification held. |
includeBonding | boolean | Add a bonding row per license. |
includeWorkersComp | boolean | Add a workers' comp row per license. |
includePersonnel | boolean | Add officers and qualifying individuals. |
Example input:
{"zipCodes": ["90210", "90001", "92101"],"classification": "C-36","maxItems": 10,"includeClassifications": true,"includeBonding": true,"includeWorkersComp": true,"includePersonnel": true}
๐ฆ Output
The dataset has one row per license, followed by its optional classification, bonding, workers' comp and personnel rows (all keyed by licenseNumber). Use the Overview view in the Output tab for a quick table. A ZIP with no matching licenses finishes as SUCCEEDED with the status message "No licenses found" and zero charges. Invalid ZIP codes or an unreachable CSLB site make the run FAILED, also with zero charges.
โ๏ธ CSLB contractor license scraper vs alternatives
Prices read from the public Apify Store API on 2026-10-04 (event prices, Free tier):
| Actor | Price per 1,000 results |
|---|---|
| pink_comic/cslb-contractor-license-search | about $2 |
| automation-lab/california-contractor-license-lookup-v2 | about $17.50 |
| stackrelay/cslb-california-scraper | about $19 |
| This actor (license record) | $25 ($21 on Gold) |
This actor is more expensive per license than the CSLB alternatives above. I did not verify the output fields of those actors. What the extra price covers here is optional bonding, workers' comp, classification and personnel rows in the same run, with placeholder rows removed and no charge for empty or failed results. If you only need names and license numbers, a cheaper actor may fit better.
๐งฐ Contractor license data use cases
- Lead generation: build call lists of active plumbers, electricians or roofers by ZIP code, with phone and address.
- Subcontractor vetting: confirm status, bond and workers' comp before signing.
- Insurance and surety research: collect bond companies and amounts for active licenses.
- Compliance monitoring: schedule runs to catch expiry dates and status changes.
๐ Run via API, schedule and integrations
curl -X POST "https://api.apify.com/v2/acts/RecordsData~contractor-license-aggregator/runs?token=YOUR_APIFY_TOKEN" \-H "content-type: application/json" \-d '{"zipCodes":["90210"],"classification":"C-36","maxItems":10}'
Use the Apify API, the apify-client libraries for JavaScript and Python, schedules, webhooks, and integrations with Zapier, Make, n8n and Google Sheets. AI agents can call it through the Apify MCP server.
๐ก๏ธ Is it legal to scrape CSLB license data?
CSLB publishes license information publicly for consumer protection. This actor reads only those public pages at a slow request rate and does not log in or bypass access controls. You are responsible for using the data in line with CSLB terms and applicable laws such as California privacy rules, especially for sole proprietors.
โ Frequently asked questions
How do I find licensed contractors by ZIP code in California? Enter the ZIP code and a trade classification and run the actor. It returns the licenses CSLB lists for that ZIP.
Why did I get 0 results? Either CSLB lists no license for that trade in that ZIP (the run succeeds with a "No licenses found" message and no charge), or the ZIP code was invalid (the run fails with no charge). Try a nearby ZIP or another classification.
How many licenses does one ZIP return? CSLB returns a bounded list per ZIP and trade. In my tests it was 3 to 9.
Do I need a CSLB account or API key? No. The actor uses the public CSLB license search.
Which trades are supported? All 78 CSLB classifications in the dropdown, including A, B, C-10 electrical, C-20 HVAC, C-36 plumbing, C-39 roofing and C-46 solar.
Am I charged for errors or empty extras? No. Error rows are not billed, and bonding or workers' comp rows are only charged when CSLB shows real data.
Can I limit my spend? Yes. Set a maximum charge per run in the Apify run options. The actor stops cleanly when the limit is reached.
Does it cover other states? No. This actor covers California CSLB only.
๐งญ Want more public records data? Other PunkRecordsData scrapers
- Restaurant Health Inspection Aggregator
- Federal Contracts Spending Scraper
- NPPES NPI Registry Scraper
๐ฌ Support
Found a bug or need extra fields? Open an issue in the Issues tab or write to contact.punkrecordsdata@gmail.com.
Last updated: 2026-10-03