San Antonio Building Permits
All 505,722 building permits the City issued between 2020-07-20 and 2026-08-21, by type, council district and month. Every figure arrives next to the share of permits it was computed from, which matters more than any of the totals.
Read the two numbers together or not at all. A dollar total from this record is not a measure of construction. It is a measure of construction that had the valuation box filled in. Those are different quantities, and on this dataset they are very different: the field is blank on 97.1% of permits, including every single one of the new houses. Each table below therefore carries its own coverage column.
What one permit means here. The City issues combination permits: one permit number covering more than one kind of work, published as one row per kind. A school addition arrives as eleven rows sharing a number: the addition itself, then electrical, mechanical, plumbing and the rest, all at one address on one date. So the 505,722 permits counted on this page were issued under 441,609 permit numbers. Both are published because they answer different questions, and neither is an error in the other: the difference is trades on one job, not duplicate records. The data dictionary the City publishes with the file is the source for that, not our inference.
Where the valuation field is filled in, and where it is not
Every permit type the City issued 250 or more of, ordered by how many permits it covers. Two coverage columns, not one. A permit with no price is not necessarily a permit with nothing recorded: the City measures floor area on categories where it never records a dollar figure, so the rows showing no money are often the rows carrying a size.
| Permit type | Permits | Has a price | Declared valuation | Has a size | Floor area |
|---|---|---|---|---|---|
| Mechanical Permit | 55,813 | 0.0% | $2.5M | 0.0% | 49,434 sf |
| Plumbing General Permit | 53,602 | 0.0% | $804k | 0.0% | 24,188 sf |
| Electrical General Permit | 51,164 | 0.0% | $1.3M | 0.0% | 32,611 sf |
| Plumbing Irrigation Permit | 39,835 | 0.0% | $16.0M | 0.0% | 188,952 sf |
| Residential Repair Permit | 32,040 | 0.0% | none | 0.0% | none |
| Re-Roof Permit | 28,860 | 0.0% | none | 0.0% | none |
| Res New Building Permit | 26,954 | 0.0% | none | 99.1% | 148,919,888 sf |
| Garage Sale | 18,745 | 0.0% | none | 0.0% | none |
| Foundation Repair Permit | 17,878 | 0.0% | none | 0.0% | none |
| Plumbing Sewer Permit | 17,088 | 0.0% | $408k | 0.0% | 24,612 sf |
| LSR Plumbing Permit | 16,012 | 0.0% | none | 0.0% | none |
| Solar - Photovoltaic Permit | 15,867 | 0.0% | $56.0M | 0.0% | 328,365 sf |
| Plumbing Gas Permit | 15,748 | 0.1% | $1.6M | 0.1% | 7,667 sf |
| On Premise Sign | 10,817 | 0.0% | $33.0M | 0.0% | 141,934 sf |
| LSR Mechanical Permit | 10,354 | 0.0% | none | 0.0% | none |
| Tree Affidavit Permit | 10,142 | 0.0% | $36.5M | 0.0% | 487,836 sf |
| Electrical TOPS Permit | 8,397 | 0.0% | none | 0.0% | none |
| Residential Fence Permit | 7,279 | 0.0% | none | 0.0% | none |
| Sidewalk-Curb Permit | 6,168 | 0.0% | none | 0.0% | none |
| Comm Remodel Permit | 5,196 | 41.7% | $1.70B | 38.7% | 28,447,290 sf |
| Home Addition Permit | 5,088 | 0.0% | none | 0.0% | none |
| Comm New Building Permit | 4,120 | 99.6% | $75.15B | 99.9% | 1,033,770,317 sf |
| Swimming Pool or Spa Permit | 3,799 | 0.0% | none | 0.0% | none |
| Across the Street Banner | 3,672 | 0.0% | none | 0.0% | none |
| Minor Commercial Repair Permit | 3,529 | 0.0% | none | 0.0% | none |
| Electrical TML Permit | 3,274 | 0.0% | none | 0.0% | none |
| Comm Sitework Permit | 2,909 | 91.7% | $10.57B | 79.5% | 147,079,686 sf |
| Tree Permit | 2,775 | 0.0% | $56.6M | 0.0% | 734,130 sf |
| Plumbing Backflow Permit | 2,775 | 0.0% | none | 0.0% | none |
| Demolition Permit | 2,657 | 0.0% | none | 99.7% | 8,836,593 sf |
| Maintenance Permit | 2,265 | 0.0% | none | 0.0% | none |
| Covered Patio or Porch Permit | 2,055 | 0.0% | none | 0.0% | none |
| Carport Permit | 1,668 | 0.0% | none | 0.0% | none |
| Electrical Completion Permit | 1,260 | 0.0% | none | 0.0% | none |
| Comm Comm Equipment Permit | 1,171 | 89.2% | $29.7M | 10.8% | 28,740 sf |
| Comm Finish Out Permit | 1,151 | 99.9% | $1.90B | 99.9% | 17,131,638 sf |
| Electrical Reconnect Permit | 1,118 | 0.0% | none | 0.0% | none |
| Plumbing Completion Permit | 1,112 | 0.0% | none | 0.0% | none |
| Accessory Building Permit | 986 | 0.0% | none | 0.0% | none |
| Comm Fence Permit | 904 | 99.0% | $2.57B | 26.3% | 25,161,084 sf |
| Res Accessory-Addition Permit | 879 | 0.0% | none | 2.0% | 28,107 sf |
| Deck Permit | 722 | 0.0% | none | 0.0% | none |
| Manufactured Home Permit | 701 | 0.0% | none | 0.0% | none |
| Mechanical Completion Permit | 673 | 0.0% | none | 0.0% | none |
| Comm Shell Permit | 595 | 99.5% | $3.53B | 100.0% | 85,248,522 sf |
| Plumbing Medical Gas Permit | 589 | 0.0% | none | 0.0% | none |
| Temporary Weekend Sign | 568 | 0.0% | none | 0.0% | none |
| Feather Sign | 490 | 0.0% | none | 0.0% | none |
| Comm Shade Structure Permit | 467 | 98.3% | $1.24B | 32.1% | 10,645,973 sf |
| LSR Electrical Permit | 445 | 0.0% | none | 0.0% | none |
| Comm Retaining Wall Permit | 433 | 100.0% | $1.25B | 20.8% | 6,483,881 sf |
| Comm Addition Permit | 423 | 46.3% | $319.5M | 70.4% | 7,636,892 sf |
| Res Accessory Dwelling Permit | 416 | 0.0% | none | 1.4% | 3,994 sf |
| Comm Foundation Permit | 409 | 99.3% | $2.52B | 100.0% | 76,258,934 sf |
| Comm Street Improvement Permit | 300 | 14.3% | $202.3M | 19.7% | 3,915,305 sf |
| All other permit types | 1,365 | 40.6% | $3.27B | 17.9% | 17,135,383 sf |
29,846 of the priceless permits are not blank rows. They carry a recorded floor area totalling 165,960,414 square feet. The City measured those buildings, it simply did not price them, and reading only the money column throws that away.
By council district
A district with more recorded valuation is not necessarily building more. It may simply have had the field filled in more often. This record cannot tell those apart, so both columns are shown and neither is ranked.
- under 37,445
- 37,445+
- 45,407+
- 48,175+
- 54,703 and up
| District | Permits | With a valuation | Coverage | Declared valuation |
|---|---|---|---|---|
| District 0 (not a council district: extra-territorial or unassigned) | 45,484 | 24 | 0.1% | $3.4M |
| District 1 | 54,703 | 1,670 | 3.1% | $6.38B |
| District 2 | 59,094 | 1,704 | 2.9% | $7.93B |
| District 3 | 45,407 | 1,230 | 2.7% | $11.06B |
| District 4 | 43,059 | 1,269 | 2.9% | $16.63B |
| District 5 | 29,666 | 662 | 2.2% | $1.88B |
| District 6 | 36,981 | 1,743 | 4.7% | $14.62B |
| District 7 | 37,445 | 999 | 2.7% | $6.92B |
| District 8 | 45,472 | 2,093 | 4.6% | $13.86B |
| District 9 | 48,175 | 1,395 | 2.9% | $6.65B |
| District 10 | 51,814 | 1,307 | 2.5% | $12.31B |
| Spans several districts (valuation deliberately not divided between them) | 5,057 | 499 | $4.80B | |
| No district recorded | 3,365 | not stated |
Permits issued per month
How concentrated the recorded value is
2,339 permits carry 88.2% of all the declared value on the record. That is 0.46% of permits holding most of the money, which is worth knowing before treating a citywide dollar total as broad-based activity.
| Declared valuation | Permits | Total declared | Share of declared value |
|---|---|---|---|
| $10M and above | 2,339 | $92.13B | 88.2% |
| $1M to $10M | 3,204 | $10.32B | 9.9% |
| $250k to $1M | 2,974 | $1.57B | 1.5% |
| $50k to $250k | 2,719 | $335.9M | 0.3% |
| $10k to $50k | 2,852 | $81.0M | 0.1% |
| Under $10k | 658 | $3.0M | 0% |
Shares are of the declared value only, which is the 2.9% of permits carrying the field. They are not shares of construction in San Antonio.
The blanks are not all empty
Before reaching for an estimate, it is worth asking what the record already holds. Two things turn out to be true of the permits with no price on them.
This is the honest way to fill a gap: read a field the City already populated, rather than inventing a number for one it did not. Floor area is not a substitute for construction value and is not converted into one anywhere on this page. It is simply the measurement that exists, and on new homes it exists on almost every permit while the price exists on none of them. Quote the median rather than the mean if you use the home-size figure: a few hundred large multifamily permits filed under the residential type pull the average to more than twice the typical house.
What the blank is hiding, according to a different agency
The City records new-home permits with the valuation field empty. The Census Bureau surveys the same county over those same months and publishes a number for the same buildings. Neither figure is used to fix the other; they are shown together because the gap between them is the point.
| Census Building Permits Survey, Bexar County | Buildings | Value |
|---|---|---|
| Single-unit | 3,061 | $569.9M |
| Buildings of five units or more (663 units) | 58 | $226.8M |
| Of the single-unit total, actually reported rather than imputed | 2,799 | 262 imputed |
These two records do not line up, and should not be made to. Census covers all of Bexar County including suburbs that run their own permit offices; the City file covers City of San Antonio permits. Census counts buildings and dwelling units; the City counts permits. The months are the only thing the two sides share: the Census county file is year to date, so the City figures beside it are recomputed over exactly 2026-01 to 2026-07 rather than over this tool’s full window. So this is not a reconciliation and no figure here has been used to fill a blank. It is one independent estimate of the order of magnitude the City’s empty column is not carrying. Source: Census Building Permits Survey, file co2607y.txt.
Two maps, and what each one leaves out
The district map above keeps every permit and loses precision. The pin map below keeps precision and loses permits. Neither is the honest one on its own, which is why this page carries both and states what each drops. The audit here is what decides which permits the pin map can show at all.
- Usable coordinates 134,047 (26.5%)
- Wrong or mixed system 329,427 (65.1%)
- No coordinates recorded 42,624 (8.4%)
| What the coordinate columns contain | Permits |
|---|---|
| Longitude and latitude in degrees, inside San Antonio | 134,047 |
| Texas State Plane feet, a different coordinate system in the same column (recoverable by reprojection, verified) | 328,536 |
| A positive longitude, which places San Antonio in western China | 434 |
| A longitude sitting in the latitude column | 406 |
| Both systems mixed inside a single row | 51 |
| No coordinates at all | 42,624 |
Not all of that is lost. The 328,536 rows in Texas State Plane are not corrupt, they are simply in another coordinate system, and reprojecting them is arithmetic rather than a guess. Every corner of their bounding box converts into Bexar County, so all of them are recoverable. That still does not make a pin map of EVERY permit honest: 42,624 have no coordinates at all, and 891 more carry sign or axis errors that no reprojection repairs. Losing eight per cent of a map without saying so is the failure this page is about.
A pin map built from this column without checking would silently drop the 42,624 permits that have no location and scatter the broken ones across the planet, and it would look completely normal while doing it. The failure would be invisible precisely because the output is a picture, and a picture of San Antonio with dots on it looks right no matter which dots are missing. So this page does draw a pin map, but only over the category where the coordinates actually hold up, and it prints the count it is missing above the map rather than under it.
Where the new buildings are
Every permit the City issued for a new residential or commercial building, placed at its recorded coordinates. This is a complete category, not a sample, but it is not every permit: a re-roof or a water heater has no building to place.
Nothing external is contacted until you press this: not the map library, not the tile server, and not the 28,592 points.
Read the missing 2,482 as part of the map. They are not scattered at random: a permit with no coordinates is disproportionately likely to be an older or hand-entered record, so the blank spaces on this map are not necessarily places where nothing was built. That is exactly why the district map above, which loses precision but keeps every permit, is the one this page shows first.
Source. City of San Antonio open data, Building Permits (permits issued), read through the City's own API and rebuilt monthly. Fetched 29 August 2026. Nothing here is corrected, filled or smoothed: where the City's record is blank, this page shows a blank and says how large it is.
Share it with someone about to quote a construction number.
Read this before you read the numbers
A construction figure with no coverage rate attached is not a small imprecision. It is a different quantity wearing the same name.
What this is
Every permit in the City’s published “permits issued” record: 505,722 across 56 types and 11 council districts, refetched monthly and republished exactly as fetched.
What it is not
Not a measure of construction, a property lookup, or a record of what got built. A permit is a declaration of intent.
Where the numbers come from
The City’s own open data API. No field was corrected, filled or smoothed. Where the record is blank, this page shows a blank and says how large it is.
Who it is for
Anyone who has to quote a San Antonio construction number and would rather quote a defensible one.
The number that is wrong in a way that hides itself
The permit record carries a field called declared valuation. Add it up and you get a headline worth billions, quoted as though it describes construction in San Antonio.
It is computed from 2.9% of the permits. The field is blank on the other 97.1%. Not zero. Blank. And the blanks are not random: coverage is exactly zero on mechanical, plumbing, electrical, re-roofing, foundation repair, and on all 26,954 permits for new residential buildings.
So the total excludes every new house in the city while including a handful of very large projects. Nothing about it looks wrong: no error bar, no footnote, no missing-data warning, because from the arithmetic’s point of view nothing is missing. The zero is doing the work of an absence. Sharper still, 2,339 permits declaring ten million dollars or more carry 88.2% of all declared value, so a citywide dollar total is mostly a report on a few dozen projects dressed as a report on a city.
This is not a complaint about the City. The field is optional on most permit types, and no re-roof permit would carry a construction valuation. The problem appears the moment someone sums the column without asking how often it is filled in, which takes about four seconds in a spreadsheet.
Four fields that will quietly ruin your analysis
Each produces a confident, plausible, wrong answer rather than an error.
Declared valuation is mostly blank
Populated on 2.9% of permits, and on 0% of several of the largest categories. Sum it unchecked and you have measured paperwork habits, not building.
The council district field holds several districts at once
It is a comma-separated string: a permit can read “0, 1, 2, 5, 7”. Group by it naively and you invent districts and split billions across them. 5,057 permits span more than one district and are reported whole, never divided, because the record does not say how the value divides. Another 3,365 carry no district at all.
The coordinates are two coordinate systems in one column
134,047 permits carry usable longitude and latitude. 329,427 carry something else: Texas State Plane feet, a positive longitude placing San Antonio in western China, or a longitude sitting in the latitude column. 42,624 have no location at all.
District 0 is not a district
It is extra-territorial or unassigned land, and it sits in the data beside the eleven real districts looking exactly like one. It is labeled here and kept out of every comparison.
Two maps, and what each one leaves out
The two maps in this record fail in opposite directions, which is why the page carries both.
The district map works because a council district is a label. The field is messy, but once parsed properly every permit either lands in exactly one district or is reported separately as unplaceable. Nothing is guessed. It is shaded by permit count rather than dollars, because the count is on every record and the valuation is on 2.9% of them. Shading by the sparse field would draw exactly the picture this page exists to warn about.
The pin map trades the opposite way: exact locations, but only for permits whose coordinates survive inspection. Across the whole record that is not good enough, and a map that quietly omits eight per cent of its subject looks completely normal while doing it. Narrowed to new buildings it works, because those get surveyed properly: 92.0% carry a usable location once the State Plane rows are reprojected rather than discarded. The count it still misses is printed above the map instead of under it.
What this page will not do is draw the pin map over every permit and let the gaps pass for empty ground. That is the same call the trail accessibility tool makes when it refuses to certify a trail as ADA compliant from a record holding no width, grade or cross slope. Saying what a dataset cannot support is a result, not a gap in the work.
How this was built
Every figure is a grouped aggregate computed by the City’s own API and reconciled before publishing. No row-level extract is downloaded, which matters because the platform silently truncates large result sets at thirty-two thousand rows and reports success while doing it. The build compares its per-type and per-district totals against an independent count and refuses to publish at all if they disagree, so a partial fetch produces no update rather than a quietly wrong one.
It rebuilds monthly. If a rebuild fails the previous good copy stays put and the page keeps its original build date, so staleness is visible. Last rebuilt 29 August 2026. Every number in this prose is read from the same file as the tables, through a shortcode, so the essay cannot drift out of agreement with the data underneath it.
Why an IT contractor built a permit tracker
Because this is what the work looks like. Agencies hold enormous amounts of data that is technically published and practically unusable, and the hard part is never the dashboard. It is knowing that a blank is not a zero, that a column can hold two coordinate systems, that a field called district can name five, and that the honest output is sometimes a refusal. Nobody commissioned this page and it is not a sample of client work. The method is published so the figures can be checked without us.
Other San Antonio tools
Same method, a different public record. Each one states what its record cannot answer.
Crime Map Building Permits Bar & Restaurant Revenue Aggressive Driving Trail Accessibility License Plate Readers Data Centers Data Center Zoning 311 Response Times Data Center Corroboration Data Center Environmental Record Bond Projects Council District Lookup Sheriff Response Times County Capital Projects Police Response Times Missing Children Records
All 17 are free, with no signup and no email wall, and the public API behind them needs no key.
Who publishes this
These tools are built and maintained by BrandShyp LLC, a San Antonio software firm. We sell data, software and accessibility work to public agencies and are seeking state and local government contracts. Small business certification with the South Central Texas Regional Certification Agency is in process. We hold no City of San Antonio contract.
No client, agency or sponsor funds, reviews or approves any of these tools, and nothing on these pages is a solicitation. Every figure comes from the public record named below, which is linked and can be queried without us.
Corrections. If a number here disagrees with the record, write to Justice Harker at [email protected] with the figure and the source that contradicts it. Corrections are made on the page, and what changed is noted there rather than replaced silently.