# Zillow Distressed Property Finder by City or ZIP (`dataspryva/zillow-distressed-property-finder-by-city-or-zip`) Actor

Find foreclosure, pre-foreclosure, bank-owned, and auction properties on Zillow by city, neighborhood, or ZIP, with price, Zestimate, tax value, and property specs for each listing.

- **URL**: https://apify.com/dataspryva/zillow-distressed-property-finder-by-city-or-zip.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Zillow Distressed Property Finder by City or ZIP

Zillow keeps its foreclosure, pre-foreclosure, pre-market REO and auction inventory inside its regular map search. This actor applies those distress filters server-side for you and returns structured records for any US city, ZIP code, neighborhood or county, with optional per-listing detail enrichment: listing agent, phone, brokerage, photos, description, year built, HOA and per-row distress flags.

### What this actor does

- Searches one or more locations: city ("Austin, TX"), ZIP ("78701"), neighborhood ("Hyde Park, Austin, TX") or county ("Travis County, TX").
- Also accepts Zillow search URLs you already have; the distress filter is layered on top of the URL's own filters.
- Restricts results to the distress categories you pick: foreclosures (including bank-owned), pre-foreclosures, pre-market foreclosed (REO) and auctions.
- Applies Zillow's own filters server-side: price range, minimum beds/baths, home types, days on Zillow and sort order.
- Pages through Zillow's result pages up to its own limit, with no browser and no cookies required.
- Optionally opens each listing's detail page for the listing agent, photos, description, year built, HOA and authoritative distress flags.
- Fields Zillow doesn't publish for a listing (no price, no Zestimate, no photos) are left out of that record rather than filled with a placeholder.

### Output per listing

| Field | Description |
|---|---|
| `zpid` | Zillow property ID. |
| `url` | Zillow property detail page URL. |
| `distressType` | `foreclosure`, `bankOwned`, `preForeclosure`, `preMarketForeclosure`, `auction` or `comingSoon`. |
| `isForeclosure` / `isBankOwned` / `isPreForeclosure` / `isAuction` / `isComingSoon` | Per-listing distress flags as Zillow marks them. |
| `homeStatus` / `statusText` | Raw Zillow status and its display label. |
| `address` / `city` / `state` / `zipCode` | Property address components. |
| `price` | Listing price, in USD. |
| `zestimate` / `rentZestimate` | Zillow's value and rent estimates, in USD. |
| `taxAssessedValue` | Tax-assessed value, in USD. |
| `beds` / `baths` / `sqft` | Bedroom and bathroom counts, and living area in square feet. |
| `lotAreaValue` / `lotAreaUnit` | Lot size and its unit (`sqft` or `acres`). |
| `propertyType` / `yearBuilt` | Property type (e.g. `SINGLE_FAMILY`) and construction year. |
| `latitude` / `longitude` | Property coordinates. |
| `daysOnZillow` / `listedDate` | Days on Zillow and the date the listing was posted. |
| `listingAgentName` / `listingAgentPhone` / `brokerName` / `mlsName` / `mlsId` | Listing attribution from the detail page. |
| `photos` / `photoCount` | Property photo URLs (largest size, Zillow photo CDN only) and how many photos Zillow shows. |
| `description` | Listing description text. |
| `monthlyHoaFee` / `pricePerSquareFoot` | HOA fee and price per square foot when shown. |
| `postingUrl` | External listing or auction page when Zillow provides one (e.g. an auction.com detail link). |
| `auctionDate` / `auctionDateTime` | Auction date and sale start date-time, read from the linked auctioneer page. |
| `startingBid` / `principalLoanAmount` | Published starting bid and original loan principal when the auctioneer shows them. |
| `occupancyStatus` | Occupancy reported by the auctioneer (e.g. `OCCUPIED`, `VACANT`). |
| `lender` / `servicer` | Beneficiary (lender) and loan servicer names. |
| `foreclosureAttorney` / `foreclosureAttorneyPhone` | Foreclosure attorney / trustee firm and its phone. |
| `buyerPremiumAvailable` | Whether the auction charges a buyer's premium. |
| `auctionEventTitle` | The auctioneer's sale event title. |
| `lastSoldPrice` / `lastSoldDate` | Most recent recorded sale price and date, when Zillow publishes them. |
| `comingSoonDate` | The date a coming-soon listing is scheduled to go live. |
| `scrapedAt` | ISO 8601 timestamp of when this actor fetched the record. |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `locations` | Array of strings | – | Cities, ZIP codes, neighborhoods or counties — one entry each. |
| `startUrls` | Array of URLs | – | Zillow search pages; the distress filter is applied on top. |
| `distressTypes` | Array (select) | all four | `foreclosure`, `preForeclosure`, `preMarketForeclosure`, `auction`; legacy `bankOwned` (REO-only) is also accepted. Leave empty for all. |
| `priceMin` / `priceMax` | Integer | – | Listing price bounds in USD. |
| `bedsMin` / `bathsMin` | Number | – | Minimum bedrooms / bathrooms. |
| `homeTypes` | Array (select) | all | `singleFamily`, `condo`, `townhouse`, `multiFamily`, `apartment`, `manufactured`, `lotLand`. |
| `daysOnZillow` | Select | `any` | Only listings seen within the window (1 day … 36 months). |
| `sortBy` | Select | `relevance` | Relevance, newest, price, beds, baths, size, lot or Zestimate. |
| `includeDetails` | Boolean | `true` | Open each listing's detail page for agent, photos, description and year built. |
| `includeAuctionDetails` | Boolean | `false` | Read the linked auctioneer page (auction.com only) for the auction schedule, starting bid, occupancy and lender/attorney fields. One extra request per linked auction; requires `includeDetails`. |
| `maxItems` | Integer | `100` | Maximum listings across all locations and URLs (1–5000). |

