# Zillow Search Scraper - All Results, No 820 Limit (`joyouscam35875/zillow-search-scraper`) Actor

Every home of a Zillow search: for sale, for rent or recently sold, by city, ZIP, county or search URL, past Zillow's 820-result limit. Price, beds, baths, sqft, Zestimate, rent Zestimate, tax value, broker. Only-new mode for alerts.

- **URL**: https://apify.com/joyouscam35875/zillow-search-scraper.md
- **Developed by:** [Ken Digital](https://apify.com/joyouscam35875) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 listings

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

## Zillow Search Scraper - All Results, No 820 Limit

Every home of a Zillow search, **for sale, for rent or recently sold**, as clean rows: price, beds, baths, square feet, lot size, home type, days on Zillow, **Zestimate**, **rent Zestimate**, tax-assessed value, price cuts, broker, coordinates and photo. Type a place (`Austin, TX`, `78704`, `Brooklyn, NY`, `Miami-Dade County`) or paste a search URL from zillow.com with your own filters and map area.

Zillow's website stops at 20 pages (820 homes) per search. This actor splits the map into smaller areas until each one fits, so you get **every home in the search**, not just the first 820. Turn on **Only new listings** and schedule it for alerts that never repeat a home.

- **All results:** 5,000+ homes for a big city in about a minute.
- **For sale, for rent, sold:** sold searches include the sale date. Rentals include apartment buildings with their rent range and unit count.
- **Filters:** price, beds, baths, home type, sold window. A pasted Zillow URL keeps all the filters you set on the site.
- **Only new listings** remembers what earlier runs delivered, per search, so scheduled runs return and bill only fresh homes.
- **No login, no cookies, no proxy setup.**

### Quick start

```json
{
  "searches": ["Austin, TX", "78704"],
  "listingType": "forSale",
  "maxPrice": 600000,
  "minBeds": 3,
  "maxItems": 0
}
```

Or paste a URL: `"searches": ["https://www.zillow.com/denver-co/rentals/?searchQueryState=..."]`.

**Daily alert:** add `"onlyNewListings": true`, save as a task, schedule it, and connect Slack, email or Google Sheets from the task's Integrations tab.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searches` | array | required | Places (city, ZIP, county, neighborhood, borough) or zillow.com search URLs. |
| `listingType` | string | `forSale` | `forSale`, `forRent` or `sold`, for typed places. URLs keep their own. |
| `soldInLast` | string | `90` | `7`, `30`, `90`, `6m`, `12m`, `24m`, `36m` (sold searches). |
| `minPrice` / `maxPrice` | integer | | Sale price, or monthly rent. |
| `minBeds` / `minBaths` | integer | | |
| `homeTypes` | array | all | `house`, `townhouse`, `condo`, `apartment`, `multiFamily`, `manufactured`, `land`. |
| `maxItems` | integer | 500 | Per search. `0` = every home (up to 50,000). |
| `onlyNewListings` | boolean | false | Return only homes not delivered by earlier runs of the same search. |

### Output

```json
{
  "zpid": "124843289",
  "url": "https://www.zillow.com/homedetails/1404-Verdana-Dr-Austin-TX-78753/124843289_zpid/",
  "status": "forSale",
  "price": 215000,
  "address": "1404 Verdana Dr, Austin, TX 78753",
  "city": "Austin",
  "state": "TX",
  "zipcode": "78753",
  "latitude": 30.395063,
  "longitude": -97.649635,
  "beds": 4,
  "baths": 3,
  "livingArea": 1884,
  "lotArea": 5131.368,
  "lotAreaUnit": "sqft",
  "homeType": "SINGLE_FAMILY",
  "daysOnZillow": 11,
  "zestimate": null,
  "rentZestimate": null,
  "taxAssessedValue": 387996,
  "listingSubType": ["FSBA"],
  "brokerName": "Keller Williams Realty",
  "imgSrc": "https://photos.zillowstatic.com/fp/411e58faf7d081c39b2ed1cbbab52439-p_e.jpg",
  "isBuilding": false,
  "searchInput": "Austin, TX",
  "scrapedAt": "2026-10-07T10:00:00+00:00"
}
```

Apartment buildings in rental searches come as one row with `isBuilding: true`, `buildingName`, `unitCount`, `minRent` and `maxRent`. Sold homes carry `dateSold`. Sold prices are missing in non-disclosure states such as Texas, where Zillow does not publish them either. `listingSubType` flags FSBO, foreclosures, auctions and new construction.

### Pricing

Pay per event: one `listing` event per home row, plus a tiny actor-start fee. With **Only new listings** on, a run with nothing new costs only the start fee.

### Use cases

- **Investors:** every listing in a market with Zestimate, rent Zestimate and tax value, to screen for yield and discounts
- **Agents and wholesalers:** daily alerts of new FSBO, foreclosure and price-cut listings in your ZIP codes
- **Market research:** inventory, days on market, price per square foot and sold volumes by area
- **Rental analysis:** rents and apartment buildings with rent ranges across a whole city

### Integrations

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("joyouscam35875/zillow-search-scraper").call(run_input={
    "searches": ["Tampa, FL"],
    "listingType": "forSale",
    "homeTypes": ["house"],
    "maxItems": 0,
})
for home in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(home["price"], home["beds"], home["livingArea"], home["zestimate"], home["url"])
```

Works with Make, Zapier, n8n, Google Sheets, schedules and webhooks, and as an MCP tool for AI agents.

### FAQ

**How does it get past 820 results?** Zillow returns up to about 500 homes per map view. When a view has more, the actor splits it into four smaller views and repeats, then removes duplicates. Very dense blocks (a few towers in Manhattan) can still hold more than Zillow will return for one view; the log shows the search's total next to what was delivered.

**Why is `zestimate` sometimes empty?** Zillow shows a Zestimate on search results only for some homes. It is never invented.

**What if my run has a short timeout?** The actor stops shortly before it, keeps every home already saved, and ends successfully with a message saying so.

**Is it legal?** The actor reads publicly visible search results and does not log in. You are responsible for how you use the data and for complying with Zillow's terms and applicable law.

### Feedback

Missing a field? Open an issue on the actor's **Issues** tab. If this scraper saved you time, a short review on the Store page helps other people find it.

### Related actors by the same developer

| Actor | What it does |
|---|---|
| [SeLoger, Leboncoin, Bien'ici, PAP & Logic-Immo Scraper](https://apify.com/joyouscam35875/france-real-estate-scraper) | French property listings from five sites with real sale prices |
| [Google Maps Scraper](https://apify.com/joyouscam35875/google-maps-scraper) | Businesses, ratings and contact details from Google Maps |
| [Google Search Results Scraper](https://apify.com/joyouscam35875/google-serp-scraper) | Organic results, ads and related searches |

# Actor input Schema

## `searches` (type: `array`):

A city, ZIP code, county or neighborhood ('Austin, TX', '78704', 'Brooklyn, NY', 'Miami-Dade County'), or a search URL copied from zillow.com with your filters and map area. One search per line.

## `listingType` (type: `string`):

Search URLs keep the type chosen on Zillow.

## `soldInLast` (type: `string`):

Only for 'Recently sold'.

## `minPrice` (type: `integer`):

Sale price, or monthly rent for rentals.

## `maxPrice` (type: `integer`):

Sale price, or monthly rent for rentals.

## `minBeds` (type: `integer`):

Minimum number of bedrooms.

## `minBaths` (type: `integer`):

Minimum number of bathrooms.

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

Leave empty for all types.

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

0 = every home in the search (up to 50,000), beyond Zillow's 820-result page limit.

## `onlyNewListings` (type: `boolean`):

Remember the homes delivered by earlier runs of the same search and return only homes not delivered before. You only pay for new homes.

## Actor input object example

```json
{
  "searches": [
    "Austin, TX"
  ],
  "listingType": "forSale",
  "soldInLast": "90",
  "maxItems": 500,
  "onlyNewListings": false
}
```

# Actor output Schema

## `homes` (type: `string`):

One row per home or apartment building.

# 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 = {
    "searches": [
        "Austin, TX"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("joyouscam35875/zillow-search-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 = { "searches": ["Austin, TX"] }

# Run the Actor and wait for it to finish
run = client.actor("joyouscam35875/zillow-search-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 '{
  "searches": [
    "Austin, TX"
  ]
}' |
apify call joyouscam35875/zillow-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,joyouscam35875/zillow-search-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/z023ZipdRtbMW0a3d/builds/c1xihh8zCmlic1hFP/openapi.json
