# Zillow Scraper (`crawlio/zillow-scraper`) Actor

Scrape Zillow property listings and detailed real estate data. Search by location, price, beds. Get pricing history, tax records, schools. Bulk extraction supported.

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

## Pricing

from $0.90 / 1,000 results

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/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

## Zillow Scraper

### What does Zillow Scraper do?

Zillow Scraper enables you to extract comprehensive real estate data from [Zillow](https://www.zillow.com), the largest real estate marketplace in the United States.

Zillow Scraper can extract:

- Property listings (for sale & for rent)
- Prices and price history
- Property details (beds, baths, square footage)
- Location data (address, coordinates, neighborhood)
- Tax history and assessments
- School information and ratings
- Property photos
- Zestimate valuations
- Similar properties and comparables
- Listing status and availability

### Why scrape Zillow?

Zillow is the #1 real estate platform in the US with millions of property listings. It's an invaluable data source for real estate professionals, investors, analysts, and researchers.

Here are just some of the ways you could use that data:

- Monitor housing market trends and price movements across neighborhoods
- Analyze investment opportunities and identify undervalued properties
- Build datasets for real estate valuation models and price predictions
- Research rental yields and cash flow potential
- Compare property features and pricing against competitors
- Track new listings and price changes in target markets
- Generate automated property reports and market analyses
- Build real estate search engines and property recommendation tools

If you would like more inspiration on how scraping Zillow could help your business or organization, check out our [industry pages](https://apify.com/industries).

### How to scrape Zillow

It's easy to scrape [Zillow](https://www.zillow.com) with Zillow Scraper. Just follow these few steps and you'll get your data in minutes.

1. Click on **Try for free**.
2. Select your mode:
   - **Search** → Find properties by location, price range, beds, and other filters
   - **Property Details** → Get detailed data for specific properties (supports bulk extraction)
3. Configure your search:
   - Enter location (city, ZIP code, or neighborhood)
   - Choose property type (for sale or for rent)
   - Set filters (price range, bedrooms, bathrooms, etc.)
   - Specify number of pages to scrape
4. Click on **Run**.
5. When Zillow Scraper has finished, preview or download your data from the **Dataset** tab.

### How much will it cost to scrape Zillow?

Apify gives you $5 free usage credits every month on the [Apify Free plan](https://apify.com/pricing). You can extract hundreds of property listings from Zillow for those $5 and then upgrade your plan as your needs grow.

For detailed pricing information and cost estimates, check the actor's pricing page on the Apify Console.

If you need to scrape larger volumes of data or at higher frequency, subscribe to the [Apify platform plans](https://apify.com/pricing) or contact us for custom solutions.

### Input

Zillow Scraper accepts two operation modes:

#### Search Mode

Find properties by location and filters:

```json
{
  "mode": "search",
  "search": {
    "location": "Austin, TX",
    "searchType": "for_sale",
    "maxPages": 5,
    "priceMin": 200000,
    "priceMax": 500000,
    "bedsMin": 3,
    "sort": "price_asc"
  }
}
```

**Search Parameters:**

- `location` - City, ZIP code, or address (e.g., "Miami, FL", "90210")
- `searchType` - Property type: `for_sale` or `rent`
- `maxPages` - Number of result pages to scrape (default: 20, ~40 listings per page)
- `priceMin` / `priceMax` - Price range filter (USD)
- `bedsMin` / `bedsMax` - Bedroom count filter
- `sort` - Sort order: `featured`, `newest`, `price_asc`, `price_desc`, `beds`, `baths`, `area`
- `homeType` - Property types filter (array): `Houses`, `Townhomes`, `Condos/co-ops`, etc.

#### Property Details Mode

Extract detailed information for specific properties:

```json
{
  "mode": "details",
  "details": {
    "zpids": ["29746715", "2064533106"]
  }
}
```

**Details Parameters:**

- `zpids` - Array of Zillow Property IDs (bulk support: 1-1000 properties per run)

### Output

Zillow Scraper stores results in the **Dataset** associated with the run. You can export data in JSON, CSV, Excel, HTML, or XML formats.

#### Search Results Output

Each property listing includes:

```json
{
  "zpid": "29746715",
  "url": "https://www.zillow.com/homedetails/...",
  "streetAddress": "9105 Highland Pointe Dr",
  "city": "Fort Worth",
  "state": "TX",
  "zipcode": "76179",
  "price": 409990,
  "bedrooms": 4,
  "bathrooms": 3,
  "livingArea": 2847,
  "homeType": "SINGLE_FAMILY",
  "latitude": 32.925346,
  "longitude": -97.433418,
  "images": ["https://photos.zillowstatic.com/..."],
  "status": "FOR_SALE"
}
```

#### Property Details Output

Detailed property data includes all search fields plus:

```json
{
  "zpid": "29746715",
  "lotSize": 8712,
  "yearBuilt": 2015,
  "description": "Beautiful 4-bedroom home...",
  "priceHistory": [...],
  "taxHistory": [...],
  "schools": [...],
  "resoFacts": {
    "atAGlanceFacts": [...],
    "heating": "Central",
    "cooling": "Central Air",
    "parking": "2 spaces",
    "hoaFee": null
  },
  "nearbyHomes": [...]
}
```

### Use Cases

#### Real Estate Investment Analysis

Identify undervalued properties, analyze market trends, and calculate investment returns across multiple markets.

#### Competitive Market Research

Monitor competitor pricing, track new listings, and analyze property features to optimize your own listings or investment strategy.

#### Market Data & Analytics

Build real estate databases, train ML models for price prediction, or generate automated market reports for clients.

#### Property Monitoring

Set up recurring runs to track specific properties, neighborhoods, or market segments and get alerts on price changes or new listings.

### Limits & Performance

- **Max properties per run**: Unlimited (search pages capped at 20 per search query due to Zillow limits)
- **Bulk details**: Up to 1,000 properties per run
- **Speed**: ~40-50 properties per minute (search), ~20-30 properties per minute (details)
- **Data freshness**: Real-time data from Zillow

### Tips for Best Results

1. **Use specific locations**: "Austin, TX 78701" works better than just "Texas"
2. **Narrow your search**: Use price and bedroom filters to get more relevant results
3. **Bulk extraction**: Use details mode with multiple zpids for efficient data collection
4. **Pagination**: Search results are limited to ~20 pages (~800 listings) per query by Zillow

### Support

If you find any bugs or have suggestions for improvements, please [open an issue](https://github.com/apify/actor-issues/issues) or contact us at <support@apify.com>.

### Is it legal to scrape Zillow?

Our scrapers are ethical and do not extract any private user data, such as email addresses or phone numbers. We only extract publicly available data. For more information, see our [blog post on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

# Actor input Schema

## `mode` (type: `string`):

Choose the extraction mode: Search listings or Property details.

## `search` (type: `object`):

Configure search parameters to find properties by location, price, size, and other filters.

## `details` (type: `object`):

Fetch detailed property information by Zillow Property ID (zpid). Supports bulk fetching of multiple properties.

## Actor input object example

```json
{
  "mode": "search",
  "search": {
    "location": "New York, NY",
    "searchType": "for_sale",
    "maxPages": 20,
    "sort": "featured"
  },
  "details": {
    "zpids": [
      "29746715"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

One dataset item per listing (search) or one detailed item (detail).

## `runSummary` (type: `string`):

Short summary stored in the OUTPUT record of the default key-value store.

# 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 = {
    "search": {
        "location": "New York, NY",
        "searchType": "for_sale",
        "maxPages": 20,
        "sort": "featured"
    },
    "details": {
        "zpids": [
            "29746715"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlio/zillow-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 = {
    "search": {
        "location": "New York, NY",
        "searchType": "for_sale",
        "maxPages": 20,
        "sort": "featured",
    },
    "details": { "zpids": ["29746715"] },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlio/zillow-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 '{
  "search": {
    "location": "New York, NY",
    "searchType": "for_sale",
    "maxPages": 20,
    "sort": "featured"
  },
  "details": {
    "zpids": [
      "29746715"
    ]
  }
}' |
apify call crawlio/zillow-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/gVH8XLy2eHtZxupDv/builds/UlNW9rTqriRcpII4D/openapi.json
