Skip to content

CSLB Contractor License Scraper

Try for free

Look up California contractor licenses on the CSLB site by license number, business name, person name, or city/ZIP plus classification. Get status, classifications, bonds, workers comp, personnel and complaint disclosures.

🏗️ CSLB Contractor License Scraper

Look up any California contractor license on the official CSLB (Contractors State License Board) site and get clean, structured records: license status, classifications, contractor and qualifier bonds, workers' compensation, personnel, and complaint disclosures. Search by license number, business name, person name, or pull every licensed contractor of a trade in a city or ZIP code. No login, no browser, and 1,000 full license records for about $1.37 all in.

✨ Why use CSLB Contractor License Scraper?

  • 🔎 Four ways to search — license numbers, business names, people on a license (owners, officers, qualifiers), or city/ZIP + license classification for lead lists.
  • 📋 The full license record — status and status notes, issue/expire dates, every classification, contractor bond, bond of qualifying individual, LLC worker bond, workers' comp carrier/policy/exemption, personnel with titles and dates, and complaint disclosures.
  • ⚡ Fast — 1,000 full records in about 50–80 seconds in our tests; 10 records in a few seconds.
  • 🧹 Clean data — ISO dates (YYYY-MM-DD), bond amounts as numbers, a short status (Active, Expired, Suspended...) next to the CSLB wording, de-duplicated licenses.
  • 💸 Cheap — $1.30 per 1,000 records, and you only pay for records you get; filtered-out and not-found licenses cost nothing.
  • 🔁 Reliable — retries on fresh connections, automatic switch to US residential exits if the site starts refusing requests, partial results always kept.

🎯 Use cases

  • ✅ Contractor verification and KYB — check that a contractor's license is active, bonded and insured before you hire, pay or onboard them.
  • 🧲 Lead generation — list every active B (General Building), C-10 (Electrical), C-36 (Plumbing) or C-39 (Roofing) contractor in a city or ZIP code, with phone numbers and addresses.
  • 🏦 Insurance and surety prospecting — see which bond surety and workers' comp carrier each contractor uses and when policies expire.
  • 🛡️ Compliance monitoring — schedule a run over your vendor list and catch suspensions, expired workers' comp or new complaint disclosures.
  • 👤 Due diligence on people — find every license a person is or was associated with as owner, officer or qualifier.
  • 📊 Market research — count contractors per trade and area, entity types, license age and bond sizes.

🚀 How to use

  1. Enter what to look up: license numbers, business names, person names ("Last, First"), or cities / ZIP codes together with one or more license classifications.
  2. Set Max results per search (0 = every match).
  3. Optional: keep only active licenses, filter by classification, or turn off personnel or full details for a faster list.
  4. Click Start and download the results as JSON, CSV, Excel or HTML, or read them through the API.

📥 Input

FieldWhat it does
licenseNumbersCSLB license numbers (e.g. 1098765) or detail page links. Every license listed is returned.
businessNamesBusiness names; matches names that start with your text, like the official lookup.
personNamesPeople on a license as Last, First (first name optional, matches as a prefix).
locationsCalifornia cities or 5-digit ZIP codes (needs classifications).
classificationsLicense classes for location searches (B, C-10, C-36...). For other searches: keep only licenses holding one of them.
maxResultsRecords per search (each name, person, or city/ZIP + class). 0 = no limit. Default 20.
onlyActiveKeep only current, active licenses.
includePersonnel / includeComplaintsAdd the personnel list and complaint disclosures (on by default, no extra charge).
fetchDetailsLocation searches: full license records (on) or the CSLB area list only (off, faster).
{
  "licenseNumbers": ["1098765"],
  "businessNames": ["Pacific Construction"],
  "locations": ["95401"],
  "classifications": ["B"],
  "maxResults": 20,
  "onlyActive": false
}

📤 Output

One row per contractor license.

FieldDescription
licenseNumber, businessName, dbaNames, entityTypeWho holds the license
address, city, state, zip, phoneAddress of record and business phone
status, isActive, statusText, additionalStatusShort status, flag and the CSLB wording
issueDate, reissueDate, expirationDateDates (YYYY-MM-DD)
classifications, classificationCodesEvery license classification
contractorBond, qualifierBonds, otherBondsSurety, bond number, amount, effective and cancellation dates
workersCompInsured / exempt / employee leasing / out-of-state, carrier, policy number, dates, class codes
personnelPeople on the license with title, classification and association dates
hasComplaints, complaintsPublic complaint disclosures (citations, accusations, arbitrations...)
miscellaneousOther CSLB notes on the license
searchType, searchQuery, matchedName, matchedPersonHow the record was found
detailUrl, dataCurrentAsOf, scrapedAtSource page and timestamps

