San Antonio, TX · Military City, USA UEI L58JZMKRCLM5  ·  CAGE 203C1  ·  NAICS 541511  ·  SAM.gov Active
137,425building permits issued, 2025-01-01 to 2026-08-21
2.2%of them carry a declared valuation. That is 3,044 permits, and it is where every dollar figure below comes from
$26.76Bdeclared across those 3,044 permits, not across all 137,425
11,174permits published with no location at all

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.8% of permits, including every single one of the new houses. Each table below therefore carries its own coverage column.

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 typePermitsHas a priceDeclared valuationHas a sizeFloor area
Mechanical Permit16,1320.0%none0.0%none
Plumbing General Permit15,1700.0%$413k0.0%902 sf
Electrical General Permit13,8100.0%none0.0%none
Plumbing Irrigation Permit11,3890.0%none0.0%none
Re-Roof Permit10,0830.0%none0.0%none
Residential Repair Permit9,2820.0%none0.0%none
Res New Building Permit6,4640.0%none99.4%32,615,297 sf
Garage Sale6,0350.0%none0.0%none
Foundation Repair Permit5,1780.0%none0.0%none
LSR Plumbing Permit4,5140.0%none0.0%none
Plumbing Sewer Permit4,2490.0%none0.0%none
Plumbing Gas Permit4,1540.2%$1.5M0.2%8 sf
Tree Affidavit Permit3,4270.0%none0.0%none
On Premise Sign3,1230.0%$29.0M0.1%132,150 sf
Electrical TOPS Permit2,0840.0%none0.0%none
Residential Fence Permit1,9420.0%none0.0%none
LSR Mechanical Permit1,7460.0%none0.0%none
Solar - Photovoltaic Permit1,6280.0%none0.0%none
Comm Remodel Permit1,40810.8%$69.2M3.7%1,028,484 sf
Home Addition Permit1,2220.0%none0.0%none
Minor Commercial Repair Permit9540.0%none0.0%none
Sidewalk-Curb Permit9150.0%none0.0%none
Comm New Building Permit893100.0%$19.72B100.0%275,161,817 sf
Electrical TML Permit8120.0%none0.0%none
Comm Sitework Permit78689.3%$2.52B81.6%31,321,792 sf
Demolition Permit7610.0%none99.5%2,649,563 sf
Tree Permit7600.0%none0.0%none
Swimming Pool or Spa Permit7310.0%none0.0%none
Across the Street Banner7260.0%none0.0%none
Plumbing Backflow Permit7050.0%none0.0%none
Maintenance Permit7020.0%none0.0%none
Covered Patio or Porch Permit5440.0%none0.0%none
Carport Permit4610.0%none0.0%none
Plumbing Completion Permit4410.0%none0.0%none
Electrical Reconnect Permit4190.0%none0.0%none
Electrical Completion Permit3680.0%none0.0%none
Comm Fence Permit31198.7%$974.1M28.9%10,575,090 sf
Mechanical Completion Permit2630.0%none0.0%none
Comm Finish Out Permit256100.0%$533.1M100.0%3,833,179 sf
All other permit types2,57728.0%$2.92B16.5%28,467,829 sf

7,341 of the priceless permits are not blank rows. They carry a recorded floor area totalling 38,351,073 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.

District 1: 14,728 permits, 1.9% carry a valuation ($1.51B)District 2: 14,048 permits, 2.2% carry a valuation ($740.9M)District 3: 12,293 permits, 3.1% carry a valuation ($4.41B)District 4: 12,553 permits, 2.7% carry a valuation ($3.86B)District 5: 8,171 permits, 2.0% carry a valuation ($480.8M)District 6: 10,909 permits, 3.2% carry a valuation ($3.80B)District 7: 10,860 permits, 1.2% carry a valuation ($319.2M)District 8: 11,397 permits, 3.3% carry a valuation ($2.75B)District 9: 12,811 permits, 2.1% carry a valuation ($3.24B)District 10: 14,276 permits, 2.2% carry a valuation ($2.59B)
  • under 10,909
  • 10,909+
  • 12,293+
  • 12,811+
  • 14,276 and up

