# Zillow Search Scraper: Past the 820 Limit (`luzivanlt/zillow-listings-scraper`) Actor

Every home of a Zillow search, past the 820 Zillow shows, checked against its count. $0.80 per 1,000 homes. 3,482 of 3,483 in a test. For sale, rent or sold.

- **URL**: https://apify.com/luzivanlt/zillow-listings-scraper.md
- **Developed by:** [Luzi](https://apify.com/luzivanlt) (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.56 / 1,000 homes

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

## Zillow Search Scraper: Past the 820 Limit

Get every home of a Zillow search, not just the 820 Zillow shows you: for
sale, for rent or recently sold, for a city, ZIP code, county, neighborhood
or any search link with your own filters and map area. The run's last message
checks the homes saved against Zillow's own count for each search. No Zillow
account, login or cookies needed.

Tested daily. Latest check: Ada County, Idaho, 3,482 of the 3,483 homes for
sale Zillow counted, in 6 minutes.

### What does this Actor do?

You give it places (as you would type them in Zillow's search box) or links to
Zillow searches. For each search it saves one row per home, until it has every
home Zillow counts for that search or reaches your limit.

Zillow's own site stops at 20 pages of 41 homes (820) for any search. This
Actor keeps going until it has every home in the search, so a whole city or
county comes back in one run, and its final message says, per search, whether
it got all of Zillow's count ("3,482 of 3,483").

Each row comes with:

- the Zillow id (zpid), the home's link, its status (for sale, for rent,
  sold, coming soon, under contract) and the listing type (by agent, by
  owner, new construction, foreclosure, auction)
- price, price as shown, the sold price and sold date for sold homes, the
  last price change and its date, the Zestimate, the rent Zestimate and the
  tax-assessed value
- the address (street, unit, city, state, ZIP) and its latitude and longitude
- beds, baths, living area, home type and lot size
- days on Zillow, open house times, the brokerage, the listing agent and MLS
  id where Zillow shows them
- every photo link of the listing card, and the main photo
- for rentals: the building name, each unit type with its price and beds,
  available units, the move-in date, required monthly fees, the leasing
  office phone where Zillow shows it, and highlights such as "7 available
  units"
- the search it came from, the region's name and Zillow's count for the
  search

### Why use it?

- **Every home, not 820.** A search with more homes than Zillow shows is read
  to its end; the run tells you for each search how many of Zillow's count it
  saved.
- **Sale, rent and sold** in one Actor, from a place name or any Zillow
  search link with your filters (price, beds, home type, days on Zillow, map
  area, sort).
- **Over 100 fields a home**, the card's every fact, flat and ready for a
  spreadsheet.
- **$0.80 per 1,000 homes**, and nothing per search.

### How to use it

1. Type one or more places under **Locations** and pick **Listing status**,
   or paste Zillow search links under **Search links**.
2. Set **Max homes per search** (1,000 by default). To get a whole search,
   set it above the number Zillow shows for it.
3. Start the run, then download the homes as JSON, CSV or Excel.

Run it with no input to see a sample: up to 100 homes for sale in Boise, ID,
charged as usual.

### Input

| Field               | What it is                                                                     |
| ------------------- | ------------------------------------------------------------------------------ |
| `locations`         | Places, one per line: `Boise, ID`, `83702`, `Ada County, ID`, a neighborhood   |
| `listingStatus`     | `for_sale` (default), `for_rent` or `sold`, for the locations                  |
| `startUrls`         | Zillow search links with your filters, map and sort; each keeps its own status |
| `maxHomesPerSearch` | 1 to 50,000, default 1,000                                                     |

Example:

```json
{
  "locations": ["Boise, ID", "83702"],
  "listingStatus": "for_sale",
  "maxHomesPerSearch": 5000
}
```

A link to one home, a building page or an agent page is refused before the
run starts, with the link named.

### Output

One row per home (a rental building with several units is one row, its units
listed inside it). Fields Zillow does not show for a home are `null` or an
empty list.

| Field                                                                                                                                                                                                                                                                                                                                        | What it is                                                                                      |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `zpid`                                                                                                                                                                                                                                                                                                                                       | Zillow's id for the home (for a rental building, Zillow's id for its spot)                      |
| `url`                                                                                                                                                                                                                                                                                                                                        | The home's (or building's) Zillow page                                                          |
| `status_type`, `status_text`, `home_status`, `raw_home_status`                                                                                                                                                                                                                                                                               | `FOR_SALE`, `FOR_RENT` or `SOLD`; the card's label ("House for sale"); Zillow's detailed status |
| `listing_category`, `listing_subcategory`, `marketing_status`, `listing_sub_types`                                                                                                                                                                                                                                                           | How it is listed: by agent or owner, new construction, foreclosure, open house, coming soon     |
| `contingent_listing_type`                                                                                                                                                                                                                                                                                                                    | `UNDER_CONTRACT` and the like, where shown                                                      |
| `price`, `price_text`, `listing_page_price`, `currency`                                                                                                                                                                                                                                                                                      | The price (sold price for sold homes, monthly rent for rentals)                                 |
| `sold_at`                                                                                                                                                                                                                                                                                                                                    | The sale date, for sold homes                                                                   |
| `price_change`, `price_changed_at`, `price_reduction_text`                                                                                                                                                                                                                                                                                   | The last price change                                                                           |
| `zestimate`, `rent_zestimate`, `tax_assessed_value`                                                                                                                                                                                                                                                                                          | Zillow's estimates and the assessed value                                                       |
| `address`, `street`, `unit`, `city`, `state`, `zipcode`, `country`                                                                                                                                                                                                                                                                           | The address                                                                                     |
| `latitude`, `longitude`, `is_undisclosed_address`, `is_unmappable`                                                                                                                                                                                                                                                                           | Where it is                                                                                     |
| `beds`, `baths`, `full_baths`, `half_baths`, `living_area`, `home_type`                                                                                                                                                                                                                                                                      | The home                                                                                        |
| `lot_area_value`, `lot_area_unit`                                                                                                                                                                                                                                                                                                            | The lot                                                                                         |
| `has_fireplace`, `has_air_conditioning`, `has_spa`, `has_pool`                                                                                                                                                                                                                                                                               | Rentals' features, where shown                                                                  |
| `days_on_zillow`, `time_on_zillow_ms`, `coming_soon_on_market_at`                                                                                                                                                                                                                                                                            | Time on the market                                                                              |
| `open_house`, `open_house_text`, `open_house_showings`                                                                                                                                                                                                                                                                                       | Open house times                                                                                |
| `broker_name`, `listing_agent`, `mls_id`, `attribution_logo_url`                                                                                                                                                                                                                                                                             | Who lists it, where Zillow shows it                                                             |
| `pals_id`, `provider_listing_id`                                                                                                                                                                                                                                                                                                             | Zillow's listing ids                                                                            |
| `flex_text`, `flex_type`, `highlights`                                                                                                                                                                                                                                                                                                       | The card's highlight lines                                                                      |
| `contact_phone`, `actions`                                                                                                                                                                                                                                                                                                                   | A rental's phone and buttons, where shown                                                       |
| `amenity_insight`                                                                                                                                                                                                                                                                                                                            | A rental's standout amenity, as Zillow rates it                                                 |
| `building_name`, `is_building`, `lot_id`, `units`, `available_units`, `available_from`                                                                                                                                                                                                                                                       | Rental buildings and units                                                                      |
| `min_base_rent`, `max_base_rent`, `required_monthly_fee_min`, `required_monthly_fee_max`, `price_includes_required_fees`, `is_rental_with_base_price`                                                                                                                                                                                        | Rent and required fees                                                                          |
| `is_instant_tour_enabled`, `is_contactable`, `marketing_treatments`                                                                                                                                                                                                                                                                          | A rental's tour and contact options and its listing package                                     |
| `image_url`, `photos`, `photo_count`, `street_view_url`                                                                                                                                                                                                                                                                                      | Photos                                                                                          |
| `has_image`, `has_video`, `has_3d_model`                                                                                                                                                                                                                                                                                                     | Media on the listing                                                                            |
| `is_featured`, `is_showcase`, `should_highlight`, `is_zillow_owned`, `is_premier_builder`, `is_paid_builder_new_construction`, `is_non_owner_occupied`, `is_preforeclosure_auction`, `is_home_rec`, `is_user_claiming_owner`, `is_user_confirmed_claim`, `has_additional_attributions`, `shows_request_on_price`, `shows_zestimate_as_price` | Zillow's flags for the listing                                                                  |
| `search_url`, `search_region`, `search_region_id`, `search_total`                                                                                                                                                                                                                                                                            | The search the row came from and Zillow's count for it                                          |

