Why Is Building Permit Data So Hard to Understand? (And How We Make It Readable)

The most complete record of what has happened to America’s buildings is written in a language almost nobody can read. Here is a sample — one real permit, exactly as published:

T/O R/R RESHEET 20 SQ W/ 30 YR LAM DIM COMP

That line is not a summary with a longer report behind it. It is the complete legal description of the work — the permanent public record, registered with the jurisdiction, of what was done at that property.

A roofer reads that in a second: tear off the old roof, remove and replace, re-sheathe the deck, and install 20 squares — 2,000 square feet — of 30-year dimensional composition shingle. To everyone else, it might as well be encrypted. And there are hundreds of millions of records like it, issued by roughly 20,000 permit jurisdictions with no standard between them — no shared abbreviations, no shared field names, not even a shared definition of what a “closed” permit means.

We’ve written before about what a permit reveals about a property and why that matters for claims. This post is about the part nobody talks about: before any of that value can be used, someone has to turn that shorthand into something a person — or a system — can actually read.

Why is building permit data so inconsistent?

Because no one was ever in charge of making it consistent. Each jurisdiction built its own permitting system on its own timeline, for its own clerks — not for an insurer, a lender, or anyone three states away. The record is a byproduct of an internal workflow, and it reads like one.

The strange part is that construction itself is standardized. Nearly every jurisdiction enforces some version of the same model building codes, published by the International Code Council. But the standard covers the building, not the paperwork — a town can enforce the 2021 International Building Code to the letter and still write the receipt in a dialect all its own. It’s two restaurants cooking the identical dish from the same recipe, and describing it on their menus in completely different words. Same dish, same recipe — you’d never know it from the menu.

And no one upstream fixes it. HUD’s SOCDS and the Census Bureau’s Building Permits Survey only tally monthly counts of new homes authorized by place — and since 2022 the Census collects even that from only about 8,600 jurisdictions, statistically imputing the rest. Nowhere in the public record is there a clean, address-by-address history of what was actually built.

What do the codes and abbreviations on a building permit mean?

The most difficult field is the one that carries the most value: the free-text description of the work. Clerks and contractors write it in trade shorthand, all caps, no key — a note to their future selves, not a message to you. Here are four real records from Builty’s permit database, each from a different jurisdiction, each in its own dialect, next to what the work actually is:

Raw description (as published)

Jurisdiction

What it actually means

T/O R/R RESHEET 20 SQ W/ 30 YR LAM DIM COMP

Sacramento, CA

Full roof tear-off and replacement, 2,000 sq ft of 30-year dimensional composition shingle

E/C/O 3 TON A/C 16 SEER, 10 KW HEAT PER PLAN PER CODE

Pinellas Park, FL

Change-out of a 3-ton, 16-SEER air conditioner with a 10 kW electric heat strip

100 AMP SERVICE PANEL, WIRING TO FAU IN ATTIC, WIRING TO 3 TON A/C ON ROOF.

Los Angeles, CA

New 100-amp electrical panel, with wiring to the furnace in the attic and the 3-ton air conditioner on the roof

NEW SFD CVRD PORCH PATIO INCL A/C UNF BSMT LWN SPRK

Greeley, CO

New single-family house — covered porch, patio, air conditioning, unfinished basement, lawn sprinklers

The same shorthand is often ambiguous, too. In the Pinellas Park record above, E/C/O means an equipment change-out — old unit out, new one in. But the Greeley permit in the same table carries an inspection line reading CO READY — and there, CO means certificate of occupancy, the sign-off that a home is safe to live in. Nearly the same letters, unrelated meanings, and only the surrounding context tells you which is which. A plain text search can’t tell them apart — which is why you can’t just search the descriptions for the work you’re looking for.

Why does usable permit data matter?

Everything valuable about a permit is locked behind that shorthand. A permit is the closest thing there is to a verified record of what happened to a building — when the roof was replaced, whether that addition was legal, how a property has been maintained over decades. But none of it can be used until the record is readable, and the same unreadable data blocks anyone trying to rely on it:

  • Real estate and lending. An unpermitted addition only shows up if the permit search lands on the right property in the right jurisdiction. A messy address that doesn’t match gives a false all-clear — the work was permitted, the buyer or lender just couldn’t see it.
  • Insurance. You can’t price a risk, or fairly settle a claim, on evidence you can’t read. Roof age alone is a billion-dollar blind spot: by one insurance-industry estimate, inaccurate roof-age data costs insurers up to $1.31 billion a year in premium leakage, with one in five roof ages underreported by 15 years or more. The date that would correct the record is sitting in a permit — unread.
  • Construction and market analysis. Comparing building activity, timelines, or scope across cities breaks down when every city records those things in its own words. Any comparison needs one shared vocabulary first.

