← Use cases

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

The public search form on WA L&I (Socrata)
WA L&I (Socrata) — the official search. One record at a time.

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"
}
FieldExample valueMeaning
countyKingWA county derived from the contractor’s ZIP code (null for out-of-state addresses or unrecognised ZIPs)
business_nameSEATTLE ROOFING LLCLicensed business name
license_numberSEATTRL123AAL&I contractor registration number
license_typeCONSTRUCTION CONTRACTORLicense type description (e.g. CONSTRUCTION CONTRACTOR, ELECTRICAL CONTRACTOR)
statusACTIVELicense status (e.g. ACTIVE, EXPIRED, SUSPENDED)
address1234 Pike StBusiness 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