Agents' and leasing offices' names and phone numbers are personal data in
many places: check that your use is allowed where you are.

### How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

This Actor is priced per home saved:

- **$0.80 per 1,000 homes** ($0.0008 a home). Each home is charged once per
  run.
- No start fee, and nothing per search.

So 1,000 homes cost $0.80. If you set a maximum cost for a run, the Actor
stops when it reaches it and keeps every home saved so far.

### How long does a run take?

About two minutes per 1,000 homes (3,482 homes in 6 minutes in a test). A
search over 820 homes takes a few more pages than its homes alone would. For
more than about 5,000 homes, raise the run's timeout under **Run options**
before you start.

### Good to know

- **Zillow's count.** For homes for sale and sold homes, the final message
  compares the homes saved with Zillow's count for each search. Zillow counts
  rental units, while a rental building is one row, so rentals are never
  compared.
- **A home in two of your searches** (a city and its county, say) is saved
  once, under the first search that reached it.
- **Order.** A search under 820 homes comes back in Zillow's order; a larger
  one comes back area by area.
- **Sold prices.** Some states do not disclose sale prices; there Zillow
  shows sold homes without a price, and so does this Actor.
- **Details pages are not read.** You get what Zillow's search results show
  for each home, not the home's own page (description, price history, schools).
- **The United States only**, as Zillow.

### More Actors from us

