Contractor License Lookup: Multi-State Official Data avatar

Contractor License Lookup: Multi-State Official Data

Pricing

Pay per event

Go to Apify Store
Contractor License Lookup: Multi-State Official Data

Contractor License Lookup: Multi-State Official Data

Search, verify and monitor contractor and trade licenses from official state open data: WA, TX, CT, CO, OR, DE. Status, expiry, trade, address, business phone, OR bonds and insurance. New-license and expiring-soon lists. $2 per 1,000 records.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Detroit Web Agent - Open Data

Detroit Web Agent - Open Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Contractor License Lookup - multi-state contractor and trade licenses from official open data ($2 per 1,000)

Contractor License Lookup: features, price and a real output row

Run it free on Apify

Price per 1,000 licensesFree planStarterScaleBusiness
This Actor$2.00$2.00$2.00$2.00
Most-used alternative$2.00$2.00$2.00$2.00

Contractor License Lookup sample output table from a real run

  • In short: Contractor License Lookup (Apify actor transparent_meteorite/contractor-license-lookup) searches, verifies and monitors contractor and trade licenses from the official open-data portals of Washington, Texas, Connecticut, Colorado, Oregon and Delaware.
  • Who it is for: lead-generation and sales teams selling to contractors, insurance and surety brokers, building-supply and equipment vendors, marketplaces and property managers that vet contractors, compliance and procurement teams.
  • Input: mode (search, verify, new_licenses), states, trade, city, ZIP, county, business or person name, license number, active only, contractors only, expiring-soon window, verify list.
  • Output: one row per license: state, agency, license number, license type, normalized trade, business name, person name, status, issue / effective / expiration dates, isActive, isExpiringSoon, address, city, ZIP, county, business phone where the agency publishes one, source record link, official lookup link, retrieval time.
  • Price: $0.002 per license record plus $0.00005 per run start. Verify rows that find nothing are free. No subscription.
  • Limits: six states today, only the fields each agency publishes. California (CSLB), Florida (DBPR) and other states are not covered.

Key facts

  • Actor name: Contractor License Lookup
  • Actor ID: transparent_meteorite/contractor-license-lookup
  • Data source: official state open-data portals (Socrata APIs) run by state agencies
  • Pricing model: pay per event (apify-actor-start $0.00005, license-record $0.002)
  • Output formats: JSON, CSV, Excel, XML, HTML table (Apify dataset)
  • Access: Apify Console, REST API, JavaScript and Python clients, schedules, webhooks, Apify MCP server
  • Login or third-party API key needed: no, only an Apify account
  • Also known as: contractor license search, contractor license verification API, trade license lookup, electrician license lookup, plumber license lookup, roofing contractor leads, new contractor licenses list
  • Last updated: 2026-10-13

Why choose this actor

Most contractor license data is locked behind one-at-a-time lookup pages, a different one for every state and every board. This actor reads the bulk license datasets that the agencies themselves publish on their open-data portals and gives you one clean, consistent table across states.

  • Official sources only. Every row comes from a dataset published by the licensing agency (Washington L&I, Texas TDLR, Connecticut DCP, Colorado DORA, Oregon CCB and BCD, Delaware DPR). Each row carries sourceRecordUrl, a link to the exact record in the agency's open-data API, so you can check any value yourself.
  • One schema for six states. Field names, dates (ISO YYYY-MM-DD), phone format and trade names are the same no matter which state the row came from.
  • Normalized trades. State license classes (for example WA specialty code CD, CT credential HIC, OR BCD LHR) are mapped to 28 plain trades such as roofing, electrical, plumbing, hvac, home_improvement.
  • Honest activity flag. isActive is true only when the agency status is active and the expiration date has not passed. Some records still say "Active" after they expire; this actor does not count those as active.
  • Three jobs in one actor. Search for leads, verify a list of license numbers or names, or pull licenses issued in the last N days.
  • Polite and dependable. Requests are serial, at least 350 ms apart, filtered on the server, paged, and retried on rate limits and server errors. No login, no browser, no scraping of lookup pages.

What it does

