# Florida Probate Leads: Hillsborough County (Tampa) (`finaldynamics/florida-probate-leads`) Actor

Hillsborough County (Tampa) probate leads: new estate cases from the clerk's daily probate records, with decedent, petitioner and attorneys. About four in ten match a tax-roll property with owner, mailing address and value.

- **URL**: https://apify.com/finaldynamics/florida-probate-leads.md
- **Developed by:** [Final Dynamics](https://apify.com/finaldynamics) (community)
- **Categories:** Lead generation, Real estate, Marketing
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 probate cases

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Florida Probate Leads: Hillsborough County (Tampa)

Probate leads for Hillsborough County, Florida: every new estate case in the Clerk of Court's daily
probate records, one row per case, with the person who died, the petitioner and the attorneys. When
the decedent's address in the clerk's file matches a property on the county tax roll, the row also
carries that property's owner of record, mailing address, homestead status and just value.

Before you run it, three things to know:

- **About four in ten cases match a property.** In a seven-day run on 28 October 2026, 57 of 137
  cases matched one property. The rest have no address in the clerk's file, an address outside
  Florida, no exact match on the roll, or (one case) several matching parcels. See
  [How the property match works](#how-the-property-match-works).
- **A match does not prove the decedent owned the property.** It means the clerk's address for the
  decedent is that property's address. Compare `ownerName` with `decedentName`.
- **Every case row costs the same, matched or not.** Unmatched cases are delivered and marked, so no
  estate is hidden because the clerk left out an address.

It is for real estate investors and wholesalers who write to estates about a house, probate
attorneys and the people who market their practices, and anyone who buys a Tampa probate list and
would rather pull the cases themselves.

Hillsborough County only for now. There is no skip tracing: no phone numbers or email addresses.

### What you get

One row per probate case. The examples below show each field's format; the names, addresses, case
number and parcel ID are made up.

| Field                  | Example                                | What it is                                                                          |
| ---------------------- | -------------------------------------- | ----------------------------------------------------------------------------------- |
| `caseNumber`           | `26-CP-999999`                         | The clerk's probate case number                                                     |
| `caseType`             | `Formal Administration`                | The clerk's case type (see [Case types](#case-types))                               |
| `caseTitle`            | `DOE, JANE ANN - Estate`               | The case title as the clerk lists it                                                |
| `filingDate`           | `2026-10-23`                           | The day the case was filed                                                          |
| `dailyFileDate`        | `2026-10-26`                           | The date of the clerk's daily file that lists the case; `lastDays` counts these     |
| `decedentName`         | `JANE ANN DOE`                         | The person who died; spelling variants joined with a semicolon                      |
| `dateOfDeath`          | `2026-05-14`                           | Date of death, where the clerk lists one                                            |
| `decedentAddress`      | `1234 EXAMPLE AVENUE, TAMPA, FL 33611` | The decedent's address in the clerk's file                                          |
| `petitioners`          | Name, address, attorney                | Who filed to open the case, often a relative                                        |
| `attorneys`            | `["JOHN Q LAWYER"]`                    | Every attorney listed on the case                                                   |
| `matchStatus`          | `matched`                              | `matched` (one property), `ambiguous` (several) or `unmatched`                      |
| `parcelId`             | `999999ZZZ000009999900U`               | The county parcel ID of the matched property                                        |
| `ownerName`            | `DOE JANE ANN`                         | The owner of record on the tax roll; it may not be the decedent                     |
| `propertyAddress`      | `1234 EXAMPLE AVE`                     | The property's street address, with `propertyCity` and `propertyZip`                |
| `ownerAddress1`        | `1234 EXAMPLE AVE`                     | The owner's mailing address on the roll, with city, state and ZIP                   |
| `homestead`            | `true`                                 | The property has a homestead exemption: the owner claimed it as their main home     |
| `justValue`            | `325000`                               | The property appraiser's market value on the roll, in dollars                       |
| `lastSaleDate`         | `2019-06`                              | Month of the most recent sale on the roll, with `lastSalePrice`                     |
| `propertyFilterStatus` | `pass`                                 | Whether the case passed your property filters (see [How to use it](#how-to-use-it)) |

Every party on the case (decedent, petitioners, beneficiaries, trustees and others) is in `parties`,
with the role the clerk gave them, their address and their attorney. Property fields are `null`
unless `matchStatus` is `matched`. The remaining fields are listed under [All fields](#all-fields).

Text that starts with `=`, `+`, `-` or `@` gets a leading apostrophe, so a spreadsheet shows it as
text instead of running it as a formula.

The run's counts (cases found, matched, unmatched, delivered) are in the **Run summary** on the
Output tab.

### How the property match works

The clerk's file has an address for most decedents but no parcel number. The actor compares that
address (street, house number and unit, with the same ZIP code or city) with the address of every
property on Hillsborough's tax roll. It does not guess: a different unit number, a missing house
number or a PO box is not a match.

A match means the address the clerk has for the decedent is the address of that parcel, not that the
decedent owned it. The person may have rented, or lived in a relative's home. Compare `ownerName`
with `decedentName` before you send anything. In the 28 October run, 17 of the 57 matched properties
had an owner of record whose name shared no word with the decedent's, and 8 of those were owned by
companies.

The numbers below come from a seven-day run on 28 October 2026, which read the clerk's daily files
for 21 to 27 October and returned 137 estate cases:

| Result             | Cases | Why                                                                    |
| ------------------ | ----: | ---------------------------------------------------------------------- |
| Matched one parcel |    57 | The decedent's address is one property on the roll                     |
| Several parcels    |     1 | The address fits more than one parcel; all of them are in the row      |
| No usable address  |    56 | No address in the clerk's file (50), or an address outside Florida (6) |
| No parcel found    |    23 | No exact match on the roll: a unit number, a typo, another county      |

The clerk lists no address at all for more than a third of decedents (50 of the 137 cases). Those
cases can never match, and the cause is the clerk's data, not the actor. 48 of those 50 are wills on
deposit; only 5 of the 58 wills on deposit matched a property. Administrations and dispositions
match far more often: 46 of the 72 matched one property.

Of the 23 with no parcel found, 22 had a Hillsborough city in the address. Five include a unit
number, which must appear on the roll too; one has a misspelled city and one is in Pinellas County.

To work only with matched properties, filter on `matchStatus` in your spreadsheet. There is no input
to leave unmatched cases out (our choice).

### How to use it

The default reads the clerk's daily files for the 7 days ending yesterday. A file can list a case
filed a few days before it: in the 28 October run, 52 of the 137 cases were filed one to three days
before the file that lists them. `filingDate` has the day the case was filed and `dailyFileDate` the
day of the file.

```json
{
  "lastDays": 7,
  "homesteadOnly": true,
  "minJustValue": 200000,
  "maxResults": 1000
}
```

- `lastDays` (1 to 30, default 7) is how many days of daily files to read, ending yesterday, in
  Eastern time.
- `homesteadOnly` keeps a matched property only when it has a homestead exemption, which the owner
  claims on their main home.
- `minJustValue` keeps a matched property only when its just value (the property appraiser's market
  value) is at least this many dollars.
- `maxResults` caps the rows you pay for. The newest filings come first.

`propertyFilterStatus` is `pass` when no property filter is set, or when the matched property passes
it. It is `unverified` when a filter is set but there is no single property to check. Those cases
are kept, because the actor cannot tell whether their property would pass, and they are charged like
any other row. Applied to the 137 cases of the 28 October run, the input above keeps 115: 35 matched
properties that pass and 80 unverified cases.

### Quick start

No code needed.

1. Open the example "Hillsborough County probate cases, last 7 days" on this actor's page, or paste
   the input above into the input form.
2. Click **Start** and wait until the run shows **Succeeded**.
3. Open the **Output** tab to see the cases as a table.
4. Click **Export**, choose CSV or Excel, and download the file.
5. In Google Sheets, choose **File > Import > Upload** and select the file.

### Automate it

**A weekly list:** set `lastDays` to 7, click **Save as a new task**, then add a schedule for the
task under **Schedules** in Apify Console, for example every Monday at 07:00 Eastern. Each run then
reads the week of files since the last one, so no case is missed and none arrives twice.

For a daily list, use `lastDays` 1 and a daily schedule; for any other schedule, use the number of
days between runs. Schedule runs after 03:00 Eastern so yesterday's file is posted.

**Into Google Sheets with n8n:** add the **Apify** node with the **On new Apify Event** trigger,
choose your task and the succeeded event, then add an **Apify** node with **Get Dataset Items**
using the run's `defaultDatasetId`, and finish with a **Google Sheets** node that appends the rows.
Every scheduled run then adds its cases to the same sheet. Make and Zapier have Apify integrations
that work the same way.

### Pricing

Pay per event. There are no platform usage charges on top.

| Event                        |  Price | When                                            |
| ---------------------------- | -----: | ----------------------------------------------- |
| `actor-start`                |  $0.01 | Once per run, after all clerk files are checked |
| `apify-default-dataset-item` | $0.003 | Per case row saved, matched or not              |

That is $3 per 1,000 cases. For scale: the 28 October seven-day run saved 137 cases, which would
cost $0.42. 1,000 cases cost $3.01. A run that finds no cases costs $0.01.

Each row is charged as it is saved, so you never pay for a row you did not get. Set a maximum charge
on the run for a hard ceiling; the actor stops cleanly before the row that would pass it.

### Case types

Included, as the clerk names them: Formal Administration, Summary Administration Greater Than $1000,
Summary Administration Less Than $1000, Disposition w/o Administration, Ancillary Administration,
Caveat, Wills on Deposit, Notice of Trust and Curatorship.

Left out: guardianship, incapacity, risk protection, minor settlement, habeas corpus, Other Probate
and unrecognized case types. These may concern living people. Excluded cases are counted by type in
the Run summary.

Not every included case means an estate is being settled or a house will be sold:

- **Administrations** (formal, summary and ancillary) are the cases where an estate is settled
  through the court.
- **Disposition without administration** releases a small estate's assets without appointing a
  personal representative.
- **A will on deposit** is an original will filed with the clerk after the death. On its own it does
  not open an estate.
- **A caveat** asks the court to notify someone before a will is admitted.
- **A notice of trust** tells the court that the person who died had a trust.

### Good to know

- **Coverage.** Hillsborough County only for now (our choice). More Florida counties may follow.
- **How far back.** The clerk's site listed the last 30 daily files when we checked on 28 October
  2026, so `lastDays` goes up to 30. If a file in your window is missing, the run stops before
  saving any rows or charging the start fee, and names the missing day.
- **Timing.** The clerk posts each day's file shortly after midnight; one file in the week we
  checked went up at 01:23. If yesterday's file is not posted yet, the run stops and says so; run it
  again later in the morning. A weekend or holiday with no filings is a real zero.
- **Tax roll.** Property fields come from the Florida Department of Revenue's latest published roll
  for Hillsborough, currently the 2026 final roll. The Department publishes new rolls once or twice
  a year and the actor uses the newest one. A roll is a snapshot, so it can show an owner who has
  since sold. The roll keeps only recent sales, so most long-held properties have no `lastSaleDate`
  (8 of the 57 matched properties in the 28 October run had one), and it gives the sale month, not
  the day.
- **Dates.** A probate case can be filed years after the death. In the 28 October run the median gap
  was about five months, and 47 of the 136 cases with a date of death were filed more than a year
  after it.
- **Repeats.** Within a run each case appears once. The actor does not remember earlier runs (our
  limit), so reading the same days again returns those cases again, and they are charged again.
- **If the clerk changes its files.** Unrecognized case types are excluded and counted by type in
  the Run summary, with one warning naming them. If a clerk file cannot be read or has an invalid
  format, the run stops before saving any rows or charging the start fee and says why.
- **The people in these rows.** Behind each row is a family that has lost someone, often in the last
  few months. The petitioner is often a relative handling an estate while grieving. If you are a
  lawyer, the Florida Bar's advertising and solicitation rules apply to any letter you send. If you
  are not, those rules don't cover you, and other rules may. Ask a Florida lawyer which ones apply
  before you start a mailing. Whoever you are, say plainly who you are and how you found the case,
  and don't make a letter look like a court or government notice.
- Not affiliated with the Hillsborough County Clerk of Court or the Florida Department of Revenue.
  Names and addresses are as the clerk and the property appraiser recorded them, typos included.

### FAQ

**How do I get probate leads in Florida?**

For Hillsborough County, run this actor with `lastDays` set to how many days of filings you want.
Each run returns the estate cases the clerk listed in those days, ending yesterday, with the
decedent, petitioner, attorneys and, for about four in ten cases, the matched property and its
owner's mailing address.

**Can I get a Tampa probate list every week?**

Yes. Save a task with `lastDays` set to 7 and schedule it weekly, as in [Automate it](#automate-it).
Each week's run lists the cases from the clerk's files since the previous run.

**Where can I find Hillsborough County probate records?**

The Hillsborough County Clerk of Court publishes a file of new probate filings every day. This actor
reads those files, groups the party rows into one row per case and adds tax-roll property details.
`sourceUrls` links each case to the clerk's file it came from.

**Does it include phone numbers or emails?**

No. The clerk's files and the tax roll have names and mailing addresses only. There is no skip
tracing.

**Does a matched property mean the decedent owned it?**

No. It means the decedent's address in the clerk's file is that property's address. Check
`ownerName` against `decedentName`, and the county property appraiser's site, before you rely on it.

**Which counties are covered?**

Hillsborough County (Tampa) only, for now.

### Related actors

- [Florida Lis Pendens, Pre-Foreclosure & Deed Leads](https://apify.com/finaldynamics/florida-pre-foreclosure-leads):
  recorded probate documents, deeds and lis pendens by recording date from six county clerks'
  official records, Hillsborough included. This actor lists new probate court cases instead.
- [Florida Vacant Land & Absentee Owner Leads (Tax Roll)](https://apify.com/finaldynamics/florida-vacant-land-leads):
  vacant parcels and out-of-state owners in every Florida county.
- [Florida Deed Transfers & New Owner Leads (Tax Roll)](https://apify.com/finaldynamics/florida-deed-transfer-leads):
  recorded sales with the new owner's mailing address.

Questions, or a case that looks wrong? Open an issue on the actor page and include the case number.

### All fields

| Field                                                                   | Notes                                                                                                      |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `county`, `state`                                                       | `Hillsborough`, `FL`                                                                                       |
| `caseNumber`, `caseType`, `caseTitle`, `filingDate`                     | As the clerk lists them; dates are `YYYY-MM-DD`                                                            |
| `dailyFileDate`                                                         | Date of the clerk's daily file that lists the case; `lastDays` counts these dates                          |
| `decedentName`, `decedentAddress`                                       | Variants joined with a semicolon; `null` when the clerk lists none                                         |
| `dateOfDeath`                                                           | `null` when the clerk lists none, or two different dates                                                   |
| `petitioners`                                                           | List of `role`, `name`, `address`, `dateOfDeath`, `attorney`                                               |
| `attorneys`                                                             | Every attorney on the case                                                                                 |
| `parties`                                                               | Every party, with the clerk's role; `attorney` is `null` where the clerk lists No Attorney                 |
| `matchStatus`                                                           | `matched`, `ambiguous` or `unmatched`                                                                      |
| `matchReason`                                                           | `unique-address-match`, `several-parcels`, `no-address-match` or `no-usable-decedent-address`              |
| `matchMethod`                                                           | Always `normalized-decedent-address`: street, house number and unit, with the same ZIP code or city        |
| `candidateCount`                                                        | How many parcels share the decedent's address                                                              |
| `parcelId`, `ownerName`, `homestead`, `justValue`                       | The matched parcel; `null` unless `matchStatus` is `matched`                                               |
| `lastSaleDate`, `lastSalePrice`                                         | Most recent sale on the roll, `YYYY-MM` and dollars; `null` when the roll lists none                       |
| `propertyAddress`, `propertyCity`, `propertyZip`                        | The parcel's address on the roll                                                                           |
| `ownerAddress1`, `ownerAddress2`, `ownerCity`, `ownerState`, `ownerZip` | The owner's mailing address on the roll                                                                    |
| `dorUseCode`                                                            | Department of Revenue land use code, such as `001` single-family home or `004` condominium                 |
| `parcelCandidates`                                                      | Every parcel at the decedent's address, with the fields above; several when `ambiguous`                    |
| `propertyFilterStatus`                                                  | `pass` when no filter is set or the matched property passes; `unverified` when there is no single property |
| `rollYear`, `rollType`                                                  | `2026`, `final`                                                                                            |
| `nalFile`, `nalUrl`, `nalLastModified`                                  | The tax-roll file used, its download link and when the Department last updated it                          |
| `sourceFiles`, `sourceUrls`                                             | The clerk's daily files that list the case                                                                 |

# Actor input Schema

## `lastDays` (type: `integer`):

How many days of the clerk's daily files to read, ending yesterday (Eastern time). Use 7 on a weekly schedule and 1 on a daily one. A file can list a case filed a few days earlier. Up to 30: the clerk's site listed the last 30 daily files when we checked.

## `homesteadOnly` (type: `boolean`):

Keep a matched property only when it has a homestead exemption, which the owner claims on their main home. Cases with no single matched property are still returned, marked unverified, and charged.

## `minJustValue` (type: `integer`):

Keep a matched property only when its just value (the property appraiser's market value) is at least this many dollars. Cases with no single matched property are still returned, marked unverified, and charged.

## `maxResults` (type: `integer`):

The most case rows to save and pay for. The newest filings come first.

## Actor input object example

```json
{
  "lastDays": 7,
  "homesteadOnly": false,
  "maxResults": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

One row per estate case, with the matched tax-roll property where there is one.

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "lastDays": 7,
    "homesteadOnly": false,
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("finaldynamics/florida-probate-leads").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "lastDays": 7,
    "homesteadOnly": False,
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("finaldynamics/florida-probate-leads").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "lastDays": 7,
  "homesteadOnly": false,
  "maxResults": 1000
}' |
apify call finaldynamics/florida-probate-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,finaldynamics/florida-probate-leads"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GgRw1sQKFBRaad3IP/builds/auH4YCIs6gvXgzRmy/openapi.json
