# Zillow Real Estate Listing Scraper (`miccho27/zillow-listing-scraper`) Actor

Scrape Zillow property listings: price, beds, baths, sqft, address, year built, zestimate, listing agent, and price history. Supports location-based search and direct listing URL modes.

- **URL**: https://apify.com/miccho27/zillow-listing-scraper.md
- **Developed by:** [Tatsuya Mizuno](https://apify.com/miccho27) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 20.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 Real Estate Listing Scraper - Free Property Price & Data Extractor (Alternative to Zillow API, Redfin, Realtor.com)

Scrape Zillow property listings at scale -- price, beds, baths, sqft, address, year built, Zestimate, listing agent, tax history, and price history. Supports both **location-based search** and **direct listing URL** modes. The best free alternative to Zillow API (deprecated), RapidAPI Zillow ($30/mo), Redfin scraping, and manual MLS lookups.

### Who Is This For?

- **Real estate investors** -- Analyze property values, price trends, and Zestimates to find undervalued deals
- **Property managers** -- Monitor rental listings, compare market rates, and track vacancy rates
- **Real estate agents** -- Research comps, track days-on-market, and build neighborhood market reports
- **Data scientists** -- Build real estate datasets for price prediction models and market analysis
- **Home buyers** -- Compare listings across neighborhoods with structured data exports
- **Appraisers & analysts** -- Access tax history, price history, and property details in bulk

### Pricing -- Free to Start

| Tier | Cost | What You Get |
|------|------|-------------|
| **Free trial** | $0 | Apify free tier includes monthly compute credits |
| **Pay per result** | ~$3.00 / 1,000 listings | Search + detail extraction |
| **vs. Zillow API** | API deprecated | Only scraping option available |
| **vs. RapidAPI Zillow** | Saves $30/mo | No subscription, richer data |

### Quick Start (3 Steps)

1. **Click "Try for free"** on this Actor's page in Apify Store
2. **Enter a location** (e.g., "Austin, TX") or paste Zillow listing URLs
3. **Click "Start"** and get property data as JSON, CSV, or Excel

### Features

- **Dual mode**: Search by city/ZIP OR scrape direct listing URLs
- **Rich data**: Price, beds, baths, sqft, lot size, year built, property type, listing status, days on Zillow, Zestimate, latitude/longitude
- **Price & tax history**: Up to 5 price history events and 3 years of tax history per listing
- **Listing agent info**: Agent name, phone, and brokerage
- **Search filters**: Filter by price range, beds, baths, property type, and listing type (for sale / for rent / recently sold)
- **Retry & rate limiting**: Automatic retries with exponential backoff
- **Bot detection alerts**: Warns when Zillow shows a captcha or block page

### Input

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `searchLocation` | string | City, state, or ZIP to search (e.g. `"Austin, TX"`, `"90210"`) | -- |
| `listingUrls` | array | Direct Zillow listing URLs to scrape | -- |
| `listingType` | string | `"for_sale"`, `"for_rent"`, or `"recently_sold"` | `"for_sale"` |
| `maxResults` | integer | Max listings to return from search | `20` |
| `minPrice` | integer | Minimum price filter ($) | -- |
| `maxPrice` | integer | Maximum price filter ($) | -- |
| `minBeds` | integer | Minimum bedrooms | `0` |
| `minBaths` | number | Minimum bathrooms | `0` |
| `propertyType` | string | `"any"`, `"house"`, `"condo"`, `"townhouse"`, `"multi_family"`, `"land"` | `"any"` |

#### Example Input -- Search Mode

```json
{
  "searchLocation": "Austin, TX",
  "listingType": "for_sale",
  "maxResults": 25,
  "minBeds": 3,
  "maxPrice": 600000
}
````

#### Example Input -- Direct URLs

```json
{
  "listingUrls": [
    "https://www.zillow.com/homedetails/123-main-st-austin-tx-78701/12345678_zpid/",
    "https://www.zillow.com/homedetails/456-oak-ave-austin-tx-78702/87654321_zpid/"
  ]
}
```

### Output

Each record in the dataset:

```json
{
  "success": true,
  "source": "direct_url",
  "zpid": "12345678",
  "address": "123 Main St, Austin, TX 78701",
  "price": 549000,
  "priceFormatted": "$549,000",
  "beds": 4,
  "baths": 2.5,
  "sqft": 2100,
  "lotSize": "0.18 acres",
  "yearBuilt": 2005,
  "propertyType": "SINGLE_FAMILY",
  "listingStatus": "FOR_SALE",
  "description": "Stunning 4-bed home in the heart of Austin...",
  "daysOnZillow": 12,
  "zestimate": 565000,
  "taxHistory": [
    { "year": 2023, "taxPaid": 8200, "value": 510000 }
  ],
  "priceHistory": [
    { "date": "2024-01-01", "price": 549000, "event": "Listed for sale" }
  ],
  "latitude": 30.2672,
  "longitude": -97.7431,
  "imageUrl": "https://photos.zillowstatic.com/...",
  "listingAgent": "Jane Smith",
  "listingAgentPhone": "512-555-0100",
  "brokerName": "Austin Premier Realty",
  "listingUrl": "https://www.zillow.com/homedetails/...",
  "scrapedAt": "2024-01-15T10:30:00.000Z"
}
```

### Real-World Use Cases

#### 1. Investment Property Analysis

Search "recently\_sold" listings in target neighborhoods. Compare sale prices vs Zestimates to find undervalued areas with high appreciation potential.

#### 2. Rental Market Research

Monitor "for\_rent" listings weekly. Track median rent by bedroom count across ZIP codes to optimize your rental pricing strategy.

#### 3. Competitive Market Analysis (CMA)

Pull comparable sales for a specific address. Filter by beds, baths, sqft, and sale date to generate professional CMA reports.

#### 4. Real Estate Data Pipeline

Schedule daily runs to feed property data into your database. Use Apify webhooks to trigger downstream processing and price alerts.

#### 5. Neighborhood Scoring

Aggregate listing data by ZIP code: median price, average days on market, price-to-Zestimate ratio, and inventory levels.

### FAQ

**Q: Does this work for all US locations?**
A: Yes, any location searchable on Zillow (city, state, ZIP code). International listings are not supported.

**Q: How accurate is the Zestimate data?**
A: Zestimates are Zillow's proprietary estimates, included when available on the listing page. Accuracy varies by market.

**Q: Can I monitor price changes over time?**
A: Yes. Schedule recurring runs on the same search or listing URLs. Compare datasets to detect price changes.

**Q: What about Zillow's anti-bot protection?**
A: Use Apify's residential proxy pool for consistent access. The Actor will warn you if blocked.

### Notes & Limitations

- **Bot detection**: Zillow aggressively blocks scrapers. Use Apify's residential proxy pool for consistent access.
- **Data extraction method**: Uses Zillow's embedded `__NEXT_DATA__` JSON. Falls back to JSON-LD and meta tags.
- **Search URL structure**: Zillow's search format changes frequently. Direct listing URLs are more reliable.
- **Rate limiting**: 2-4 second delay between requests. Increase for large batches.
- **Zestimate**: Included when available. Not all listings have Zestimates.
- **For research purposes**: Use in compliance with Zillow's Terms of Service.

# Actor input Schema

## `searchLocation` (type: `string`):

Location to search for listings (e.g., 'Austin, TX', 'New York, NY', 'Los Angeles').

## `listingUrls` (type: `array`):

Array of Zillow listing URLs to scrape directly. Alternative to searchLocation.

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

Type of listings to search: 'for\_sale', 'for\_rent', 'recently\_sold'. Default: 'for\_sale'

## `maxResults` (type: `integer`):

Maximum number of listings to scrape from search (1-100). Default: 20

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

Minimum listing price filter (optional). Example: 100000

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

Maximum listing price filter (optional). Example: 500000

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

Minimum number of bedrooms (0-10). Default: 0

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

Minimum number of bathrooms (0-10). Default: 0

## `propertyType` (type: `string`):

Type of property: 'any', 'house', 'condo', 'townhouse'. Default: 'any'

## Actor input object example

```json
{
  "searchLocation": "Austin, TX",
  "listingUrls": [],
  "listingType": "for_sale",
  "maxResults": 20,
  "minBeds": 0,
  "minBaths": 0,
  "propertyType": "any"
}
```

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

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Real Estate Listing Scraper",
        "description": "Scrape Zillow property listings: price, beds, baths, sqft, address, year built, zestimate, listing agent, and price history. Supports location-based search and direct listing URL modes.",
        "version": "1.0",
        "x-build-id": "EN9b0IqTFPRrb91oc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/miccho27~zillow-listing-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-miccho27-zillow-listing-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/miccho27~zillow-listing-scraper/runs": {
            "post": {
                "operationId": "runs-sync-miccho27-zillow-listing-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/miccho27~zillow-listing-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-miccho27-zillow-listing-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": {
                    "searchLocation": {
                        "title": "Search Location",
                        "type": "string",
                        "description": "Location to search for listings (e.g., 'Austin, TX', 'New York, NY', 'Los Angeles').",
                        "default": ""
                    },
                    "listingUrls": {
                        "title": "Listing URLs",
                        "type": "array",
                        "description": "Array of Zillow listing URLs to scrape directly. Alternative to searchLocation.",
                        "default": []
                    },
                    "listingType": {
                        "title": "Listing Type",
                        "enum": [
                            "for_sale",
                            "for_rent",
                            "recently_sold"
                        ],
                        "type": "string",
                        "description": "Type of listings to search: 'for_sale', 'for_rent', 'recently_sold'. Default: 'for_sale'",
                        "default": "for_sale"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape from search (1-100). Default: 20",
                        "default": 20
                    },
                    "minPrice": {
                        "title": "Min Price",
                        "type": "integer",
                        "description": "Minimum listing price filter (optional). Example: 100000"
                    },
                    "maxPrice": {
                        "title": "Max Price",
                        "type": "integer",
                        "description": "Maximum listing price filter (optional). Example: 500000"
                    },
                    "minBeds": {
                        "title": "Min Bedrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum number of bedrooms (0-10). Default: 0",
                        "default": 0
                    },
                    "minBaths": {
                        "title": "Min Bathrooms",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Minimum number of bathrooms (0-10). Default: 0",
                        "default": 0
                    },
                    "propertyType": {
                        "title": "Property Type",
                        "enum": [
                            "any",
                            "house",
                            "condo",
                            "townhouse"
                        ],
                        "type": "string",
                        "description": "Type of property: 'any', 'house', 'condo', 'townhouse'. Default: 'any'",
                        "default": "any"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