Provide at least one `locations` entry or one `startUrls` entry.

#### Example: foreclosures and auctions in one city

```json
{
    "locations": ["Phoenix, AZ"],
    "distressTypes": ["foreclosure", "auction"],
    "priceMax": 400000,
    "includeDetails": true,
    "maxItems": 100
}
```

#### Example: bank-owned homes by ZIP code

```json
{
    "locations": ["85001", "85032"],
    "distressTypes": ["preMarketForeclosure"],
    "includeDetails": true,
    "maxItems": 200
}
```

#### Example: reuse a saved Zillow search URL

```json
{
    "startUrls": [{"url": "https://www.zillow.com/austin-tx/foreclosures/"}],
    "maxItems": 300
}
```

### Use cases

- **Distressed-inventory investing** — track foreclosure and pre-foreclosure properties before they hit the broader market.
- **Wholesaling** — build a pre-foreclosure outreach list for a ZIP or neighborhood.
- **Auction prep** — research properties scheduled for a foreclosure auction ahead of time.
- **REO acquisition** — surface pre-market bank-owned properties for buy-and-hold portfolios.
- **Market intelligence** — quantify distress rates by city, ZIP or county over time.

### FAQ

**What's the difference between the distress types?**
`foreclosure` is an active foreclosure listing for sale (Zillow's foreclosure filter also includes bank-owned homes); `bankOwned` marks a home the lender already owns (REO); `preForeclosure` is a pre-market record early in the foreclosure process, not yet listed; `preMarketForeclosure` is a pre-market record the bank has already taken back; `auction` is a property scheduled for a foreclosure auction.

**How many results can I get per run?**
Up to 5,000 via `maxItems`. Zillow itself caps any single search at 20 result pages (about 820 listings). If a market hits that cap, split it into several `locations` — by home type, ZIP or neighborhood — and pass them together; the slices are disjoint, so their union covers the full inventory (verified: Los Angeles distressed inventory = 1,349 listings; its seven home-type slices sum to exactly 1,349).

**Do I need proxies or cookies?**
No. The actor routes its requests automatically and needs no account, cookie or API key from you.

**Why do some listings have no price or Zestimate?**
Zillow genuinely doesn't show a price or estimate for many pre-market distressed records. Those fields are omitted from the record instead of being filled with a placeholder.

**Does this include auction dates, unpaid balances or lender details?**
Zillow's own pages don't carry them, but auction listings link out to the auctioneer (`postingUrl`). Turn on `includeAuctionDetails` and the actor also reads the linked auction.com page, adding the auction date and sale time, occupancy, starting bid, loan principal, lender, servicer and foreclosure attorney (each when the auctioneer publishes it). Roughly two thirds of sampled Zillow auctions link to auction.com; other auctioneers and unpaid balances are not covered.

**Is this affiliated with Zillow?**
No. This actor is an independent tool that reads publicly visible Zillow search results and is not affiliated with or endorsed by Zillow.

# Actor input Schema

## `locations` (type: `array`):

US locations to search, one per line: a city ("Austin, TX"), ZIP code ("78701"), neighborhood ("Hyde Park, Austin, TX") or county ("Travis County, TX").

## `startUrls` (type: `array`):

Zillow search pages to scrape instead of (or in addition to) locations. The distress filter is layered on top of whatever the URL already filters.

## `distressTypes` (type: `array`):

Which distressed listing categories to return. Leave empty for all four.

## `priceMin` (type: `integer`):

Lower bound on the listing price. Leave blank for no minimum.

## `priceMax` (type: `integer`):

Upper bound on the listing price. Leave blank for no maximum.

## `bedsMin` (type: `number`):

Only include properties with at least this many bedrooms. Leave blank for no minimum.

## `bathsMin` (type: `number`):

Only include properties with at least this many bathrooms (decimals allowed, e.g. 1.5). Leave blank for no minimum.

## `homeTypes` (type: `array`):

Limit results to specific property types. Leave empty for all types.

## `daysOnZillow` (type: `string`):

Only include listings that have been on Zillow within this window.

## `sortBy` (type: `string`):

Order in which Zillow returns the listings.

## `includeDetails` (type: `boolean`):

Open each listing's detail page for the listing agent, photos, description, year built and distress flags. Adds one request per listing; rows still return without it.

## `includeAuctionDetails` (type: `boolean`):

For auction listings whose page links to auction.com, also read that public page for the auction date/time, occupancy, starting bid and lender/attorney details. Adds one request per linked auction and requires "Include full property details".

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

Maximum number of listings to return across all locations and URLs (1–5000).

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "distressTypes": [
    "foreclosure"
  ],
  "daysOnZillow": "any",
  "sortBy": "relevance",
  "includeDetails": true,
  "includeAuctionDetails": false,
  "maxItems": 3
}
```

# Actor output Schema

## `foreclosures` (type: `string`):

Dataset of scraped Zillow distressed listings.

# 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 = {
    "locations": [
        "Austin, TX"
    ],
    "distressTypes": [
        "foreclosure"
    ],
    "includeDetails": false,
    "includeAuctionDetails": false,
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/zillow-distressed-property-finder-by-city-or-zip").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 = {
    "locations": ["Austin, TX"],
    "distressTypes": ["foreclosure"],
    "includeDetails": False,
    "includeAuctionDetails": False,
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/zillow-distressed-property-finder-by-city-or-zip").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 '{
  "locations": [
    "Austin, TX"
  ],
  "distressTypes": [
    "foreclosure"
  ],
  "includeDetails": false,
  "includeAuctionDetails": false,
  "maxItems": 3
}' |
apify call dataspryva/zillow-distressed-property-finder-by-city-or-zip --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/zillow-distressed-property-finder-by-city-or-zip"
        }
    }
}
```

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/TFgUch48s7mbPQ6Kw/builds/LHqBAKVU6YO7qxV6c/openapi.json