Pick a mode:

  1. search - find licenses that match your filters: states, trade, city, ZIP, county, business name words, person name words, license number, active only, contractor licenses only, expiring soon.
  2. verify - paste up to 1,000 license numbers or business names. You get exactly one row per input with found, matchType (licenseNumber, exactName or nameContains), matchCount, the best match's full record and up to five other matches. Use a state prefix such as TX:100733 to narrow an item to one state.
  3. new_licenses - licenses issued or registered in the last N days (1 to 365), newest first, in the states that publish an issue or registration date.

States and datasets covered

StateAgencyDatasetWhat is in itRefresh (as stated by the portal)
WADepartment of Labor & Industriesdata.wa.gov m8qx-ubtqConstruction, electrical, plumbing and elevator contractors, all statusesthree times a day
TXDepartment of Licensing and Regulationdata.texas.gov 7358-krk7Electricians and electrical contractors, A/C contractors and technicians, appliance installers, well drillers, elevator and sign contractorsupdated periodically by TDLR
CTDepartment of Consumer Protectiondata.ct.gov ngch-56trHome improvement, new home, electrical, plumbing, heating, sheet metal, fire protection, elevator, demolition, glazing, pool, well, solar, lead and asbestos credentialsdaily
CODepartment of Regulatory Agenciesdata.colorado.gov 7s5z-vewrElectrical and plumbing contractors, masters, journeymen, residential wiremen and plumbersdaily
ORConstruction Contractors Boarddata.oregon.gov g77e-6bhsActive residential and commercial contractors, with bond and insurance detailsdaily (active licenses only)
ORBuilding Codes Divisiondata.oregon.gov vhbr-cuaqActive electrical, plumbing, boiler and elevator licensesupdated periodically by BCD (active licenses only)
DEDivision of Professional Regulationdata.delaware.gov pjnv-eaihElectricians, master plumbers, HVACR, elevator mechanicsdaily

Data is read live at run time, so you always get what the agency published most recently.

Not covered: California (CSLB), Florida (DBPR), Arizona, Nevada, North Carolina, Georgia, New York, Michigan and every other state not in the table. Those states either publish no bulk open dataset or publish it only as downloads or lookup pages that this actor does not scrape. Local city and county licenses are not covered.

Use cases

  • Homeowners and property managers: confirm a contractor's license is active and not expired before signing a job.
  • General contractors: verify subcontractor licenses and trades in bulk before onboarding them.
  • Insurers, lenders and marketplaces: screen contractor applicants against official state records as part of KYB.
  • Lead generation: pull licensed contractors by trade and city, then schedule a run to catch new or expiring licenses.

Quick start

  1. Open the actor in Apify Console and click Try for free.
  2. Keep the prefilled input (Washington, trade roofing, city Seattle, 20 results) and click Start. A test run finishes in a few seconds.
  3. Open the Overview table, or export as CSV, JSON or Excel.

A minimal search input:

{ "mode": "search", "states": ["WA"], "trade": "roofing", "city": "Seattle", "maxResults": 20 }

Output fields

FieldMeaning
stateTwo-letter state of the licensing agency
sourceAgency name
licenseNumberLicense number exactly as the agency publishes it
licenseType / licenseTypeCodeLicense class as published (and its short code)
trade / tradesNormalized trade (primary) and all trades the license covers
tradeBasislicense when the trade comes from the license class; business name when it was inferred from the business name (Oregon CCB specialty contractors only)
specialtiesPublished specialty descriptions (WA, CT)
businessName / dbaNameLicensed business and DBA name where published
personNameIndividual licensee, principal or responsible managing individual
holderTypebusiness, sole_proprietor or individual
entityTypeBusiness entity type where published (WA, CT)
isContractorLicenseTrue for business or contractor-level licenses, false for journeyman, apprentice and technician licenses
statusStatus as published (Texas publishes none, so it is null there)
isActiveStatus is active and the expiration date has not passed
issueDate / effectiveDate / expirationDateISO dates where published
daysToExpiration / isExpiringSoonDays until expiry and whether that is inside your window (default 60 days)
address, city, addressState, zip, countyAddress of record as published
phoneBusiness phone, only where the agency publishes one as the business contact (WA, TX business phone, OR CCB)
verifyUrlPer-record official verification page (Colorado)
officialLookupUrlThe agency's public license lookup page
sourceRecordUrlAPI link to this record in the official dataset
sourceDatasetDataset page on the state portal
sourceIdInternal source id (for example OR-CCB)
detailsSource-specific extras: WA UBI number, OR CCB bonds and insurance, CO renewal date and discipline fields
retrievedAtWhen this run read the record