Shaded by permit count, not by dollars. The count is complete on every record; the valuation is not, so shading by money would draw exactly the picture this page warns about. Hover or focus a district for its figures, including how much of it carries a valuation at all. District 0 is in the table but not on the map, because it is not a council district and the City’s district layer contains no shape for it.
DistrictPermitsWith a valuationCoverageDeclared valuation
District 0 (not a council district: extra-territorial or unassigned)13,77880.1%$1.9M
District 114,7282741.9%$1.51B
District 214,0483062.2%$740.9M
District 312,2933783.1%$4.41B
District 412,5533382.7%$3.86B
District 58,1711622.0%$480.8M
District 610,9093543.2%$3.80B
District 710,8601281.2%$319.2M
District 811,3973713.3%$2.75B
District 912,8112742.1%$3.24B
District 1014,2763112.2%$2.59B
Spans several districts (valuation deliberately not divided between them)98293$1.79B
No district recorded619not stated

Permits issued per month

peak 267.6 permits a day2025-01: 6,588 permits over 31 days = 212.5 a day, 3.3% carry a valuation2025-02: 6,199 permits over 28 days = 221.4 a day, 2.4% carry a valuation2025-03: 6,761 permits over 31 days = 218.1 a day, 1.8% carry a valuation2025-04: 8,027 permits over 30 days = 267.6 a day, 1.9% carry a valuation2025-05: 7,670 permits over 31 days = 247.4 a day, 2.1% carry a valuation2025-06: 7,384 permits over 30 days = 246.1 a day, 1.7% carry a valuation2025-07: 7,598 permits over 31 days = 245.1 a day, 1.9% carry a valuation2025-08: 7,132 permits over 31 days = 230.1 a day, 1.7% carry a valuation2025-09: 7,773 permits over 30 days = 259.1 a day, 3.0% carry a valuation2025-10: 7,618 permits over 31 days = 245.7 a day, 1.9% carry a valuation2025-11: 6,157 permits over 30 days = 205.2 a day, 2.4% carry a valuation2025-12: 5,334 permits over 31 days = 172.1 a day, 2.8% carry a valuation2026-01: 6,098 permits over 31 days = 196.7 a day, 2.9% carry a valuation2026-02: 6,348 permits over 28 days = 226.7 a day, 2.4% carry a valuation2026-03: 7,413 permits over 31 days = 239.1 a day, 2.0% carry a valuation2026-04: 6,900 permits over 30 days = 230.0 a day, 1.7% carry a valuation2026-05: 6,694 permits over 31 days = 215.9 a day, 2.5% carry a valuation2026-06: 7,275 permits over 30 days = 242.5 a day, 1.8% carry a valuation2026-07: 7,539 permits over 31 days = 243.2 a day, 2.3% carry a valuation2026-08: 4,917 permits over 31 days = 158.6 a day, 2.3% carry a valuation2025-012026-012026-08
Permits per day, not per month. A raw monthly count makes February look like a slump when it is mostly just three fewer days: on this record February sits 9 to 11 per cent below average on raw counts and only 1 to 4 per cent below once the calendar is divided out. Hover a bar for the raw count, the day count and the valuation coverage. The most recent month is usually partial, because the City republishes as permits are processed.

How concentrated the recorded value is

569 permits carry 90.3% of all the declared value on the record. That is 0.41% of permits holding most of the money, which is worth knowing before treating a citywide dollar total as broad-based activity.

Declared valuationPermitsTotal declaredShare of declared value
$10M and above569$24.17B90.3%
$1M to $10M694$2.19B8.2%
$250k to $1M624$327.5M1.2%
$50k to $250k504$61.5M0.2%
$10k to $50k484$13.5M0.1%
Under $10k169$781k0%

Shares are of the declared value only, which is the 2.2% 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.

134,287valuations are genuinely blank, against just 94 that are a literal zero. The field is unrecorded, not a claim that the work was free
7,341of those priceless permits carry a recorded floor area instead, totalling 38,351,073 square feet
2,302square feet is the median new home in this record. The mean is 5,079, pulled up by apartment buildings filed as residential

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 for the 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.

