The Florida Permit API

One Query. Sixty-Seven Counties.

Permit-verified roof age and full county permit history for any Florida property address — the same data backbone behind our inspection reports, reaching more than 9 in 10 Florida parcels. Built for SIU desks, underwriters, adjusters, and lien searchers who are tired of county portals.

Shown, not told

The request and the answer

Request
curl "https://warriorinspectionnetwork.com\
/v1/permit-api/lookup?address=309%20Lake%20Placid%20Ct" \
  -H "X-Api-Key: wpk_live_…"
Response
{
  "matched": true,
  "county": "pinellas",
  "coverage": "Pinellas County Accela portal
               + PCPAO bulk data…",
  "permits": [
    { "date": "2026-07-02",
      "recordType": "Express Building Permit",
      "recordNumber": "EBP-26-10505",
      "status": "Finaled",
      "detailUrl": "https://aca-prod.accela.com/…" }
  ],
  "roofCandidates": [
    { "coveringType": "…",
      "permitApplicationDate": "2026-07-02",
      "permitNumber": "EBP-26-10505" }
  ],
  "assessments": {
    "taxYear": 2025, "matched": true, "total": 591,
    "pace": false,
    "levies": [
      { "levyId": "0008", "government": "county",
        "functionLabel": "Fire control", "amount": 400 },
      { "levyId": "0011", "government": "county",
        "functionLabel": "Drainage and water control",
        "amount": 191 }
    ]
  },
  "codeCases": {
    "covered": true, "matched": true,
    "open": 1, "liens": 1,
    "cases": [
      { "caseNumber": "201204003704",
        "description": "Junk/Trash/Overgrowth…",
        "status": "Lien", "opened": "2012-08-09",
        "lien": { "book": "28594", "page": "4585",
                  "recorded": "04/23/2013" } }
    ]
  },
  "taxStatus": {
    "covered": true, "asOf": "2026-09-07",
    "delinquent": true, "openYears": ["2025"],
    "years": [
      { "taxYear": "2025", "certificateNo": "2600155",
        "certificateStatus": "Issued", "open": true,
        "note": "tax certificate outstanding" }
    ]
  },
  "caveat": "Roof candidates are automated
             classifications — verify against
             the linked county record…",
  "usage": { "used": 12, "included": 100 }
}

What it answers

The question behind wind-mit credits, underwriting checks, claim files, and lien searches: “how old is this roof, according to the public record?” Every permit on the parcel — number, date, type, description, status, and a link to the county’s own record. And, since September 2026, the parcel’s non-ad valorem assessments from the state roll: every special assessment on the tax bill with its amount, levying government and purpose, PACE flagged where the program is known. And the parcel’s code-enforcement cases, from the jurisdictions that publish their files and from the city and county portals we search live at request time: open and closed, with recorded lien book and page, balances and running fines where the source carries them. And, where the tax collector’s delinquent lists are loaded, whether the parcel’s property tax has gone unpaid, with the certificate and tax-deed state for each year (taxStatus). The response names every source searched (sources) and how the parcel was matched (matchedVia: the parcel number, a variant of it, the street address for files that publish no parcel, or a live portal); covered: false means no source covers that county yet.

What it won’t pretend

Every response carries its own limits. The coverage field states how deep that county’s records go. Absence of permits is not proof of absence of work. Roof candidates are automated classifications of permit text, always linked to the county source for verification. The honest answer beats the confident one.

Notes for engineers

  • 30 requests/minute per key; JSON in and out.
  • 401 bad key · 402 included lookups exhausted · 422 bad address · 502 county source down — 502s are never billed.
  • Warm lookups take seconds; a county source waking from idle can take up to ~90s — use a generous timeout.
  • Every lookup re-runs the county sources by default. Add &cached=true to accept a same-day answer for an address already looked up today; the response says which you got (fresh).
Who it’s for

Built for people who pull permits all day

Lien search & title companies

Open permit search before closing. Automate the county-portal legwork behind a municipal lien search report: every permit on the parcel with the county’s own status — open, expired, finaled — linked to the source record. With it, the parcel’s non-ad valorem assessments from the state roll and its code-enforcement cases from every jurisdiction that publishes a file or a public case portal, liens and balances included, with the sources named. Utility balances stay yours; the rest of the pull stops being manual.

Underwriting & SIU desks

Roof age verification against the public record. “Roof replaced in 2021” on an application or a claim becomes one call: the roofing permit’s date, type, and county link — or the documented absence of one, with the coverage caveat stated.

Adjusters & claims attorneys

The permit file for a loss address. Full building permit history, ready for the claim file, the demand package, or the exhibit list — every entry traceable to the county’s own system.

Contractor & data teams

Need a list, not lookups? Bulk screens — roofs permitted before a target year, by county or zip — are quoted separately. Ask about a book screen.

Questions

How do I look up permit history for a Florida address?

One GET request with the street address. The response is every permit found on the parcel across county building portals and property-appraiser data — number, date, type, description, status, and a link to the county’s own record.

Which Florida counties are covered?

All 67 are checked; more than 9 in 10 Florida parcels currently reach a live permit source. Every response includes a coverage field stating how deep that county’s records go — the honest answer travels with the data.

Pricing
$99/mo
includes 100 lookups · $1.50 per lookup after, invoiced monthly
Volume pricing past 1,000 lookups/month — ask. Keys are issued personally, usually same-day.