Verify mode adds input, found, matchType, matchCount, statesSearched and otherMatches.

Sample output

Real rows from a local run on 2026-10-13 (input {"mode":"search","contractorsOnly":true,"maxResults":42}), shortened to the main columns:

statelicenseNumberlicenseTypetradebusinessNamecityexpirationDatephone
WA100PLRL754Q5CONSTRUCTION CONTRACTORgeneral100PLUS REMODELING LLCSEATTLE2028-01-13425-229-9790
WA100PRPD823ORCONSTRUCTION CONTRACTORcarpentry_drywall100 PROOF DRYWALL LLCSOUTHWORTH2028-09-19360-317-3229
TX1000Appliance Installation ContractorapplianceABNATION INCAUSTIN2027-03-11281-870-4705
CT50.000122Lead Abatement Contractorasbestos_leadKRONENBERGER & SONS RESTORATION, LLC.MIDDLETOWN2027-07-31
CO100003Electrical ContractorelectricalHeadley Electric, LLCCanon City2029-09-30
OR100260Residential Specialty ContractorpaintingTHE FOXGLOVED PAINTERS & DESIGNERS INCPORTLAND2027-05-14503-255-2327
OR10-102PBPB-Plumbing ContractorplumbingJOE PISCOPO PLUMBING LLCCOTTAGE GROVE2029-07-01
DEHL-0000006Master HVACR Restrictedhvac(person) BRIAN SCHURMANHarrington2028-10-31

One full record (Oregon CCB, including bond and insurance details):

{
"state": "OR",
"source": "Oregon Construction Contractors Board (CCB)",
"licenseNumber": "100215",
"licenseType": "Residential General Contractor",
"licenseTypeCode": "RGC",
"trade": "general",
"trades": ["general"],
"tradeBasis": "license",
"businessName": "BRUCE HUIE",
"personName": "BRUCE HUIE",
"holderType": "business",
"isContractorLicense": true,
"status": "ACTIVE",
"isActive": true,
"issueDate": "1994-06-20",
"expirationDate": "2028-02-06",
"daysToExpiration": 481,
"isExpiringSoon": false,
"address": "PO BOX 543",
"city": "BROOKINGS",
"addressState": "OR",
"zip": "97415",
"county": "Curry",
"phone": "541-215-0829",
"officialLookupUrl": "https://search.ccb.state.or.us/search/",
"sourceRecordUrl": "https://data.oregon.gov/resource/g77e-6bhs.json?license_number=100215",
"sourceDataset": "https://data.oregon.gov/d/g77e-6bhs",
"details": {
"exempt": "Exempt",
"bonds": [{ "licenseClass": "RGC", "company": "WESTERN SURETY COMPANY", "amount": 25000, "expires": "2028-02-06" }],
"insuranceCompany": "SCOTTSDALE INSURANCE CO",
"insuranceAmount": 1000000,
"insuranceExpires": "2027-08-25"
}
}

A verify row from the same day (input Sechler Electric Co., Inc.) came back with found: true, matchType: "exactName", Colorado license 100, Electrical Contractor, status Active, first issued 1965-07-15, expiring 2029-09-30, plus the official verifyUrl.

Input options and examples

