# Zillow Scraper: Home Prices, Sale History, Rentals (`scrapemint/zillow-home-price-scraper`) Actor

Scrape Zillow listings by city or URL. Returns price, beds, baths, sqft, Zestimate, rent Zestimate, days on market, agent. For-sale, for-rent, sold. Filter by price, beds, sqft, type. JSON. Pay per item.

- **URL**: https://apify.com/scrapemint/zillow-home-price-scraper.md
- **Developed by:** [Kennedy Mutisya](https://apify.com/scrapemint) (community)
- **Categories:** Real estate, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Zillow Scraper: Export Home Prices, Zestimates, and Rentals to JSON

Scrape Zillow listings by city, zip code, or search URL. Get price, beds, baths, square feet, lot size, Zestimate, rent Zestimate, days on market, and agent name for every listing. Works on for sale, for rent, and sold pages in any US market. Pay per row.

**Ranks for:** Zillow scraper, Zillow API alternative, Zestimate scraper, Zillow data export, scrape Zillow home prices, Zillow listings JSON, Zillow sold comps, Zillow rental data, real estate scraper.

---

### What this does

```mermaid
flowchart LR
    A[Paste Zillow URL<br/>or city name] --> B[Fetch search page]
    B --> C[Parse listings blob]
    C --> D[Filter + flag rows]
    D --> E[JSON dataset]
````

One input, one clean dataset. No browser automation to write, no captcha to solve, no proxy to manage.

***

### Why people use it

| Role | Job it does |
|---|---|
| Real estate investor | Spot homes priced below Zestimate in target zips. |
| Wholesaler | Track price cuts and stale listings for outreach. |
| Market analyst | Pull daily inventory to chart supply by metro. |
| Proptech builder | Feed Zillow rows into a valuation model. |
| Agent | Watch new listings in a farm area the minute they hit. |
| Rental operator | Benchmark rents by neighborhood. |

***

### Quick start

Paste any Zillow search URL you see in your browser. That is the whole input.

```json
{
  "searchUrls": ["https://www.zillow.com/homes/Austin-TX_rb/"],
  "maxPages": 3
}
```

Three common variations:

```json
{ "locations": ["78704"], "listingType": "sold" }
```

```json
{ "locations": ["Denver, CO"], "listingType": "for_rent", "maxPrice": 3500 }
```

```json
{ "searchUrls": ["https://www.zillow.com/homes/Austin-TX_rb/"], "dedupe": false }
```

The last one turns off dedupe so you can run it on a schedule and build your own price history table.

***

### What you get back

```json
{
  "zpid": "331621763",
  "address": "14901 Ben Davis Dr, Austin, TX 78725",
  "city": "Austin",
  "state": "TX",
  "zip": "78725",
  "price": 299000,
  "beds": 4,
  "baths": 2,
  "sqft": 2047,
  "lotSize": 6930,
  "zestimate": 297700,
  "rentZestimate": 2174,
  "daysOnMarket": 3,
  "flags": ["new_listing", "below_zestimate"],
  "url": "https://www.zillow.com/homedetails/..."
}
```

Flags are the fastest way to filter downstream. No need to re read titles.

```mermaid
flowchart LR
    A[Row flags] --> B[new_listing]
    A --> C[price_cut]
    A --> D[below_zestimate]
    A --> E[stale_listing]
    A --> F[pending / sold / foreclosure]
```

***

### Zillow scraper vs the alternatives

|  | MLS IDX feed | Zillow public API | **This actor** |
|---|---|---|---|
| Who can use it | Licensed brokers | Closed since 2021 | Anyone |
| Setup | Weeks | Not available | 60 seconds |
| Zestimate | No | Yes | Yes |
| Sold comps | Yes | Yes | Yes |
| Rentals | Partial | Yes | Yes |
| Price history | Yes | Yes | Yes (dedupe off) |
| Cost | $500+ /mo | Closed | Pay per item |

***

### Pricing

First 50 rows per run are free. After that you pay per row. A daily snapshot of 200 Austin listings runs under $3.

***

### FAQ

**Is there a public Zillow API?**
No. Zillow closed the public API in 2021. This actor reads the same HTML a browser sees.

**Does it return the Zestimate?**
Yes. Every row that has a Zestimate on the search page returns one.

**Can I scrape rentals?**
Yes. Set `listingType` to `for_rent` or paste a rental URL.

**Can I scrape sold comps?**
Yes. Set `listingType` to `sold` or paste a sold URL.

**Can I track price changes over time?**
Yes. Set `dedupe: false` and schedule it daily. Each row stamps `scrapedAt` so you build your own history.

**Does Zillow block scrapers?**
Yes, aggressively on datacenter IPs. The actor uses residential proxy by default.

**What is a zpid?**
Zillow Property ID. A stable unique id per listing. Used as the dedupe key.

**Is scraping Zillow legal?**
This actor reads public HTML a browser can see. Respect the site terms and rate limit sensibly.

***

### Related actors

- **Flight Price Tracker** for Google Flights fares
- **TripAdvisor Review Intelligence** for hotel and restaurant reviews
- **Google Reviews Intelligence** for places reviews
- **Viator Scraper** for tours and activities

# Actor input Schema

## `searchUrls` (type: `array`):

Full Zillow search URLs. Example: https://www.zillow.com/homes/Austin-TX\_rb/ for Austin for-sale, or a filtered map search pasted from zillow.com.

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

City and state like "Austin, TX" or zip codes. Used when searchUrls is blank.

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

for\_sale, for\_rent, or sold. Default for\_sale.

## `minPrice` (type: `number`):

Drop listings priced below this.

## `maxPrice` (type: `number`):

Drop listings priced above this.

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

Drop listings with fewer beds.

## `maxBeds` (type: `integer`):

Drop listings with more beds.

## `minSqft` (type: `integer`):

Drop listings smaller than this.

## `propertyTypes` (type: `array`):

Keep only matching types: house, condo, townhouse, apartment, manufactured, multifamily, lot, other. Empty keeps all.

## `maxPages` (type: `integer`):

Zillow returns up to 40 listings per page. 5 pages = 200 listings. Cap to control cost.

## `maxItemsPerSource` (type: `integer`):

Per search cap on rows pushed.

## `maxItemsTotal` (type: `integer`):

Hard cap on rows per run. Controls total cost.

## `dedupe` (type: `boolean`):

Skip zpids pushed on previous runs. Turn off to track price changes over time.

## `proxyConfiguration` (type: `object`):

Apify proxy. Residential strongly recommended. Zillow blocks datacenter IPs aggressively.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.zillow.com/homes/Austin-TX_rb/"
  ],
  "locations": [],
  "listingType": "for_sale",
  "minPrice": 0,
  "maxPrice": 0,
  "minBeds": 0,
  "maxBeds": 0,
  "minSqft": 0,
  "propertyTypes": [],
  "maxPages": 3,
  "maxItemsPerSource": 100,
  "maxItemsTotal": 300,
  "dedupe": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchUrls": [
        "https://www.zillow.com/homes/Austin-TX_rb/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/zillow-home-price-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 = { "searchUrls": ["https://www.zillow.com/homes/Austin-TX_rb/"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/zillow-home-price-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrls": [
    "https://www.zillow.com/homes/Austin-TX_rb/"
  ]
}' |
apify call scrapemint/zillow-home-price-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapemint/zillow-home-price-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Scraper: Home Prices, Sale History, Rentals",
        "description": "Scrape Zillow listings by city or URL. Returns price, beds, baths, sqft, Zestimate, rent Zestimate, days on market, agent. For-sale, for-rent, sold. Filter by price, beds, sqft, type. JSON. Pay per item.",
        "version": "0.1",
        "x-build-id": "XlyxVH0gUYL8NQXfs"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~zillow-home-price-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-zillow-home-price-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapemint~zillow-home-price-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-zillow-home-price-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapemint~zillow-home-price-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-zillow-home-price-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchUrls": {
                        "title": "Zillow search URLs",
                        "type": "array",
                        "description": "Full Zillow search URLs. Example: https://www.zillow.com/homes/Austin-TX_rb/ for Austin for-sale, or a filtered map search pasted from zillow.com.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "City and state like \"Austin, TX\" or zip codes. Used when searchUrls is blank.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "listingType": {
                        "title": "Listing type",
                        "enum": [
                            "for_sale",
                            "for_rent",
                            "sold"
                        ],
                        "type": "string",
                        "description": "for_sale, for_rent, or sold. Default for_sale.",
                        "default": "for_sale"
                    },
                    "minPrice": {
                        "title": "Min price ($)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Drop listings priced below this.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Max price ($)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Drop listings priced above this.",
                        "default": 0
                    },
                    "minBeds": {
                        "title": "Min beds",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Drop listings with fewer beds.",
                        "default": 0
                    },
                    "maxBeds": {
                        "title": "Max beds",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Drop listings with more beds.",
                        "default": 0
                    },
                    "minSqft": {
                        "title": "Min square feet",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop listings smaller than this.",
                        "default": 0
                    },
                    "propertyTypes": {
                        "title": "Property types",
                        "type": "array",
                        "description": "Keep only matching types: house, condo, townhouse, apartment, manufactured, multifamily, lot, other. Empty keeps all.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Zillow returns up to 40 listings per page. 5 pages = 200 listings. Cap to control cost.",
                        "default": 3
                    },
                    "maxItemsPerSource": {
                        "title": "Max items per source",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Per search cap on rows pushed.",
                        "default": 100
                    },
                    "maxItemsTotal": {
                        "title": "Max items per run",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on rows per run. Controls total cost.",
                        "default": 300
                    },
                    "dedupe": {
                        "title": "Deduplicate across runs",
                        "type": "boolean",
                        "description": "Skip zpids pushed on previous runs. Turn off to track price changes over time.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. Residential strongly recommended. Zillow blocks datacenter IPs aggressively.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