$0is what the City’s own record shows for new residential construction value, across every one of its new-home permits
$796.7Mis what the Census Bureau puts new residential construction in Bexar County at, through 2026-07
6.9%of that Census figure is imputed, not reported, because some permit offices did not respond. Their file says so in a separate column
Census Building Permits Survey, Bexar CountyBuildingsValue
Single-unit3,061$569.9M
Buildings of five units or more (663 units)58$226.8M
Of the single-unit total, actually reported rather than imputed2,799262 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. 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: 121,867 permits (88.7%)Wrong or mixed system: 4,493 permits (3.3%)No coordinates recorded: 11,174 permits (8.1%)
  • Usable coordinates 121,867 (88.7%)
  • Wrong or mixed system 4,493 (3.3%)
  • No coordinates recorded 11,174 (8.1%)
What the coordinate columns containPermits
Longitude and latitude in degrees, inside San Antonio121,867
Texas State Plane feet, a different coordinate system in the same column (recoverable by reprojection, verified)4,259
A positive longitude, which places San Antonio in western China108
A longitude sitting in the latitude column113
Both systems mixed inside a single row13
No coordinates at all11,174

Not all of that is lost. The 4,259 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: 11,174 have no coordinates at all, and 234 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 11,174 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.

7,011new-building permits on the map, of 7,357 issued. That is 95.3% of them
346are missing from it: 344 have no coordinates in the record and 2 carry an error no conversion repairs
433were rescued by reprojecting them out of Texas State Plane, rather than quietly dropped for being in the wrong units

Nothing external is contacted until you press this: not the map library, not the tile server, and not the 7,011 points.

Read the missing 346 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 28 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.

Download the whole thing as CSV · Use the free API

Share it with someone about to quote a construction number.

Free, no signup, no email wall. Useful to anyone reporting on building in San Antonio.

Facebook LinkedIn X WhatsApp Email

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: 137,425 of them across 40 permit types and 11 council districts, refetched monthly and republished exactly as fetched.

What it is not

It is not a measure of construction, a property lookup, or a record of what got built. A permit is a declaration of intent. Nothing here says the work started, finished, or ever happened.

Where the numbers come from

Directly from the City of San Antonio’s own open data API. No field was corrected, filled or smoothed. Where the City’s 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. Reporters, analysts, and anyone checking a figure they were handed.

The number that is wrong in a way that hides itself

The City’s permit record carries a field called declared valuation. Add it up across every permit and you get a headline worth billions of dollars. That total is real arithmetic on real data, and it is quoted as though it describes construction in San Antonio.

It is computed from 2.2% of the permits. The field is blank on the other 97.8%. Not zero. Blank. And the blanks are not scattered randomly across the boring permits: coverage is exactly zero on mechanical work, on plumbing, on electrical, on re-roofing, on foundation repair, and on all 6,464 permits for new residential buildings.

So the total excludes every new house in the city while including a handful of very large projects, and it presents the result as the value of construction. Nothing about the number looks wrong. It has no error bar, no footnote, and no missing-data warning, because from the arithmetic’s point of view nothing is missing. The zero is doing the work of an absence.

The concentration makes it sharper still. 569 permits, each declaring ten million dollars or more, carry 90.3% of all the declared value on the record. A citywide dollar total is therefore mostly a report on a few dozen large 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 there is no reason a re-roof permit would carry a construction valuation. The problem appears at the moment someone sums the column without asking how often it is filled in, and that is a thing anyone can do in about four seconds in a spreadsheet.

Four fields that will quietly ruin your analysis

Each of these produces a confident, plausible, wrong answer rather than an error.

Declared valuation is mostly blank

Populated on 2.2% of permits, and on 0% of several of the largest categories. Sum it without checking and you have measured paperwork habits, not building. Always publish the coverage rate beside the dollar figure.

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 that do not exist and split billions across them. 982 permits span more than one district here and are reported whole, never divided, because the record does not say how the value divides. Another 619 carry no district at all.