OptionDefaultNotes
modesearchsearch, verify or new_licenses
statesall sixWA, TX, CT, CO, OR, DE
tradenoneOne of 28 normalized trades. States that cannot express the trade are skipped and listed in the run summary
city, zip, countynoneCity is an exact, case-insensitive match. ZIP accepts a prefix. County works only in Texas and Oregon
businessName, personNamenoneOne keyword per line; every word of a keyword must appear (any order)
licenseNumbernoneExact number; Colorado also accepts EC.100836 style
activeOnlytrueActive status and not expired
contractorsOnlyfalseDrop journeyman, apprentice and technician licenses
daysBack30new_licenses window
expiringWithinDays60Window for isExpiringSoon
onlyExpiringSoonfalseKeep only licenses expiring inside the window
verifyList, verifyByempty, autoVerify mode inputs
maxResults100Split fairly across states first, then topped up from states with more matches

Electrical contractors in Harris County, Texas:

{ "states": ["TX"], "trade": "electrical", "county": "Harris", "contractorsOnly": true, "maxResults": 500 }

HVAC licenses expiring in the next 30 days in every state (renewal, bonding and insurance outreach):

{ "trade": "hvac", "onlyExpiringSoon": true, "expiringWithinDays": 30, "maxResults": 1000 }

New contractor licenses in Connecticut, Colorado and Oregon in the last 7 days:

{ "mode": "new_licenses", "states": ["CT", "CO", "OR"], "daysBack": 7, "contractorsOnly": true, "maxResults": 500 }

Verify a vendor list:

{ "mode": "verify", "verifyList": ["WA:04CONCL862CR", "CT:50.000105", "TX:100", "Sechler Electric Co., Inc."] }

Find a contractor by name across all states:

{ "businessName": ["summit roofing"], "activeOnly": false, "maxResults": 50 }

Pricing

Pay per event, no subscription:

  • apify-actor-start: $0.00005 per run.
  • license-record: $0.002 per license record delivered, which is $2 per 1,000 records.

In verify mode only rows that found a license are charged; "not found" rows are free. The actor stops cleanly when your run reaches the maximum cost you set in the run options and says so in the log and status line. Apify's free plan credit is enough for a first test. Apify platform usage is included in the event price.

How to run

Apify Console

Fill the form, click Start, then open the Overview table or export the dataset. The run summary (per-state counts, skipped states with the reason, warnings) is saved as the OUTPUT record in the key-value store.

API

