Property · Permits

Austin construction permits

Every building, electrical, mechanical, plumbing and driveway permit the City of Austin issues, one row per permit: the work described, the declared value, the contracting company and the place. Read nightly from the city's open-data view and upserted for two weeks after issue, so a status that moves after the permit is pulled moves here too.

austin-permitsdaily · 1d rows50 entities

What is in it

Updates
daily · 1d rows
Entities
50 entities — 78704, 78745, 78744…
Source timezone
US Central — every timestamp Dryos serves is UTC
Coverage
27 May 2026 to now
Rows held
18,299
Primary key
permit_id
On the map
50 of 50 placed

What it measures

Every value, its unit, and what the source means by it.

  • Permits issuedpermits

    How many permits were issued in the day or week — the rollup's own row count, after any filter.

    samples
  • Declared value$

    Total job valuation declared on the permits in the day or week. Trade permits carry none; about one permit in six declares a value.

    valuation_usd

Columns

Exactly what a request answers with, read from the API rather than written here.

ColumnTypeDescription
interval_start_utcrequiredtimestampThe day the permit was issued: midnight in the city's zone, as UTC.e.g. 2026-09-04T05:00:00Z
permit_idrequiredstringThe city's own permit number.e.g. 2026-116568 BP
permit_typerequiredstringBUILDING, ELECTRICAL, MECHANICAL, PLUMBING or DRIVEWAY_SIDEWALK.e.g. BUILDING
permit_classrequiredstringRESIDENTIAL or COMMERCIAL, the city's own mapping of its finer classes.e.g. RESIDENTIAL
work_classstringThe kind of work: New, Remodel, Repair, Change Out, Demolition and so on, in the city's spelling.e.g. Remodel
descriptionstringThe work described on the permit, verbatim. This is where a re-roof, a solar array or a foundation repair is named.e.g. Express: Removal of existing roof and chimney section
valuation_usdnumberTotal job valuation declared on the permit, US dollars.e.g. 50000
contractorstringThe contracting company named on the permit. The company only: the individual's name and phone on the source record are not stored.e.g. TXB Construction Services LLC
contractor_tradestringThe contractor's licensed trade: General, Electrical, Mechanical, Plumbing.e.g. General Contractor
statusrequiredstringThe permit's current status at the source: Active, Final, Expired, Withdrawn. Restated on every run, so it moves after issue.e.g. Active
applied_utcrequiredtimestampThe day the application was filed: midnight in the city's zone, as UTC.e.g. 2026-08-20T05:00:00Z
zipstringFive-digit ZIP of the permitted address. The entity a page counts by.e.g. 78704
latnumberLatitude of the permitted address, degrees north, as geocoded by the city.e.g. 30.243
lonnumberLongitude of the permitted address, degrees east of Greenwich.e.g. -97.751
source_urlstringThe city's own page for this permit.e.g. https://abc.austintexas.gov/web/permit/public-search-other?t_detail=1&t_selected_folderrsn=...
source_published_at_utcrequiredtimestampWhen the city last refreshed the dataset this row was read from: the vintage.e.g. 2026-09-07T12:19:55Z
collected_at_utcrequiredtimestampWhen Dryos collected this row, UTC. Stamped by the platform.e.g. 2026-09-07T14:00:10Z

Read it

Public, read-only, no key and no sign-up. Relative times stay relative, so a URL keeps working.

The newest rows

shell
curl "https://api.dryos.ai/v1/datasets/austin-permits/query?node=78704&limit=12"

The catalogue entry — every column, its type and the source

shell
curl "https://api.dryos.ai/v1/datasets/austin-permits"

Full parameters — bucketing, aggregation, filters and search — are on the API reference.

Ask an agent

The same stream through the Model Context Protocol, so Claude, ChatGPT, Cursor or any MCP client can query it directly.

shell
claude mcp add --transport http dryos https://api.dryos.ai/mcp

Then ask:

How many permits did Austin construction issue each week this quarter, by trade?

Setup for every client is on the MCP server page.

Changes to this collector

A change in the collector is a change in the data. Anyone reading a step in a series is owed the day it moved under them.

  1. 2026-09-13

    Permits carry a subject and an action (rules version 1), kept in a table of their own so the city's rows are untouched.

    Austin has no roofing type and no column that says what a permit is for; a re-roof is a building permit whose description says so, and a new house's description rides on every trade permit it pulls. The subject (Roof, HVAC, Home, …) and action (New, Replace, Repair, …) are read off the permit type, the work class and the description by versioned rules in reference/permit_classes.py, after every run, and served beside the city's columns. They are a maintainer's reading, not the city's: stored apart, joined on at serve time, and a permit not yet labelled reads Unspecified.

How this stream is checked

  • Pulled straight from City of Austin Development Services — no reseller in between — and compared against that file before it is served.
  • Null means the source did not report it — never zero.
  • A reading lands daily; the interval timestamp is the start of the interval, in UTC.
  • The people are not stored. Contractor and applicant names, phones and addresses are never selected; the contractor company is kept, because which firms pull permits where is the point of the feed.

Related streams