In every case the value isn’t in the raw permit. It’s in the readable version of it.

Why are raw permit records hard to use at scale?

The cryptic descriptions are only the most visible problem. The fields around them are just as inconsistent, and across thousands of records the small mismatches are the expensive ones:

  • The status words don’t agree. A finished, signed-off permit might read “29 Bldg FINAL” in Sacramento, “Permit Finaled” in Los Angeles, “Mechanical Final” in Polk County, or — asterisks and all — “**CLOSE PERMIT” in Greeley. Builty has cataloged nearly 29,000 distinct status phrases, including gems like “closed - active” and “approval steps are done. decision is pending” — and some status fields hold claim numbers, payment reminders, or, in one case, an arts-and-crafts show schedule. No keyword list survives that.
  • The dates are scattered. Applied, issued, and completed dates hide in differently named fields, in a dozen formats, often blank or swapped. Yet the gap between issued and completed is exactly the signal that decides prior-damage disputes.
  • The real information is buried in prose. Cost, contractor, scope, even the address are often stuffed inside one free-text string instead of sitting in their own fields.
  • The address rarely matches cleanly. Everything depends on tying a permit to a property, but raw addresses arrive abbreviated, misspelled, missing unit numbers, or replaced with a builder’s internal lot code. If the address doesn’t match, the permit is invisible no matter how clean the rest of it is.
  • And some work never enters the record at all. California requires a permit to replace a home’s HVAC system; state analyses have found only about 10 percent of residential replacements actually get one. The rule for honest use: a permit is strong proof that work happened — the absence of one is not proof that it didn’t.

Any one of these is a nuisance for a single lookup. Across millions of properties and thousands of jurisdictions, they compound into a dataset you can’t trust.

How does Builty standardize building permit data?

Builty translates every record into one common format, the same way every time, no matter which jurisdiction it came from. That means mapping each jurisdiction’s fields onto a shared structure, cleaning up addresses so they match the right property, putting every date on one timeline, and sorting the cryptic descriptions into plain categories of work. The knowledge that C/O means “change-out” on a mechanical permit and “certificate of occupancy” on an inspection line is built into that process, not left to a text match.

The result is that T/O R/R RESHEET 20 SQ stops being a line you have to squint at and becomes a roof replacement you can search for, count, and tie to the right property — with the date the inspector signed it off attached. Was the roof ever replaced, and when? Now the record can answer.

What does a standardized permit record look like?

Here is one real record, before and after. On the left is what the Greeley, Colorado building department published; on the right is the same record after standardization:

Before-and-after of one real Greeley, Colorado building permit. As published, the record is trade shorthand: record type RESIDENTIAL NEW; a description reading NEW SFD CVRD PORCH PATIO INCL A/C UNF BSMT LWN SPRK; three unlabeled dates, 3/10/2020, 4/14/2020 and 9/28/2020; and 60-plus raw inspection rows such as STRUCT ROUGH/FAILED, MECH FINAL, CO READY and **CLOSE PERMIT. Standardized by Builty, the same record becomes structured fields: work type New; project types New Construction, Deck and Paving; property type Residential; record type Building Permit; status Final; 60-plus structured inspection entries with type, result and date; and a labeled timeline of submitted 2020-03-10, issued 2020-04-14, finaled 2020-09-28.

The illegible pile on the left is the record as it exists in the wild. The fields on the right are the same facts — now in a form you can search, sort, and line up against every other jurisdiction that wrote its own version of the same permit a different way.

From cryptic records to one language

The jurisdictions are not going to standardize themselves — and not for lack of being asked. In 2015, a coalition of tech and real estate companies including Zillow, Accela, and Socrata launched BLDS, an open data standard for building permits. A handful of cities adopted it. The other nineteen-thousand-odd did not — the standard asked every town to do extra work so that everyone else could benefit, and the towns, reasonably enough, passed.

So we did the translation for them instead: the Builty API takes an address and returns the readable, address-level permit history behind it, kept current as new records keep arriving in their thousands of incompatible formats.

That cryptic roofing line we opened with is not an outlier. It’s the normal state of permit data. The work is making it readable — one record, one address, one language at a time.

For what a permit record contains and why it matters for risk, start with What Is a Building Permit, and What Can It Reveal About Risk? For how many jurisdictions produce this data, see How Many Building Permit Jurisdictions Are There in the US? For the claims angle, see Property Claims Blind Spot: Building Permits.