The coordinates are two coordinate systems in one column

121,867 permits carry usable longitude and latitude. 4,493 carry something else: Texas State Plane feet, a positive longitude that places San Antonio in western China, or a longitude sitting in the latitude column. 11,174 have no location at all.

District 0 is not a district

It is extra-territorial or unassigned land. It appears in the City’s data beside the eleven real council districts and looks exactly like one of them. It is labelled here and kept out of any comparison between districts.

Two maps, and what each one leaves out

There are two maps in this record and they fail in opposite directions, which is why the page carries both.

The district map above works because a council district is a label. The field is genuinely messy, a comma-separated string that names several districts at once on 982 permits and none at all on 619 more, but once you parse it properly every permit either lands in exactly one district or is reported separately as unplaceable. Nothing is guessed. And the map is shaded by permit count rather than by dollars, because the count is on every record and the valuation is on 2.2% of them. Shading a map 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 the permits whose coordinates survive inspection. Across all 137,425 permits that is not good enough. 11,174 have no coordinates at all, and a map that quietly omits eight per cent of its subject looks completely normal while doing it. The failure would be invisible precisely because the output is a picture, and a picture of San Antonio with some dots on it looks right no matter which dots are missing.

Narrow it to new buildings and the picture changes. Those permits get surveyed properly, so 95.3% of them carry a usable location once the Texas State Plane rows are reprojected rather than discarded. That is a complete category rather than a sample, and the count it is still missing is printed above the map instead of under it. A stated omission is not a silent one, and that distinction is the whole difference between the two maps.

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 that contains 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

Everything on this page is a grouped aggregate computed by the City’s own API and reconciled before it is published. 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 anything at all if they disagree, so a partial fetch produces no page update rather than a quietly wrong one.

The whole thing is rebuilt monthly. If a rebuild fails, the previous good copy stays exactly where it is and the page carries its original build date, so staleness is visible and a bad fetch can never turn into bad numbers. The figures on this page were last rebuilt on 28 August 2026.

Every number in the prose above is read from the same file as the tables, through a shortcode, so this essay cannot drift out of agreement with the data underneath it. If the City’s coverage rate changes next month, this sentence changes with it.

The data is free to take. There is a CSV of the entire dataset and a public JSON API with a documented OpenAPI description, both linked from the panel above. The API’s quality endpoint returns the coverage rates and the coordinate audit as structured data, so a consumer who never reads this page still gets told what the numbers do and do not support.

Why an IT contractor built a permit tracker

Because this is what the work actually looks like. Public agencies hold enormous amounts of data that is technically published and practically unusable, and the hard part is almost 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 of them, and that the honest output is sometimes a refusal.

Anyone can build a chart from a government CSV. The difference is whether the person who built it checked what the fields mean first, and whether they will tell you when the answer is that the data does not support the question. This page is a public, checkable sample of that.

If you have a dataset that needs the same treatment, that is the work we do. See our capabilities or get in touch.

Want the monthly rebuild in your inbox? Leave an email and we will send you the update when the numbers move.

We'll send a copy and, if you want, help you take the next step. No spam.

Related free tools

San Antonio Trail and Sidewalk Access

Every city trail by surface firmness, plus the sidewalk network by council district, with an audit of the inventory’s own missing-data sentinels. Certifies nothing, and says why.

San Antonio Crime Map

Forty-two months of SAPD offences by ZIP code with trends, per-capita rates and a statistical test that mostly reports that nothing unusual happened, because that is usually the truth.

The free API platform

Every one of these datasets is available as documented, CORS-enabled JSON with an OpenAPI description. No key, no signup, no rate limit worth mentioning.

Priority Scheduling

Schedule Your Technical Briefing

Skip the email queue. Book a direct 30-minute discovery session on our technical calendar.

Pick a date

Available times

All times shown in Central (Chicago)
Pick a date from the calendar to see available time slots.
Your meeting

You're booked.

A confirmation email is on its way from [email protected].

If you need to reschedule, reply to the confirmation email and we’ll handle it.