TDLR Texas Contractor & Trade License Scraper
Pricing
from $19.00 / 1,000 results
TDLR Texas Contractor & Trade License Scraper
Search TDLR Texas contractor and trade licenses — electrician, elevator, A/C, mold remediation, water well, cosmetology, and 80+ other types. Returns full business address, phone, owner contact, and live Active/Expired/Revoked status.
Pricing
from $19.00 / 1,000 results
Rating
0.0
(0)
Developer
Tony
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
Pull licensed Texas Department of Licensing and Regulation (TDLR) contractor and trade businesses — Electrical Contractors, Elevator Contractors, Appliance Installation Contractors, Electrical Sign Contractors, Water Well Drillers, Service Contract Providers, cosmetology establishments, and more — with full business address, phone, owner contact, and live Active / Expired / Revoked status.
Other TDLR actors scrape the public search form and return a thin record (name, county, license #). This one combines the state's own Open Data API (full address, phone, mailing contact, geocoded lat/lon — for the ~108k business-entity licenses where the state publishes contact info) with a live lookup against tdlr.texas.gov for the current license status the API doesn't expose. You get the rich business dataset and a current status check on every record.
Who this is for
Sales teams selling to Texas contractors. HVAC equipment vendors, electrical supply distributors, software vendors, marketing agencies — every business-entity license ships with line-1 address, county, and phone. Filter to a county or ZIP prefix and you have a clean, deduplicated territory list ready for the CRM.
Underwriters and verification services. Insurance carriers, lien-search providers, and procurement teams who need to confirm a contractor's license is currently active before a deal closes. Pass a list of license numbers in licenseNumbers and get back live status from tdlr.texas.gov for each — much cheaper than building and maintaining your own scraper.
Renewal-monitoring services. Schedule a weekly run with expirationDateTo set to today + 60 days to catch every license about to lapse. Powers renewal-reminder businesses, supplier-compliance teams, and trade-association membership programs.
Recruiters and staffing firms. Filter by license type and county to surface every Master Electrician, Journeyman, A/C Technician, or other licensed tradesperson in a target metro.
Researchers and analysts. The county / city / ZIP filters and the structured output make Texas trade-license demographics, regional density studies, and competitive analysis trivial.
What you get
One JSON object per license, pushed to the Apify dataset. A sample of four records covering an Electrical Contractor, Appliance Installation Contractor, Elevator Contractor (non-enrichable — source: "socrata"), and a cosmetology Full Service Establishment with a DBA is in example_output.json. Single-record preview (Appliance Installation Contractor, enriched mode):
{"license_number": "641","license_type_code": "AIRREF","license_type": "Appliance Installation Contractor","license_subtype": "RAIC","license_status": "Active","license_status_raw": "Active","expiration_date": "2026-04-19","original_issue_date": "2015-03-17","continuing_education_flag": false,"business_name": "POOL CARE SPECIALISTS","dba": null,"owner_name": "POOL CARE SPECIALISTS","business_address": {"line1": "STE 107123","line2": "2201 LONG PRAIRIE RD","city": "FLOWER MOUND","state": "TX","zip": "75022","county": "DENTON"},"business_phone": "+1-972-829-8485","mailing_address": {"line1": "STE 107123","line2": "2201 LONG PRAIRIE RD","city": "FLOWER MOUND","state": "TX","zip": "75022-4832","county": "DENTON"},"owner_phone": "+1-972-829-8485","endorsement": null,"location": { "latitude": 33.0264, "longitude": -97.0811 },"location_precision": "address","source": "socrata+live","source_url": "https://www.tdlr.texas.gov/LicenseSearch/SearchResultDetail.asp?1=ACTELE00000641&2=RAIC","scraped_at": "2026-04-22T21:40:00.000Z"}
Field reference
| Field | Type | Notes |
|---|---|---|
license_number | string | Primary key (composite with license_type_code) |
license_type_code | string | null | Canonical TDLR short code (e.g. ELCTRC) |
license_type | string | Spelled-out name (e.g. Electrical Contractor) |
license_subtype | string | null | Subtype code (distinguishes Master/Journeyman/etc. on same type_code) |
license_status | enum | null | Active / Expired / Canceled / Revoked / Suspended / Other. Verified live from tdlr.texas.gov when possible; otherwise inferred from expiration_date (Active / Expired only). Check source to tell which |
license_status_raw | string | null | Raw status text from the live lookup. null when status was inferred from expiration date |
expiration_date | ISO date | YYYY-MM-DD. Verified live from tdlr.texas.gov in enriched mode; falls back to the Socrata value (refreshed weekly) when the live page can't be parsed. In api_only mode always uses the Socrata value, which can lag the live site by up to 7 days for recently-renewed licenses |
original_issue_date | ISO date | null | Enriched mode only |
continuing_education_flag | boolean | |
business_name / owner_name | string | |
business_address / mailing_address | object | fields null | { line1, line2, city, state, zip, county } |
business_phone / owner_phone | string | null | E.164 where possible |
endorsement | string | null | For license types that have endorsements |
location | object | { latitude, longitude } from the state's geocoded business address; both fields null if not published |
location_precision | string | null | "address" (real geocode), "city" (state's geocoder fell back to a city centroid — every record in that city shares the same coords), or null. Filter on "address" for radius-search use cases |
source | "socrata" | "socrata+live" | Which data sources contributed |
source_url | string | null | Direct deep-link to tdlr.texas.gov |
scraped_at | ISO timestamp |
Coverage: which license types come back with full contact info?
The state's Open Data dataset publishes business addresses for business-entity license types and leaves individual licenses with just name + county + license #. Use requireBusinessAddress: true to filter to only the rich rows.
Business entities with full address + phone (~108k records total):
| License type | Records with full contact |
|---|---|
| Full Service Establishment (cosmetology) | 35,399 |
| Mini Establishment (cosmetology) | 21,883 |
| Electrical Contractor | 13,796 |
| Devices (motor fuel) | 13,384 |
| Manicurist/Esthetician Establishment | 7,721 |
| Esthetician Establishment | 4,681 |
| Water Well Driller/Pump Installer | 1,170 |
| Manicurist Establishment | 868 |
| Appliance Installation Contractor | 828 |
| Used Auto Parts Recycler | 731 |
| Eyelash Extension Establishment | 668 |
| Cosmetology Private School | 648 |
| Electrical Sign Contractor | 646 |
| Registered Accessibility Specialist | 633 |
| Service Contract Provider | 572 |
| Professional Employer Organization | 428 |
| Elevator Contractor | 360 |
| …and others |
Individual licenses (thin records — name, county, license #, live status only): A/C Contractor (20,167), A/C Technician (58,095), Journeyman Electrician (44,155), Master Electrician (19,572), Apprentice Electrician, Residential Wireman, cosmetologists, barbers, combative sports contestants, athletic trainers, midwives, dietitians, massage therapists, dyslexia practitioners, and most other person-held licenses.
This is a Texas-side regulatory choice — TDLR publishes business addresses but not individuals' home addresses. When you need contact info, filter on requireBusinessAddress: true.
Quick start — three common jobs
1. Every active Electrical Contractor business in the Houston area (full contact)
{"licenseTypes": ["Electrical Contractor"],"counties": ["HARRIS", "FORT BEND", "MONTGOMERY"],"activeOnly": true,"requireBusinessAddress": true,"searchMode": "enriched","maxResults": 5000}
2. Every licensed contractor business in Texas expiring in the next 90 days
{"licenseTypes": ["Electrical Contractor","Electrical Sign Contractor","Elevator Contractor","Appliance Installation Contractor","Water Well Driller/Pump Installer","Service Contract Provider"],"expirationDateFrom": "2026-04-22","expirationDateTo": "2026-07-22","activeOnly": true,"requireBusinessAddress": true,"searchMode": "enriched","maxResults": 10000}
3. Every individual Master Electrician (thin records, live status)
{"licenseTypes": ["Master Electrician", "Journeyman Electrician"],"activeOnly": true,"requireBusinessAddress": false,"searchMode": "enriched","maxResults": 5000}
Input reference
See the run-form descriptions on each field; highlights:
searchMode—enriched(default) adds a live tdlr.texas.gov lookup per result for current status, original issue date, and endorsement.api_onlyskips enrichment (cheaper, faster, no live status).licenseTypes— exact Socrata license type names. Leave empty for all 85+ types. See the coverage table above.requireBusinessAddress— settrueto get only records with full address/phone;false(default) to include everything.businessNameContains/ownerNameContains— case-insensitive substring filters.activeOnly— drop Expired/Canceled/Revoked/Suspended. In enriched mode uses the live status; in API-only usesexpiration_date >= today.maxResults— hard cap; every record pushed is billable.maxConcurrency— only matters in enriched mode. Default 10 is polite.
How the data is sourced
- Bulk data:
data.texas.gov/resource/7358-krk7.json— the state's own open-data publication, "TDLR - All Licenses", ~962k rows total (~108k with full business contact info), updated weekly. - Live status:
https://www.tdlr.texas.gov/LicenseSearch/SearchResultDetail.asp— the public license detail page. The correct URL prefix is subtype-specific (e.g. Electrical Contractor →EECELE, Appliance Installation Contractor →ACTELE, Full Service Establishment →COSSHP). The actor resolves the URL per record by POSTing to the site's own search form and following the redirect, so new license subtypes keep working without maintenance. Source oflicense_status,expiration_date,original_issue_date, andendorsementin enriched mode — using the live page for these fields keeps the output current with the site (Socrata refreshes weekly and can lag real-world renewals).
Both sources are public. No authentication bypass. Live-status requests are rate-limited by the maxConcurrency input.
Data freshness and accuracy
Bulk data refreshes weekly. Socrata syncs from TDLR's authoritative database every ~7 days. A license that renewed yesterday may show its old expiration date in api_only mode. In enriched mode the live tdlr.texas.gov lookup overrides the Socrata value, so you always get the current expiration and status as of the moment the actor ran.
Geolocation precision is mixed. The state geocoder occasionally falls back to a city centroid when it can't resolve a specific street address — e.g. Houston's centroid (29.76078, -95.36952) shows up on every record where the geocoder couldn't pin a Houston street. The location_precision field tells you which is which: "address" for real geocodes, "city" for centroid fallbacks, null when no location was published. Filter on location_precision === "address" for any use case that depends on per-record coordinates — radius search, mapping, distance ranking. City-precision records still have signal for city-level mapping.
Out-of-Texas geocodes are dropped. A few licensee records geocode to the wrong state (Pasadena, CA instead of Pasadena, TX is the classic). Those are nulled out rather than shipped as bad data.
FAQ
How do I export to Excel or CSV?
Apify ships every dataset as JSON, CSV, Excel, RSS, or HTML directly from the run page — no extra step. The actor comes pre-configured with an Overview view that surfaces the most useful columns for spreadsheet work.
Can I run this on a schedule?
Yes. Apify Schedules can run this actor daily, weekly, or monthly with the same inputs. A common pattern: a weekly run with expirationDateTo set to today + 60 days, feeding a renewal-watch list. Pair it with the Notify on finish setting to get an email or webhook when each run completes.
Can I use this data for marketing outreach? TDLR licensee data is public record under the Texas Public Information Act (Government Code Chapter 552), and this actor accesses only public state endpoints. When using the data for outreach, you remain responsible for honoring federal TCPA rules and Texas's own Telephone Solicitation Act — DNC compliance, written-consent requirements, and call-time-of-day limits are on you.
Does this include bonds, insurance, or complaint/enforcement history? No. TDLR doesn't publish bond, insurance, or complaint data in a machine-readable form on its license search or Open Data portal — that information is only available by Texas Public Information Act request.
Why two direct TDLR competitors on the Apify Store? They scrape the public search form only, so they return the thin fields the form exposes (name, county, license #, status, expiration). They miss the full address, phone, mailing info, owner contact, and geocoded lat/lon that the state's Open Data API publishes for business-entity licenses.
Does license_number uniquely identify a license?
No — the same license number can recur across (and within) license types. For example, Service Contract Provider #109 belongs to two separate businesses under subtypes PROVIDER and ADMIN. The unique composite key is (license_type_code, license_number, license_subtype). Buyers deduplicating across runs should key on all three.
Pricing? Per-result. Every fully-formed record pushed to the dataset counts.
Changelog
0.1.1 — Added location_precision field ("address" / "city" / null) so buyers can distinguish real geocodes from the state geocoder's city-centroid fallbacks. Stopped routing Socrata calls through Apify Proxy (the public Open Data API throttles shared datacenter IPs); proxy is still used for live tdlr.texas.gov enrichment. Hardened got-scraping retries against transient upstream 5xx.
0.1.0 — Initial release. Hybrid Socrata + live-status enrichment. 85+ license types supported; 17 business-entity types carry full contact info.