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 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"
}
| Field | Example value | Meaning |
|---|---|---|
state | TN | Always ‘TN’ for this actor |
license_number | 56787 | TN DOCI contractor license number (numeric) |
business_name | JOHNSON PLUMBING | Licensed business or individual name |
license_type | Contractor | License classification (e.g. Contractor) |
status | Expired | License status (e.g. Active, Expired, Revoked) |
expiration_date | 03/31/2016 | License 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