# Changelog of Texas Contractor Directory & Leads Scraper (TDLR) (`scrapebench/texas-contractor-directory-leads-scraper`) Actor

- **URL**: https://apify.com/scrapebench/texas-contractor-directory-leads-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/scrapebench/texas-contractor-directory-leads-scraper.md

## Changelog

### \[0.2.0] - 2026-08-21

Contact-data honesty pass, plus two fields that were in the payload all along.

- **New output field, no extra requests:** `address_line2` (suite/unit), which was in the payload
  all along and is the difference between a deliverable address and a wrong one.
- **`business_mailing` deliberately NOT exposed.** It is a GeoJSON Point that looks like a free
  street-level geocode and is a **city centroid**: Travis County's 468 Electrical Contractors have
  432 distinct addresses and **17** distinct points between them, 347 of them identical. It is less
  precise than `city_state_zip` and would invite mapping a whole city onto one pin. A first pass at
  this release shipped it as `latitude`/`longitude` on the strength of a single spot-check against a
  downtown Austin address, which could not tell a street geocode from the Austin centroid; the
  measurement above is why it was pulled back out before anyone could build on it.
- **A source outage no longer reads as an empty county.** A failed fetch returned `[]`, which in a
  dataset is indistinguishable from "no contractors here" — and only one of those is our fault. It
  now returns a free `Notice(notice_type="source_unavailable")` row. Notices are skipped by the
  charge loop by type, alongside `CountyOption`.
- **Listing, README and both articles corrected.** The advertised example was `A/C Contractor`,
  and all 20,323 A/C Contractor rows statewide have `address`, `city_state_zip` and `phone` null —
  TDLR publishes contact data only for its ~40 establishment/company licence types (99,720 of
  983,494 rows, 10.1%, measured 2026-08-21). The `output_sample` compounded it by showing invented
  address and phone values on a real licence number. Example input is now `Electrical Contractor`
  (13,911 phones of 13,917 rows), the sample is a real row, and the split is stated in the input
  schema where the buyer chooses, in the listing FAQ, and in both articles.
- **Canary retargeted so the contact fields are actually asserted.** The old golden input could
  never exercise `address`/`phone` — they are null by design on that licence type — so no tier of
  testing could have caught the above. Target is now `Electrical Contractor` with `address` and
  `phone` in `required_fields` (verified 468/468 in TRAVIS at time of change) and `notice` added to
  `reject_fields`.
- `maxResults` maximum raised 100,000 → 250,000; Harris County holds 161,937 rows, so the old
  ceiling could not deliver the full roster the description offered.

### \[0.1.0] - Unreleased

- Initial scaffold generated from the portfolio actor template (wiring only; sample data).
