Contractor License Leads — US Contractors avatar

Contractor License Leads — US Contractors

Pricing

from $80.00 / 1,000 lead returneds

Go to Apify Store
Contractor License Leads — US Contractors

Contractor License Leads — US Contractors

Find licensed US contractors with license status, trade, company, location, contact, and public registry data for compliance and sales research.

Pricing

from $80.00 / 1,000 lead returneds

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Contractor License Leads — Licensed US Contractors

Free-plan limit: Apify free-plan users receive at most 5 delivered records per run. Paid users may use the Actor’s configured result limit.

Extract licensed US contractor records from official state open-data sources and convert them into structured construction B2B lead data. Each run returns lead records with business name, principal, phone, address, specialty/trade, license type, license status, and license dates, filterable by state, city, and trade specialty (roofing, electrical, plumbing, HVAC, general contractors).

Built for building-supply, SaaS and B2B sales teams targeting active contractors, contractor insurance & bonding lead generation, construction field-service software customer acquisition, fuel & fleet services targeting contractor fleets, and recruiting/staffing for construction trades.

Supported states

StateSourceMethod
WAWashington L&I "Verify a Contractor"Playwright (JS-rendered search)
CACSLB CheckLicenseIIPlaywright (ZIP-prefix search + detail pages)
TXTDLR LicenseSearchCheerio (classic ASP form POST)

More states are added over time as adapters are built. Pass an empty states array to scrape all supported states in one paid or local run. Hosted free-plan runs process only the first selected state (or the first supported state when none is selected) and stop after at most 5 delivered records total.

Use cases

  • Building-material and equipment suppliers targeting licensed contractors.
  • Contractor insurance and bonding lead generation.
  • Construction and field-service software customer acquisition.
  • Fuel and fleet services targeting contractor fleets.
  • Recruiting and staffing for construction trades.
  • B2B sales outreach to licensed contractors by specialty and location.

Input parameters

FieldTypeDefaultDescription
statesarray["WA"]2-letter state codes. Empty = all supported states on paid/local runs; free-plan hosted runs process one state only.
active_onlybooleantrueOnly currently active contractor licenses.
citiesarray[]Optional city filter (case-insensitive).
specialtiesarray[]Trade keyword filter (roofing, electrical, plumbing, HVAC, general).
max_per_stateinteger1000Max leads per state. Free-plan hosted runs clamp to 5 records total across the single processed state.
include_rawbooleanfalseAttach the raw source record to each lead.

Output fields

FieldTypeDescription
business_namestringLicensed business or contractor name.
business_typestring|nullEntity type (LLC, Corporation, etc.) when published.
principal_namestring|nullQualifying individual / owner, when published.
phonestring|nullBusiness phone number.
addressstring|nullFull street address.
citystring|nullCity parsed from the source address.
regionstring|nullCounty or region, when available.
statestring2-letter US state code.
zipstring|nullZIP code parsed from the source address.
specialtystring|nullTrade, classification, or specialty description.
license_numberstringOfficial state license number.
license_typestring|nullLicense class or program label.
statusstringNormalized: Active, Expired, Suspended, Revoked, Inactive, Canceled.
effective_datestring|nullISO 8601 (YYYY-MM-DD).
expiration_datestring|nullISO 8601 (YYYY-MM-DD).
detected_atstringISO 8601 scrape timestamp.
source_urlstringState authority page or API endpoint.
rawobject|nullOriginal source record (only when include_raw is enabled).

Pricing

This Actor uses pay-per-event pricing. These are the current Apify Store event prices:

EventPrice (USD)When it is charged
lead-returned$0.1Lead returned — Charged per lead record returned to the dataset.
actor-start$0.2Actor Start — Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one).

Apify platform usage for this Actor run is included alongside the event prices above; no separate per-run platform-usage fee is passed to users.

This covers Apify platform usage for this Actor run. Other Apify products or usage outside this Actor run may still follow your account plan.

Architecture

Per-state adapter modules each pick the best source for their state (bulk open-data download vs scraping the search UI) and emit normalized LeadRecords via an async generator. The orchestrator applies client-side filters (active_only, cities, specialties), charges one PPE event per surviving record, and pushes to the dataset.

src/
├── main.ts # orchestrator
├── types.ts # shared types (LeadRecord, LeadFilters, StateAdapter)
├── utils.ts # normalize, charge, filter helpers
└── adapters/
├── index.ts # state registry
├── wa.ts # WA L&I (Playwright)
├── ca.ts # CA CSLB (Playwright)
└── tx.ts # TX TDLR (Cheerio)

To add a state, create src/adapters/xx.ts exporting an adapter object and add it to the registry in src/adapters/index.ts.

Example input

Quick test (50 WA leads):

{ "states": ["WA"], "max_per_state": 50 }

HVAC contractors across all supported states:

{ "states": [], "specialties": ["HVAC", "air conditioning"], "active_only": true, "max_per_state": 500 }

Run locally

npm install
npm run dev # or: npm run build && npm start

Deploy

apify login
apify push -f -w 120

First publish gotcha: the first time you publish, Apify returns a store-terms-not-accepted error. Open the Apify Console → your actor → Publication and accept the Store Terms once manually. After that, all future pushes work without this step.