# US Off-Market Seller Leads — Scored & Mail-Ready (`dwelldata/us-off-market-seller-leads`) Actor

Scored off-market seller leads from public-record distress, each re-verified within the last seven days. Every lead has a street address, a 0-100 score with an auditable itemized rationale, amount owed, parcel id and the record behind it. No skip-traced contact data. Empty results are not billed.

- **URL**: https://apify.com/dwelldata/us-off-market-seller-leads.md
- **Developed by:** [Sean](https://apify.com/dwelldata) (community)
- **Categories:** Real estate, Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 scored leads

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## US Off-Market Seller Leads: Scored and Mail-Ready

**A query that matches nothing costs you nothing.** Billing is one charge per lead
delivered. Set a score floor nobody clears, or a county we do not cover, and the run
returns a typed reason and no lead charge. Leads are the most expensive record we
sell, which is exactly why you should never be billed for an empty pull.

Every lead here is a property with a public-record distress signal on it, a street
address you can mail, and a score that shows its work.

### What each lead contains

| Field | What it is |
|---|---|
| `address` | A resolved street address. Leads without one never enter the pool. |
| `lead_score` | 0 to 100, deterministic. |
| `score_rationale` | The itemized breakdown. Not a black box, not a model output, just arithmetic you can check. |
| `lead_type` | `tax_delinquent` or `sheriff_sale_auction`. |
| `owner_name` | Owner of record, from the county file. |
| `amount_owed` | Delinquent tax balance, on tax leads. |
| `sale_date`, `appraised_value`, `opening_bid` | On auction leads, the sale details. |
| `matched_deal_id` | Non-null when the property is also an active listing in our multifamily feed. |
| `signal_verified_at` | When the underlying public record was last confirmed. |
| `source_url` | The county or court record behind the lead. |

A real `score_rationale` reads like this:

```json
{ "base": "county tax delinquency (35)", "debt_size": "$31,448 owed (+15)" }
```

Fifty points, and you can see where all fifty came from. Compare that with a lead
vendor's "A grade."

### The seven-day rule

A lead only enters the pool if its public record was re-verified within the last
seven days. Stale distress is worse than no distress, because it sends you after a
problem that has already been solved by somebody else. Anything older than a week
drops out of the feed automatically.

### Coverage and score range

Leads are drawn from tax-delinquency rolls in Hamilton (Cincinnati) and Montgomery
(Dayton) County, Ohio, and from the sheriff-sale calendar in Summit and Mahoning
County. A county only contributes leads once its parcels have resolved street
addresses, so mail-ready coverage is narrower than raw signal coverage.

At the time of writing the pool holds roughly 27,000 leads. Tax leads start at 35
and climb with the size of the debt, topping out around 50 in the current pool.
Auction leads score higher when the sale is imminent or the opening bid sits well
under the appraisal, but they only exist while a sale is actually scheduled, so
some days there are none. Set `min_score` to 45 and you are looking at a few
thousand. Set it to 50 and you are looking at about a thousand.

### Filters

| Field | Effect |
|---|---|
| `min_score` | Score floor. The main lever. |
| `county` | Substring match. |
| `lead_type` | Tax delinquency or sheriff sale. Blank gives both. |
| `maxItems` | Caps leads delivered and therefore caps the bill. Defaults to 100. |

Leads come back highest score first, so a small `maxItems` is not a worse list, just
a shorter one.

### Compliance

Public records only. No portal-scraped listing data, no skip-traced personal contact
information, no phone numbers, no emails. What you get is the property, the signal,
the score and the source. Who you contact and how is on you, including the TCPA and
DNC obligations that come with it.

### Output

One dataset item per lead, highest score first.

***

*Data from the DwellData real-estate engine. Sibling Actors cover per-address
property lookup, the scored multifamily deals feed, county tax-delinquency distress
signals, and the sheriff-sale foreclosure calendar.*

# Actor input Schema

## `min_score` (type: `integer`):

The score is deterministic and every point is itemized in score\_rationale on the lead itself. Tax-delinquency leads start at 35 and climb with the size of the debt, so 45 is a useful floor and 50 is the current top of that band.

## `county` (type: `string`):

Substring match on the county name. Leads are drawn from Hamilton (Cincinnati), Montgomery (Dayton), Summit (Akron) and Mahoning (Youngstown) in Ohio, though only counties with resolved street addresses can produce mail-ready leads.

## `lead_type` (type: `string`):

Leave blank for both. Tax-delinquency leads come from county unpaid-tax rolls. Auction leads come from the sheriff-sale calendar and only appear while a sale is scheduled ahead of today.

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

Hard cap on leads delivered, and therefore on what the run can cost. Leads are the priciest record we sell, so this defaults low on purpose. Because the feed is sorted by score, the first hundred are the hundred you want.

## Actor input object example

```json
{
  "min_score": 45,
  "county": "Hamilton",
  "lead_type": "tax_delinquent",
  "maxItems": 100
}
```

# Actor output Schema

## `records` (type: `string`):

Every delivered lead for this run, highest score first.

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

Lead count, the filters as applied, upstream generation time and the data guarantee.

# 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 = {
    "min_score": 45,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("dwelldata/us-off-market-seller-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 = {
    "min_score": 45,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("dwelldata/us-off-market-seller-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 '{
  "min_score": 45,
  "maxItems": 100
}' |
apify call dwelldata/us-off-market-seller-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dwelldata/us-off-market-seller-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/hDGUzozjY9gkdyLgG/builds/qixMWNdaTGYhmHTJg/openapi.json
