# US Probate Leads Scraper — Miami-Dade, Los Angeles (`nice_dev/us-probate-leads-scraper`) Actor

New probate cases filed at the Miami-Dade and Los Angeles probate courts: decedent, filing date, case type, petitioner, personal representative, attorney. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/nice\_dev/us-probate-leads-scraper.md
- **Developed by:** [Nice Dev](https://apify.com/nice_dev) (community)
- **Categories:** Lead generation, Real estate, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.59 / 1,000 miami-dade cases

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### ⚖️ What is US Probate Leads Scraper?

**US Probate Leads Scraper** extracts **new probate cases** — estates opened after a death — straight from the probate courts of **[Miami-Dade](https://www2.miamidadeclerk.gov/ocs/) (Florida)** and **[Los Angeles](https://www.lacourt.ca.gov/casesummary/v2web3/?casetype=probate) (California)**: **case number, filing date, decedent, case type, petitioner, personal representative, attorney** (with the Florida Bar number and the office address when the court shows it), hearings and documents filed — plus, as options, **the decedent's property and its value** from the county's records and **the phones and e-mails of the person who handles the estate**. For real estate investors, wholesalers, estate attorneys and anyone who wants probate leads while they are fresh.

Pick the **counties** and the **filing dates** (the last 7 days by default), click **Start**, and download the cases in JSON, CSV or Excel. No login, nothing to set up. Schedule it every morning with **Only new cases** on, and you get each new estate once, the day the court opens it.

### 📋 What data can you extract from the probate courts?

One item per probate case, 66 fields:

| Category | What you get |
| --- | --- |
| ⚖️ **Case** | court, county, case number (and Florida's uniform state number), filing date, case type, status, judge — `2026-004152-CP-02`, `FORMAL ADMINISTRATION` |
| 🕊️ **Decedent** | full name, first and last name, other names — `Charlene Brickey Chason` |
| 👤 **Family** | petitioner (often the heir who asks to run the estate), personal representative / executor / administrator |
| 💼 **Attorney** | attorney of record, Florida Bar number, office address (Miami-Dade filing receipt) |
| 🏠 **Signals** | will filed or not, petition to determine homestead (Miami-Dade: the decedent owned the home they lived in) |
| 📅 **Hearings and documents** | next hearing (date, time, department — Los Angeles), every document filed with its date |
| 🏡 **Property** (option, off by default) | the decedent's property in Miami-Dade: address, market and assessed value, homestead, owner's mailing address, last sale, deeds, with how sure the match is — `2619 SW 19 TER`, `$545,457` |
| 📞 **Contacts** (option) | the petitioner's phones (type, carrier), e-mails, current address, age, relatives — looked up at the decedent's property first |

Every field, with an example, is listed in the **Output** section below.

Fields marked **detail** in the Output tab (parties, attorney, documents, hearings…) are filled when **Open each case file** is on (default). Turn it off to get the search results only (case number, filing date, decedent, case type), faster: 55 Miami-Dade cases in about 1 minute instead of 2 (property off). Los Angeles has no list of new cases: its case summary is always read.

### ✅ Why use US Probate Leads Scraper?

- 🆕 **Straight from the court, the day it opens the case**: no 30-day-old list bought from a reseller.
- 🗺️ **Two of the biggest probate markets in one run**: Miami-Dade and Los Angeles.
- 👤 **The people to contact**: petitioner, personal representative and attorney, with the attorney's Florida Bar number and office address when the court gives them.
- 🏡 **Case → property → phone in one run**: the decedent's home and its value from the county's own records, then the representative's phones and e-mails — each match says how sure it is, so a namesake is never sold as a lead.
- 🧩 **Nothing missed, nothing twice**: every case type of an estate is searched (full administration, summary / small estates, ancillary, others), each case is returned once.
- 🔔 **Monitoring built in**: tick **Only new cases**, schedule the Actor, and each run returns (and charges) only what it has never delivered before.
- 🔌 API, scheduling, integrations (Make, Zapier, n8n, Google Sheets…) and JSON/CSV/Excel export via the Apify platform.

### 🚀 How to scrape probate cases

1. Create a free Apify account.
2. Open **US Probate Leads Scraper** and pick the **Counties** (Miami-Dade and Los Angeles by default), or whole **States**.
3. Set the filing dates: **Filed on or after** (`7 days` by default) and, if you want, **Filed on or before**. Tick **Add the decedent's property and its value** to get the property of each Miami-Dade decedent.
4. Set **Max cases** (100 by default, 0 = no limit) — and **Max cases per county** so that one busy court cannot use the whole budget — then click **Start**.
5. Download the dataset in JSON, CSV, Excel or via API.

Already have case numbers? Paste them into **Case numbers** (`2026-004152-CP-02`, `26STPB10682`) and the Actor reads those cases directly.

### 💰 How much does it cost to scrape probate cases?

This Actor uses **pay per event** pricing: a price per case, which depends on its court, and a small fee per run start. The two options have their own event, charged only when they find something. A case a filter drops costs less than a case kept: filtering never costs more than taking everything. Platform usage (compute, proxy) is included in the price.

| What you pay for | Price |
| --- | --- |
| A Miami-Dade case (`case-miami-dade`) | $0.30 per 1,000 |
| A Los Angeles case (`case-los-angeles`) — read one court number at a time | $0.90 per 1,000 |
| The decedent's property found (`property-found`, option, once per case) | $0.50 per 1,000 ($0.47 on the Gold plan) |
| The representative's phones or e-mails found (`contact-found`, option, once per case) | $55 per 1,000 ($54.70 on the Gold plan) |
| A Miami-Dade case a filter drops (`filter-check`) | $0.15 per 1,000 |
| A Los Angeles case a filter drops (`detail-filter-check`) — its case summary is read to check it | $0.89 per 1,000 ($0.86 on the Gold plan) |
| Run start (`apify-actor-start`) | $0.01 per run (at the default 1 GB of memory) |

For example, without a subscription: a daily run of 100 new Miami-Dade cases, options off, costs 100 × $0.0003 + $0.01 = **$0.04**; 1,000 Los Angeles cases cost **$0.91**; 1,000 Miami-Dade cases of which 600 come with the decedent's property cost $0.30 + $0.30 + $0.01 = **$0.61**; 1,000 Los Angeles cases read, of which 400 are dropped by a filter, cost 600 × $0.0009 + 400 × $0.00089 + $0.01 = **$0.91** — never more than taking all 1,000. The prices of every plan are on the **Pricing** tab of this page.

### ⚙️ Input

```json
{
    "counties": ["miami-dade-fl", "los-angeles-ca"],
    "postedAfter": "7 days",
    "maxItems": 200
}
```

Los Angeles, formal estates only, only the cases not delivered before (a daily schedule):

```json
{
    "counties": ["los-angeles-ca"],
    "caseTypes": ["administration"],
    "maxItemsPerQuery": 100,
    "onlyNew": true,
    "stateKey": "la-daily"
}
```

Or with case numbers:

```json
{
    "caseNumbers": ["2026-004152-CP-02", "26STPB10682"]
}
```

| Field            | Notes                                                                                                                       |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `counties`       | Probate courts to read, one per county: `miami-dade-fl`, `los-angeles-ca`.                                                   |
| `states`         | Every county this Actor covers in a state: `FL` or `CA`. Added to `counties`; without `counties`, these states only.         |
| `caseTypes`      | `administration`, `summary`, `ancillary`, `other` — all of them by default. Guardianships and trusts are never returned.      |
| `caseNumbers`    | Read these cases directly (Miami-Dade `2026-004152-CP-02`, Los Angeles `26STPB10682`); counties and dates are then ignored. |
| `maxItems`       | Stop after this many cases for the whole run (`0` = unlimited).                                                            |
| `maxItemsPerQuery` | Cap for EACH county. 0 = no per-county cap.                                                                               |
| `extractDetails` | Open each case file: parties, attorney, documents, hearings (default on).                                                    |
| `includeProperty` | The decedent's property and its value from the county's records (default off; Miami-Dade). Charged by the property-found event when found. |
| `includeContacts` | The representative's phones and e-mails (default off; needs `extractDetails`, 10-60 s per case). Charged by the contact-found event when found. |
| `postedAfter`, `postedBefore` | Filing date range: `2026-09-01`, or a period before now (`7 days`, `2 weeks`, `1 month`).                        |
| `status`         | `any`, `open` or `closed` (a small estate can close within days).                                                           |
| `excludeKeywords` | Drop the cases whose title contains one of these words (case and accents ignored).                                          |
| `onlyNew`, `stateKey`, `resetState` | Monitoring: only the cases never delivered under this memory key; `resetState` forgets the memory.         |
| Advanced         | `proxyConfiguration` (Apify proxy by default, included in the price; the residential proxy is not available), `maxConcurrency`, `maxRequestsPerMinute`, `minRequestIntervalMs`, `maxRequestRetries`, `debugLog`. |

### 📦 Output

A case of Miami-Dade, with its file and both options (shortened: 2 of the 13 documents, 1 property shown in part; the representative's phone and e-mail are masked here):

```json
{
    "id": "miami-dade-fl:2026-004152-CP-02",
    "url": "https://www2.miamidadeclerk.gov/ocs/",
    "state": "FL",
    "county": "Miami-Dade",
    "countyKey": "miami-dade-fl",
    "court": "Miami-Dade County Clerk of the Court — Probate",
    "caseNumber": "2026-004152-CP-02",
    "stateCaseNumber": "132026CP00415201GE02",
    "caseTitle": "IN RE: Chason, Charlene Brickey",
    "caseType": "FORMAL ADMINISTRATION",
    "caseCategory": "administration",
    "filingDate": "2026-09-23",
    "caseStatus": "OPEN",
    "dispositionDate": null,
    "judge": "Santovenia, Maria de Jesus",
    "courtLocation": "20 NW 1st Avenue, Miami FL 33128",
    "decedentName": "Charlene Brickey Chason",
    "decedentFirstName": "Charlene Brickey",
    "decedentLastName": "Chason",
    "decedentAliases": ["Charlene Ann Chason", "Charlene Chason"],
    "petitionerName": "Wayne Douglas Chason",
    "executorName": null,
    "executorRole": null,
    "attorneyName": "Barbara Sanjurjo",
    "attorneyBarNumber": "478636",
    "attorneyAddress": "2630 SW 28TH ST STE 61, COCONUT GROVE FL 33133-3872",
    "hasWill": true,
    "homesteadPetition": true,
    "nextHearingDate": null,
    "nextHearingPurpose": null,
    "parties": [
        { "name": "Chason, Wayne Douglas", "role": "Petitioner", "attorneyName": "Sanjurjo, Barbara", "attorneyBarNumber": "478636", "appointedDate": null, "active": null },
        { "name": "Chason, Charlene Brickey", "role": "Decedent", "attorneyName": null, "attorneyBarNumber": null, "appointedDate": null, "active": null }
    ],
    "documents": [
        { "date": "2026-09-24", "title": "Notice of Filing", "comments": "COPY OF LAST WILL AND TESTAMENT OF CHARLENE BRICKEY CHASON", "filedBy": null },
        { "date": "2026-09-23", "title": "Notice", "comments": "SUPPORTING DOCUMENTS FOR PETITION TO DETERMINE HOMESTEAD STATUS", "filedBy": null }
    ],
    "hearings": [],
    "detailRead": true,
    "propertyLookup": "found",
    "propertyCount": 1,
    "propertyMatch": "high",
    "propertyAddress": "2619 SW 19 TER, Miami, FL 33145",
    "propertyCity": "Miami",
    "propertyZip": "33145",
    "propertyParcelId": "0141100230130",
    "propertyType": "singleFamily",
    "propertyMarketValue": 545457,
    "propertyAssessedValue": 310000,
    "propertyHomestead": true,
    "propertyOwnerOccupied": true,
    "propertyMailingAddress": "2619 SW 19 TER, Miami, FL 33145",
    "propertyLastSaleDate": "2017-03-14",
    "propertyLastSalePrice": 100,
    "propertyLatitude": 25.7549,
    "propertyLongitude": -80.2234,
    "propertyUrl": "https://www.miamidade.gov/Apps/PA/propertysearch/#/?folio=0141100230130",
    "properties": [
        { "parcelId": "0141100230130", "propertyAddress": "2619 SW 19 TER, Miami, FL 33145", "owners": ["CHARLENE CHASON LE", "REM WAYNE D CHASON"], "marketValue": 545457, "homestead": true, "matchConfidence": "high", "matchReason": "the representative is an owner or a party of a sale", "matchedOwner": "CHARLENE CHASON LE" }
    ],
    "contactLookup": "found",
    "contactName": "Wayne Douglas Chason",
    "contactRole": "petitioner",
    "contactMatch": "address",
    "contactPhone": "(305) 555-0142",
    "contactPhones": [
        { "number": "(305) 555-0142", "e164": "+13055550142", "type": "Wireless", "carrier": "T-Mobile", "firstReported": "March 2019", "isPrimary": true }
    ],
    "contactEmail": "wchason@example.org",
    "contactEmails": ["wchason@example.org"],
    "contactAddress": "12 Palm Ct, Coral Gables, FL 33134",
    "contactAge": 62,
    "contactRelatives": ["Charlene Chason"],
    "contactUrl": "https://www.fastpeoplesearch.com/wayne-chason_id_G-0000000000000000000",
    "scrapedAt": "2026-09-25T12:00:00.000Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV or Excel.

#### All 66 fields

| Fields | What you get |
| --- | --- |
| `id`, `url`, `state`, `county`, `countyKey`, `court` | `miami-dade-fl:2026-004152-CP-02`, the court's search page, `FL`, `Miami-Dade` |
| `caseNumber`, `stateCaseNumber`, `caseTitle`, `caseType`, `caseCategory` | `2026-004152-CP-02`, `FORMAL ADMINISTRATION`, `administration` |
| `filingDate`, `caseStatus`, `dispositionDate`, `judge`, `courtLocation` | `2026-09-23` (what the date filters read), `OPEN` |
| `decedentName`, `decedentFirstName`, `decedentLastName`, `decedentAliases` | **Decedent** |
| `petitionerName`, `executorName`, `executorRole` | **Family**: petitioner, personal representative |
| `attorneyName`, `attorneyBarNumber`, `attorneyAddress` | **Attorney** |
| `hasWill`, `homesteadPetition` | **Signals** |
| `nextHearingDate`, `nextHearingPurpose`, `hearings`, `documents`, `parties` | **Hearings, documents, every party** |
| `detailRead`, `scrapedAt` | case file read or not, ISO timestamp |
| `propertyLookup`, `propertyCount`, `propertyMatch` | **Property** (option): `found`, `ambiguous` (namesakes), `not_found`, `not_covered` (Los Angeles), `skipped`, `error`; how sure: `high`, `medium`, `low` |
| `propertyAddress`, `propertyCity`, `propertyZip`, `propertyParcelId`, `propertyType`, `propertyLatitude`, `propertyLongitude`, `propertyUrl` | the most likely property: address, folio, type, GPS, the county's page |
| `propertyMarketValue`, `propertyAssessedValue`, `propertyHomestead`, `propertyOwnerOccupied`, `propertyMailingAddress`, `propertyLastSaleDate`, `propertyLastSalePrice` | its value, homestead, owner's mailing address, last sale |
| `properties` | every property matched (4 at most): the county's full record (values and history, exemptions, building, sales and deeds) + `matchConfidence`, `matchReason`, `matchedOwner` |
| `contactLookup`, `contactName`, `contactRole`, `contactMatch` | **Contacts** (option): `found`, `not_found`, `no_representative`, `skipped`, `error`; who was looked for; how found: `address`, `relative`, `name` |
| `contactPhone`, `contactPhones`, `contactEmail`, `contactEmails`, `contactAddress`, `contactAge`, `contactRelatives`, `contactUrl` | phones (type, carrier, first reported), e-mails, current address, age, relatives, the directory's page |

### 💡 Tips

#### How to get more results

Widen the dates (`postedAfter: "1 month"`), add both counties, and set `maxItems` to `0`. Miami-Dade opens about 360 estates a month, Los Angeles about 480.

#### How to reduce costs

The price is per case, so the levers are `maxItems`, `maxItemsPerQuery`, `caseTypes`, the filters and `onlyNew` for recurring runs (you never pay twice for the same case). The options are charged only when they find something; leave `includeProperty` off (the default) if you only need the cases.

#### Property and contacts: how sure is a match?

The courts give the decedent's name, not an address. The property is found by the owner's name in the county's records and each one says how sure it is: `high` when the record itself points to this person (an estate owner such as `EST OF`, the same middle name, or the representative among the owners or in a sale of the property), `medium` for a name held by one person only, `low` when namesakes own properties — then the case is marked `ambiguous` and the option is not charged. The representative is looked up first at the decedent's property (`contactMatch: address`), then by name in the court's state: `relative` when the decedent is listed among the person's relatives, `name` when only the name and state match — check those before you call.

#### Several counties in one run

Pick several `counties` (or `states`): the Actor runs one search per county. A case is saved — and charged — once. Set `maxItemsPerQuery` to give every county its own cap: without it the first counties can use up the whole `maxItems` budget.

#### Monitoring: only the new cases

Tick **Only new cases** (`onlyNew`) and schedule the Actor. The first run returns everything; each later run skips the cases already delivered: they are not saved, not charged, and at Miami-Dade their file is not even opened (Los Angeles finds its cases by reading them one by one). The memory lives in a named key-value store of your account (`us-probate-leads-scraper-seen`, up to 150,000 cases per key) and is only updated with cases that really reached the dataset, so a failed run never hides anything. Give each schedule its own `stateKey`, and tick `resetState` once to start over.

#### Filter by filing date

`postedAfter` and `postedBefore` take a date (`2026-09-01`, the whole day is included) or a period before now (`7 days`, `2 weeks`, `1 month`). Days are each court's own: Eastern time at Miami-Dade, Pacific time at Los Angeles, so `7 days` run late in the evening in Los Angeles still starts on the Los Angeles day a week earlier. They set the dates the courts are searched on; a case without a filing date is dropped as soon as a date bound is set. Filtered-out cases are not saved and do not count in `maxItems`.

### 🔌 Integrations and API

Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool.

### 🤖 Use with AI agents (MCP)

AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the [Apify MCP server](https://mcp.apify.com), billed to their Apify account like any run. It returns one item per probate case. Actor id: `nice_dev/us-probate-leads-scraper`; MCP server with this Actor only: `https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/us-probate-leads-scraper`.

Smallest input, for a cheap first call:

```json
{
    "counties": ["miami-dade-fl"],
    "postedAfter": "3 days",
    "maxItems": 10
}
```

Key output fields: `caseNumber`, `filingDate`, `decedentName`, `caseType`, `petitionerName`, `executorName`, `attorneyName`, `hasWill`, `propertyAddress`, `propertyMarketValue`, `contactPhone`.

Cost: $0.30 per 1,000 Miami-Dade cases, $0.90 per 1,000 Los Angeles cases, $0.01 per run start, and the options' events when they find something, see the pricing section above. Cap each call with `maxItems` and, through the API, with the run option `maxTotalChargeUsd`.

### ❓ FAQ

#### Is it legal to scrape probate court records?

The Actor only reads what these courts show publicly to any anonymous visitor on their case search pages. It logs in to nothing. Results contain personal data (names of the deceased, of family members and of attorneys), which is protected by privacy law: do not store it without a legitimate reason, and follow the rules that apply to your use (for example the rules on unsolicited calls and mail). You are responsible for using the data in compliance with each court's terms of use and applicable law. With **Add the representative's phones and e-mails**, the Actor also reads public people-search directories (FastPeopleSearch, CyberBackgroundChecks) as any anonymous visitor can; with **Add the decedent's property**, the public property records of Miami-Dade County. In particular:

- **FCRA**: this is not a consumer reporting agency. Never use the results to decide on credit, employment, tenant screening, insurance or any other purpose covered by the Fair Credit Reporting Act.
- **TCPA and Do Not Call**: calling or texting a mobile number with an autodialer or a prerecorded message needs the person's consent; check the numbers against the National Do Not Call Registry before any marketing call. The Actor does not flag them.
- **Grieving families**: some states limit the solicitation of heirs shortly after a death; follow the rules of your state and of your trade.
- **Data broker laws**: reselling data about people you have no direct relationship with can require a registration (California, Vermont, Texas, Oregon).

This Actor is not affiliated with the Miami-Dade Clerk of the Court, the Superior Court of California, County of Los Angeles, the Miami-Dade County Property Appraiser, FastPeopleSearch or CyberBackgroundChecks.

#### Does it need a login or a proxy?

No login. The proxy is included in the price: leave the default setting (the residential proxy is not available). A request a court turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).

#### Does it give the property and the heirs' phone numbers?

Yes, as options: the courts publish neither, so the Actor looks them up elsewhere. **Add the decedent's property** (off by default) searches the county's property records by the decedent's name — Miami-Dade only: Los Angeles County publishes no owner names online (`not_covered`). **Add the representative's phones and e-mails** (off by default) looks up the petitioner in public people-search directories. Each match says how sure it is (see Tips).

#### Is the data safe to open in Excel or to show on a web page?

Names and comments are the court's own text, copied as it is. A text can begin with `-`, `+`, `=` or `@`: Excel and Google Sheets may read such a cell of a CSV file as a formula. When you open a CSV, import these columns as text. On a web page, escape every field like any text written by a stranger. The links (`url`, `propertyUrl`, `contactUrl`, `properties[].url`) are always an `http(s)` address or empty.

#### Known limitations

- Documents themselves (the will, the petition) are not online for the public: the Actor gives their titles and dates.
- Los Angeles has no list of new cases: the Actor reads the case numbers of the Stanley Mosk and Antelope Valley courthouses one by one, which makes Los Angeles slower than Miami-Dade.
- `onlyNew` remembers case ids, not their content: a case that received new documents is not returned again.
- Property: a decedent who owned through a trust or a company, under another name, or outside the county of the court is not found; a very common name gives `ambiguous`.
- Contacts: a representative with a common name who does not live at the decedent's property may be matched to a namesake (`contactMatch: name`); a case with no representative named yet gives `no_representative`.
- Two runs sharing the same `stateKey` at the same time may both return the same new case.

**A run that reaches its timeout** stops itself about 45 seconds before it: no new case is asked, what it read is saved and, with `onlyNew`, remembered, and the run ends *Succeeded* with "Stopped before the run's timeout". Resurrect it to go on from there, or give the next run a longer timeout (Run options). Measured on the platform: Los Angeles reads about 6 cases a minute (some 350 in the default hour), Miami-Dade with the case file and the property about 15 (some 900), and `includeContacts` about 3 (some 170).

**A run the platform stops without warning** (out of memory)

- Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the cases already saved are skipped: none is delivered or charged twice, and `maxItems` still counts them.
- With `onlyNew`, the memory is saved once a minute: resurrect the stopped run and the cases it had saved meanwhile join the memory; leave it stopped for good, and the next run may return up to a minute of them once more.

#### Something doesn't work?

The last line of the log counts the cases saved, filtered out and no longer shown by the court, and the requests that failed after every retry. Those requests are listed, with the reason, in the `FAILED_REQUESTS` record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause.

If a court changes its pages, you are told instead of paying for blank rows. If the first 20 cases read all lack their filing date, decedent or status — or, with the case file read, their parties, petitioner or documents — the run saves nothing more, stops and fails, and its last message names the missing field: at most those first cases are charged. A run of 5 to 19 cases (a daily scheduled run) is judged the same way at its end: its cases are saved, the run fails with the field name. A case that `postedAfter` / `postedBefore` drops because it has no filing date counts among those 20. A court page that can no longer be read (a result list or case summary in a new shape) fails the run too, instead of ending green with "no cases".

### 🛟 Support

Open an issue in the **Issues** tab with a link to your run: the run log and the `FAILED_REQUESTS` record of the key-value store show exactly which requests failed and why.

# Actor input Schema

## `counties` (type: `array`):

Probate courts to read, one per county: Miami-Dade (Florida) and Los Angeles (California). One search per county; a case found twice is saved once.

## `states` (type: `array`):

Add every county this Actor covers in a state: `FL` = Miami-Dade, `CA` = Los Angeles. Added to **Counties** (API: without `counties`, these states only).

## `caseTypes` (type: `array`):

Kinds of estate cases to keep. `administration` = full probate or administration of a decedent's estate (with or without a will); `summary` = small-estate / summary administration (Florida summary administration, California spousal / small-estate petitions); `ancillary` = estate of a decedent domiciled in another state; `other` = other estate openings (disposition without administration, family administration, homestead determination, preliminary letters…). Guardianships, conservatorships and trusts are never returned.

## `caseNumbers` (type: `array`):

Read these cases directly instead of searching by date: Miami-Dade local number (`2026-004152-CP-02`) or Los Angeles case number (`26STPB10682`). When this list is not empty, Counties, States and the filing dates are ignored. Max 1 000.

## `maxItems` (type: `integer`):

Maximum number of cases to save for the whole run (after deduplication and filters). 0 = no limit.

## `maxItemsPerQuery` (type: `integer`):

Cap for EACH county, so that the first court cannot use up the whole **Max cases** budget. 0 = no per-county cap.

## `extractDetails` (type: `boolean`):

Read each case's file: parties (petitioner, personal representative, executor, administrator), attorney (name, Florida Bar number, address when shown), judge, documents filed and hearings. Off = the search-result fields only (case number, filing date, decedent, case type), faster: 55 Miami-Dade cases in about 1 minute instead of 2 (property off). Los Angeles has no result list: its case summary is always read.

## `includeProperty` (type: `boolean`):

Looks the decedent up in the county's property records by owner name: property address, market and assessed value, homestead, owner's mailing address, last sale, deeds, with how sure the match is (`propertyMatch`: an estate owner, the same middle name or the representative among the owners = high; a name held by one person only = medium; namesakes = low, delivered as `ambiguous`). Miami-Dade only: Los Angeles County publishes no owner names (`not_covered`). Charged as a separate `property-found` event, only for cases where a property is found.

## `includeContacts` (type: `boolean`):

Looks up the petitioner in public people-search directories: phones with type and carrier, e-mails, current address, age, relatives. Searched first at the decedent's property (with the option above), then by name in the court's state; `contactMatch` says how the person was found (`address`, `relative` = the decedent is among the person's relatives, `name` = name and state only, a namesake is possible). Needs 'Open each case file'. Slower (10-60 s per case). Charged as a separate `contact-found` event, only for cases where a phone or an e-mail is found.

## `postedAfter` (type: `string`):

Only cases filed on or after this date: `2026-09-01`, or a period before now such as `7 days`, `2 weeks`, `1 month`. Empty = the last 7 days.

## `postedBefore` (type: `string`):

Only cases filed on or before this date (the whole day is included), or older than a period such as `2 days`. Empty = up to today.

## `status` (type: `string`):

Keep only the cases the court shows as open, or only the closed ones (a small estate can close within days). `any` = both.

## `excludeKeywords` (type: `array`):

Drop the cases whose title (the decedent's name as the court writes it) contains one of these words (case and accents ignored).

## `onlyNew` (type: `boolean`):

Skip the cases that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and at Miami-Dade their file is not even opened (Los Angeles finds its cases by reading them). First run = everything is new.

## `stateKey` (type: `string`):

Name of the memory used by **Only new cases**. Give each schedule / task its own key (e.g. `miami-daily`) so that they do not share their memory. Letters, digits, `-` and `_`.

## `resetState` (type: `boolean`):

Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every case again. Untick it afterwards.

## `proxyConfiguration` (type: `object`):

Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.

## `maxConcurrency` (type: `integer`):

Maximum number of requests processed in parallel, all courts together.

## `maxRequestsPerMinute` (type: `integer`):

Most requests to the courts in any 60 seconds, all of them counted. A budget, not an even pace (spread them with the minimum delay below). Lower it if a court answers HTTP 429 / 403 in the log.

## `minRequestIntervalMs` (type: `integer`):

Smallest gap between two requests, in milliseconds: spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.

## `maxRequestRetries` (type: `integer`):

Retries per request before it is marked as failed. Behind a proxy, a request a court turns away is also retried on a new proxy session up to 10 times without using up these retries.

## `debugLog` (type: `boolean`):

Include debug messages in the run log.

## Actor input object example

```json
{
  "counties": [
    "miami-dade-fl"
  ],
  "states": [],
  "caseTypes": [
    "administration",
    "summary",
    "ancillary",
    "other"
  ],
  "caseNumbers": [],
  "maxItems": 20,
  "maxItemsPerQuery": 0,
  "extractDetails": true,
  "includeProperty": false,
  "includeContacts": false,
  "postedAfter": "7 days",
  "status": "any",
  "excludeKeywords": [],
  "onlyNew": false,
  "stateKey": "default",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3,
  "maxRequestsPerMinute": 60,
  "minRequestIntervalMs": 1000,
  "maxRequestRetries": 5,
  "debugLog": false
}
```

# Actor output Schema

## `results` (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 = {
    "counties": [
        "miami-dade-fl"
    ],
    "maxItems": 20,
    "postedAfter": "7 days",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nice_dev/us-probate-leads-scraper").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 = {
    "counties": ["miami-dade-fl"],
    "maxItems": 20,
    "postedAfter": "7 days",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("nice_dev/us-probate-leads-scraper").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 '{
  "counties": [
    "miami-dade-fl"
  ],
  "maxItems": 20,
  "postedAfter": "7 days",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call nice_dev/us-probate-leads-scraper --silent --output-dataset

```

## MCP server setup

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

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/mkOCii9CYi4wj2LWu/builds/IhzNZatpXXHBVUNgz/openapi.json
