Tennessee License Scraper: Contractors & Pro Licenses avatar

Tennessee License Scraper: Contractors & Pro Licenses

Pricing

from $8.32 / 1,000 results

Go to Apify Store
Tennessee License Scraper: Contractors & Pro Licenses

Tennessee License Scraper: Contractors & Pro Licenses

Search Tennessee's official license verification for contractors, real estate, cosmetology, security, engineers and 40+ boards. Get name, license number, type, status, expiration, city and county. Filter by board, license type, status, county and state.

Pricing

from $8.32 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Tennessee License Scraper

Tennessee License Scraper

Here is one real result, with every field the actor returns:

{
"licenseNumber": "69162",
"name": "HANS & HEATHER BEAN DBA B & B ROOFING & REMODLING",
"entityType": "Organization",
"profession": "Contractor",
"licenseType": "Contractor",
"board": "Contractors and Ltd Licensed Plumbers",
"status": "Expired",
"expirationDate": "10/31/2025",
"city": "COOKEVILLE",
"state": "Tennessee",
"zip": "38506",
"county": "Putnam",
"addressLine": null,
"phone": null,
"email": null,
"originalLicenseDate": "10/06/2015",
"alternateNames": "B & B ROOFING AND REMODELING",
"classifications": "BC: BC-21",
"monetaryLimit": "Monetary Limit - Value: $500,000.00",
"recordId": "C67435",
"detailUrl": "https://access.cloud.commerce.tn.gov/portal/search/C67435/detail",
"hasDetails": true,
"searchQuery": "roofing",
"source": "Tennessee Dept of Commerce & Insurance (access.cloud.commerce.tn.gov)",
"observedAt": "2026-08-11T22:08:47.573Z"
}

Every value above is the exact record from a live run. Fields are null when the Tennessee portal does not publish that value for the licensee.

The most complete Tennessee license scraper available. It searches the state's licensing portal across every regulating board, returns every field a license record exposes (including the full mailing address, county, original licensure date, alternate/DBA names, license classifications and monetary limits), and gives you seven filters (board, license type, status, entity type, county, state, plus multi-term search) to target exactly the licensees you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor searches the Tennessee Department of Commerce & Insurance licensing portal for each term you provide, combines and de-duplicates the results across searches, applies your filters, and writes one normalized record per license to the run's dataset. With includeDetails on (the default) it opens each license's detail page to add the full mailing address, county, original licensure date, alternate/DBA names, license classifications and any monetary or aggregate limits. Missing source values are returned as null rather than invented. A term can be a licensee or business name, a city, a county, or a trade keyword.

Coverage spans every board on the portal (contractors, cosmetology, real estate, architects and engineers, and more), including many out-of-state licensees. Requests default to Apify Residential proxy in the US for reliable access.

Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 8 roofing and cosmetology licenses with full details.

{
"searchQueries": ["roofing", "cosmetology"],
"maxLicenses": 8,
"includeDetails": true,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}

Every input field is optional. Each term in searchQueries runs a separate search; results are merged and de-duplicated.

Input reference

FieldTypeRequiredDefaultDescription
searchQueriesstring[]no["roofing"]One or more search terms: a licensee or business name, a city, a county, or a trade keyword. Each runs a separate search; results are combined and de-duplicated.
boardsstring[]no(any)Limit to these regulating boards, using exact portal labels, for example Contractors and Ltd Licensed Plumbers, Real Estate, Cosmetology.
licenseTypesstring[]no(any)Limit to these license types, for example Contractor, Home Improvement Contractors, Cosmetologist.
statusesstring[]no(any)Limit to these statuses, for example Active, Expired, Closed, Inactive, Current.
entityTypesstring[]no(any)Limit to Individual and/or Organization.
countiesstring[]no(any)Limit to these Tennessee counties, for example Davidson, Shelby, Knox.
statesstring[]no(any)Limit by the licensee's state of record, for example Tennessee, Georgia. Many out-of-state licensees are included.
maxLicensesintegerno50Maximum licenses to collect across all searches. Range 1 to 1000000.
includeDetailsbooleannotrueEnrich each license with its full detail record (address, county, dates, alternate names, classifications, limits). Off returns the faster listing-only view.
proxyobjectnoApify Residential USProxy used for requests. Residential US is recommended for reliable access.

