Contractor License Check: CA/WA/TX (official files)
Pricing
from $20.00 / 1,000 license matches
Contractor License Check: CA/WA/TX (official files)
Is this contractor licensed, active, bonded and insured right now? Checks California CSLB, Washington L&I and Texas TDLR from the states' own published files. Feed it licence numbers, business names, or a Google Maps scraper dataset. $0.02 per matched licence, not-found rows are free.
Pricing
from $20.00 / 1,000 license matches
Rating
0.0
(0)
Developer
Jacob
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
Is this contractor licensed, active, bonded and insured right now? This actor checks contractors against the state boards' own published licence files:
| State | Source | What you get |
|---|---|---|
| California | CSLB License Master list (free official download) | status (incl. suspensions), classifications, issue/expiry, contractor bond, workers' comp |
| Washington | L&I contractor, bond and insurance datasets on data.wa.gov | status (active, expired, suspended...), specialty, expiry, bond, general liability insurance |
| Texas | TDLR All Licenses on data.texas.gov (A/C, electrical, sign, appliance, elevator, water well contractor types) | licence type and expiry; TDLR publishes no status, bond or insurance column |
No live board pages are scraped and no CAPTCHAs are touched. Every row carries source_as_of (the date of the state's file) and source_url.
Input
queries: a list of{"state": "CA", "license_number": "1000004"}or{"state": "WA", "business_name": "04 Construction LLC"}.datasetId: the ID of a Google Maps scraper dataset. Each place'stitleis checked as a business name in itsstate; the place's address, phone and URL are copied to the output row.
Output (one row per query)
verdict (active, expired, suspended, not_found), match_confidence, license_number, business_name, dba, license_type, classifications, status, expiration_date, bonded, bond_amount, workers_comp, liability_insured, source_url, source_as_of, possible_matches.
null means the state does not publish that field. Name matches scoring under 0.8 are listed in possible_matches and the verdict stays not_found.
Pricing
$0.02 per matched licence. Rows that come back not_found are free.
Integrations
Use this actor from n8n, Make, Google Sheets, Clay or Zapier with your own Apify token (Apify Console > API & Integrations). Every integration makes the same call:
POST https://api.apify.com/v2/acts/pelicanlabs~contractor-license-check/run-sync-get-dataset-items?memory=512Authorization: Bearer <your Apify token>Content-Type: application/json{"queries":[{"state":"CA","license_number":"1000004"},{"state":"WA","business_name":"04 Construction LLC"}],"maxItems":2}
The response is a JSON array with one item per input row. The main fields are verdict, license_number, business_name, dba, status, classifications, expiration_date, bonded, workers_comp, liability_insured, match_confidence, source_url, source_as_of.
Send a list in one request. Each request is one actor run, and each run has a start-up time of several seconds and a small Apify start fee. A batch of 500 rows costs the same start-up as a batch of 1. The n8n workflow and the Google Sheets menu send batches. Clay, Zapier and the Sheets formula send one row per run, which suits small volumes.
| Tool | What you get | Download |
|---|---|---|
| n8n | Workflow to import: reads a Google Sheet, sends up to 500 unchecked rows in one run, writes the results back | contractor-license-check.json |
| Make | Blueprint (HTTP module, one run per batch); setup steps for the new HTTP app are below | contractor-license-check.blueprint.json |
| Google Sheets | Apps Script: =CONTRACTOR_CHECK("1000004", "CA") (licence number or business name) for single cells, and a menu item that checks a selected range in batches of 200 | pelican-checks.gs |
| Clay | HTTP API enrichment column (steps below) | - |
| Zapier | Webhooks by Zapier, Custom Request (steps below) | - |
n8n: in the workflow menu (three dots), choose Import from File, or Import from URL with the link above. Open Run actor (run-sync) and create a Header Auth credential with Name Authorization and Value Bearer <your token>. In Read rows and Write results, choose your sheet. Row 1 needs the columns License or Name, State plus the result columns listed in the workflow's note.
Make: create a scenario, open the three-dots menu, choose Import Blueprint and select the file. In the HTTP module, add an API key keychain that sends Authorization: Bearer <your token> in the header. Edit input_json in the first module, or map it from your sheet. Then add an Iterator on the HTTP module's Data to get one bundle per row. To build the same flow on the new HTTP app (version 4) instead, use the Make a request module with the method, URL, header and body shown above.
Google Sheets: in your sheet, open Extensions > Apps Script, paste the file and save, then reload the sheet. Choose Pelican checks > Set Apify token. Then either type the formula, or select your rows and choose Check selected rows: contractor licence (select two columns: licence or name, state). Results are written to the columns to the right of your selection. Rows that already have a result are skipped, so you can run it again to continue. A formula must finish within Google's 30-second limit for custom functions, so use the menu for anything more than a few rows.
Clay: Add enrichment > HTTP API > Configure.
- Method:
POST - Endpoint:
https://api.apify.com/v2/acts/pelicanlabs~contractor-license-check/run-sync-get-dataset-items?memory=512&timeout=60 - Headers:
Authorization=Bearer <your token>. You can save this as a header account so the token is not shown in the table. - Body:
{"queries": [{"state": "/State", "license_number": "/License Number"}]}. Replace the/Column Nameparts with your own columns: type/to insert one. To look up by business name instead of licence number, usebusiness_namein place oflicense_number. - Clay sends one request, and so one actor run, per row. The response is an array with one item. Run a single row first, then add the fields you want (
verdictfirst) as columns.
Zapier: use the Webhooks by Zapier action Custom Request.
- Method:
POST - URL:
https://api.apify.com/v2/acts/pelicanlabs~contractor-license-check/run-sync-get-dataset-items?memory=512&timeout=25 - Data: the JSON body above, with your Zap's fields mapped in.
- Headers:
Authorization=Bearer <your token>andContent-Type=application/json. - Zapier stops a step after about 30 seconds, so send one row per Zap run. Apify's own Zapier app also has Run Actor and Fetch Results, which works if you prefer it.
Pricing: $0.02 per matched licence (not-found rows are free), billed by Apify to the account that owns the token.
Limits
- California's master list excludes cancelled, revoked and expired non-renewable licences; those return
not_found. - Texas status is derived from the expiry date only.
- Not a certificate of licensure. Status can change at any time; confirm on the board's site before relying on a result.