← Guides

How-to

How to run Texas Contractor & Trade License Lookup (TDLR)

Step-by-step: the exact input, what each field does, and the rows that come back from TDLR (Socrata).

You have a Texas trade shop — an electrician, an A/C crew — and you need the licence on the record before they start work, or before you pay them. Start with the thing most people get wrong: Texas has no statewide general-contractor licence. The state licenses trades, through the Texas Department of Licensing & Regulation (TDLR). “Is this contractor licensed in Texas” is not a question the state can answer; “does this shop hold a current TDLR electrical or A/C licence” is. The manual way to answer it is TDLR’s own licence search: a box, a button, one record at a time. For a single lookup that’s a minute and it’s free — do that. What this actor is for is the twelfth lookup, and the one after renewal season, and the list of subs sitting in a spreadsheet that has to be re-checked every year: one search per name, no export, no schedule, all of it copied out by hand.

What you’ll need

Nothing but an Apify account. The actor talks to TDLR (Socrata) directly.

No API key, no proxy, no CAPTCHA credits, no login. Texas publishes the TDLR licensee file as an official Socrata open-data dataset on data.texas.gov — public JSON, documented, free to query, and filtered server-side with SoQL. Nothing is being worked around here, so there is no third-party cost inside a run and nothing for you to sign up for. (A Socrata app token would raise the shared rate limit, but the actor runs unauthenticated and doesn’t need one at this volume.)

Step 1 — Open the actor

Open Texas Contractor & Trade License Lookup (TDLR) on the Apify Store and press Try for free. The actor’s own page on this site lists its live health and pricing.

The Texas Contractor & Trade License Lookup (TDLR) listing on the Apify Store
The listing on the Apify Store. Pricing and the nightly health record are both public.

Step 2 — Fill in the input

The input form for Texas Contractor & Trade License Lookup (TDLR) in the Apify Console
The input form, as it appears in the Apify Console.
FieldTypeRequiredWhat it does
querystringyesA Texas TDLR license number or business name. Searches by exact license number and by business-name substring; owner names are returned on the row but are not searchable.
maxResultsintegernoCap on matches returned (bounds cost). This is now honoured end to end - the Socrata query is issued for this many rows. (default 50)

query is the field people get wrong, because it does two jobs at once. The actor runs your string twice: once as an exact match against TDLR’s licence number, then once as a substring match against the business/owner-name column. So 11484 verifies one specific licence, while ELECTRIC returns every licensee whose registered name happens to contain that word — which in Texas is a lot of them. A short, common word is a broad survey, not a verification. If you’re checking a specific shop, paste the name as TDLR spelled it (many licensees are filed as a person, SEAY, DANIEL, not a company), or better, paste the licence number.

maxResults is the spend cap, and it is the only thing standing between a one-word query and a bill: you are charged per row returned. Leave it at the default of 50 while you find out how broad your query really is, then widen it once you know.

A working input:

{
  "query": "ELECTRIC",
  "maxResults": 25
}

Step 3 — Run it

Press Start. Rows are pushed to the dataset as they’re found, so the run log fills in as it works.

A healthy run is dull and quick. There is no browser, no login and no CAPTCHA — it’s at most two HTTP calls to Socrata (the licence-number match, then the name match), each requested at your maxResults, deduplicated on licence number and then cut to it. A verify-one-licence run comes back with a single row in a few seconds; a name search comes back with as many rows as your cap allows.

An empty run is nearly always the query, not the actor. A licence number has to match exactly, and a name has to match the way Texas filed it — punctuation, & versus and, “SEAY, DANIEL” rather than “Daniel Seay”. Before you conclude that someone is unlicensed, drop back to a shorter fragment of the name and run it again. And remember the state-level caveat: if you’re looking for a general contractor’s Texas licence, there isn’t one to find. That is Texas, not a failed run.

Step 4 — Read the output

Each run returns a labelled table, not raw JSON:

The output fields returned by Texas Contractor & Trade License Lookup (TDLR)
The output view — every field the actor returns, named and typed.

Every row looks like this — a real row from a real run:

