All guides

Build a Florida recently sold homes list from property transfer records

Turn Florida deed transfers into a list of recently sold homes with prices, sale months, parcel details, and the owner recorded on the tax roll.

What you’ll make

A spreadsheet with one row per recorded sale from Florida Department of Revenue sale files, joined to the parcel’s tax-roll information. You’ll need an Apify account and a spreadsheet app. A parcel sold twice can appear twice.

The owner fields show the owner on the selected tax roll. That person or organization is not necessarily the buyer in every sale row: the roll may lag a deed or reflect a later transfer. These files support research into published sales; they are not a live feed of today’s new owners.

1. Start with a small sales sample

Open Florida Property Sales & New Owner Leads and use this JSON input.

Single-family sales sample
{
  "counties": [
    "Orange"
  ],
  "roll": "latest",
  "saleDateFrom": "2026-01",
  "saleDateTo": "2026-06",
  "qualifiedOnly": true,
  "vacantOrImproved": "improved",
  "landUseCodes": [
    "001"
  ],
  "excludeMultiParcel": true,
  "maxResults": 20
}

This example selects single-family sales from January through June 2026. Dates use YYYY-MM because the source provides sale month and year, without a day. Choose months covered by the roll you are reading; recent months can be incomplete.

Check the actor’s current pricing and set a maximum charge before starting. A small maxResults limits delivered rows; it does not make a sample a complete county export. Check the run log for limits and incomplete results.

2. Choose the transactions you need

qualifiedOnly: true keeps qualification codes 01 through 06, which the actor treats as qualified market sales. It is explicitly enabled here; the actor’s default is off. To select other codes with qualificationCodes, turn qualifiedOnly off if those codes fall outside that range. The two filters apply together.

excludeMultiParcel: true removes transactions flagged as covering multiple parcels, where the same total price may appear against several parcels. For vacant land research, use vacantOrImproved: "vacant" and landUseCodes: ["000"]. Price and acreage bounds can narrow the sample further.

3. Export and inspect the join

When the run finishes, open its output dataset and inspect a few rows. Choose CSV or Excel from the export options. In Google Sheets, use File → Import → Upload. Keep identifiers and ZIP codes as text so leading zeros survive the import.

Illustrative output — invented rows, not collected records.
parcelIdsaleDatesalePricerollMatch
DEMO-PARCEL-0012026-03250000true
DEMO-PARCEL-0022026-04310000true

Keep county, parcelId, saleId, saleDate, salePrice, qualificationCode, and multiParcelSale. The rollMatch flag tells you whether the sale’s parcel was found on the tax roll. A missing match leaves the joined owner and property fields unavailable.

Check ownerName and the owner mailing fields separately from situsAddress, situsCity, and situsZip. Keep sdfUrl, nalUrl, rollYear, and rollType for provenance. Treat missing values as unknown, including missing owner ZIP codes.

4. Verify selected sales

Use the county property appraiser or clerk to check a transaction before relying on its buyer, date, or price. The export includes available clerkNumber, orBook, and orPage references to help locate the deed. Preserve your source link and review date in separate columns.

A tax-roll use code and a qualified-sale flag are useful filters. They do not by themselves establish that two properties are comparable. Keep your own research notes separate from the source values.

5. Refresh without losing separate sales

Save your counties, filters, and sale months as an Apify task. Refresh when new sale and roll files are published. roll: "latest" follows the newest year available for both file types, preferring final files when available. Choose a specific roll type and year when you need a reproducible snapshot.

Archive dated exports and replace the corresponding snapshot in your working sheet. Do not deduplicate solely by parcel ID: one parcel can have multiple legitimate sales. Keep the sale identifier and deed references with each row, and inspect missing identifiers before merging records across roll releases.

For several counties, the result limit applies across the full run in county order. Split larger exports by county if you need to establish coverage for each one.

If sales or owner details are missing

Check whether the sale months are present in the selected files. Loosen price, land-use, or qualification filters and inspect rollMatch. Filters on joined owner or acreage fields can exclude unmatched parcels. Read the log for missing files or a result cap before treating a short export as the full market.

Start with a small export.

Check the sample against its source before expanding or scheduling your search.

Open the actor on Apify