California CSLB Scraper — Contractor Licenses
Pricing
from $25.00 / 1,000 license records
California CSLB Scraper — Contractor Licenses
Scrape California CSLB contractor licenses, classifications, status, business details, personnel, bonds, and public compliance data.
Pricing
from $25.00 / 1,000 license records
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape the California Contractors State License Board (CSLB) public database for full contractor license records. Search by license number, business name, personnel name, or ZIP code — get status, all classifications, bonds, workers' comp, disciplinary actions, personnel, and full contact details in structured JSON.
Use cases
- Contractor verification — confirm a contractor is licensed and in good standing before hiring
- Compliance monitoring — detect newly expired, suspended, or revoked licenses for vendor lists on recurring schedules
- Lead generation — build targeted lists of licensed contractors by ZIP code, city, classification, or active status
- Subcontractor sourcing — find qualified subcontractors by specialty classification and region
- Insurance underwriting — score contractors using disciplinary actions, bond cancellation history, and workers' comp status
- Due diligence — check complaint and legal action history before signing contracts
- Market research — analyze contractor density by county/classification, track new-license issuance trends
Input
The actor supports four search modes. Use any one or combine multiple:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
licenseNumbers | array | no | [] | Direct license-number lookup (fastest). Example: ["1000001", "812345"] |
businessName | string | no | "" | Full or partial business name. Example: "Smith Construction" |
personnelLastName | string | no | "" | Last name of license-holding individual |
personnelFirstName | string | no | "" | Optional first name to narrow personnel search |
zipCodes | array | no | [] | California ZIP codes for region-based search. Example: ["92101", "90012"] |
city | string | no | "" | Client-side filter on business address city |
classification | string | no | "" | Filter by CSLB classification code (e.g. "C-10", "B") |
status | select | no | "any" | Filter by license status: any, active, expired, suspended, revoked, canceled, inactive |
maxResults | integer | no | 100 | Hard cap on records returned |
customProxyUrl | string | no | "" | Premium residential proxy URL for maximum reliability |
proxyConfiguration | object | no | residential | Apify proxy settings |
At least one search mode is required.
Example inputs
License number lookup:
{"licenseNumbers": ["842951", "1000001"],"maxResults": 2}
Business name search:
{"businessName": "Pacific Construction","status": "active","maxResults": 50}
ZIP code lead generation:
{"zipCodes": ["92101", "92102"],"classification": "C-20","status": "active","maxResults": 200}
Personnel name search:
{"personnelLastName": "Smith","personnelFirstName": "John","maxResults": 25}
Output
Each record contains the full public record for one contractor license:
| Field | Type | Description |
|---|---|---|
license_number | string | CSLB license number |
business_name | string | Legal business name |
license_status | string | Active, Expired, Suspended, Revoked, Canceled, or Inactive |
entity_type | string|null | CORPORATION, LLC, SOLE OWNER, etc. |
issue_date | string|null | Original license issue date (ISO 8601) |
expiration_date | string|null | License expiration date (ISO 8601) |
business_address | string|null | Full street address |
city | string|null | Business address city |
county | string|null | California county (derived from ZIP) |
zip_code | string|null | Business address ZIP |
business_phone | string|null | Business phone number |
classifications | array | All license classifications [{code, description}] |
bonds | array | All bonds: contractor's bond, qualifier bond [{type, company, amount_usd, bond_number, effective_date, cancellation_date}] |
workers_comp | object|null | Workers' comp carrier, policy, dates, or exempt status |
qualifiers | array | Qualifying individuals [{name, association}] |
personnel | array | All listed personnel [{name, classification, license_number, status}] |
disciplinary_actions | array | Disciplinary actions [{date, type, summary}] |
administrative_actions | array | Administrative actions [{date, type, summary}] |
detail_url | string | Direct CSLB detail page link |
scraped_at | string | ISO 8601 timestamp |
source_url | string | Source page URL |
Pricing
| Event | Price |
|---|---|
| Actor Start | $0.00005 |
| License Record | $0.025 per record |
You only pay for records successfully scraped. Start with a small maxResults to test before scaling.
Technical notes
- Residential proxy required: CSLB's F5 BIG-IP WAF blocklists datacenter IPs. The actor uses Apify residential proxy by default. For production bulk runs, provide a premium residential proxy via
customProxyUrl(Decodo/Bright Data/IPRoyal) for maximum reliability. - Scheduled downtime: The CSLB database is unavailable Sundays 8 PM through Monday 6 AM Pacific Time. Avoid scheduling runs during this window.
- Search limits: Business name searches return up to 50 names per page (pagination handled automatically). Personnel name searches return up to 100 names per page.
- Classification codes: See the CSLB classification list for all 40+ specialty codes.
Integration
Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools. The output dataset is compatible with:
- CSV/JSON/Excel export from Apify Console
- Zapier and Make webhooks
- Direct API access via Apify REST API
- CRM import (HubSpot, Salesforce) with field mapping
- AI agent tool calls via Apify MCP server
What is California CSLB Scraper?
California CSLB Scraper turns the target data into structured, reusable results on Apify. Use it when you need repeatable collection for sales teams, agencies, recruiters, market researchers, and data-enrichment workflows without maintaining a custom scraper or one-off integration. Run it manually, schedule recurring jobs, call it through the Apify API, or connect it to an AI agent through the Apify MCP server.
The Actor stores results in an Apify dataset, where they can be previewed and exported as JSON, CSV, Excel, XML, or RSS. Availability and completeness depend on the source, supplied inputs, public visibility, authentication requirements, and upstream rate limits.
Use cases for California CSLB Scraper
- Build structured datasets for research, reporting, enrichment, or monitoring.
- Automate repetitive collection with schedules, webhooks, and API calls.
- Feed clean records into spreadsheets, databases, CRMs, BI tools, AI agents, or RAG pipelines.
- Track changes over time by running the same validated input on a schedule.
- Replace fragile manual copy-and-paste work with a reproducible Apify workflow.
How to use California CSLB Scraper
- Open the Actor input page and choose a focused, valid target.
- Set a conservative result limit for the first run.
- Start the Actor and inspect the dataset for coverage and field availability.
- Export the results or connect the dataset to your downstream system.
- Scale gradually and use scheduling, pagination, or proxies when supported.
Important input options
licenseNumbers— Look up specific CSLB license numbers (e.g. '1000001', '812345'). Fastest search method — direct single-record lookup, no pagination. Use this field when the user provides exact license numbbusinessName— Full or partial contractor business name. CSLB matches case-insensitively against the legal business name AND associated personnel/owner names — so 'Smith' returns both 'Smith Construction CpersonnelLastName— Last name of an individual on a contractor license (owner, officer, or qualifier). Use this field together with personnelFirstName to search by person. Returns up to 100 names per search; papersonnelFirstName— Optional first name to narrow a personnel-name search. Only applies when personnelLastName is set. Leave blank to search by last name only (returns more results).zipCodes— List of 5-digit California ZIP codes (e.g. '92101', '90012') to find licensed contractors in each area. Use this when the user wants contractors by region or for building territory-based leacity— Filter results to a specific California city (e.g. 'San Diego', 'Los Angeles'). Applied as a client-side filter on the business address city. Use this to narrow ZIP-code or business-name seaclassification— Filter results to a specific CSLB classification code. Common codes: 'A' (General Engineering), 'B' (General Building), 'C-10' (Electrical), 'C-36' (Plumbing), 'C-20' (HVAC), 'C-33' (Paintinstatus— Filter results by current license status. 'Active' is the common choice for lead-generation and insurance use cases. 'Any' returns all records regardless of status.
API and automation example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/cslb-california-scraper').call({// Add the same input fields you use in the Apify Console.});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Related Apify Actors
Use these dedicated tools when a neighboring data source or workflow is a better match:
- Leads Finder Pro - B2B Leads with Emails [Apollo Alternative]
- Yellow Pages US Scraper — Business Leads & Reviews
- Yellow Pages Australia Scraper — Business Leads & Reviews
- Instagram Followers & Following Scraper — With Cookies
- OpenTable Restaurants, Ratings & Reviews Scraper
- Etsy Scraper Pro — Products, Prices, Reviews & Shop Data
- YouTube Thumbnail Downloader
- AllTrails Scraper — Hiking Trails, Reviews & GPS Data
- Email Validator — Syntax, MX & Risk Checks
- Google Play Reviews Scraper
Frequently asked questions
How many results can I scrape with California CSLB Scraper?
The practical total depends on the source, input limits, pagination, available records, run timeout, and upstream restrictions. Start with a small run, verify the output, and increase the limit gradually.
Can I integrate California CSLB Scraper with other apps?
Yes. Use Apify integrations, webhooks, schedules, dataset exports, Make, Zapier, Google Sheets, cloud storage, or your own application.
Can I use California CSLB Scraper with the Apify API?
Yes. Start runs with the Apify REST API or an official Apify client, then retrieve records from the run's default dataset. Keep your API token in a secret or environment variable.
Can I use California CSLB Scraper through an MCP Server?
Yes. The Apify MCP server can expose the Actor to compatible AI clients and agents. Review the input and expected cost before allowing an autonomous workflow to run it at scale.
Do I need proxies?
It depends on the source and volume. Use the default configuration first. For larger or geographically sensitive jobs, select an appropriate proxy configuration only when the Actor supports it.
Is it legal to scrape this data?
Scraping rules vary by source, jurisdiction, data type, and intended use. Collect only data you are authorized to access, respect applicable terms and privacy laws, and avoid restricted or personal data misuse. This documentation is not legal advice.
Your feedback
If a field is missing, a source layout has changed, or you need a supported use case documented, open an issue on the Actor page with a reproducible input and run ID.