← Use cases

Use case

Search Washington Contractors by Business Name

Look up Washington L&I contractor registrations by business name - registration number, status, effective and expiration dates for every matching record.

Say a bid lands on your desk from a Vancouver outfit and the only identifier on it is the trading name on the letterhead. No registration number, no UBI, just a name — and when you type it into L&I’s verify page you get three registrations back that all look plausible. One is active, one expired two years ago, one belongs to a company with a nearly identical name across the river’s worth of suburbs. Which one is the business that sent you the bid?

That is a name-resolution problem, not a verification problem, and it is the common one. Nobody struggles to check a registration number they already have; the awkward part is going from a name to the record, and telling near-identical records apart before you write one into a contract.

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 page does this job, free, and it is the official record. For one bid, open it and use it. Genuinely — type the name, look at the handful of hits, click the one whose city matches. Five minutes.

It gets tiring in two situations. When the shortlist is long — a common word like construction in the name means clicking into result after result to read the city and principal off each detail page, because the list view does not show enough to choose. And when it repeats: a roster of subs re-checked quarterly is the same clicking again, with no export at the end and nothing to diff against last time.

The honest note, same as the other open-data states: Washington publishes this as an official Socrata API — public, documented, free. Write the SoQL yourself and you pay nobody. The actor sells the query already written and every row in one shape, not access.

The faster way

Washington Contractor License Lookup & Verify (L&I) does the same search once and hands back every row at once.

{
  "query": "construction",
  "maxResults": 50
}

query is a substring match against L&I’s business-name index, so construction returns every registration with that word anywhere in the name — which is the point when you are resolving a name rather than confirming a number. Use the most distinctive fragment of the letterhead, not the whole legal name: eco star finds the record whether or not the licence carries the LLC, the ampersand or the punctuation the letterhead used. The same field is matched exactly against the registration number, so once you have identified the right row you can re-run on its number and get that one row back. maxResults: 50 caps the spend, since you are charged per row returned.

What comes back

{
  "state": "WA",
  "license_number": "ECOSTSC758NN",
  "business_name": "!ECO STAR C G CONSTRUCTION LLC",
  "person_name": "GUERRERO MARTINEZ, CARLOS I.",
  "license_type": "CONSTRUCTION CONTRACTOR",
  "status": "ACTIVE",
  "issue_date": "2025-08-15T00:00:00.000",
  "expiration_date": "2027-08-15T00:00:00.000",
  "city": "VANCOUVER",
  "address": "2420 COLUMBIA HOUSE BLVD #311",
  "zip_code": "98661",
  "phone": "5039573452",
  "matched_by": "business_name",
  "source_url": "https://secure.lni.wa.gov/verify/"
}
FieldExample valueMeaning
stateWAAlways ‘WA’ for this actor
license_numberECOSTSC758NNL&I contractor registration / license number
business_name!ECO STAR C G CONSTRUCTION LLCLicensed business name
person_nameGUERRERO MARTINEZ, CARLOS I.Primary principal / owner name
license_typeCONSTRUCTION CONTRACTORL&I license type (e.g. Construction Contractor)
statusACTIVELicense status (e.g. ACTIVE, EXPIRED, RE-LICENSED)

Four columns do the disambiguation. person_name is L&I’s primary principal — the single most useful field for telling two similar registrations apart, because two companies can share a trading name but rarely a principal. city, address and zip_code place the record: if the bid came from Vancouver and the active registration is in Spokane, you have the wrong company, not a lapsed one. status is a real value published by L&I, so ACTIVE versus EXPIRED is the state’s word rather than your inference. And license_type confirms it is a construction-contractor registration and not some other L&I licence that happens to share the name.

Once the right row is identified, license_number goes into the contract and expiration_date goes in the diary. matched_by reads business_name on every row from a name search and flips to license_number only on an exact number hit — a standing reminder that a name match is a candidate, not a confirmation.

What you’d do with it

Export to CSV and the ambiguous name becomes a two-minute decision: sort the candidates by city, pick the one whose principal and address match the bid, and record the registration number against the vendor so nobody has to resolve that name again. For a whole roster, run the names in a batch and keep the export as your compliance sheet — sorted on expiration_date it doubles as the re-check list, and diffing next quarter’s export against this one surfaces a sub who dropped out of ACTIVE as a change rather than as a surprise.

Worth knowing

No bond, no insurance, no workers’ comp. L&I keeps those in separate datasets and this actor does not join them, so those fields are simply absent from the row. Whatever the registration says, this tells you nothing about whether a sub is bonded or covered — that check is a separate errand.

No county, ever. The Washington feed does not carry one, so location is city, address and zip_code only. If you filter territories by county you will have to derive it.

Only the business name is searchable. The principal’s name is returned but is not an index you can query, and the substring runs against the registered business name — so a licence filed under a DBA you have never seen will not appear. A missing match is not proof anyone is unregistered.

maxResults is the real bound — it previously truncated at 50 regardless of what you asked for. A broad word now returns as many rows as you allow, and you pay per row, so narrow the fragment rather than leaning on the cap. And this is the published snapshot, refreshed on business days — not L&I’s live screen, so for a formal compliance decision, confirm on the board’s own page.


Run it yourself: How to run Washington Contractor License Lookup & Verify (L&I) walks the whole thing step by step.

Last updated 2026-07-22