# Zillow Property Scraper: Zestimate & Price Monitor (`themineworks/zillow-property-details`) Actor

Fetch full Zillow property details from URLs or ZPIDs. Returns price history, tax history, school ratings, HOA, year built, parking, Zestimate & photos. Integrates with zillow-search-scraper output.

- **URL**: https://apify.com/themineworks/zillow-property-details.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Real estate, Lead generation, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 zillow properties

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 Property Details Scraper: Full Home Data

> **Part of the Real Estate MCP.** This actor's data is also available to AI agents through our [Real Estate MCP server](https://apify.com/themineworks/real-estate-mcp) — eight listing, sales and rental-market tools behind one endpoint. No result, no charge.

> ⚡ Part of a 69-scraper suite trusted by 450+ developers across 8,000+ runs · >99% run success · no login, no cookies, no ban risk.

> 💸 You're only charged for delivered results. Empty searches, failed pages and duplicate listings are never billed.

### Overview

Zillow Property Details Scraper pulls the full detail record for any Zillow property from its URL or ZPID, returning deep, structured JSON with no login and no API key. Where a search scraper hands you a listing card, this actor opens the property page and extracts everything Zillow publishes: price history, tax history, school ratings, HOA fee, year built, parking, heating, cooling, appliances, description, agent, broker, and up to 10 photos.

It is designed to chain off the Zillow Search Scraper. Pass its `detailUrl` or `zpid` values straight in. The actor is HTTP-only (512 MB) and bills pay-per-result: $1 per 1,000 results ($0.001 each), with no free tier.

✅ No login | ✅ No API key | ✅ Pay only per result returned | ✅ MCP-ready for AI agents

Reliability: blocked, empty, or failed fetches are never charged. You only pay for property records actually delivered to your dataset.

### Features

Full property record. Price history, tax history, school ratings, HOA, parking, appliances, description.
Search-to-detail chaining. Drops `detailUrl` and `zpid` values from the Zillow Search Scraper straight in.
Rich media. Up to 10 photos, latitude and longitude, MLS ID, agent, and broker per property.
Include-flag control. Toggle price history, tax history, and schools sections to shape output.
Lightweight and fast. HTTP-only fetch at 512 MB memory, no headless browser overhead.

### How it works

Zillow's official APIs are deprecated and partner-gated, and none expose the full detail record that appears on the public property page. This actor reads that page directly and parses the embedded property JSON, so you get the complete record without an API key, partner approval, or per-call quota. You control which URLs to enrich and the volume; the actor never authenticates and never touches Zillow's private endpoints.

For each URL or ZPID you provide, the actor fetches the property page, extracts the JSON payload, flattens the interesting subtrees, and emits one record per property. Optional include-flag settings let you drop expensive sections you do not need. Null fields are omitted from the output.

### 🧾 Input configuration

```json
{
  "urls": [
    "https://www.zillow.com/homedetails/4501-Red-River-St-Austin-TX-78751/29488283_zpid/",
    "89361344"
  ],
  "includePriceHistory": true,
  "includeTaxHistory": true,
  "includeSchools": true
}
```

### 📤 Output format

```json
{
  "zpid": "29488283",
  "address": "4501 Red River St",
  "city": "Austin",
  "state": "TX",
  "zipCode": "78751",
  "price": 725000,
  "beds": 3,
  "baths": 2,
  "sqft": 1680,
  "yearBuilt": 1948,
  "propertyType": "SINGLE_FAMILY",
  "homeStatus": "FOR_SALE",
  "zestimate": 731400,
  "rentZestimate": 3200,
  "priceHistory": [{ "date": "2026-06-28", "price": 725000, "event": "Listed for sale" }],
  "taxHistory": [{ "year": 2024, "taxPaid": 11240.5, "value": 640000 }],
  "schools": [{ "name": "Lee Elementary", "rating": 8, "grades": "K-5" }],
  "photos": ["https://photos.zillowstatic.com/fp/abc.jpg"],
  "agentName": "Jane Miller",
  "brokerName": "Compass RE Texas, LLC"
}
```

Every property record contains these headline fields (nested arrays hold history rows and photo URLs):

| Field | Description |
| --- | --- |
| 🆔 `zpid` | Zillow property ID. |
| 🏠 `address` | Street address of the property. |
| 🏙️ `city` / `state` / `zipCode` | Location fields as published on Zillow. |
| 💰 `price` | Current asking price (numeric). |
| 🛏️ `beds` / 🛁 `baths` | Bedroom and bathroom counts. |
| 📏 `sqft` | Living area in square feet. |
| 🏗️ `yearBuilt` | Year the home was built. |
| 🔖 `homeStatus` | FOR\_SALE, PENDING, SOLD, and so on. |
| 💵 `zestimate` | Zillow's automated valuation. |
| 🏦 `hoaFee` | Monthly HOA fee if applicable. |
| 💹 `priceHistory` | List of price events with date, price, and event type. |
| 🧾 `taxHistory` | Annual tax paid and assessed value. |
| 🏫 `schools` | Nearby schools with rating and grade range. |
| 📷 `photos` | Up to 10 photo URLs. |
| 👤 `agentName` / 🏢 `brokerName` | Listing agent and broker. |

