Texas State Licensed Contractor Scraper — TDLR License Data
Pricing
from $25.00 / 1,000 tdlr license records
Texas State Licensed Contractor Scraper — TDLR License Data
Scrape Texas Department of Licensing & Regulation (TDLR) public license records: license number, type, class, business & contact info, status, bond, insurance, discipline, sponsor. Returns CRM-ready structured JSON for contractor lead-gen and compliance verification.
Pricing
from $25.00 / 1,000 tdlr license records
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Scrapes the Texas Department of Licensing and Regulation (TDLR) public license database and returns complete, structured licensee records — license number, type, class, business name, contact details, status, issue/expiration dates, bond amount, insurance amount, sponsor, and discipline/violations.
Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools.
Why use this actor
- Full license detail — not just the search-results row. Every record carries the detail-page data: bond, insurance, sponsor, discipline, and violations.
- 80+ license program types — Electricians, Air Conditioning Contractors, Elevator Contractors, Cosmetologists, Barbers, Massage Therapists, Mold Remediation, and every other TDLR program.
- Flexible filtering — by license type, license number, business name, owner name, city, county, ZIP code, or technician tier (Registered / Certified).
- Contractor lead-gen ready — Electrician and Elevator Contractor records include address, phone, and email. Drop straight into HubSpot/Salesforce.
- Compliance / verification — verify a contractor's license status, bond, and insurance before hiring. Perfect for insurance underwriters, HOAs, and GCs.
- MCP/AI-agent friendly — semantic field names, field-level output schema, predictable
maxResults, and a per-record pricing model an agent can budget.
What it outputs
One dataset item per TDLR license:
| Field | Type | Example |
|---|---|---|
licenseNumber | string | 80019 |
licenseType | string | Electricians |
licenseClass | string | Master |
licenseDescription | string | Master Electrician |
businessName | string | Acme Electric LLC |
contactName | string | John Smith |
address | string | 123 Main St |
city | string | Austin |
state | string | TX |
zipCode | string | 78701 |
county | string | Travis |
phone | string | (512) 555-0100 |
email | string | info@acmeelectric.com |
status | string | Active |
issueDate | string | 2021-01-15 |
expirationDate | string | 2026-01-15 |
renewalDate | string | 2024-01-15 |
bondAmount | string | $10,000 |
insuranceAmount | string | $500,000 |
sponsor | string | Acme Electric LLC |
sponsorLicenseNumber | string | 80019 |
sponsorExpiration | string | 2026-01-15 |
discipline | string | None |
violations | string | None |
detailUrl | string | https://www.tdlr.texas.gov/LicenseSearch/Detail/80019 |
scraped_at | string | 2026-07-01T20:35:00.000Z |
source_url | string | https://www.tdlr.texas.gov/LicenseSearch/ |
Note:
phone,bondAmount,insuranceAmount,sponsor*are published by TDLR only for license programs that collect them (Electricians, Elevator Contractors, Air Conditioning Contractors). For other programs these fields will benull.
Input parameters
| Field | Type | Required | Description |
|---|---|---|---|
licenseType | enum | recommended | TDLR license program (e.g. Electricians). |
licenseNumber | string | no | Look up a specific license number. |
businessName | string | no | Full/partial business name. |
ownerName | string | no | Individual/owner license holder name. |
city | string | no | Texas city (free text). |
county | enum | no | Texas county (official list, incl. Out Of State). |
zipCode | string | no | 5-digit ZIP. |
technicianType | enum | no | All / Registered / Certified (Electricians and A/C only). |
maxResults | integer | no | Max records to return. Default 50. |
At least one filter is required. licenseType alone is the most common entry point.
Pricing
| Event | Price | When charged |
|---|---|---|
result-item | $0.025 | Per TDLR license record saved to the dataset |
apify-actor-start | $0.00005 | Once per run |
A typical small pull of 100 licensed-electrician leads costs ≈ $2.50 + a few cents compute. There is no charge for runs that return 0 results.
Quickstart
# 1. Install + run locally against the live TDLR sitecd tdlr-texas-scrapernpm installapify loginapify run --input '{"licenseType":"Electricians","city":"Austin","maxResults":5}'# 2. Push to your Apify accountapify push -f -w 120# 3. Set PPE pricing + SEO (one-time, after first push)
Run via API:
curl -X POST "https://api.apify.com/v2/acts/USERNAME~tdlr-texas-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"licenseType":"Electricians","county":"Harris","maxResults":100}'
How it works
- GET the TDLR search page and harvest the ASP.NET hidden fields (
__VIEWSTATE,__EVENTVALIDATION). - POST the search form with your filters.
- Parse the results grid and enqueue each license's detail-page URL.
- GET each detail page, extract the full record, and push it to the dataset immediately (never batched across requests — a single detail-page timeout can't lose other records).
- Stop when
maxResultsis reached. Each successful record triggers aresult-itemcharge.
Limitations & transparency
- Selectors may need a one-time calibration run. TDLR's public search HTML occasionally shifts class names. The actor uses multiple fallback selectors per field. If a run returns
0items with aNo detail links parsed from results pagewarning, run it once locally and adjust the selectors/constants at the top ofsrc/main.ts(search form field names + theRESULTS/DETAILparsers). This is the only brittle layer; the rest of the pipeline is durable. - Single results page. The current build enqueues detail links from the first results page (TDLR shows up to a few hundred rows per search). For exhaustive lists, run multiple county/city filters and merge the datasets.
- Contact info (
phone/email) is only published by TDLR for Electricians and Elevator Contractors — it will benullfor other programs by design, not a bug. - No login, no anti-bot — TDLR's public search is open. The actor uses US datacenter proxies (fast + cheap) by default.
Use cases
- Home-services lead generation — pull every licensed electrician / A/C / elevator contractor in a county with phone + email for cold outreach.
- Compliance & verification — bulk-verify that subcontractors hold an active license, valid bond, and current insurance before signing a contract.
- Insurance underwriting — feed bond + insurance amounts into risk models.
- Market research — count active licensees by program, county, or city for TAM sizing.
Troubleshooting
| Symptom | Fix |
|---|---|
0 results, No detail links parsed warning | Do one local apify run, open the saved HTML, and update the RESULTS/DETAIL selectors in src/main.ts. |
phone/email are null | Expected for non-Electrician/non-Elevator license programs — TDLR doesn't publish contact info for them. |
__VIEWSTATE missing | TDLR may have changed the search URL. Confirm SEARCH_PAGE_URL/SEARCH_RESULTS_URL at the top of src/main.ts. |
| Charge shows but no rows | Ensure at least one filter is set and spelled exactly as TDLR uses it (case-insensitive for businessName). |
Source: https://www.tdlr.texas.gov/LicenseSearch/ — Texas Department of Licensing and Regulation public license search. This actor only reads publicly available licensee data.