WA Contractor Licenses - Bonds & Insurance Profiles
Pricing
$1.00 / 1,000 wa contractor license records
WA Contractor Licenses - Bonds & Insurance Profiles
Washington contractor licenses (WA L&I register, 160k+ records): construction, electrical, plumbing and elevator contractors. Look up a license number for its complete profile - current bond, liability insurance and principals - or search by name / city / UBI / type.
Pricing
$1.00 / 1,000 wa contractor license records
Rating
0.0
(0)
Developer
Wenhao Yang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
WA Contractor Licenses - Bonds & Insurance Profiles (wa-contractor-licenses)
Pull Washington contractor licenses - the full WA Dept of Labor & Industries contractor register (160,889 records, construction / electrical / plumbing / elevator contractors), free public open data, and go deeper than the license: every contractor joins to their current bond coverage, liability insurance and principals, all in one profile.
Washington requires registered contractors to carry a bond and liability insurance. This is the data that tells you whether a contractor actually has them - and who is behind the license.
Built for general contractors and homeowners vetting a contractor, lead-gen / list-building for anyone selling to construction (insurance, bonding, tools, materials), subcontractor qualification, and background/verification use.
The core tool: a contractor's full profile by license number
Give a license number, get the complete picture assembled from the L&I family - registration + current bond + insurance + principals:
input { "licenseNumber": "ECOSTSC758NN" }general ECOSTSC758NN !ECO STAR C G CONSTRUCTION LLCtype=Construction status=ACTIVE specialty=01 GENERALUBI 605854613 Vancouver WA expires 2027-08-15insurance ACTIVE State National Ins Co policy NXT9PTHTLT-01-GL $1,000,000bond ACTIVE Merchants Bonding Co $30,000 (Until Canceled)principal GUERRERO MARTINEZ, CARLOS I. started 2025-08-15
One run = the whole file on one contractor. A bond listed as Until Canceled is the standing bond; insurance with a coverage amount tells you their liability limit.
What each record has
| Field | Meaning |
|---|---|
recordType | general / insurance / bond / principal / aggregate |
contractorLicenseNumber | The 12-char L&I license number (join key) |
businessName / ubi | Registered company name + WA UBI |
licenseType / licenseTypeCode | Construction / Electrical / Plumbing / Elevator contractor |
status | ACTIVE (75.8k) / EXPIRED / SUSPENDED / RE-LICENSED / OUT OF BUSINESS / |
specialtyCode / specialtyDesc | L&I specialty scope (e.g. 01 GENERAL, CB PAINTING/WALLCOVERING) |
city / state / zip / phone | Registered address + phone |
licenseEffectiveDate / licenseExpirationDate | License term |
insurance* | Insurer, policy no., amount, effective/expiration (insurance rows) |
bond* | Bond firm, amount, effective/expiration, bondIsCurrent (bond rows) |
principalName / principalStartDate | A principal behind the license (principal rows) |
Every row type shares the same key set, so a profile's rows land in one clean dataset.
Typical questions it answers
- Does this contractor carry bond + insurance? -
licenseNumber-> the profile. The fastest due-diligence check before hiring or writing a subcontract. - What's a contractor's liability limit? - same profile, the
insurancerow'sinsuranceAmount. - Who is behind this license? - the
principalrows (principalName+ start date). - Who's registered in an area? -
city=Seattle(orbusinessName, substring). A lead list of licensed contractors. - What specialty is a contractor licensed for? - every row carries
specialtyCode/specialtyDesc(L&I specialty scope). Specialty is returned, not a filter input, so narrow the list withcity/licenseType/businessNameand read it per row. - How many active vs lapsed contractors statewide? -
aggregate=true,groupBy=status.
Inputs
| Input | What it does |
|---|---|
licenseNumber | Exact 12-char license number -> full profile (the core tool). Any status license can be profiled; the sub-table rows shown are the ACTIVE bond/insurance on file |
businessName | Company name substring (search mode) |
ubi | Exact WA UBI number (search mode) |
city | City substring (search mode) |
licenseType | Construction Contractor / Electrical / Plumbing / Elevator (search + aggregate) |
status | Default Active (the ~75.8k live slice); all / specific status for the full register |
aggregate / groupBy | One row per license type or status instead of individual records |
maxResults | Cap records pushed (default 50) |
mode | profile / search / aggregate - auto-routed from the other inputs; rarely needed |
Empty input returns a safe statewide summary: the count of active licenses by license type (also the daily-quality-test default).
Example inputs
A contractor's full profile - the exact 12-char license number returns the registration plus its current bond, insurance and principals.
{ "licenseNumber": "ECOSTSC758NN" }
Electricians in Seattle - city is a substring; licenseType picks the lane.
{ "city": "Seattle", "licenseType": "Electrical Contractor", "maxResults": 10 }
A company by name - businessName is a case-insensitive substring.
{ "businessName": "Merit", "maxResults": 10 }
The statewide type mix - aggregate returns one row per group instead of individual licenses; status=all opens it to the full register.
{ "aggregate": true, "groupBy": "licenseType", "status": "all" }
Low cost
From $0.001 per record - and each record is metered individually.
A contractor's "license" is actually scattered across four separate state tables (the registration, the insurance filings, the bonds, the named principals) - we rejoin them on the exact 12-digit license number into a single profile, then judge which bond is current rather than trusting the date column (WA mixes ISO dates, MM/DD/YYYY and a literal "Until Canceled" in the same field). You query one contractor file that already carries the current bond and insurance; the four-table reassembly and bond-date judgment stay on our side. Each profile caps at 3 insurance, 4 bonds and 8 principals - most recent first; a license can carry more history than the cap shows.
Example output
One license-type rollup - aggregate=true (the default groupBy=licenseType over the active slice) returns rows like this one:
{"platform": "wa-contractor-licenses","source": "wa-li-contractor-license","recordType": "aggregate","contractorLicenseNumber": "","businessName": "","licenseTypeCode": "","licenseType": "CONSTRUCTION CONTRACTOR","status": "","ubi": "","specialtyCode": "","specialtyDesc": "","primaryPrincipalName": "","city": "","state": "","zip": "","phone": "","licenseEffectiveDate": "","licenseExpirationDate": "","insuranceStatus": "","insuranceCompany": "","insurancePolicyNo": "","insuranceAmount": 0,"insuranceEffectiveDate": "","insuranceExpirationDate": "","bondStatus": "","bondFirmName": "","bondAccountId": "","bondAmount": 0,"bondEffectiveDate": "","bondExpirationDate": "","bondIsCurrent": "","principalName": "","principalStartDate": "","groupCount": 68105,"groupPct": 89.7}
groupBy=licenseType, status=all - the full register by license type (groupCount per group):
CONSTRUCTION CONTRACTOR 148.5kELECTRICAL CONTRACTOR 9.2kPLUMBING CONTRACTOR 3.1kELEVATOR CONTRACTOR 121
Data source & freshness
- Source: data.wa.gov - WA L&I Contractor License family (
m8qx-ubtqGeneral +ciwg-agsxInsurance +bzff-4fmtBond +4xk5-x9j6Principal, Socrata SODA API, free public, no login). Same register as L&I's public license lookup. - Coverage: 160,889 licenses - 148.5k Construction, 9.2k Electrical, 3.1k Plumbing, 121 Elevator; ~75.8k currently ACTIVE. Insurance on file 76.4k active certificates; 166k active bond rows (176.8k total bond history).
- Update cadence: L&I maintains the register live; the Socrata tables refresh continuously.