← Use cases

Use case

Look Up Tennessee Contractors by Name

Search Tennessee's DOCI licence portal by business name across the contractor and plumber boards - licence number, status, classification and expiration in one table.

Say you run vendor onboarding for a property-management group with apartments across Middle and East Tennessee. A regional manager sends over a spreadsheet of thirty trade vendors — company names, phone numbers, nothing else — and asks for the ones cleared to work by the end of the week. Nobody recorded a licence number when these vendors were first engaged, and half the names on the sheet are common enough that “Johnson” turns up in three counties.

The manual way, and what it costs

The public search form on TN DOCI
TN DOCI — the official search. One record at a time.

The state’s licence search is public, fast, and has no CAPTCHA. Type a name, pick the board, read the results. For one vendor, this is the right tool — you’ll have the answer before an actor finishes starting up.

At thirty it turns into data entry. Each name is a search, and a common name is a search plus a disambiguation: which of these three is the one in Knoxville? The portal has no export, so every answer you keep gets retyped into your sheet, and the two fields that decide the outcome — status and expiration — are exactly the two most likely to get transposed. A quarterly re-check makes it a recurring afternoon rather than a one-off one.

The faster way

Tennessee Contractor License Lookup & Verify (TN DOCI) does the same search once and hands back every row at once.

{
  "query": "Johnson Construction",
  "board": "Contractors and Ltd Licensed Plumbers",
  "maxResults": 50
}

A non-numeric query is searched against the licensee/business-name index, so a partial company name is enough — you don’t need the licence number you never wrote down. board is the field that keeps a common name manageable: it defaults to Contractors and Ltd Licensed Plumbers, the main contractor board, so a same-named licensee registered under a different DOCI programme won’t muddy the result. Set it to another board name when your vendor is elsewhere (home-improvement contractors are their own board), or blank it to search across all of them. maxResults: 50 caps what a broad surname can return; rows are deduped by licence number as they come in.

What comes back

{
  "state": "TN",
  "license_number": "56787",
  "business_name": "JOHNSON PLUMBING",
  "person_name": null,
  "license_type": "Contractor",
  "status": "Expired",
  "issue_date": null,
  "expiration_date": "03/31/2016",
  "city": "JOHNSON CITY",
  "county": "Washington",
  "address": null,
  "zip_code": "37605",
  "phone": null,
  "bond_amount": null,
  "bond_company": null,
  "insurance_company": null,
  "matched_by": "business_name",
  "source_url": "https://search.cloud.commerce.tn.gov/search/C49031/detail"
}
FieldExample valueMeaning
stateTNAlways ‘TN’ for this actor
license_number56787TN DOCI contractor license number (numeric)
business_nameJOHNSON PLUMBINGLicensed business or individual name
license_typeContractorLicense classification (e.g. Contractor)
statusExpiredLicense status (e.g. Active, Expired, Revoked)
expiration_date03/31/2016License expiration date

status and expiration_date are the pair the onboarding decision hangs on, and the sample above is the case worth staring at: a licence that expired in 2016 belongs to a vendor who has been invoicing without one for years. city and county are what resolve the ambiguity your spreadsheet created — three Johnsons become one Johnson in Washington County — and license_number is the thing you should have had in the first place: capture it now and next quarter’s check is exact instead of fuzzy.

What you’d do with it

Run the sheet through, join the results back on company name, and keep license_number on the vendor record permanently. Everything with a non-Active status or a past expiration goes on the hold list with the row attached and source_url pointing at the state’s own detail page, so the vendor conversation starts from the registry rather than from your assertion.

Worth knowing

No street address and no phone. This registry doesn’t publish them, so address and phone come back null on every record — city, county and ZIP are as granular as the location gets. The bond and insurance fields are in the schema for consistency across the suite and are null here for the same reason.

The board filter is a real filter. With the default set, a licensee registered under a different DOCI programme is not “missing” — it is out of scope for that run. If a vendor you expect doesn’t appear, blank board and try again before concluding they are unlicensed.

A portal blip returns fewer rows, not an error. If the state’s search API goes unreachable mid-run, the actor degrades to a partial result rather than failing. That’s deliberate, and it means a suspiciously short result set is worth re-running before you treat it as an answer.

issue_date is not populated from this search, so you get expiry without a start date.


Run it yourself: How to run Tennessee Contractor License Lookup & Verify (TN DOCI) walks the whole thing step by step.

Doing the same name-first sweep in a neighbouring state, Find South Carolina Contractors by Name covers SC LLR. When the vendor turns out to be a North Carolina general contractor, North Carolina Contractor License Lookup & Verify (NCLBGC) is the board that holds them.

Last updated 2026-07-22