# Zillow Property Detail Scraper (`scrapeverse/zillow-property-detail-scraper`) Actor

Unlock powerful real estate insights with our Zillow Detail scraper! Effortlessly extract comprehensive property details from any Zillow property listing to power your investment strategy. Automate your real estate data collection and get reliable, structured Zillow market research instantly.

- **URL**: https://apify.com/scrapeverse/zillow-property-detail-scraper.md
- **Developed by:** [ScrapeVerse](https://apify.com/scrapeverse) (community)
- **Categories:** Automation, Real estate, Lead generation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Zillow Property Details Scraper (Pay Per Event) — Zestimate, Price History & Agent Data API

**Zillow Property Details Scraper** takes Zillow home URLs (`zillow.com/homedetails/..._zpid/`) and returns one detailed record per property. Each record includes ZPID, full address, price, status, beds, baths, living area, lot size, year built, home type, **Zestimate and Rent Zestimate**, **price history**, **tax history**, property tax rate, HOA, nearby schools with ratings, listing agent and brokerage, MLS ID, days on Zillow, views and saves, photos and coordinates. That's 170+ top-level fields in all. No login. You pay only for properties that return data: **$5 per 1,000 properties**.

> **Where this fits in the ScrapeVerse real-estate toolkit**
>
> 1. **Property-level data** → **Zillow Property Details Scraper** (you are here)
> 2. **Research the brokerages** behind your listings with [LinkedIn Company URL Mass Finder](https://apify.com/scrapeverse/linkedin-company-url---mass-finder) and [LinkedIn Company Profile Scraper](https://apify.com/scrapeverse/linkedin-company-profile-scraper)
> 3. **Find agents' public contact pages** with [Facebook Page Details Scraper](https://apify.com/scrapeverse/facebook-page-details-scraper) and [LinkedIn User Profile URL Mass Finder](https://apify.com/scrapeverse/linkedin-user-profile-url---mass-finder)

***

### Before you run: input checklist

| Check | What to do |
| --- | --- |
| **Use property detail URLs** | ✅ `https://www.zillow.com/homedetails/165-W-91st-St-15B-New-York-NY-10025/2076983827_zpid/` ❌ search, map, city or agent pages. |
| **Bulk input** | Paste many URLs, upload a file or link a Google Sheet in **home_urls**. One URL = one property record. |
| **For sale, sold, rental and off-market** | Any public `homedetails` page works. The `homeStatus` field tells you which it is. |
| **Pay only for success** | If a page can't be parsed, no row is saved and you aren't charged. |
| **Proxy** | Nothing to configure. Residential proxies with automatic retries are built in. |

***

### What data does the Zillow scraper extract?

| Field group | Output keys | Typical use |
| --- | --- | --- |
| **Identity & address** | `zpid`, `address`, `streetAddress`, `city`, `state`, `zipcode`, `county`, `latitude`, `longitude`, `parcelId`, `hdpUrl` | Geocoding, deduplication, parcel matching |
| **Listing** | `homeStatus`, `price`, `listPriceLow`, `currency`, `daysOnZillow`, `timeOnZillow`, `datePostedString`, `listing_sub_type` (FSBO, foreclosure, auction, new home, coming soon, pending) | Deal sourcing, lead lists |
| **Property facts** | `bedrooms`, `bathrooms`, `livingArea`, `lotSize`, `yearBuilt`, `homeType`, `resoFacts` (heating, cooling, parking, appliances, HOA…) | Comps, underwriting |
| **Valuation** | `zestimate`, `zestimateLowPercent`, `zestimateHighPercent`, `rentZestimate`, `lastSoldPrice`, `homeValues` | Investment analysis, rental yield |
| **History** | `priceHistory[]` (date, event, price, price per sq ft, source), `taxHistory[]` (year, tax paid, assessed value) | Price trends, flip detection |
| **Costs** | `propertyTaxRate`, `monthlyHoaFee`, `annualHomeownersInsurance`, `mortgageRates` | Cash-flow modelling |
| **Agent & broker** | `listedBy`, `brokerageName`, `attributionInfo`, `mlsid`, `listingProvider` | Agent outreach, brokerage research |
| **Engagement** | `pageViewCount`, `favoriteCount` | Demand signals |
| **Neighbourhood** | `schools[]` (name, rating, grades, distance, link), `nearbyHomes`, `nearbyCities`, `nearbyNeighborhoods`, `nearbyZipcodes` | Location scoring |
| **Media** | `photos`, `responsivePhotos`, `photoCount`, `hiResImageLink`, `virtualTourUrl` | Listing previews |
| **Foreclosure data** | `foreclosureDefaultFilingDate`, `foreclosureAuctionTime`, `foreclosureAmount`, `foreclosingBank` and more (when present) | Distressed-property investing |

***

### How to scrape Zillow property details

1. Add Zillow property URLs to **home_urls**.
2. Click **Start**.
3. Export to JSON, CSV or Excel, or send the results to your spreadsheet or database via API.

#### Input example

```json
{
    "home_urls": [
        { "url": "https://www.zillow.com/homedetails/165-W-91st-St-15B-New-York-NY-10025/2076983827_zpid/" },
        { "url": "https://www.zillow.com/homedetails/217-Guyon-Ave-Staten-Island-NY-10306/32337867_zpid/" }
    ]
}
```

#### Output example (trimmed)

```json
{
    "zpid": 32337867,
    "homeStatus": "FOR_SALE",
    "address": { "streetAddress": "217 Guyon Ave", "city": "Staten Island", "state": "NY", "zipcode": "10306" },
    "county": "Richmond County",
    "price": 788000,
    "bedrooms": 4,
    "bathrooms": 2,
    "livingArea": 1584,
    "lotSize": 5000,
    "yearBuilt": 1905,
    "homeType": "SINGLE_FAMILY",
    "zestimate": 792800,
    "rentZestimate": 2999,
    "lastSoldPrice": 440000,
    "propertyTaxRate": 0.89,
    "annualHomeownersInsurance": 3309.6,
    "priceHistory": [
        { "date": "2024-06-11", "event": "Listed for sale", "price": 788000, "pricePerSquareFoot": 497, "source": "BNYMLS" }
    ],
    "taxHistory": [
        { "time": 1686897792316, "taxPaid": null, "value": 49200, "valueIncreaseRate": 0.16477273 }
    ],
    "schools": [
        { "name": "Ps 50 Frank Hankinson", "rating": 9, "level": "Primary", "grades": "PK-5", "distance": 0.1, "type": "Public" }
    ],
    "brokerageName": "RE/MAX Real Estate Professiona",
    "mlsid": "483772",
    "daysOnZillow": 5,
    "pageViewCount": 5152,
    "favoriteCount": 426,
    "photoCount": 18,
    "latitude": 40.56219,
    "longitude": -74.122574,
    "hdpUrl": "/homedetails/217-Guyon-Ave-Staten-Island-NY-10306/32337867_zpid/"
}
```

***

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

**Pay-per-event pricing: $0.005 per property ($5 per 1,000).** No monthly rental, no compute-unit maths: Apify platform usage and residential proxies are included. Failed pages are free. A negligible $0.00005 start fee applies per run.

| Volume | Cost |
| --- | --- |
| 100 properties | $0.50 |
| 1,000 properties | $5 |
| 10,000 properties | $50 |

**What does Apify's free $5 monthly credit get you?** About **1,000 Zillow property records every month for $0**. The **Pricing** tab always shows the live rate.

***

### Integrations: n8n, Make, Clay, Google Sheets and API

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapeverse~zillow-property-detail-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"home_urls":[{"url":"https://www.zillow.com/homedetails/217-Guyon-Ave-Staten-Island-NY-10306/32337867_zpid/"}]}'
```

- **Google Sheets:** keep a sheet of Zillow URLs, link it as the input, schedule a daily or weekly run and export `price`, `zestimate` and `homeStatus` to track changes.
- **n8n / Make / Zapier:** on a new lead or CRM deal, run the Actor with the property URL and write valuation, taxes and agent data back.
- **Clay:** add an **HTTP API** column with the property URL, then map `zestimate`, `rentZestimate`, `listedBy` and `brokerageName`.
- **AI agents:** callable from Claude, Cursor and other MCP clients through the [Apify MCP server](https://mcp.apify.com). For example: "compare these 5 listings by price per sq ft and rent yield."

***

### Use cases

- **Real-estate investing:** underwrite deals with Zestimate, Rent Zestimate, taxes, HOA and price history in one record.
- **Comparable sales (comps):** pull facts and history for a list of nearby homes.
- **Price and status monitoring:** track price cuts, pending and sold status changes on a watch list.
- **Agent and brokerage lead generation:** collect listing agents and brokerages per area.
- **PropTech and analytics:** feed structured Zillow data into dashboards, AVMs and AI models.

***

### FAQ

#### Do I need a Zillow account?

No. The scraper reads public Zillow property pages, with no login or cookies.

#### Can I scrape Zillow search results or a whole zip code?

This Actor takes property detail URLs. Collect the `homedetails` URLs for an area first (from a Zillow search export or a search scraper), then feed them here.

#### Why are some fields null?

Zillow shows different data for different listings. Off-market homes may have no `price`, new listings may have no `taxHistory`, and some areas have no Zestimate. You get exactly what the page shows.

#### What happened to the old Zillow Property Details Scraper?

This pay-per-event version replaces the older ScrapeVerse Zillow Property Details Scraper. You pay only per property that returns data.

#### Can I export Zillow data to CSV or Excel?

Yes. Download from the run's **Storage** tab (CSV, Excel, JSON, XML) or via the dataset API with `format=csv`. Large nested fields like `priceHistory` become numbered columns in CSV, so use JSON to keep them nested.

***

### Related ScrapeVerse scrapers

- [LinkedIn Company Profile Scraper](https://apify.com/scrapeverse/linkedin-company-profile-scraper): research brokerages and real-estate firms.
- [LinkedIn Company URL Mass Finder](https://apify.com/scrapeverse/linkedin-company-url---mass-finder): brokerage name → LinkedIn page.
- [Facebook Page Details Scraper](https://apify.com/scrapeverse/facebook-page-details-scraper): public contact details of agents and brokerages.
- [LinkedIn User Profile URL Mass Finder](https://apify.com/scrapeverse/linkedin-user-profile-url---mass-finder): find listing agents on LinkedIn.

Need Zillow data for a whole market? [Contact ScrapeVerse](https://scrapeverse.in/contact).

# Actor input Schema

## `home_urls` (type: `array`):

URL of Home details

## `debugSecret` (type: `string`):

or maintainers

## Actor input object example

```json
{
  "home_urls": [
    {
      "url": "https://www.zillow.com/homedetails/165-W-91st-St-15B-New-York-NY-10025/2076983827_zpid/"
    }
  ],
  "debugSecret": ""
}
```

# Actor output Schema

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

No description

# 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 = {
    "home_urls": [
        {
            "url": "https://www.zillow.com/homedetails/165-W-91st-St-15B-New-York-NY-10025/2076983827_zpid/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeverse/zillow-property-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 = { "home_urls": [{ "url": "https://www.zillow.com/homedetails/165-W-91st-St-15B-New-York-NY-10025/2076983827_zpid/" }] }

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

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

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

```

## CLI example

```bash
echo '{
  "home_urls": [
    {
      "url": "https://www.zillow.com/homedetails/165-W-91st-St-15B-New-York-NY-10025/2076983827_zpid/"
    }
  ]
}' |
apify call scrapeverse/zillow-property-detail-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapeverse/zillow-property-detail-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1arD4B223IaP60ysl/builds/pzaDv2cPWFCpGICBU/openapi.json