{
  "state": "TX",
  "license_number": "11484",
  "business_name": "SEAY, DANIEL",
  "person_name": "SEAY, DANIEL",
  "license_type": "A/C Technician",
  "expiration_date": "09/02/2026",
  "county": "GREGG",
  "matched_by": "business_name",
  "source_url": "https://www.tdlr.texas.gov/LicenseSearch/"
}
FieldExample valueMeaning
stateTXAlways ‘TX’ for this actor
license_number11484TDLR license number
business_nameSEAY, DANIELLicensed business or licensee name
person_nameSEAY, DANIELOwner name
license_typeA/C TechnicianTDLR license type (e.g. A/C Technician, Master Electrician)
expiration_date09/02/2026License expiration date
countyGREGGBusiness county
matched_bybusiness_nameWhich search surfaced this match: ‘license_number’ or ‘business_name’

Most people came for expiration_date and license_type, and both need reading with care.

expiration_date is the check you can actually make in Texas, because this dataset publishes no status column. There is no “Active” / “Expired” / “Revoked” string to read; what you get is the licence, its type and the date it runs out. An in-date licence present in the feed is your evidence that TDLR holds a current record — it is not a statement that the licence is in good standing. If you need a status determination, the licence number this actor hands you is what you take to TDLR’s own search. The date arrives as TDLR formats it, 09/02/2026 (US month-first), not ISO — worth knowing before you sort a spreadsheet on it.

license_type is the one people skip and shouldn’t. A name search matches names, not trades, so a row coming back tells you TDLR licenses that name — it doesn’t tell you they hold the licence you care about. Read the type (A/C Technician, Master Electrician, and so on) and make sure it’s the trade you’re hiring for.

The other gap to plan for: there is no address in this dataset. county is the only location field, and there’s no street, no city, no phone. business_name and person_name are frequently the same string, because sole traders are filed under their own name. Anything TDLR doesn’t publish comes back null rather than blank or guessed. matched_by tells you why a row is in your results — license_number for an exact hit, business_name for a name match — which is worth keeping when you’re reviewing a broad search.

Step 5 — Export it

Open the Dataset tab and export to CSV, JSON, or Excel — or pull the same rows from the API, which is what you want if this is going to run on a schedule.

What it costs

$0.004 per matched licence — 100 verified records is $0.40, 1,000 is $4.00. You pay per row returned, so a search that finds nothing is free. Apify’s platform compute is billed separately on your plan, and there is no third-party cost inside the run because the source is a free public API. In practice, verifying one licence number costs a fraction of a cent; the run that costs money is a one-word name search with maxResults left wide open.

Where the data comes from

This reads TDLR (Socrata) directly. The target is Socrata SODA JSON API (data.texas.gov, TDLR licensees) - filtered server-side with SoQL. Every night a canary runs this actor against that live source and diffs the result against a frozen fixture — what “verified” means.

Be straight about this one: it is the easiest tier there is. Texas puts the TDLR licensee file on data.texas.gov deliberately, as a documented Socrata dataset with an open JSON API, no anti-bot and no gate. If you’re comfortable writing a SoQL $where clause you can query it yourself, for free, this afternoon. What you’d be paying for here isn’t access — it’s the shape of what comes out: two searches (exact number, name substring) fired for you, TDLR’s column names mapped onto the same licence record every other actor in this suite returns, nulls where Texas publishes nothing rather than empty strings, and a nightly canary that notices when the state renames a column before your pipeline does.

See it used

Find Texas Electricians by Company Name shortlists Texas electrical licences by company name.

Nothing in Texas is one-state forever. If a sub could be registered anywhere and you don’t want to guess the board, Multi-State Contractor & Trade License Lookup runs the same query across Washington, Oregon, Texas and Connecticut in a single run. If what you want is the other direction — not verifying a known shop but building the list of Texas contractors in the first place — reach for Texas Contractor Directory & Leads Scraper instead. And if the job is a Florida licence rather than a Texas one, Florida Contractor License Lookup hits DBPR, which (unlike TDLR’s open-data feed) does publish a status column.

Last updated 2026-07-13