TN DOCI
Tennessee Contractor License Lookup & Verify (TN DOCI)
Verify any Tennessee contractor by license number or name, or export the whole TN DOCI contractor roster filtered by status, license type, county and city.
Verification
Output fields
Authoritative field set from the dataset schema.
| Field | Type |
|---|---|
state | string|null |
license_number | string|null |
business_name | string|null |
person_name | string|null |
license_type | string|null |
status | string|null |
issue_date | string|null |
expiration_date | string|null |
city | string|null |
county | string|null |
address | string|null |
zip_code | string|null |
phone | string|null |
bond_amount | string|null |
bond_company | string|null |
insurance_company | string|null |
matched_by | string|null |
source_url | string|null |
Sample row
{
"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"
} Inputs
| Field | Type | Req | Default | Description |
|---|---|---|---|---|
query | string | no | "Johnson Construction" | A TN contractor license number (numeric, e.g. '56787') OR a business/person name. A numeric query is looked up by license number; anything else is searched against the licensee/business name index. Leave this and 'Search query (batch)' empty to export the statewide roster instead, narrowed by the status / licence type / county / city filters below. |
queries | array | no | ["Johnson Construction"] | Look up many in ONE run instead of starting a run per lookup. Takes the same values as 'Search query'. Combined with 'Search query' if you fill both, and duplicates are removed. Billing is unchanged: you are charged per record returned, not per entry submitted. |
board | string | no | "Contractors and Ltd Licensed Plumbers" | The TN DOCI board to search. Defaults to 'Contractors and Ltd Licensed Plumbers' (the main contractor board), which is also used when this is left blank. |
status | string | no | "active" | Used only when no search query is given (statewide export). One of TN DOCI's statuses: Active, Expired, Applicant, Application Expired, Application Denied, Application Withdrawn, Closed, Retired, Revoked, Failure to Renew, Suspended — or 'all'. Defaults to active. An unrecognised value is ignored with a log line; if nothing you gave is recognised, the run returns a free row saying so instead of the whole state. |
statuses | array | no | [] | Several statuses in ONE statewide run, e.g. Active and Expired. Combined with 'Licence status' if you fill both. |
licenseType | string | no | — | Used only in statewide mode: Contractor, Limited Licensed Plumbers (or 'plumber'), or Pre-Licensing Course Provider. Leave empty for all types. |
licenseTypes | array | no | [] | Several licence types in ONE statewide run. Combined with 'Licence type' if you fill both. |
county | string | no | — | Used only in statewide mode: a Tennessee county, e.g. 'Davidson' or 'Knox County' (any of the 95). Sent to TN DOCI as its own county filter, limited to Tennessee holders. |
counties | array | no | [] | Several Tennessee counties in ONE statewide run. Combined with 'County' if you fill both. |
city | string | no | — | Used only in statewide mode: the licensee's city, exact match ignoring case and punctuation, e.g. 'Nashville' (does not also match 'Johnson City' for 'City'). |
cities | array | no | [] | Several cities in ONE statewide run. Combined with 'City' if you fill both. |
maxResults | integer | no | — | With a search query: cap PER ENTRY, not per run (empty = 50), so a batch cannot silently return only the first rows overall. In statewide mode (no query): cap for the WHOLE run, a spend control (empty = 500); the active contractor board is about 24,000 records and the whole board about 72,000, so 100000 returns everything that matches. The run log states how many matched when the cap cuts it short. |
proxyConfiguration | object | no | {"useApifyProxy":false} | Optional. The TN portal is usually reachable directly, but its edge returns 403 to some datacenter IPs. If a run returns a 'TN portal unavailable' row, enable Apify Proxy with the RESIDENTIAL group. |
Pricing
Pay per result (dataset-item) — no charge for empty runs.
Example: 100 verified license records at $0.004/result ≈ $0.40.
FAQ
Where does the data come from?
The official Tennessee Department of Commerce and Insurance public licensee registry, via the Tyler entellitrak REST API.
What can I search by?
A TN DOCI license number (numeric, e.g. 56787) or a business/licensee name. Both return matching licenses, deduped by license number. Leave the search empty to export the roster instead (next question).
Can I export every contractor in Tennessee, or in one county?
Yes. With no search query the actor exports the board's roster, filtered by status (default Active, or 'all'), license type (Contractor, Limited Licensed Plumbers, Pre-Licensing Course Provider), Tennessee county and city. Each filter takes one value or a list. On 2026-10-07 the Contractors and Ltd Licensed Plumbers board held 72,118 records, 23,955 of them Active; the whole active board took about 2 minutes and the whole board about 6. maxResults caps the whole export (default 500); set 100000 to take everything that matches.
What fields do I get?
License number, business/licensee name, license type, status, expiration date, city, county, and ZIP code.
How am I charged?
Pay-per-result — per license record returned. No charge for searches with no results, or for a row explaining a source problem or an unusable input. At $0.004 per record, a default statewide export of 500 costs $2.00 and the whole active board (23,955 on 2026-10-07) about $95.82.
Is this personal data?
It's public professional-license data (business and license-holder records as TN DOCI publishes them); we add no personal/PII enrichment.
How current is it?
It reflects the live TN DOCI registry at the moment of lookup. The state does not publish an update schedule for the registry, so treat each record as current as of its run.
Can I filter by board or license type?
Yes — the 'board' input defaults to 'Contractors and Ltd Licensed Plumbers' (also used when left blank); set it to another TN DOCI board name to search that board. In a statewide export you can also filter by status, license type, county and city.
Guides & use cases
Related actors