Roof Age From Building Permits: A Faster Insurance Data Source
Permit-derived roof age is the date a jurisdiction issued a roofing or reroof permit — the closest public ground-truth signal for when a roof was replaced. It surfaces within days through the PermitStack API (free tier; paid from $19/mo), refreshed daily. The honest caveat: not every reroof is permitted, so gaps exist.
For property insurers, roof age is one of the single most predictive variables in a homeowner's risk profile. The problem has never been knowing it matters — it's getting it fresh, by address, without waiting on an aerial flyover or a costly site inspection. Permits solve that.
What is permit-derived roof age and how does it work
When a homeowner or contractor replaces a roof, almost every U.S. jurisdiction requires a permit before the work begins. That permit is a dated, government-issued record: an application is filed, the city or county reviews it, and a permit is issued. The issue date of a roofing or reroof permit is, in practice, the date the roof was replaced — accurate to the day.
PermitStack ingests those records directly from city and county open-data portals every single day, normalizes them into a consistent schema, and classifies each one into a category. Roof work lands in our ROOFING category. So "permit-derived roof age" is simply: find the most recent issued ROOFING permit at an address, and that issue date is your verified roof-replacement date. No imagery inference, no model guessing from a photo — a real administrative event a government recorded.
This differs fundamentally from the imagery incumbents. CAPE Analytics, ZestyAI, Verisk, and Cotality (formerly CoreLogic) infer roof condition and age from aerial photography — powerful for condition scoring, but a slower, indirect lens on a different question.
Permit data vs aerial imagery vs inspection — a freshness and accuracy comparison
The three ways to establish roof age trade off freshness, cost, and the kind of truth they produce. Permits give you a hard issue date the moment a city records one; imagery infers change on a flyover schedule; inspection is the gold standard but doesn't scale to a book of business. Here is the honest breakdown (competitor figures are publicly reported, as of June 2026):
| Method | Update cadence | Typical lag to a new roof | Ground-truth basis | Cost |
|---|---|---|---|---|
| PermitStack (permit data) | Daily | Days from permit issuance | Jurisdiction-issued permit date (administrative ground truth) | Free tier (100 req/day); paid from $19/mo, self-serve |
| Shovels.ai (permit data) | ~Twice monthly (biweekly) | Up to ~2 weeks + issuance | Jurisdiction-issued permit date | ~$599/mo entry, sales-gated |
| Aerial imagery (CAPE, ZestyAI, Verisk, Cotality) | ~6–12 month flyover cadence | 6–8+ months | Photo-inferred (model estimate of age/condition) | Enterprise, quote-based — contact sales (pricing not published) |
| Physical inspection | On-demand only | None (if dispatched) | Direct human observation | High per-property; doesn't scale |
Where permit data wins (recency, hard issue dates, low cost)
Permit data's edge is recency and precision of the event. A reroof permit issued on Tuesday can be in our API within days — we refresh daily, versus Shovels' roughly twice-monthly refresh and imagery's 6-to-12-month flyover cadence. And it's a real date, not a model output: you're reading the city's own record, not a confidence score on a satellite tile. For a high-volume use case like underwriting or renewal pricing, that combination of freshness, hard dates, and a published free-to-$19 entry point is hard to beat.
Where permit data has gaps (unpermitted reroofs, coverage by jurisdiction)
We'll be the first to say it: permits are not a complete census of every roof. Some reroofs are done without a permit — a homeowner skips the process, or a small repair doesn't trigger one. And coverage varies by jurisdiction; a city that doesn't publish open data, or one whose feed went dark, leaves a gap. This is exactly where imagery has a genuine advantage — it sees the roof whether or not anyone pulled a permit. We don't hide that. Instead, every jurisdiction in PermitStack carries a data_status flag (active, historical_archive, or frozen) that's exposed in the API and on our coverage page, so you always know whether a "no permit found" means "no reroof" or "we don't have current data here." That transparency is the point: absence of a permit is a signal to inspect, not a conclusion.
How insurers use roofing permits in underwriting
Roofing permits do more than date a roof. In underwriting and renewal, insurers use the permit stream to:
- Verify roof age — confirm the self-reported roof age on an application against the jurisdiction's issued reroof date, and reprice or flag mismatches.
- Catch unapproved or undisclosed work — additions, structural changes, and renovations that should have been disclosed often show up first as a permit.
- Spot major upgrades — new electrical service, HVAC, or plumbing permits indicate a maintained property and can offset risk.
- Trigger renewal review — a fresh roofing permit on a book property is a positive signal worth re-rating at renewal.
The operational win is speed. When roof age can be confirmed from a dated permit record instead of waiting on a flyover refresh or dispatching an inspector, underwriting decisions that used to stall on missing data move forward — wiring ground-truth permit data into the workflow means measurably faster cycle times, fewer manual inspections, and less back-and-forth on applications. You can read more about the insurance workflow on our insurance solutions page.
How to pull roofing permits and roof-replacement dates by address via API
The fastest path to a roof-replacement date is a single search call filtered to the ROOFING category at a specific address. Our address parameter does a fast, case-insensitive partial street match against an indexed column:
curl "https://api.permit-stack.com/v1/permits/search?category=ROOFING&address=123+Main+St&status=ISSUED" \
-H "X-API-Key: pk_your_key_here"
Each result includes the address, lat/lng, category, status, property_type, a work description, date_filed / date_issued, and estimated value where available. The most recent date_issued on a roofing permit is your roof-replacement date. In Python, scoring a property is a few lines:
import requests
API_KEY = "pk_your_key_here"
headers = {"X-API-Key": API_KEY}
# Find roofing permits at a single address
resp = requests.get(
"https://api.permit-stack.com/v1/permits/search",
headers=headers,
params={
"category": "ROOFING",
"address": "123 Main St",
"status": "ISSUED",
"per_page": 100
}
)
roofs = resp.json()["results"]
if roofs:
latest = max(roofs, key=lambda p: p["date_issued"] or "")
print(f"Roof last permitted: {latest['date_issued']}")
else:
print("No roofing permit on record — flag for inspection")
For a complete per-address timeline across all categories — useful when you want the full renovation history alongside the roof — call the property history endpoint, which powers our property history product:
curl "https://api.permit-stack.com/v1/property/history?address=123+Main+St" \
-H "X-API-Key: pk_your_key_here"
When there's no match, the endpoint returns found: false rather than a 404 — an honest "we have no record here," which your workflow should treat as a prompt to inspect, not as proof the roof is old. To score an entire book, pull bulk roofing records by city, state, or ZIP and reconcile against your portfolio with our roofing permit data, or bulk-export matching permits to CSV via /v1/permits/export (export size scales with your plan).
How fresh and how complete is the data
Freshness is our headline edge, so we want to be precise about it. We run ingestion daily across roughly 522 active jurisdictions (plus 24 historical-archive sources), so a roofing permit issued by a covered city can appear in the API within days of issuance. That is materially fresher than the roughly twice-monthly refresh cadence publicly reported for Shovels.ai, and dramatically fresher than the 6-to-12-month flyover cadence typical of aerial-imagery roof-age vendors.
Completeness is where honesty matters more than marketing. We expose a data_status on every jurisdiction — active means the source publishes current data, historical_archive means the feed is frozen or decommissioned, and frozen means it's temporarily not updating. Those labels are in the API responses and on the coverage page, where you can see exactly which jurisdictions are current, archived, or frozen before you rely on them. The discipline is simple: we'd rather tell you a jurisdiction is archived than let you assume a roof was never replaced because we quietly stopped getting data.
How to look up when a roof was last replaced on a single house
You don't need to be an insurer or write code to do this. If you're a homebuyer, agent, or homeowner who just wants to know when a roof was last replaced on one address, the same data powers our consumer-facing property history lookup — type an address and see the permit timeline, including any roofing or reroof permits and their issue dates. It's the same ground-truth signal, packaged for a single-property question.
FAQ
How do insurers use building permit data?
Insurers use building permit data to verify roof age, catch unpermitted additions or undisclosed renovations, and confirm major upgrades (electrical, HVAC, structural) during underwriting and renewal. A roofing or reroof permit issued by the jurisdiction gives a hard, dated ground-truth event — the closest public proxy for when a roof was actually replaced — which speeds risk scoring and reduces back-and-forth inspections.
Is roof replacement public record?
In most U.S. jurisdictions a permitted roof replacement is public record. Cities and counties require a permit to reroof, and those permit records — including the issue date and address — are released through open-data portals. PermitStack ingests and normalizes those records so you can look up reroof permits by address via API. The caveat: not every reroof is permitted, so absence of a permit does not prove a roof was never replaced.
How accurate is permit-derived roof age?
When a reroof permit exists, the issue date is jurisdiction-issued ground truth, accurate to the day — more precise than aerial imagery, which infers change from photos captured on a 6-to-12-month flyover cadence. The limitation is coverage, not precision: unpermitted reroofs leave no record, and jurisdiction coverage varies. PermitStack labels every jurisdiction active, historical_archive, or frozen so you know where data is current.
How can I verify roof age for an insurance policy?
Query the PermitStack API for roofing permits at the property address: GET /v1/permits/search?category=ROOFING&address=123+Main+St, or pull the full per-address timeline from /v1/property/history. The most recent issued roofing or reroof permit date is your verified roof-replacement date. If no permit is found, the roof may predate available records or the reroof may have been unpermitted — flag for inspection rather than assuming age.
How fresh is the data versus aerial imagery?
PermitStack refreshes daily, so a reroof permit can surface within days of issuance. Shovels.ai, the category leader, refreshes roughly twice monthly (publicly reported, as of June 2026). Aerial-imagery roof-age vendors (CAPE Analytics, ZestyAI, Verisk, Cotality) typically refresh on a 6-to-12-month flyover cadence, so a brand-new roof can be missing from imagery datasets for 6 to 8 or more months.
Verify roof age by address — start free
Get a free API key (100 requests/day, no credit card) and pull permit-derived roof dates today. Paid plans from $19/mo, self-serve.
Get Free API Key