- [Airbnb Scraper: Every Stay, Past the 15-Page Limit](https://apify.com/luzivanlt/airbnb-listings-scraper): Every stay of an Airbnb search, past the 15 pages Airbnb shows, checked against its count.
- [Alibaba Products Scraper: Price Tiers & Suppliers](https://apify.com/luzivanlt/alibaba-products-scraper): Alibaba.com products by keyword or link, with price tiers in US dollars on every row.
- [AliExpress Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/aliexpress-products-scraper): Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- [Amazon Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/amazon-products-scraper): Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- [App Store Reviews Scraper: All Reviews, Not 500](https://apify.com/luzivanlt/app-store-reviews-scraper): Every written App Store review of an app, not just the newest 500.
- [Woolworths Coles ALDI Scraper: AU Grocery Prices](https://apify.com/luzivanlt/au-supermarkets-scraper): Woolworths, Coles and ALDI products for any search in one run, every results page to the end.

### Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with `POST /v2/acts/…/runs` and read its dataset):

```text
POST https://api.apify.com/v2/acts/luzivanlt~zillow-listings-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
```

With the sample input as its JSON body:

```json
{
  "locations": ["Boise, ID"],
  "listingStatus": "for_sale",
  "maxHomesPerSearch": 100
}
```

Its inputs, in the order of the input form:

| Input                                      | What it takes                                                                                                                                                                   | Default      |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| `locations` (Locations)                    | Places to search, one per line, as you would type them in Zillow's search box: a city and state (Boise, ID), a ZIP code, a county or a neighborhood, up to 120 characters each. | —            |
| `listingStatus` (Listing status)           | Which homes to get for the locations above: for sale (the default), for rent, or recently sold.                                                                                 | `"for_sale"` |
| `startUrls` (Search links)                 | Zillow search results links, copied from your browser after you set the filters, map area and sort you want (https://www.zillow.com/boise-id/?searchQueryState=…).              | —            |
| `maxHomesPerSearch` (Max homes per search) | Stop each search after this many homes, from 1 to 50,000 (1,000 by default).                                                                                                    | `1000`       |

Apify's MCP server, `https://mcp.apify.com`, lists it as `luzivanlt/zillow-listings-scraper`. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=luzivanlt/zillow-listings-scraper"
    }
  }
}
```

The client signs in with OAuth, or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }`.

Charged per home delivered; the sample input above costs at most $0.08.

### FAQ

**Can I get every home in a big city?** Yes. Set **Max homes per search**
above Zillow's count; the final message tells you how many of Zillow's count
were saved.

**Can I use my own filters?** Yes. Set them on Zillow, copy the link from
your browser and paste it under **Search links**.

### Is it legal to scrape Zillow?

This Actor reads pages anyone can open without an account. Check Zillow's
terms and the laws where you are before you use the data, especially the
personal data of agents.

### Support

Open an issue on the Actor's page and describe the search and what you
expected.

# Changelog

This Actor's version history is a separate document: https://apify.com/luzivanlt/zillow-listings-scraper/changelog.md

# Actor input Schema

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

Places to search, one per line, as you would type them in Zillow's search box: a city and state (Boise, ID), a ZIP code, a county or a neighborhood, up to 120 characters each. Listing status applies to them. A link here is refused: paste it under Search links. Example: Ada County, ID

## `listingStatus` (type: `string`):

Which homes to get for the locations above: for sale (the default), for rent, or recently sold. Search links keep their own status. For rentals, a building is one row, so the homes saved are not compared with Zillow's count. Example: for_rent

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

Zillow search results links, copied from your browser after you set the filters, map area and sort you want (https://www.zillow.com/boise-id/?searchQueryState=…). Each link keeps all of them and is read from its first page; a link from the map-only view works too. A link to one home, a building page or an agent page is refused. Example: https://www.zillow.com/boise-id/

## `maxHomesPerSearch` (type: `integer`):

Stop each search after this many homes, from 1 to 50,000 (1,000 by default). Zillow's own site shows at most 820 homes for one search; this Actor goes past that to every home Zillow counts, so set this above Zillow's count to get them all. You pay per home saved ($0.80 per 1,000), so this also caps what each search costs. Example: 5000

## Actor input object example

```json
{
  "locations": [
    "Boise, ID"
  ],
  "listingStatus": "for_sale",
  "maxHomesPerSearch": 100
}
```

# Actor output Schema

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

Every home the run saved, one row each.

## `allFields` (type: `string`):

The same rows with every field.

## `runReport` (type: `string`):

What happened to each input: items saved, nothing found, refused by the site, stopped at your limit, or the error.

# 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": [
        "Boise, ID"
    ],
    "maxHomesPerSearch": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("luzivanlt/zillow-listings-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 = {
    "locations": ["Boise, ID"],
    "maxHomesPerSearch": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("luzivanlt/zillow-listings-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 '{
  "locations": [
    "Boise, ID"
  ],
  "maxHomesPerSearch": 100
}' |
apify call luzivanlt/zillow-listings-scraper --silent --output-dataset

```

## MCP server setup

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