Field availability depends on what Zillow publishes for each property. Optional sections can be turned off via the include flags.

### 💼 Common use cases

**Comparative market analysis**
Combine price history and tax history for accurate CMA valuations. Chain from the Zillow Search Scraper to enrich a full search result in one pipeline.

**Investor underwriting**
Pull per-property detail (Zestimate, rent Zestimate, HOA, tax) to model deals at scale. Ideal for BRRRR, house hack, and buy-and-hold analysis workflows.

**Listing enrichment**
Attach school ratings, HOA, amenities, and photos to thin search-dataset rows. Populate MLS-comparable dashboards without paying for MLS access.

**Agent and broker lead lists**
Extract agent and broker names for outbound prospecting. Combine with the B2B Leads Finder to append email and phone.

**AI real estate assistants**
Supply full property detail to LLM agents on demand. Ask Claude "what schools serve this address and what's the HOA" against live Zillow data.

### 🚀 Getting started

1. Open the actor and paste Zillow property URLs or ZPIDs into `urls`. You can also pipe `detailUrl` values straight from the Zillow Search Scraper.
2. Choose which sections to include via `includePriceHistory`, `includeTaxHistory`, and `includeSchools`.
3. Set `maxItems` to cap volume if you like.
4. Click Start, then download the dataset as JSON, CSV, or Excel.
5. Or pull results via the Apify API or expose the actor over MCP.

### FAQ

**Do I need a Zillow account or API key?**
No. The scraper requires no login, no cookies, and no API key. All you need is an Apify account.

**Can I feed the Zillow Search Scraper's output straight in?**
Yes. The `detailUrl` and `zpid` fields from the Zillow Search Scraper (and the Recently Sold and Rental actors) drop directly into `urls` for a clean search-to-detail pipeline.

**What extra data do I get versus the search scraper?**
Price history, tax history, school ratings, HOA fee, parking, stories, heating, cooling, appliances, the full description, and up to 10 photos, none of which appear on search cards.

**How much does it cost?**
Pay-per-result: $1 per 1,000 results ($0.001 per property), with no free tier. You only pay for properties actually returned.

**Is scraping Zillow legal?**
Scraping publicly available data is generally permissible, but results may include personal data protected under laws like GDPR. Make sure you have a legitimate purpose and comply with applicable regulations.

### Use in Claude, ChatGPT & any MCP agent

```
https://mcp.apify.com/?tools=themineworks/zillow-property-details
```

Or call it programmatically with the Apify client:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/zillow-property-details').call({
  urls: ['https://www.zillow.com/homedetails/.../29488283_zpid/'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 🛠️ Related real estate actors

Part of the themineworks real estate wedge. Chain them into a full property-data workflow:

- **[Zillow Search Scraper](https://apify.com/themineworks/zillow-search-scraper)**: for-sale listings by location (feeds this actor).
- **[Zillow Recently Sold Scraper](https://apify.com/themineworks/zillow-recently-sold)**: sold comparables for CMA modelling.
- **[Zillow Rental Listings Scraper](https://apify.com/themineworks/zillow-rental-listings)**: for-rent listings by location.
- **[Redfin Scraper](https://apify.com/themineworks/redfin-scraper)**: Redfin for-sale and sold listings.
- **[Realtor.com Scraper](https://apify.com/themineworks/realtor-scraper)**: Realtor.com listings with agent data.
- **[99acres Scraper](https://apify.com/themineworks/99acres-scraper)**: India rent, buy, PG, and commercial listings.

Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.

# Actor input Schema

## `urls` (type: `array`):

List of Zillow property URLs (e.g. https://www.zillow.com/homedetails/...) or numeric ZPIDs. You can use the output of zillow-search-scraper's detailUrl field directly.

## `maxItems` (type: `integer`):

Maximum number of properties to process from the input list. Leave blank to process all.

## `includePriceHistory` (type: `boolean`):

Include the full price change history for each property.

## `includeTaxHistory` (type: `boolean`):

Include annual property tax records.

## `includeSchools` (type: `boolean`):

Include nearby school names, ratings, and distances.

## Actor input object example

```json
{
  "urls": [
    "https://www.zillow.com/homedetails/123-main-st-austin-tx-78701/12345_zpid/",
    "89361344"
  ],
  "includePriceHistory": true,
  "includeTaxHistory": true,
  "includeSchools": true
}
```

# 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 = {
    "urls": [
        "https://www.zillow.com/homedetails/123-main-st-austin-tx-78701/12345_zpid/",
        "89361344"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/zillow-property-details").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 = { "urls": [
        "https://www.zillow.com/homedetails/123-main-st-austin-tx-78701/12345_zpid/",
        "89361344",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("themineworks/zillow-property-details").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 '{
  "urls": [
    "https://www.zillow.com/homedetails/123-main-st-austin-tx-78701/12345_zpid/",
    "89361344"
  ]
}' |
apify call themineworks/zillow-property-details --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/6pnT3cfvgvVSNOYyn/builds/IWXCLcBPgXOKxOSRc/openapi.json
