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
14 days ago
Last modified
Categories
Share
Contractor License Aggregator - CSLB California
Contractor License Aggregator is a CSLB contractor license scraper for California. Look up contractors by license number, business name, owner or officer name, or by ZIP code and trade. Each license returns business name, address, phone, entity type, dates, status and a normalized status type, plus optional classifications, bond, workers' comp, liability insurance, citations with violations, salespersons and personnel. A status filter keeps only active, expired or revoked licenses. Export CSV, Excel, JSON or API. No login. Base price $25 per 1,000 licenses.
Contractor License Aggregator by RecordsData reads the public California Contractors State License Board (CSLB) "Check a License" pages. Use it for lead generation, subcontractor vetting and compliance checks. You can search four ways in one run: license numbers, business names, personnel names, or ZIP codes with one of the 78 CSLB trade classifications. Free users get 10 licenses per run.
๐ What does Contractor License Aggregator do?
It runs the CSLB searches you choose, opens each license detail page, and saves clean rows. Any mix of the four search types works in one run, and a license found twice is delivered once.
- Search a business name such as "Sitka" (DBA and previous names included) or an owner or officer name.
- Find licensed plumbers, electricians or HVAC contractors in a California ZIP code.
- Keep only revoked, suspended or expired licenses with the
statusfilter, and pull public citations with each violated section.
๐ What data can you extract from CSLB?
The dataset has nine row types, 61 keys in total. Every row has licenseNumber. Fields CSLB does not publish for a license are left out.
License row (always)
| Field | Description |
|---|---|
licenseNumber, businessName | CSLB license number and licensed business name |
address, city, state, zipCode, phone | Address string and split parts; phone omitted when CSLB shows none |
entity, issueDate, reissueDate, expireDate | Corporation, Sole Ownership, Partnership or LLC; dates as MM/DD/YYYY |
status, statusType | CSLB's own status text, and a normalized type: active, expired, inactive, cancelled, suspended, revoked or other |
classificationCodes | Trade codes held by the license |
additionalStatus, miscInfo, hasComplaintDisclosure | Extra status lines, dated actions, public disclosure flag |
detailUrl, scrapedAt | Source page and time of the read |
searchType, searchQuery, matchedName, matchedNameType, matchedPerson | How the row was found and what matched, including DBA and previous names |
Optional rows (each keyed by licenseNumber)
| Row type | Main fields | Toggle |
|---|---|---|
| Classification | code, description | includeClassifications |
| Bonding | bondCompany, bondNumber, bondAmount, dates, qualifyingIndividual | includeBonding |
| Workers' comp | workersComp, workersCompExempt, company, policy, dates | includeWorkersComp |
| Liability | liabilityInsurance, company, policy, liabilityAmount, dates | includeLiability |
| Citation | citationNumber, citationDate, violations, violationCount | includeDisclosures |
| Salesperson, Personnel | name, registrationNumber, title | includeSalespersons, includePersonnel |
๐งพ Contractor license sample output
One license row. The business, license number, address, phone, dates and status come from a real CSLB read of license 1080058; city, statusType and scrapedAt are illustrative and show the shape, not a captured value.
{"licenseNumber": "1080058","businessName": "SITKA DEVELOPMENT","address": "9663 SANTA MONICA BLVD, STE 815, BEVERLY HILLS, CA 90210","city": "BEVERLY HILLS","state": "CA","zipCode": "90210","phone": "(818) 532-8400","entity": "Sole Ownership","expireDate": "08/31/2027","status": "This license is current and active.All information below should be reviewed.","statusType": "active","scrapedAt": "2026-10-09T12:00:00.000Z"}
With extras on, the same license also produces separate rows, for example { "licenseNumber": "1080058", "code": "C36", "description": "PLUMBING" }. The status value is CSLB's own text; use statusType to filter or group.
๐ฐ Contractor license scraper pricing: how much does it cost?
The actor uses Pay Per Event. Live prices on the Free plan tier (higher Apify plans pay less per license, down to $0.021 on Gold), read on 2026-10-10:
| Event | Price | When it is charged |
|---|---|---|
| License record | $0.025 | One per license saved |
| Classification, bonding, workers' comp, personnel, liability, citation, salesperson record | $0.01 each | One per extra row, only if enabled and only when CSLB shows real data |
1,000 licenses cost about $25 with no extras. Worked examples on the Free tier: 100 licenses with bonding and workers' comp are 100 x $0.025 + 200 x $0.01 = $4.50. 1,000 licenses with bonding only are $25 + $10 = $35. A vetting run of 100 licenses with liability (80 on file) and 25 citations is $2.50 + $0.80 + $0.25 = $3.55.
You are not charged for failed or empty searches, error rows (such as a license number that does not exist), extras CSLB has no data for, or licenses removed by the status filter. Extra rows do not count toward Max Items. The run stops cleanly at your maximum charge limit. An earlier cloud test of 10 licenses with four extras returned 63 rows: 10 x $0.025 + 53 x $0.01 = $0.78.
๐ How to scrape CSLB contractor licenses in 3 steps
- Open the Input tab and add license numbers, business names, personnel names, or ZIP codes with a trade.
- Pick a
status, set Max Items, and turn on only the extras you need. - Click Run, then download the dataset as JSON, CSV or Excel.
โ๏ธ Input
You need at least one of licenseNumbers, businessNames, personnelNames or zipCodes. If none is given, the run ends SUCCEEDED with one free invalid-input error row.
| Field | Type | Description |
|---|---|---|
licenseNumbers | array | License numbers to look up directly, up to 8 digits, for example 1080058 |
businessNames | array | Prefix search: every name starting with the text, DBA and previous names included |
personnelNames | array | Owners, officers and qualifying individuals, as Last, First or just Last |
maxPeoplePerName | integer | People followed per personnel name. Default 5, up to 100 |
zipCodes | array | 5-digit California ZIP codes. Prefilled with 90210 |
classification | string | CSLB trade for the ZIP search only. Default C-36 |
status | select | any (default), active, expired, inactive, cancelled, suspended or revoked |
maxItems | integer | Maximum licenses to return (Free plan: 10). Extra rows do not count |
includeClassifications, includeBonding, includeWorkersComp, includeLiability, includeDisclosures, includeSalespersons, includePersonnel | boolean | One toggle per optional row type |
The status filter is applied by the actor, because CSLB has none. Licenses that do not match are never charged.
{"businessNames": ["Pacific Coast"],"status": "revoked","maxItems": 50,"includeDisclosures": true}
๐ฆ Output
One row per license, followed by its optional rows. A search with no matching licenses finishes SUCCEEDED with the message "No licenses found" and zero charges. A license number that does not exist returns one free error row (errorType: not-found). A blocking CSLB site makes the run FAILED, also with zero charges.
โ๏ธ CSLB contractor license scraper vs alternatives
Read on 2026-10-09 from the public Apify Store pages. "Not stated" means the page does not mention it.
| Capability | This actor | pink_comic | automation-lab | muhammadafzal |
|---|---|---|---|---|
| Search modes | License number, business, personnel, ZIP and trade | License number, business, personnel | License number, business, personnel | License number, business, personnel, ZIP |
| Status filter | Yes, 6 statuses | Not stated | Not stated | Yes |
| Bond, workers' comp, personnel | Yes, split into fields | Yes | Yes | Yes |
| Disclosures | Citations with each violation | Disclosure field | Disclosure links | Disciplinary actions |
| Price per 1,000 | $25 ($21 Gold) | $2 | $17.48 Free, $9.12 Gold | $20 header, $25 README |
parseforge/cslb-california-scraper ($21 header, $25 README) says it does not support license number search. Only this actor's page states liability insurance, salespersons, numeric bond amounts, a normalized status type and the matched name. muhammadafzal publishes county, which we cannot source because CSLB shows none on the license page. We do not return history pages or an only-new mode. This actor costs more per license than all four, so the extra price buys depth, not volume. If you only need names and numbers, pink_comic is much cheaper.
๐งฐ Contractor license data use cases
- Lead generation: call lists of active plumbers, electricians or roofers by ZIP code.
- Subcontractor vetting: confirm status, bond, workers' comp, liability and citations before signing.
- Compliance monitoring: schedule runs on license numbers 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 '{"licenseNumbers":["1080058"],"includeBonding":true}'
Use the Apify API, apify-client for Python and JavaScript, schedules, Zapier, Make, n8n or Google Sheets.
๐ค Contractor License Aggregator MCP server for AI agents
AI agents can call Contractor License Aggregator through the Apify MCP server at https://mcp.apify.com?tools=RecordsData/contractor-license-aggregator, which loads only this Actor as a tool. Add this to your MCP client configuration (Claude Desktop, Cursor, VS Code or any remote MCP client):
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=RecordsData/contractor-license-aggregator"}}}
Example agent prompt:
Search business names starting with "Pacific Coast" with status revoked and citations on, then list each license with its violated sections.
Tool description: looks up California CSLB contractor licenses by license number, business name, personnel name, or ZIP code and trade, with a status filter and optional bond, workers' comp, liability, citation, salesperson and personnel rows. Choose it when an agent needs contractor license status, expiry, insurance or public citations. It takes the Input table fields above.
๐ก๏ธ 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 one or more 5-digit California ZIP codes and a trade classification such as C-36 plumbing, then click Run. The actor searches the public CSLB ZIP code search, opens the detail page for every license listed and saves one row per license with business name, address, phone, entity type, dates and status.
Can I look up a contractor by license number?
Yes. Put one or more numbers in licenseNumbers, for example 1080058, and the actor goes straight to each license page with no search step. A number that does not exist returns one free error row with errorType: not-found. You can mix license numbers with names and ZIP codes in the same run.
How does the business and personnel name search work?
CSLB's name search is a prefix search that returns an alphabetical window of 49 names. The actor keeps only names that start with your text and pages forward until nothing new appears. A short prefix or rare status can walk many pages, so set Max Items to bound the run. Business hits include DBA and previous names, shown in matchedName.
What disclosures are returned?
With includeDisclosures on, the actor returns one row per public citation linked from the license page, with the code, section and description of every violated rule in violations. Citations are the only disclosure type observed on the licenses tested. Citation rows cost $0.01 each.
Why did I get 0 results from Contractor License Aggregator?
Either CSLB lists no license matching your input, the status filter removed everything, or the ZIP code was invalid. The run then succeeds with a "No licenses found" status message and no charge. Try a nearby ZIP code, another classification or status: any.
How many licenses does one ZIP code return from CSLB? CSLB returns a bounded list for each ZIP code and trade classification. In tests the lists held 3 to 9 licenses per ZIP code (90210 returned 5, 90001 and 92101 returned 9, 94105 returned 3). To cover a city or county, pass many ZIP codes in one run, or use name searches, which are not capped per ZIP.
Do I need a CSLB account or API key to scrape contractor licenses? No. The actor reads the public California CSLB license search pages, so you need no CSLB account, API key or login. You only need an Apify account. It handles the residential proxy that CSLB's firewall requires.
Which trades does the CSLB contractor license scraper support? All 78 CSLB trade classifications in the input dropdown, including A, B, C-10 electrical, C-20 HVAC, C-36 plumbing, C-39 roofing and C-46 solar. The classification applies to the ZIP search only, with C-36 as the default. Other searches ignore it, and you can add one row per classification a license holds.
Am I charged for errors or empty extras on Contractor License Aggregator? No. Error rows, failed or empty searches and licenses removed by the status filter are not billed, and extra rows are charged only when CSLB shows real data. You pay $0.025 per license record on the Free tier, and $0.01 per optional extra row.
Can I limit my spend on Contractor License Aggregator?
Yes. Set a maximum charge per run in the Apify run options, or set maxItems to cap the licenses returned. Extra rows do not count toward maxItems, so the charge limit is the hard cap when you turn on several extras. The actor stops cleanly when the charge limit is reached.
What happens if I send an empty or invalid input to Contractor License Aggregator?
The platform rejects an unknown classification or status value with a 400 error at run creation, so no run starts. If you give no search at all, or no valid ZIP code or license number, the run ends SUCCEEDED with a single free error row (errorType: invalid-input) and nothing is charged. Invalid entries mixed with valid ones are skipped.
Does Contractor License Aggregator cover contractor licenses in other states? No. It covers California CSLB (Contractors State License Board) data only. It searches California licenses by number, name or ZIP code and does not read license boards in other states. For another state you would need a different actor built for that licensing board.
๐งญ Want more public records data? Other RecordsData scrapers
- Restaurant Health Inspection Aggregator
- Federal Contracts Spending Scraper
- NPPES NPI Registry Scraper
๐ฌ Support
Open an issue in the Issues tab or write to contact.punkrecordsdata@gmail.com.
Last updated: 2026-10-11