Use case
Build a King County Active Contractor List
Pull every actively registered Washington contractor in King County from L&I's open data - registration number, business name, city and status in one export.
Say you run operations for a building-materials wholesaler with a few thousand trade accounts across the Puget Sound region. The account master has drifted the way they all do: the same contractor opened twice under two spellings, a dozen accounts on credit terms whose registrations you have not re-checked since they were opened, and no reliable way to tell whether “Cascade Builders” on your ledger is the Cascade Builders that L&I has on file. What you want is not a prospect list — it is a reference copy of the King County registry you can join your own accounts against, and re-join every month.
Washington makes that unusually easy, because every registered contractor comes with a business identifier that other state systems use too.
The manual way, and what it costs
L&I’s “Verify a Contractor” lookup is the right tool for one account. If a credit application landed this morning and you want to know whether that registration is real and active, go and type it in — free, official, thirty seconds, and no export beats it for a single check.
The full registration file is also published as open data on data.wa.gov, and you can filter and download it there. The catch is the same one Connecticut has: the dataset has no county column. It has a ZIP. So “King County” is a join you supply — a WA ZIP-to-county table, matched against a registry of well over a hundred thousand rows, before you can even start on the reconciliation you actually wanted to do. Once, that is a morning’s work and a perfectly reasonable use of a morning. Monthly, against a file that changes every business day, it is a job.
The faster way
Washington Contractor Directory & Leads Scraper (L&I) does the same search once and hands back every row at once.
{
"county": "King",
"statusFilter": "ACTIVE",
"maxResults": 500
}
statusFilter: "ACTIVE" is applied at the source, so suspended and expired registrations are never
downloaded — for a reconciliation pass that is what you want, because the question is “who is
currently good to trade with”. Set it to ALL when you deliberately want the history, for example
when an old account’s registration has gone quiet and you need to know whether it expired or was
suspended. county: "King" is derived client-side from each row’s ZIP, which has a consequence
worth knowing: the run pages the entire registry looking for King County ZIPs regardless of how
small your cap is. maxResults counts matched rows and stops the run when it hits them, so
500 is a fast sample of the county rather than a curated best-500; a full King County pull is a
much longer run, and worth scheduling rather than watching.
What comes back
{
"county": "King",
"business_name": "SEATTLE ROOFING LLC",
"license_number": "SEATTRL123AA",
"license_type": "CONSTRUCTION CONTRACTOR",
"status": "ACTIVE",
"address": "1234 Pike St",
"address2": null,
"city": "SEATTLE",
"state_code": "WA",
"zip_code": "98101",
"phone": "2065551234",
"license_effective_date": "2020-01-15T00:00:00.000",
"license_expiration_date": "2026-01-15T00:00:00.000",
"business_type": "Limited Liability Company",
"specialty": "GENERAL",
"specialty_2": null,
"ubi": "601234567",
"primary_principal": "SMITH, JOHN A.",
"source_url": "https://data.wa.gov/Business/Washington-Contractors/m8qx-ubtq"
}
| Field | Example value | Meaning |
|---|---|---|
county | King | WA county derived from the contractor’s ZIP code (null for out-of-state addresses or unrecognised ZIPs) |
business_name | SEATTLE ROOFING LLC | Licensed business name |
license_number | SEATTRL123AA | L&I contractor registration number |
license_type | CONSTRUCTION CONTRACTOR | License type description (e.g. CONSTRUCTION CONTRACTOR, ELECTRICAL CONTRACTOR) |
status | ACTIVE | License status (e.g. ACTIVE, EXPIRED, SUSPENDED) |
address | 1234 Pike St | Business street address line 1 |
ubi is the field that solves the reconciliation problem. The Unified Business Identifier is
Washington’s cross-agency business number, so it is the join key that lets an L&I registration line
up with records your finance team may already hold, and it does not care how the trading name is
spelled on your ledger. license_number is the identity within L&I itself and the right primary
key for the import. primary_principal and business_type are the two fields a credit file
actually wants — knowing you are extending terms to a sole proprietor rather than a corporation is
material, and knowing the name of the principal is what makes a personal guarantee possible.
specialty and specialty_2 tell you what the registration actually covers, which is the sanity
check on whether the account is buying the right things from you.
What you’d do with it
Load the export into a staging table and join it to your account master on ubi first, then on
license_number, then on a normalised business_name as a last resort — the three passes in that
order will collapse most of the duplicate accounts by themselves. Flag anything on credit terms
that does not appear in the ACTIVE export at all: those are the accounts to re-check before the
next order ships. Re-run monthly and store the run date with the rows, so a year from now it is
clear what was true when you approved something.
Worth knowing
County is derived from ZIP, not published. L&I’s dataset has no county field. The actor maps
each row’s ZIP against a static Washington ZIP-to-county table, so out-of-state contractors and
uncommon ZIPs come back with county: null and never match a county filter. A King County export
is “everyone whose registered ZIP we can place in King County” — an out-of-state firm working
Seattle is not in it.
No bond, and no workers’ comp. L&I publishes those in separate datasets, and this actor does not join them. If your credit decision depends on the bond, that is a second lookup you own.
It is a snapshot on the state’s schedule. The open-data file refreshes on business days, so a
registration suspended this morning can still read ACTIVE in today’s run — which is exactly why
the single-record verification below still matters at the moment of a decision.
A throttle fails the run rather than retrying it. This actor calls the open-data API without an app token and without backoff, so if the state throttles the request the run errors out instead of waiting and retrying. It is not subtle and it is not silent — you will see a failed run, not a short dataset. Re-run it.
Run it yourself: How to run Washington Contractor Directory & Leads Scraper (L&I) walks the whole thing step by step.
At the moment of decision: Search Washington Contractors by Business Name checks one registration against the live registry rather than a snapshot — Washington Contractor License Lookup & Verify (L&I) is the actor to wire into an onboarding step for that.
Last updated 2026-07-22