The City of Dallas publishes every issued building permit on dallasopendata.com (Socrata dataset e7gq-4sah). Between Oct 21 and Oct 28, 2026 it issued 1,499 permits:
| Permit type | Count |
|---|---|
| Residential plumbing | 314 |
| Commercial electrical | 145 |
| Residential electrical | 141 |
| Residential mechanical (HVAC) | 121 |
| Commercial alteration/addition | 107 |
| Commercial plumbing | 99 |
| Residential new construction | 82 |
| Residential alteration/addition | 81 |
| Commercial mechanical | 70 |
| Residential accessory structure | 52 |
Each permit includes the work description (for example "Installation of roof mounted PV solar panels / 22 modules / 9.020 kW"), street address, ZIP code, square footage and issue date.
One gotcha: text dates
Dallas stores issued_date as text in MM/DD/YY format, so a normal SoQL date range (issued_date > '2026-10-21') silently returns the wrong rows. Query the exact date strings instead:
import datetime as dt, requests days = [(dt.date(2026,10,28)-dt.timedelta(d)).strftime("%m/%d/%y") for d in range(8)] where = "issued_date in(" + ",".join(f"'{d}'" for d in days) + ")" rows = requests.get("https://www.dallasopendata.com/resource/e7gq-4sah.json", params={"$where": where, "$limit": 5000}).json() print(len(rows), rows[0]["permit_type"], rows[0]["work_description"][:80]) For longer windows, split the request into chunks of about 31 dates.
Finding solar, roofing and HVAC jobs
Filter on the work description:
import re solar = [r for r in rows if re.search(r"\b(PV|solar)\b", r.get("work_description",""), re.I)] roof = [r for r in rows if re.search(r"re-?roof|shingle", r.get("work_description",""), re.I)] Note: Dallas leaves the contractor and valuation fields blank on most recent permits. Use this feed for the address, work type and timing (for example, homeowners who just pulled a re-roof or new-construction permit), not to look up a contractor.
No-code: 48 cities in one tool
Dallas is now one of 48 cities and counties in the Building Permits Scraper on Apify. Choose "cities": ["dallas_tx"] and set withinDays, or combine it with Austin, San Antonio and Fort Worth for a Texas-wide permit feed. It costs $2 per 1,000 permits, and the free plan covers a few thousand a month.
Sample data and field list: loomwise.app/data/building-permit-leads.
Data: City of Dallas Open Data, public. Owner and applicant names are not included.


