Florida Property Tax Roll - DOR NAL Assessments avatar

Florida Property Tax Roll - DOR NAL Assessments

Pricing

from $0.03 / 1,000 florida property tax roll (nal) parcel records

Go to Apify Store
Florida Property Tax Roll - DOR NAL Assessments

Florida Property Tax Roll - DOR NAL Assessments

Florida DOR statewide property tax roll (NAL), all 67 counties (public record): just/assessed/taxable values, land and homestead value, owner and mailing address, situs address, building attributes and the latest sale with its DOR code. Search by owner, county, value or use code.

Pricing

from $0.03 / 1,000 florida property tax roll (nal) parcel records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 days ago

Last modified

Categories

Share

Florida Property Tax Roll - DOR NAL Assessments (All 67 Counties)

The Florida Department of Revenue publishes each county's property assessment roll - the NAL (Name-Address-Legal) file - as free public data. This actor unifies all 67 counties into one queryable parcel register and turns it into a charged-per-record lookup and screening tool.

Built for: property and title diligence, tax-lien and assessment research, owner and absentee-owner screening, land-assembly and development analysis, and statewide tax-base analysis - one query across the whole state instead of 67 separate county downloads.

What it covers

11,093,710 parcels across all 67 Florida counties (as of the last refresh, 2026-10-07):

Final or preliminary? DOR publishes a county's roll as a Preliminary file first and replaces it with a Final (certified) file once the appraiser certifies it. The actor always takes a county's Final file where one exists - but at the last refresh 40 counties were on their Final roll and 27 were still preliminary (about 35% of the parcels). So a figure for a given county can be a preliminary number until DOR supersedes it. The state's roll year (assessmentYear) is 2026 throughout.

CountyParcelsCountyParcels
Miami-Dade938,308Orange494,750
Broward754,549Polk435,650
Palm Beach657,490Pinellas433,770
Lee561,559all 67 counties
Hillsborough527,636

Each record carries its county, parcel id, assessment year, DOR land-use code and appraiser use code, the value set - just (market) value, assessed value (school / non-school), taxable value, land value, homestead value - the owner name and mailing address, the physical (situs) address, building attributes (construction class, effective and actual year built, total living area, building and unit counts), the legal description, township/range/section, the appraiser's status code - and, where the roll records one, the most recent sale (price, year, month and its DOR sale qualification code). Most parcels carry no recorded sale (about 87% of the register), and the optional columns - building attributes, situs address, appraiser status - are filled unevenly from county to county, sometimes on most parcels and sometimes on very few. The identity and value columns (parcelId, county, justValue, ownerName) are complete; treat the rest as sparse.

How the values work. The roll is the appraiser's figures for the assessment year shown (Final where certified, otherwise preliminary). justValue is market value; assessedValueNonSchool / taxableValueNonSchool are the assessed and taxable figures after the Save-Our-Homes cap and exemptions (so a long-time homestead parcel often shows a market value far above its taxable value). homesteadValue is populated on parcels carrying a Florida homestead exemption - a positive homestead value is the quickest signal of an owner-occupied property, and it separates homestead from investment parcels in one filter.

Typical questions

  • "What is the assessed and market value of this parcel, and who owns it?"
  • "Show every Miami-Dade parcel with a just value of $1,000,000 or more."
  • "Find homestead parcels over $1M in this county."
  • "Who owns this physical address?" (owner screening, absentee detection)
  • "Aggregate the roll by county and land-use code."
  • "What is the most recent sale of a parcel, and was it a qualified arm's-length sale?"

Inputs

InputWhat it does
parcelIdexact county parcel id (combine with county)
countycounty name, or the 2-digit DOR county number. Spacing and punctuation are ignored (Miami Dade = Miami-Dade, St Johns = St. Johns, Broward County = Broward); a value matching no county is rejected
ownerNameowner name substring, case-insensitive
city / zipCodesitus (physical) city / ZIP prefix
dorUseCodeFlorida DOR land-use code (e.g. 001 single family, 004 condo)
appraiserStatusCodeappraiser assessment status code
valueMin / valueMaxjust-value range (USD)
landValueMin / landValueMaxland-value range (USD)
homesteadOnlytrue = homestead parcels only
saleYearFrom / saleYearTomost-recent-sale year window
aggregate / groupByone row per group with a count - county / use code / status / year / construction class. Returns every group and is not bounded by maxResults (the dimensions are small: 67 counties, ~100 use codes)
maxResultscap parcel records in a search/lookup (default 200; 0 = the same 200; maximum 20,000). Ignored in aggregate mode

