# US Tax Delinquency Signals — Off-Market Distress Leads (`dwelldata/us-tax-delinquency-signals`) Actor

County tax-delinquency records across four Ohio counties. Every row has owner name, parcel id, amount owed, a street address where parcel enrichment resolved one, and the public county source URL. Filter by county, amount owed, or mail-ready rows only. A query matching nothing is not billed.

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

## Pricing

from $5.00 / 1,000 distress signals

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 Tax Delinquency Signals: Off-Market Distress Records

**A query that matches nothing costs you nothing.** Billing is one charge per record
delivered. If your filters come back empty, the run returns a typed reason and the
record charge is never applied. That is the part most data feeds get wrong: they
happily bill you for a page of zero results and call it a search.

This Actor pulls county tax-delinquency rolls. These are the parcels whose owners
have stopped paying property tax, which is the earliest public signal that a
property is about to become somebody's problem. Long before a listing, long before
a foreclosure filing, there is an unpaid tax bill.

### What each record contains

| Field | What it is |
|---|---|
| `address` | Street address, when parcel enrichment has resolved one. Null otherwise, and `address_status` tells you which. |
| `owner_name` | Owner of record as the county publishes it. Null in Summit and Lucas, where the county prints owner and legal description as one text run. |
| `parcel_id` | County parcel number. Always present, since the delinquency list is keyed on it. |
| `amount` | Dollars delinquent. Ranges from a few hundred to seven figures on commercial parcels. |
| `address_status` | `available` or `pending_parcel_lookup`. A null address means we have not resolved the parcel yet, not that the property has no address. |
| `matched_deal_id` | Non-null when this parcel is also an active listing in our multifamily feed. Distress plus on-market is the double signal worth chasing. |
| `source_url` | The county file this row came from. Every claim is checkable against the county's own record. |
| `first_seen` / `last_seen` | When we first saw the parcel delinquent and when we last confirmed it. |

Nothing is inferred. If the county did not publish a field, the record says so
rather than leaving you to guess whether a blank means clean or unknown.

### Coverage

Four Ohio counties: Hamilton (Cincinnati), Lucas (Toledo), Montgomery (Dayton) and
Summit (Akron). At the time of writing that is roughly 43,000 delinquent parcels,
of which about 27,500 carry a resolved street address.

Address resolution runs continuously, so the mail-ready share grows. Hamilton and
Montgomery publish the owner name as its own field; Summit and Lucas do not, and
those rows carry a null owner rather than a mangled one.

### Filters

| Field | Effect |
|---|---|
| `county` | Substring match. `Hamilton` is enough. |
| `min_amount` | Floor on dollars owed. The single most useful filter here. |
| `has_address` | Tick it for mail-ready rows only. |
| `signal_type` | Every row today is `tax_delinquent`, so this is mostly future-proofing. |
| `maxItems` | Caps records delivered and therefore caps the bill. |

The unfiltered feed is tens of thousands of rows. `min_amount` is how you get from
that to a working list. Owing $400 means somebody forgot. Owing $40,000 means
somebody has decided.

### Output

One dataset item per delinquent parcel, sorted by amount owed, largest first.

### What this is not

It is not a skip-tracing product. There are no phone numbers and no emails, only
the property, the parcel, the owner of record and the debt. Everything here comes
from a published county file and every row links back to it.

***

*Data from the DwellData real-estate engine. Sibling Actors cover per-address
property lookup, the scored multifamily deals feed, the sheriff-sale foreclosure
calendar, and scored off-market seller leads.*

# Actor input Schema

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

Substring match on the county name. Covered counties are Hamilton (Cincinnati), Lucas (Toledo), Montgomery (Dayton) and Summit (Akron), all in Ohio. Typing "Hamilton" is enough.

## `min_amount` (type: `integer`):

Keeps only parcels delinquent by at least this much. Raising it is the fastest way to get from tens of thousands of rows down to the handful worth a letter.

## `has_address` (type: `boolean`):

Counties publish parcel numbers, not always street addresses. Tick this to get only the rows where the parcel has already been resolved to a street address, which is what you need for direct mail.

## `signal_type` (type: `string`):

Optional. Every row in the feed today is tax\_delinquent, so leaving this blank and filtering on county and amount is usually the better move.

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

Hard cap on records delivered, and therefore on what the run can cost. The unfiltered feed holds tens of thousands of records, so this exists to stop an unfiltered run from turning into a large bill. Raise it when you know what you want.

## Actor input object example

```json
{
  "county": "Hamilton",
  "min_amount": 10000,
  "has_address": true,
  "signal_type": "tax_delinquent",
  "maxItems": 1000
}
```

# Actor output Schema

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

Every delivered tax-delinquency record for this run.

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

Record 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 = {
    "county": "Hamilton",
    "min_amount": 10000,
    "has_address": true,
    "maxItems": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("dwelldata/us-tax-delinquency-signals").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 = {
    "county": "Hamilton",
    "min_amount": 10000,
    "has_address": True,
    "maxItems": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("dwelldata/us-tax-delinquency-signals").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 '{
  "county": "Hamilton",
  "min_amount": 10000,
  "has_address": true,
  "maxItems": 1000
}' |
apify call dwelldata/us-tax-delinquency-signals --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dwelldata/us-tax-delinquency-signals"
        }
    }
}

```

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/MHDR0rmUCgIh4sh6j/builds/462VZBaUo2yJcriNr/openapi.json