curl -X POST "https://api.apify.com/v2/acts/transparent_meteorite~contractor-license-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"states":["WA","OR"],"trade":"roofing","maxResults":100}'

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('transparent_meteorite/contractor-license-lookup').call({ trade: 'plumbing', states: ['CO'], contractorsOnly: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("transparent_meteorite/contractor-license-lookup").call(run_input={"mode": "new_licenses", "daysBack": 7})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Schedule

Create a schedule in Apify Console (for example every Monday at 07:00) with mode: new_licenses and daysBack: 7 to get a weekly list of new licenses, or onlyExpiringSoon: true to get a monthly renewal list.

n8n, Make, Zapier and MCP

  • n8n: use the Apify node, operation "Run actor and get dataset", actor transparent_meteorite/contractor-license-lookup.
  • Make: Apify module "Run an Actor", then "Get Dataset Items".
  • Zapier: Apify app, action "Run Actor", then use the dataset items in the next step (Google Sheets, HubSpot, Slack).
  • AI agents (MCP): add the Apify MCP server (https://mcp.apify.com) with this actor enabled, then ask your assistant, for example, "verify Washington contractor license 04CONCL862CR".

Limits and honest caveats

  • Six states only. See the coverage table. If a state is not listed, this actor does not return it.
  • Each state publishes different fields. Texas publishes no status column, so status is null and isActive is based on the expiration date. Texas A/C contractor and technician rows carry no address or phone in the dataset. Colorado and Delaware publish city and ZIP but no street. Delaware lists individual licensees only, so business-name searches skip Delaware.
  • Oregon publishes active licenses only. With activeOnly: false, Oregon still returns only active licenses.
  • Washington new_licenses uses the effective date of the current license term, so renewals appear next to brand-new licenses. Use effectiveDate to judge.
  • Texas and Oregon BCD publish no issue date, so they are skipped in new_licenses mode (the summary says so).
  • Oregon CCB specialty contractors have no trade in their license class. For trade searches the actor also matches business-name words (for example "ROOF" for roofing) and marks those rows tradeBasis: "business name". Treat them as likely, not certain.
  • Name search is word-based. Every word of your keyword must appear somewhere in the name. Abbreviations differ by state ("CO" vs "COMPANY").
  • Phone numbers: only business phones the agency publishes as the license contact. Texas owner_telephone and Texas mailing addresses are never output, and no emails are output from any state.
  • Address privacy rule: for individual non-contractor licenses (journeyman, apprentice, technician) the street line is dropped and only city, state and ZIP are kept, because these are often home addresses. Business and contractor-of-record addresses are returned as published.
  • Freshness depends on the agency. The actor reads the live dataset at run time; it cannot be fresher than the agency's last update.
  • A dataset is not the legal record. For a decision that matters (hiring, permitting, payment), confirm on the agency lookup page linked in officialLookupUrl or verifyUrl.

Run in 30 seconds

  1. Open the Actor in Apify Console and click Try for free (or Start if you already have an account).
  2. Open the Input tab, switch to JSON, and paste the example below. It is small on purpose, so the first run is quick and cheap.
  3. Click Start. Most small runs finish in well under two minutes.
  4. Open the Output tab to read the Overview table, or use Export to download JSON, CSV or Excel.
{
"mode": "search",
"states": [
"WA"
],
"trade": "roofing",
"city": "Seattle",
"maxResults": 10
}

Once the sample looks right, replace the example values with your own list and raise the limits.

Example API call

Start a search from code or with curl. Replace the placeholder token and username.

from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("YOUR_USERNAME/contractor-license-lookup").call(run_input={"mode": "search", "states": ["WA"], "trade": "roofing", "city": "Seattle", "maxResults": 10})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~contractor-license-lookup/runs?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "search", "states": ["WA"], "trade": "roofing", "city": "Seattle", "maxResults": 10}'

FAQ

Is this data legal to use? These are public records that the agencies publish as open data for reuse. You are responsible for how you use them, including marketing rules such as the TCPA, CAN-SPAM and state telemarketing laws.

How fresh is it? As fresh as the agency's dataset. Washington updates three times a day; Connecticut, Colorado, Oregon CCB and Delaware daily; Texas and Oregon BCD periodically.

Why did a state return nothing? It was probably skipped because it cannot serve a filter (for example roofing in Texas, county in Washington). The OUTPUT record lists every skipped source with the reason.

Can I get every license in a state? Yes. Set the state, leave the filters empty and raise maxResults. Large pulls are paged 1,000 rows at a time.

How fast is it? Searches typically return in seconds to a minute. Verify checks every selected state per item, so it takes a few seconds per item; add a state prefix (TX:12345) to make it faster.

Do you have California or Florida? Not today. Neither publishes a bulk open dataset that this actor can read.

Troubleshooting

  • 0 results: remove filters one at a time (city spelling must match the agency's, for example SEATTLE), or set activeOnly to false.
  • Fewer results than maxResults: that is everything that matched. Check perSource and filteredOut in OUTPUT.
  • A state shows a warning: the state portal returned an error after retries. The other states still deliver. Run again later.
  • Verify says not found but the license exists: the license may be outside the trades this actor covers (for example a Texas barber license), or the name is written differently. Try the license number, or verifyBy: "name".
  • Run stopped early: you reached the maximum cost per run. Raise it in the run options.

Terms and responsible use

The data comes from public government datasets. This actor does not log in anywhere, does not bypass any access control and does not scrape lookup pages. It keeps requests serial and spaced out to respect the portals. Use the output lawfully: honor do-not-call and opt-out requests, do not use it to harass or discriminate, and verify a license on the official page before relying on it for a legal or financial decision. This actor is not affiliated with or endorsed by any state agency.

Changelog

  • 0.1 (2026-10-13): first release. Seven official sources in six states, search, verify and new_licenses modes, 28 normalized trades, expiring-soon flags, Oregon bond and insurance details, Colorado verification links.

Support

Thanks for trying Contractor License Lookup. If a field is wrong, a state changed its dataset, or you need another state or field, open an issue on the actor's Issues tab with the run URL and we will reply there.