Example (from a real run; personnel and qualifier names replaced with fictional ones):

{
  "licenseNumber": "1098765",
  "businessName": "EVANS CONSOLES INCORPORATED",
  "dbaNames": [],
  "entityType": "Corporation",
  "address": "305 E WALL STREET",
  "city": "GRAPEVINE",
  "state": "TX",
  "zip": "76051",
  "phone": "(817) 329-2009",
  "status": "Active",
  "isActive": true,
  "statusText": "This license is current and active.",
  "issueDate": "2022-11-15",
  "expirationDate": "2026-11-30",
  "classifications": [{ "code": "B", "description": "GENERAL BUILDING" }],
  "classificationCodes": "B",
  "contractorBond": {
    "company": "WESTERN SURETY COMPANY",
    "number": "30150975",
    "amount": "$25,000",
    "amountUsd": 25000,
    "effectiveDate": "2023-01-01",
    "cancellationDate": null
  },
  "qualifierBonds": [
    { "qualifierName": "JANE Q SAMPLE", "number": "30150976", "amount": "$25,000", "amountUsd": 25000, "company": "WESTERN SURETY COMPANY", "effectiveDate": "2023-01-01" }
  ],
  "workersComp": {
    "type": "employee-leasing",
    "exempt": false,
    "summary": "An employee service group holds the workers compensation insurance.",
    "policyNumber": "WLRC74802990",
    "effectiveDate": "2026-07-01",
    "expirationDate": "2027-07-01",
    "classCodes": [{ "code": "8810", "description": "Clerical Office Employees" }]
  },
  "personnel": [
    { "name": "JANE Q SAMPLE", "title": "RME", "associationDate": "2022-11-15", "classification": "B", "current": true },
    { "name": "ALEX R EXAMPLE", "title": "CEO / PRESIDENT", "associationDate": "2022-11-15", "current": true }
  ],
  "hasComplaints": false,
  "complaints": [],
  "searchType": "license",
  "searchQuery": "1098765",
  "detailUrl": "https://www.cslb.ca.gov/onlineservices/checklicenseII/LicenseDetail.aspx?LicNum=1098765"
}

💰 Pricing

You pay $1.30 per 1,000 contractor records ($0.0013 per record), only for records saved to your dataset. Licenses that do not exist, fail your filters, or could not be read are free. Personnel lists and complaint disclosures are included at no extra charge.

Platform usage (compute and datacenter proxy traffic) is billed on top and is small: about $0.07 per 1,000 records in our tests. So 1,000 full license records ≈ $1.37 in total, and a 20-record lookup costs about 3 cents.

❓ FAQ

Is it legal to scrape CSLB? The actor reads the same public license pages anyone can open on cslb.ca.gov without an account. CSLB publishes this information so the public can check contractors. You are responsible for how you use the data (for example, marketing rules for phone numbers).

Do I need a login or my own proxy? No. The actor uses the platform's datacenter proxies by default and switches to US residential exits by itself if the site refuses requests.

How many results can I get? As many as CSLB has. Set maxResults to 0 for every match. A city + classification search returns the full CSLB list for that area (for example, about 3,400 active General Building contractors in Los Angeles). Large runs stream results as they go. Each license is saved once per run, even when several of your searches find it.

Why is a field empty? CSLB only shows what is on file: many sole owners have no workers' comp policy (they are exempt), old or cancelled licenses often have no bond, and only some licenses have personnel beyond the owner. Empty means the CSLB page shows nothing for that field.

Why did my business-name search find nothing? CSLB matches the start of the name. Leave out commas and periods, try fewer words, and for names that start with a person ("John Smith Construction") try "Smith John".

Can I schedule it or use the API? Yes. Save your input as a task, schedule it (daily, weekly...), and read results through the API, webhooks or integrations.

⚠️ Limits

  • California CSLB contractor licenses only. Home Improvement Salesperson (HIS) registrations are skipped.
  • Location searches return what CSLB lists for an area: contractors with a currently active license whose address of record is in that city or ZIP code.
  • The CSLB name index shows at most 50 entries for one exact business name and 100 for one exact person name; beyond that, identical names cannot be paged further on the site.
  • Bond and workers' comp history pages (older policies) are not included, only the current entries shown on the license page.
  • The CSLB database is offline every Sunday 8 p.m. to Monday 6 a.m. Pacific time; runs in that window end with a clear message.

Related actors

//From the blog\\

Latest articles

All articles
G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.