
Congress Stock Trades Scraper
scrape.ly/store/querystone/congress-trades-scraperNewsBusiness
4 monthly users

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.
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.
| Field | What it does |
|---|---|
licenseNumbers | CSLB license numbers (e.g. 1098765) or detail page links. Every license listed is returned. |
businessNames | Business names; matches names that start with your text, like the official lookup. |
personNames | People on a license as Last, First (first name optional, matches as a prefix). |
locations | California cities or 5-digit ZIP codes (needs classifications). |
classifications | License classes for location searches (B, C-10, C-36...). For other searches: keep only licenses holding one of them. |
maxResults | Records per search (each name, person, or city/ZIP + class). 0 = no limit. Default 20. |
onlyActive | Keep only current, active licenses. |
includePersonnel / includeComplaints | Add the personnel list and complaint disclosures (on by default, no extra charge). |
fetchDetails | Location 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
}
One row per contractor license.
| Field | Description |
|---|---|
licenseNumber, businessName, dbaNames, entityType | Who holds the license |
address, city, state, zip, phone | Address of record and business phone |
status, isActive, statusText, additionalStatus | Short status, flag and the CSLB wording |
issueDate, reissueDate, expirationDate | Dates (YYYY-MM-DD) |
classifications, classificationCodes | Every license classification |
contractorBond, qualifierBonds, otherBonds | Surety, bond number, amount, effective and cancellation dates |
workersComp | Insured / exempt / employee leasing / out-of-state, carrier, policy number, dates, class codes |
personnel | People on the license with title, classification and association dates |
hasComplaints, complaints | Public complaint disclosures (citations, accusations, arbitrations...) |
miscellaneous | Other CSLB notes on the license |
searchType, searchQuery, matchedName, matchedPerson | How the record was found |
detailUrl, dataCurrentAsOf, scrapedAt | Source 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"
}
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.
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.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
licenseNumbersarrayOptionalLicense numbers
CSLB contractor license numbers to look up (digits only, e.g. 1098765). Detail page links work too. Each license is returned once with status, classifications, bonds, workers' comp, personnel and complaint disclosures.
businessNamesarrayOptionalBusiness names
Contractor business names to search. The search matches names that START with your text, like the official CSLB lookup (e.g. 'Pacific Construction' also finds 'PACIFIC CONSTRUCTION SERVICES INC'). Leave out commas and periods. For names like 'John Smith Construction' try 'Smith John Con'.
personNamesarrayOptionalPerson names (Last, First)
People listed on a license (owners, officers, qualifiers), written as 'Last, First' (e.g. 'Smith, John'). The last name must match exactly; the first name is optional and matches as a prefix (JOHN also finds JOHN PATRICK). Returns every contractor license the person is or was associated with.
locationsarrayOptionalCities or ZIP codes
Find licensed contractors by location: California city names (e.g. 'Santa Rosa') or 5-digit ZIP codes (e.g. '95401'). Needs at least one license classification below. CSLB lists only contractors whose license is currently active and whose address of record is in that area.
classificationsarrayOptionalLicense classifications
For a location search: the license classifications to list (e.g. B - General Building, C-10 - Electrical). Each city/ZIP is searched once per classification. For license, business and person searches this works as a filter: only licenses holding at least one of these classifications are kept.
maxResultsintegerOptionaldefault 20Max results per search
Maximum contractor records to save for each business name, person, and city/ZIP + classification search. 0 means no limit (every match). License-number lookups always return every license you list.
onlyActivebooleanOptionaldefault falseOnly active licenses
Keep only licenses that are current and active. Expired, inactive, suspended, revoked and cancelled licenses are skipped (and not charged).
includePersonnelbooleanOptionaldefault trueInclude personnel
Add the people listed on each license (owners, officers, responsible managing employees/officers) with their titles and association dates. One extra page per license; no extra charge.
includeComplaintsbooleanOptionaldefault trueInclude complaint disclosures
For licenses that show public complaint disclosures (citations, accusations, arbitrations, civil judgments), add the disclosed actions. No extra charge.
fetchDetailsbooleanOptionaldefault trueFull license details for location searches
On: every contractor from a city/ZIP search gets the full license record (status, classifications, bonds, workers' comp, personnel). Off: only the list data CSLB shows for the area (name, address, phone, license number), which is much faster for large cities.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Proxy servers used to reach the CSLB site. Datacenter proxies work well; the actor switches to US residential exits on its own if the site starts refusing requests.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| licenseNumber | string | CSLB contractor license number |
| businessName | string | null | Business name on the license |
| dbaNames | array | null | Doing-business-as names |
| entityType | string | null | Sole Ownership, Corporation, Partnership, Ltd Liability, ... |
| address | string | null | Street address of record |
| city | string | null | |
| state | string | null | |
| zip | string | null | |
| phone | string | null | Business phone number |
| status | string | null | Active, Inactive, Expired, Suspended, Revoked, Cancelled |
| isActive | boolean | null | |
| statusText | string | null | Status sentence exactly as CSLB shows it |
| additionalStatus | array | null | |
| issueDate | string | null | YYYY-MM-DD |
| reissueDate | string | null | |
| expirationDate | string | null | YYYY-MM-DD |
| classifications | array | null | License classifications (code and description) |
| classificationCodes | string | null | Classification codes, comma separated |
| contractorBond | object | null | |
| qualifierBonds | array | null | |
| otherBonds | array | null | |
| workersComp | object | null | |
| miscellaneous | array | null | |
| hasComplaints | boolean | null | |
| complaints | array | null | |
| personnel | array | null | |
| dataCurrentAsOf | string | null | |
| detailUrl | string | CSLB license detail page |
| searchType | string | null | |
| searchQuery | string | null | |
| matchedName | string | null | |
| matchedNameType | string | null | |
| matchedPerson | object | null | |
| scrapedAt | string | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Contractor record | One contractor license record saved to the dataset. Licenses that do not exist or are filtered out are free. | $0.0013 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('cornerledger/cslb-scraper').call({
"licenseNumbers": [
"1098765"
],
"businessNames": [
"Pacific Construction"
],
"maxResults": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run cornerledger/cslb-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=cornerledger/cslb-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
No examples yet
The developer hasn't published example inputs for this actor.

Scrape Google Maps places for any search term and city, with no code or with one API call. A real run, its output, its log and its exact cost, plus the limits and the legal side.
Read the article
Paste an Amazon search or product URL into a ready-made Actor and get one row per product with price, ASIN, rating and review count. This guide covers the no-code steps, the API, ZIP code pricing, a real run and its cost.
Read the article
Scrape Google search results by query and country and get each results page as JSON: organic results with positions, People Also Ask and related searches. Run it without code or from Python, with a real run, the cost per page and Google's terms.
Read the articleScrape.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.