Zillow Property Details Scraper avatar

Zillow Property Details Scraper

Pricing

from $0.60 / 1,000 item processeds

Go to Apify Store
Zillow Property Details Scraper

Zillow Property Details Scraper

Scrape public Zillow property detail pages for price, status, facts, history, schools, photos, agent/broker data, and diagnostics.

Pricing

from $0.60 / 1,000 item processeds

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Scrape public Zillow property detail pages into structured records with prices, facts, photos, schools, price history, tax history, agent/broker data, and diagnostics.

Use this Actor to enrich Zillow search results, monitor selected homes, audit comparable properties, or export detail-page data to CSV, JSON, Excel, API, and automation workflows.

At a glance

  • Primary job: Turn Zillow detail URLs or ZPIDs into normalized property detail rows.
  • Input: Provide propertyUrls, zpids, or searchResultsDatasetId, then set maxItems.
  • Output: One row per property with status, source, zpid, canonicalUrl, address, price, facts, history, photos, and diagnostics.
  • Best for: Real estate research, listing enrichment, lead qualification, portfolio monitoring, and downstream automations.

Who is it for?

  • Real estate investors and analysts who need repeatable property facts, pricing signals, and comparable-home exports.
  • Brokerages and agents enriching lead lists or saved searches with current public detail-page fields.
  • Proptech and data teams chaining Zillow search/listing datasets into normalized property-detail records.
  • Automation builders feeding Zillow detail data into CRMs, alerts, spreadsheets, dashboards, or AI agents.

Common workflows

  • Enrich listing results: Pass a dataset from a Zillow listings/search workflow with URL or ZPID columns.
  • Analyze property details: Submit a curated list of /homedetails/ URLs for price, facts, schools, and history.
  • Monitor homes or rentals: Schedule repeat runs on the same zpids and compare fresh dataset exports.
  • Audit failures cleanly: Blocked or missing properties are saved with status, errorCode, errorMessage, and diagnostics. Diagnostic rows are not charged as items.

Ready-to-run examples

For larger enrichments, pass 3-10 propertyUrls, or set searchResultsDatasetId to a dataset containing url, detailUrl, hdpUrl, canonicalUrl, or zpid fields. Keep the first run small before scheduling a recurring monitor.

What data can you extract?

FieldDescription
input, inputType, workKeyOriginal input, its origin, and a stable deduplication/resume key.
statussuccess, blocked, not_found, fetch_error, or parse_error.
sourceStructured live source, or persistent_cache when a recent successful public record is used after all live routes are blocked.
zpid, canonicalUrlZillow property ID and normalized detail URL.
homeStatus, propertyTypeListing status and property type when available.
addressStructured address object from Zillow payloads.
price, zestimate, rentZestimateListing and estimate values when exposed.
beds, baths, livingArea, lotSize, yearBuiltCore home facts.
description, factsListing description and detailed facts object.
agent, brokerListing attribution data when present.
priceHistory, taxHistoryOptional history arrays controlled by includeHistory.
schools, photos, nearbyHomesOptional public detail-page arrays.
missingFields, warnings, errorCode, errorMessage, diagnostics, scrapedAtQuality and troubleshooting metadata.

Input configuration

SettingJSON keyUse it forExample
Zillow property URLspropertyUrlsDirect /homedetails/ pages to scrape.[{"url":"https://www.zillow.com/homedetails/17199-Park-Ave-Sonoma-CA-95476/15800416_zpid/"}]
ZPIDszpidsZillow property IDs collected elsewhere.["15800416"]
Search results dataset IDsearchResultsDatasetIdEnrich rows from another Zillow listing/search dataset.abc123DatasetId
Maximum propertiesmaxItemsCap unique properties and control spend.10
Include photosincludePhotosSave photo arrays when exposed.true
Include price and tax historyincludeHistorySave priceHistory and taxHistory.true
Maximum retries per sourcemaxRetriesRetry temporary blocks, rate limits, and server errors.2
Request timeoutrequestTimeoutSecsBound each source request while preserving cleanup time.30
Proxy configurationproxyConfigurationUse Apify Proxy; US residential proxy is recommended for Zillow.{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }

Example input

{
"propertyUrls": [
{ "url": "https://www.zillow.com/homedetails/17199-Park-Ave-Sonoma-CA-95476/15800416_zpid/" }
],
"maxItems": 1,
"includePhotos": false,
"includeHistory": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Example output

{
"input": "https://www.zillow.com/homedetails/17199-Park-Ave-Sonoma-CA-95476/15800416_zpid/",
"inputType": "url",
"workKey": "zpid:15800416",
"status": "success",
"source": "html_cache",
"zpid": "15800416",
"canonicalUrl": "https://www.zillow.com/homedetails/15800416_zpid/",
"homeStatus": "FOR_SALE",
"address": { "streetAddress": "17199 Park Ave", "city": "Sonoma", "state": "CA", "zipcode": "95476" },
"price": 995000,
"beds": 3,
"baths": 2,
"livingArea": 1520,
"priceHistory": [],
"errorCode": null,
"scrapedAt": "2026-07-13T00:00:00.000Z"
}

Pricing

This Actor uses pay-per-event pricing: $0.005 per run start plus a tiered per-item event for each complete successful property row (FREE: $0.00115, BRONZE: $0.001, SILVER: $0.00078, GOLD: $0.0006, PLATINUM: $0.0004, DIAMOND: $0.00028). Blocked, missing, and parse-error diagnostic rows are saved without an item charge. Check the Apify pricing panel for your current tier before running large jobs.

Tips for best results

  • Start small: Use maxItems: 1 until the selected URLs produce the fields you need.
  • Use detail pages: Search result pages are better handled by a Zillow listings actor; this Actor is for property details.
  • Keep inputs focused: Split very broad enrichment jobs into smaller runs.
  • Expect diagnostics: Zillow may return access-denied pages; those are saved as free diagnostic rows for review.
  • Understand cached fallbacks: If every live route is blocked, the Actor may return a successful public record cached within the previous six hours. The row uses source: "persistent_cache", preserves its original scrapedAt, and includes a warning and cache age.
  • Use retries deliberately: The default retries temporary failures twice per source. Lower maxRetries for quick probes or raise it for small reliability-focused jobs.

API usage

Node.js:

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/zillow-property-details-scraper").call({
propertyUrls: [{ url: "https://www.zillow.com/homedetails/17199-Park-Ave-Sonoma-CA-95476/15800416_zpid/" }],
maxItems: 1,
});
console.log(run.defaultDatasetId);

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/zillow-property-details-scraper").call(run_input={
"zpids": ["15800416"],
"maxItems": 1,
})
print(run["defaultDatasetId"])

cURL:

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~zillow-property-details-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"zpids":["15800416"],"maxItems":1}'

MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

$claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/zillow-property-details-scraper"
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=fetch_cat/zillow-property-details-scraper"
}
}
}

Example prompt: "Run Zillow Property Details Scraper for these three ZPIDs and summarize price, beds, baths, and any diagnostic errors."

Limits and caveats

  • Coverage: Zillow may vary detail-page payloads by property type, geography, and access controls.
  • Freshness: Source data can change after a run finishes.
  • Access controls: Zillow can return anti-bot pages. The Actor detects HTML and JSON challenges, rotates proxy sessions between retries, and tries bounded structured fallbacks before saving a diagnostic.
  • Partial runs: The Actor reserves shutdown time, saves unfinished normalized inputs in PENDING_WORK, and writes aggregate counters to RUN_SUMMARY.
  • Success contract: A row is only marked and charged as successful when it contains a ZPID, a usable address, and multiple core property facts.

Legality and responsible use

Process only data that users are allowed to access. Follow website terms, Apify's terms, and applicable laws.

FAQ

Can I export results?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.

Why are some fields empty?

Some properties do not expose every field publicly. The Actor leaves unavailable fields empty and lists important gaps in missingFields.

Support

Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and one reproducible public URL.