Filters combine with logical AND and are applied to the collected licenses.

Output reference

One dataset item per license. Types: string, boolean, or null when the source value is absent.

FieldTypeDescription
licenseNumberstringLicense number as issued by the board.
namestringLicensee or business name.
entityTypestringIndividual or Organization.
professionstringProfession of the licensee.
licenseTypestringSpecific license type.
boardstringRegulating board that issued the license.
statusstringLicense status, for example Active, Expired, Closed.
expirationDatestringLicense expiration date (MM/DD/YYYY).
citystringCity on the license record.
statestringState of record.
zipstringZIP code on the license record.
countystringTennessee county (from the detail record).
addressLinestringFull mailing street address (from the detail record), or null.
phonestringPhone number when published, or null.
emailstringEmail when published, or null.
originalLicenseDatestringDate the license was first issued (MM/DD/YYYY).
alternateNamesstringAlternate or DBA names, or null.
classificationsstringLicense classifications, for example BC: BC-21.
monetaryLimitstringMonetary or aggregate limit on the license, or null.
recordIdstringInternal portal record ID (used to build detailUrl).
detailUrlstringLink to the official license detail page.
hasDetailsbooleantrue when the detail record was fetched and merged.
searchQuerystringWhich search term returned this record.
sourcestringSource system the record came from.
observedAtstringISO 8601 timestamp of when the record was collected.

Example output record

Real record from the same live run (input {"searchQueries": ["roofing", "cosmetology"], "maxLicenses": 8}):

{
"licenseNumber": "100",
"name": "WEST ROOFING AND SUPPLY/SHELTER DIST.",
"entityType": "Organization",
"profession": "Liquid Petroleum Dealer",
"licenseType": "Liquefied Petroleum Gas-Dealer",
"board": "Liquefied Petroleum Gas",
"status": "Closed",
"expirationDate": "12/31/2005",
"city": "NASHVILLE",
"state": "Tennessee",
"zip": "37210",
"county": "Davidson",
"addressLine": null,
"phone": null,
"email": null,
"originalLicenseDate": "01/27/2000",
"alternateNames": null,
"classifications": "Specialty: CLASS II-BOTTLE STORAGE-MIN. 500 WATER GAL. STORAG",
"monetaryLimit": null,
"recordId": "C390299",
"detailUrl": "https://access.cloud.commerce.tn.gov/portal/search/C390299/detail",
"hasDetails": true,
"searchQuery": "roofing",
"source": "Tennessee Dept of Commerce & Insurance (access.cloud.commerce.tn.gov)",
"observedAt": "2026-08-11T22:08:59.720Z"
}

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~tennessee-licenses-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["roofing"],"statuses":["Active"],"maxLicenses":50}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~tennessee-licenses-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["Nashville"],"boards":["Cosmetology"],"counties":["Davidson"],"maxLicenses":200}'

Apify CLI:

apify call scrapers_lat/tennessee-licenses-scraper \
--input '{"searchQueries":["Smith Construction"],"includeDetails":true}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per license returned (result event). See the pricing tab for the current per-result price.
  • Detail enrichment. When includeDetails is on and a detail record is actually fetched and merged, a small details event is charged in addition to the result. Turn includeDetails off to skip it.
  • No charge on failure. Failed or empty runs do not charge for records that were not returned.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 records per run. Upgrade for higher maxLicenses.

FAQ and troubleshooting

A run returned 0 licenses. Why? The search terms matched nothing, or your filters removed everything. Broaden the terms (a trade keyword like roofing returns many records) or relax the filters. Zero-result runs are not charged.

Why are addressLine, phone or email null? The Tennessee portal does not publish those values for every licensee. Missing values are returned as null rather than invented. The address, county and dates are only added when includeDetails is on.

How do I target a specific board or county? Use the boards and counties filters with the exact labels shown on the portal, for example Cosmetology and Davidson.

Why do I see out-of-state licensees? Tennessee licenses many out-of-state individuals and businesses. Use the states filter to keep only Tennessee records if needed.

Is this an official Tennessee government tool? No. This actor is independent and has no affiliation with the State of Tennessee. It reads only data that is publicly available on the state licensing portal.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with the State of Tennessee. Accesses only publicly available license data.