# Zillow Detail Scraper (`reefapi/zillow-detail-scraper`) Actor

Scrape full Zillow property details as clean JSON — Zestimate, price history, tax history, nearby schools, photos, listing agent, home facts, plus comps, walk/transit/bike scores, value-over-time and local market trends. Just pass a zpid or Zillow URL. No proxies, no CAPTCHAs, no login.

- **URL**: https://apify.com/reefapi/zillow-detail-scraper.md
- **Developed by:** [ReefAPI](https://apify.com/reefapi) (community)
- **Categories:** Real estate, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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 Detail Scraper — Full Property Data, Zestimate, History & Comps as JSON

> 📮 **Need help, hit a problem, want a new feature, or a field that's missing from the output?** Email **support@reefapi.com** or open an issue on the **Issues** tab of this Actor — we reply fast and take feature requests seriously.

Scrape **complete Zillow property details** as clean, structured JSON. Pass a **zpid or Zillow URL** and get the full record: **Zestimate** (with monthly value history), **price history**, **tax history**, **nearby schools** with ratings, **photos**, **listing agent & broker**, home facts (beds, baths, sqft, lot, year built, HOA, property-tax rate, days-on-market), plus **comparable homes (comps)**, **walk / transit / bike scores** and **local market trends**. **No proxies, no CAPTCHAs, no login** — just send an id and get the data.

### What is the Zillow Detail Scraper?

The Zillow Detail Scraper is a **Zillow property data API** that hydrates a single home into everything Zillow knows about it. Where a search gives you the summary card, this Actor opens the full property page and returns the deep record — description, **Zestimate and its history**, price and tax history, RESO facts, nearby schools, the listing agent and broker, and dozens of home facts. It also answers area questions: pull **comparable homes** to build comps, **walk/transit/bike scores** for a location, the **Zestimate value-over-time chart**, or **local market trends** (median list/sale price, inventory, days-to-pending) for a city or ZIP. It's the tool you use to **scrape Zillow property details** and enrich a list of zpids into full, analysis-ready records.

### What can this Zillow Detail Scraper do?

- 🏠 **Full property detail** — everything Zillow shows for a home, as flat JSON.
- 💰 **Zestimate + value history** — current estimate plus the monthly value-over-time series.
- 📈 **Price & tax history** — past list/sale events and year-by-year tax records.
- 🏫 **Nearby schools** — assigned/nearby schools with ratings and distance.
- 🧑‍💼 **Listing agent & broker** — who's representing the home, MLS id and parcel id.
- 🖼️ **Photos & description** — the full photo set and listing narrative.
- 🔁 **Comparable homes (comps)** — ranked comparable listings near a property.
- 🚶 **Walk / transit / bike scores** — with descriptions.
- 📊 **Local market trends** — median list/sale price, inventory, days-to-pending for an area.

### What data can I extract?

`property_detail` returns one flat record per home. Key fields (from real output):

| Field | What it is |
|---|---|
| `zpid` / `url` | Zillow id + link to the property page |
| `status` / `property_type` | `FOR_SALE` / `SOLD` · `SINGLE_FAMILY`, `CONDO`, … |
| `list_price_usd` / `price_per_sqft_usd` | List price and price per square foot |
| `zestimate_usd` | Current Zestimate market value |
| `zestimate_history` | Monthly Zestimate value-over-time series |
| `rent_zestimate_usd` | Estimated monthly rent |
| `last_sold_price_usd` / `last_sold_date` | Most recent sale price + date |
| `price_change_usd` / `price_change_date` | Latest price change on the listing |
| `beds` / `baths` / `sqft` / `lot_sqft` | Core home facts |
| `year_built` | Construction year |
| `days_on_market` | Days live on Zillow |
| `property_tax_rate` | Effective property-tax rate (%) |
| `hoa_fee_monthly_usd` | Monthly HOA fee (when applicable) |
| `address_line` / `city` / `state_code` / `postal_code` | Address breakdown |
| `county` / `neighborhood` / `subdivision` | Locality context |
| `latitude` / `longitude` | Exact coordinates |
| `description` | Full listing narrative |
| `price_history` | Past listing/sale events |
| `tax_history` | Year-by-year tax records |
| `schools` | Nearby schools with ratings |
| `photos` / `photo_count` | Photo URLs + count |
| `listing_agent` / `agent_name` / `broker_name` / `broker` | Agent & brokerage detail |
| `mls_id` / `parcel_id` | MLS number + county parcel id |
| `reso_facts` | Structured RESO home facts |
| `walk_transit_score` | Walk / transit / bike scores |
| `home_insights` | Zillow "home insights" tags |

> Some new-construction / condo listings serve a "light" page where Zillow lazy-loads price/tax history and schools client-side — those arrays can be empty for such homes. Core fields (price, address, beds/baths/sqft, coordinates, Zestimate when published) are present. Field availability can vary as Zillow changes its pages.

### How do I scrape a Zillow property?

1. Open the Actor and go to the **Input** tab.
2. Pick an **Action** — Full property detail, Comps, Walk/transit/bike, Zestimate value history, or Local market trends.
3. Enter a **zpid** (from a search result or the `…/12345678_zpid/` URL) or a **Zillow property URL**. For market trends, enter a **Location** instead.
4. Click **Start**, then download the record as **JSON, CSV or Excel** from the **Dataset** tab.

### Input

```json
{ "action": "property_detail", "zpid": "29505949" }
````

- `zpid` — Zillow property id (detail, comps, scores, value history).
- `url` — a Zillow property URL, as an alternative to `zpid`.
- `location` — city / ZIP / neighborhood, for **Local market trends**.
- `params` — advanced JSON (e.g. `zpids[]` for batch detail, `count` for comps).

### Output

Real `property_detail` response (trimmed — long arrays shown as `[…]`):

```json
{
  "zpid": 29505949,
  "source": "zillow",
  "url": "https://www.zillow.com/homedetails/29505949_zpid/",
  "status": "FOR_SALE",
  "property_type": "SINGLE_FAMILY",
  "list_price_usd": 439000,
  "price_per_sqft_usd": 314.02,
  "zestimate_usd": 440000,
  "zestimate_history": [ { "date_ms": 1698735600000, "value_usd": 442200 } ],
  "rent_zestimate_usd": null,
  "last_sold_date": "2017-11-02",
  "beds": 3, "baths": 3, "sqft": 1398, "lot_sqft": 7997.616, "year_built": 1984,
  "days_on_market": 17,
  "property_tax_rate": 1.46,
  "hoa_fee_monthly_usd": null,
  "address_line": "8536 Birmingham Dr",
  "city": "Austin", "state_code": "TX", "postal_code": "78748",
  "county": "Travis County",
  "neighborhood": "Dittmar-Slaughter",
  "subdivision": "Buckingham Estates Ph 3 Sec 4",
  "latitude": 30.181974, "longitude": -97.806564,
  "description": "Stylish and move-in ready, this South Austin home offers extensive updates…",
  "price_history": [ … ], "tax_history": [ … ], "schools": [ … ], "photos": [ … ],
  "photo_count": 38,
  "agent_name": "Richard Caprioli",
  "broker_name": "Engel & Volkers Austin",
  "mls_id": "5471794",
  "parcel_id": "04251819100000",
  "reso_facts": { … },
  "walk_transit_score": { … }
}
```

### Use cases

- **Comps & valuation** — pull a home's Zestimate, value history and comparable sales for pricing models.
- **Investment underwriting** — taxes, HOA, rent Zestimate, price-per-sqft and days-on-market in one record.
- **Property enrichment** — hydrate a list of zpids from search into full detail records.
- **Market research** — combine detail + local market trends for an area-level view.
- **Location scoring** — attach walk/transit/bike scores and school ratings to a property.
- **Agent & MLS lookup** — resolve the listing agent, broker, MLS id and parcel id for a home.

### FAQ

**Is there an official Zillow API?**
Zillow retired most of its public property APIs. This Actor is the practical way to get full Zillow property detail, Zestimate history and comps as structured JSON.

**Why scrape Zillow property details?**
The detail page holds the data that matters for valuation — Zestimate history, price/tax history, schools, RESO facts and comps. Pulled in bulk it powers AVMs, underwriting, comps tools and property-tech features.

**How much does it cost?**
Billed on Apify's pay-as-you-go model, benchmarked to be competitive with other Zillow scrapers. See the **Pricing** section on this Actor's page for the current rate.

**Can I integrate it?**
Yes — run it from the Apify **API** or the **Python / Node.js clients**, and connect the output to **Make, Zapier, n8n, Google Sheets, webhooks** or your database. Great for enriching zpids on a schedule.

**Is it legal to scrape Zillow?**
Reading publicly available property pages (no login, no accounts) is generally lawful. Detail records can include an agent's name — handle any personal data responsibly and per GDPR/CCPA. Not legal advice.

***

Unofficial — not affiliated with Zillow. Public data only.

# Actor input Schema

## `action` (type: `string`):

What to fetch for the property / area.

## `zpid` (type: `string`):

The Zillow property id — from a search result or the URL (…/12345678\_zpid/). Used by property\_detail, comps, walk\_transit\_bike, home\_value\_chart. e.g. 29505949.

## `url` (type: `string`):

A Zillow property URL (alternative to zpid) for property\_detail. e.g. https://www.zillow.com/homedetails/.../29505949\_zpid/

## `location` (type: `string`):

City / ZIP / neighborhood for the 'Local market trends' action. e.g. 'Austin, TX'.

## `params` (type: `object`):

Any extra parameters as key/value JSON (e.g. zpids\[] for batch detail, count for comps). Merged into the request.

## Actor input object example

```json
{
  "action": "property_detail"
}
```

# Actor output Schema

## `property` (type: `string`):

The scraped Zillow property record(s) — full details, history, schools, scores and market data.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("reefapi/zillow-detail-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 = {}

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zillow Detail Scraper",
        "description": "Scrape full Zillow property details as clean JSON — Zestimate, price history, tax history, nearby schools, photos, listing agent, home facts, plus comps, walk/transit/bike scores, value-over-time and local market trends. Just pass a zpid or Zillow URL. No proxies, no CAPTCHAs, no login.",
        "version": "0.1",
        "x-build-id": "UdXWAWS1bmHxtDHFj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/reefapi~zillow-detail-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-reefapi-zillow-detail-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/reefapi~zillow-detail-scraper/runs": {
            "post": {
                "operationId": "runs-sync-reefapi-zillow-detail-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/reefapi~zillow-detail-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-reefapi-zillow-detail-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": {
                    "action": {
                        "title": "Action",
                        "enum": [
                            "property_detail",
                            "comps",
                            "walk_transit_bike",
                            "home_value_chart",
                            "market_trends"
                        ],
                        "type": "string",
                        "description": "What to fetch for the property / area.",
                        "default": "property_detail"
                    },
                    "zpid": {
                        "title": "Zillow property id (zpid)",
                        "type": "string",
                        "description": "The Zillow property id — from a search result or the URL (…/12345678_zpid/). Used by property_detail, comps, walk_transit_bike, home_value_chart. e.g. 29505949."
                    },
                    "url": {
                        "title": "Zillow property URL",
                        "type": "string",
                        "description": "A Zillow property URL (alternative to zpid) for property_detail. e.g. https://www.zillow.com/homedetails/.../29505949_zpid/"
                    },
                    "location": {
                        "title": "Location (market_trends)",
                        "type": "string",
                        "description": "City / ZIP / neighborhood for the 'Local market trends' action. e.g. 'Austin, TX'."
                    },
                    "params": {
                        "title": "Advanced parameters",
                        "type": "object",
                        "description": "Any extra parameters as key/value JSON (e.g. zpids[] for batch detail, count for comps). Merged into the request."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