Default run = a tiny aggregate (parcel count by county) - fast and safe for the daily auto-test, never a surprise full dump of a 10M-row register. For records, add a county / ownerName / valueMin filter or a parcelId.

A county filter is what makes a query fast. It pins one county's file. Without one, the run has to stream all 67 files (~11M parcels) - roughly 15-20 minutes - and returns the first maxResults matches in county order, not the best ones. Every example below carries a county for that reason. A bare parcelId with no county is a full statewide scan too: parcel ids are only unique within a county, so pass both.

Example inputs

Look up one parcel - combine the id with its county.

{ "county": "Miami-Dade", "parcelId": "0101000000020" }

High-value homestead parcels - a positive homestead value marks owner-occupied.

{ "county": "Broward", "homesteadOnly": true, "valueMin": 1000000, "maxResults": 10 }

Owner screening - find every parcel recorded to a name.

{ "ownerName": "SMITH", "county": "Lee", "maxResults": 10 }

The county roll - parcel counts per county, statewide (all 67 groups).

{ "aggregate": true, "groupBy": "county" }

Low cost

From $0.00005 per record, down to $0.00003 at Gold - billed only for the rows you use, and each record is metered individually.

Florida's tax roll is 67 separate county files, ~830 MB of zips totalling a multi-gigabyte register, with no query server behind them - there is no way to ask the state for "just Broward homestead parcels over $1M". Rather than make every lookup pay for the whole statewide download, the register is mirrored, and each run queries the mirror in a single pass. That mirror is what lets an 11-million-parcel register answer a county-scoped query in seconds at per-record pricing. The mirror is integrity-checked as it is built - a statewide parcel-count floor, a county-count floor and key-column coverage - so a degraded or schema-changed source is rejected instead of being published as a mirror.

Example output

A single-family homestead parcel (groupBy/mode blank; one record):

{
"platform": "fl-tax-roll-nal",
"source": "fl-dor-nal",
"state": "FL",
"refreshed": "2026-10-07",
"mode": "record",
"groupKey": "",
"groupCount": "",
"groupBy": "",
"countyNumber": "40",
"county": "Holmes",
"parcelId": "032600000000012100",
"assessmentYear": "2026",
"dorUseCode": "001",
"paUseCode": "00",
"justValue": "206311",
"assessedValueSchool": "206311",
"assessedValueNonSchool": "206311",
"taxableValueSchool": "181311",
"taxableValueNonSchool": "104900",
"homesteadValue": "206311",
"landValue": "37500",
"landSquareFeet": "4356000",
"improvementQuality": "5",
"constructionClass": "4",
"effectiveYearBuilt": "2025",
"actualYearBuilt": "2025",
"totalLivingArea": "1482",
"buildingCount": "1",
"residentialUnits": "1",
"salePrice": "45500",
"saleYear": "2025",
"saleMonth": "03",
"saleQualificationCode": "03",
"saleChangeCode": "1",
"multiParcelSale": "",
"ownerName": "WOODHAM GALE M",
"ownerAddress": "3500 BAXLEY RD",
"ownerCity": "GRACEVILLE",
"ownerState": "FL",
"ownerZip": "32425",
"physicalAddress": "3500 BAXLEY RD",
"physicalCity": "GRACEVILLE",
"physicalZip": "32440",
"legalDescription": "A LOT OR PRCL OF LAND ON HOCO",
"neighborhoodCode": "",
"township": "07S",
"range": "14W",
"section": "26",
"appraiserStatusCode": "B",
"taxAuthorityCode": "1"
}

aggregate=true, groupBy=county - parcels per county (top):

Miami-Dade 938,308
Broward 754,549
Palm Beach 657,490
Lee 561,559
Hillsborough 527,636

Source

  • Florida DOR Property Tax Data Portal - Tax Roll Data Files - the official free public county roll files this actor reads (Fla. Stat. ch. 119).
  • Assessment data is each county appraiser's roll - Final where DOR has certified it, otherwise the preliminary file - published by the Department of Revenue. It reflects the roll as of the last mirror refresh shown in refreshed on every record.