transcript.md
↑ ContentsState Planner chat · https://stateplanner.com
- State: Florida (FL)
- Started: November 12, 2026, 5:51 PM UTC
- Runtime: 38 sec
- Status: completed
Prompt
Which Florida counties issued the most building permits for new homes from 2020 to 2025, and per 1,000 residents?
Model: Anthropic: Claude Opus 5.5 (anthropic/claude-opus-5.5, via openrouter)
Response
From 2020 through 2025, building permits in Florida authorized 1,132,940 new privately owned housing units. These are the Census Bureau's Building Permits Survey estimates, with the Bureau's fill-in for permit offices that didn't report. I counted housing units, not permits or buildings. One permit for an apartment building can cover hundreds of units.
To get the rate, I divided each county's six-year total by its July 1, 2025 population estimate from the Census Bureau. Counting both ways, Lee County ranks high: it permitted the most units of any county and has the 9th-highest rate.

Map legend: Each county is shaded by the number of units permitted from 2020 to 2025 for every 1,000 residents in 2025. The darkest purple is 110 or more, then 80–110, 50–80 and 20–50, and the palest is under 20. The labels show the totals for the five counties with the most units (k = thousand units). Click a county to see its total, its single-family and multifamily units, and its population.
Most housing units permitted, 2020–2025
| Rank | County | Units | Single-family | In 2+ unit buildings | Per 1,000 residents |
|---|---|---|---|---|---|
| 1 | Lee | 80,202 | 56,163 | 24,039 | 91.6 |
| 2 | Miami-Dade | 74,453 | 13,411 | 61,042 | 26.6 |
| 3 | Hillsborough | 71,581 | 36,128 | 35,453 | 45.5 |
| 4 | Orange | 67,390 | 27,655 | 39,735 | 44.1 |
| 5 | Polk | 65,907 | 51,592 | 14,315 | 75.3 |
| 6 | Duval | 53,046 | 30,754 | 22,292 | 49.9 |
| 7 | Manatee | 48,221 | 35,223 | 12,998 | 103.0 |
| 8 | Osceola | 47,668 | 34,439 | 13,229 | 99.0 |
| 9 | Pasco | 44,346 | 40,347 | 3,999 | 65.7 |
| 10 | Sarasota | 41,480 | 28,984 | 12,496 | 86.4 |
Most housing units permitted per 1,000 residents, 2020–2025
| Rank | County | Units | Per 1,000 residents (2025) | Yearly average per 1,000 |
|---|---|---|---|---|
| 1 | Walton | 15,027 | 161.1 | 29.5 |
| 2 | Sumter | 23,564 | 149.4 | 27.0 |
| 3 | Charlotte | 25,468 | 117.2 | 20.8 |
| 4 | Flagler | 15,821 | 112.7 | 20.5 |
| 5 | St. Johns | 38,454 | 111.0 | 20.5 |
| 6 | Gulf | 1,716 | 107.6 | 18.7 |
| 7 | Manatee | 48,221 | 103.0 | 18.4 |
| 8 | Osceola | 47,668 | 99.0 | 18.2 |
| 9 | Lee | 80,202 | 91.6 | 16.1 |
| 10 | Sarasota | 41,480 | 86.4 | 14.9 |
The yearly average divides total units by the populations of all six years added together.
What stands out
- The largest totals are in big metro counties, but the kinds of housing differ. In Miami-Dade, 82% of permitted units are in buildings of two or more units, and Orange and Hillsborough are close to half and half. Lee, Polk and Pasco are mostly single-family.
- The highest rates are in fast-growing coastal and retirement counties such as Walton, Sumter (home of The Villages), Charlotte, Flagler and St. Johns. Relative to their size, they permitted far more housing than the large metro counties.
- The rates are lowest in Broward and Palm Beach, at 9.0 and 22.4 units per 1,000 residents, and in several small rural North Florida counties. Holmes (3.5) and Okeechobee (4.0) have the lowest rates in the state.
Caveats
- A permit allows construction to start. It doesn't mean the home was started or finished, and some permitted units are never built.
- The survey leaves out manufactured (mobile) homes, public housing, and construction where no permit is required. Rural counties with many mobile homes may look lower than their actual housing growth.
- Population figures are Census estimates (2025 vintage), not counts.
If you meant something other than units, I can rank counties by the number of buildings, or by construction value (dollars as written on the permit, not adjusted for inflation).
Exploratory Queries
Query 1 — Check which years of permits and population are available.
SELECT (
SELECT max(YEAR)
FROM fl_bps_county_permits
) bps_max,
(
SELECT count(*)
FROM fl_bps_county_permits
WHERE YEAR BETWEEN 2020 AND 2025
) n,
(
SELECT max(YEAR)
FROM fl_census_county_pop_est
) pop_max,
(
SELECT sum(units_total)
FROM fl_bps_county_permits
WHERE YEAR BETWEEN 2020 AND 2025
) units
| bps_max | n | pop_max | units |
|---|---|---|---|
| 2025 | 402 | 2025 | 1132940 |
Query 2 — Total permitted units 2020–2025 per county with rates per 1,000 residents.
WITH p AS (
SELECT b.geoid,
sum(b.units_total) units,
sum(b.units_1) sf,
sum(b.units_2 + b.units_3_4 + b.units_5plus) mf,
sum(e.pop_estimate) popyrs,
max(e.pop_estimate) FILTER (
WHERE e.year = 2025
) pop25,
max(e.pop_estimate) FILTER (
WHERE e.year = 2020
) pop20
FROM fl_bps_county_permits b
JOIN fl_census_county_pop_est e ON e.geoid = b.geoid
AND e.year = b.year
WHERE b.year BETWEEN 2020 AND 2025
GROUP BY b.geoid
)
SELECT c.name,
units,
sf,
mf,
pop25,
round(1000.0 * units / pop25, 1) per1k_2025pop,
round(1000.0 * units / popyrs, 1) annual_per1k,
rank() OVER (
ORDER BY units DESC
) rk_units,
rank() OVER (
ORDER BY units::numeric / pop25 DESC
) rk_rate
FROM p
JOIN fl_census_counties c ON c.geoid = p.geoid
ORDER BY units DESC
| name | units | sf | mf | pop25 | per1k_2025pop | annual_per1k | rk_units | rk_rate |
|---|---|---|---|---|---|---|---|---|
| Lee County | 80202 | 56163 | 24039 | 875607 | 91.6 | 16.1 | 1 | 9 |
| Miami-Dade County | 74453 | 13411 | 61042 | 2802029 | 26.6 | 4.5 | 2 | 45 |
| Hillsborough County | 71581 | 36128 | 35453 | 1574115 | 45.5 | 7.8 | 3 | 29 |
| Orange County | 67390 | 27655 | 39735 | 1528002 | 44.1 | 7.6 | 4 | 30 |
| Polk County | 65907 | 51592 | 14315 | 874790 | 75.3 | 13.7 | 5 | 14 |
| Duval County | 53046 | 30754 | 22292 | 1062963 | 49.9 | 8.6 | 6 | 25 |
| Manatee County | 48221 | 35223 | 12998 | 468200 | 103.0 | 18.4 | 7 | 7 |
| Osceola County | 47668 | 34439 | 13229 | 481718 | 99.0 | 18.2 | 8 | 8 |
| Pasco County | 44346 | 40347 | 3999 | 674516 | 65.7 | 11.9 | 9 | 19 |
| Sarasota County | 41480 | 28984 | 12496 | 479958 | 86.4 | 14.9 | 10 | 10 |
| St. Johns County | 38454 | 30891 | 7563 | 346328 | 111.0 | 20.5 | 11 | 5 |
| Palm Beach County | 35249 | 20470 | 14779 | 1575726 | 22.4 | 3.8 | 12 | 49 |
| Marion County | 34456 | 31253 | 3203 | 442660 | 77.8 | 14.1 | 13 | 12 |
| St. Lucie County | 32695 | 27755 | 4940 | 402449 | 81.2 | 14.8 | 14 | 11 |
| Brevard County | 30935 | 24195 | 6740 | 663982 | 46.6 | 8.1 | 15 | 27 |
| Lake County | 30478 | 27282 | 3196 | 456068 | 66.8 | 12.1 | 16 | 18 |
| Collier County | 26634 | 18489 | 8145 | 417131 | 63.9 | 11.0 | 17 | 21 |
| Volusia County | 26067 | 19439 | 6628 | 606573 | 43.0 | 7.4 | 18 | 31 |
| Charlotte County | 25468 | 20411 | 5057 | 217212 | 117.2 | 20.8 | 19 | 3 |
| Sumter County | 23564 | 20849 | 2715 | 157772 | 149.4 | 27.0 | 20 | 2 |
| Broward County | 18215 | 6424 | 11791 | 2013317 | 9.0 | 1.5 | 21 | 64 |
| Pinellas County | 17002 | 6885 | 10117 | 948563 | 17.9 | 3.0 | 22 | 53 |
| Flagler County | 15821 | 13115 | 2706 | 140360 | 112.7 | 20.5 | 23 | 4 |
| Seminole County | 15659 | 6586 | 9073 | 491884 | 31.8 | 5.4 | 24 | 39 |
| Walton County | 15027 | 9788 | 5239 | 93288 | 161.1 | 29.5 | 25 | 1 |
25 out of 67 are listed here.
Map Layer Queries
Units permitted 2020–2025 per 1,000 residents (2025 pop.) — colored by "cls": 110 or more (#7a0177), 80–110 (#c51b8a), 50–80 (#f768a1), 20–50 (#fbb4b9), Under 20 (#feebe2)
WITH p AS (
SELECT b.geoid,
sum(b.units_total) units,
sum(b.units_1) sf,
sum(b.units_2 + b.units_3_4 + b.units_5plus) mf,
max(e.pop_estimate) FILTER (
WHERE e.year = 2025
) pop25
FROM fl_bps_county_permits b
JOIN fl_census_county_pop_est e ON e.geoid = b.geoid
AND e.year = b.year
WHERE b.year BETWEEN 2020 AND 2025
GROUP BY b.geoid
)
SELECT c.geom,
c.name AS "County",
p.units AS "Units permitted 2020–2025",
p.sf AS "Single-family units",
p.mf AS "Units in 2+ unit buildings",
p.pop25 AS "Population 2025",
round(1000.0 * p.units / p.pop25, 1) AS "Units per 1,000 residents",
CASE
WHEN 1000.0 * p.units / p.pop25 >= 110 THEN 'a'
WHEN 1000.0 * p.units / p.pop25 >= 80 THEN 'b'
WHEN 1000.0 * p.units / p.pop25 >= 50 THEN 'c'
WHEN 1000.0 * p.units / p.pop25 >= 20 THEN 'd'
ELSE 'e'
END AS cls
FROM p
JOIN fl_census_counties c ON c.geoid = p.geoid
Picture: maps/turn-1-permits-per-1000-residents.png
Used Data Sets
fl_bps_county_permits— last synced 2026-10-14 · 2,412 rowsfl_census_counties— last synced 2026-09-27 · 67 rowsfl_census_county_pop_est— last synced 2026-10-15 · 3,752 rows