Zillow Property Details Scraper
Pricing
from $0.60 / 1,000 item processeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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, orsearchResultsDatasetId, then setmaxItems. - 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
zpidsand compare fresh dataset exports. - Audit failures cleanly: Blocked or missing properties are saved with
status,errorCode,errorMessage, anddiagnostics. Diagnostic rows are not charged as items.
Ready-to-run examples
- Export Zillow Property Details by URL: Fetch one public Zillow detail URL with bounded spend.
- Look Up Zillow Home Details by ZPID: Look up one home from its Zillow property ID.
- Export Zillow Property Photos and Facts: Fetch one home with its available photo array enabled.
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?
| Field | Description |
|---|---|
input, inputType, workKey | Original input, its origin, and a stable deduplication/resume key. |
status | success, blocked, not_found, fetch_error, or parse_error. |
source | Structured live source, or persistent_cache when a recent successful public record is used after all live routes are blocked. |
zpid, canonicalUrl | Zillow property ID and normalized detail URL. |
homeStatus, propertyType | Listing status and property type when available. |
address | Structured address object from Zillow payloads. |
price, zestimate, rentZestimate | Listing and estimate values when exposed. |
beds, baths, livingArea, lotSize, yearBuilt | Core home facts. |
description, facts | Listing description and detailed facts object. |
agent, broker | Listing attribution data when present. |
priceHistory, taxHistory | Optional history arrays controlled by includeHistory. |
schools, photos, nearbyHomes | Optional public detail-page arrays. |
missingFields, warnings, errorCode, errorMessage, diagnostics, scrapedAt | Quality and troubleshooting metadata. |
Input configuration
| Setting | JSON key | Use it for | Example |
|---|---|---|---|
| Zillow property URLs | propertyUrls | Direct /homedetails/ pages to scrape. | [{"url":"https://www.zillow.com/homedetails/17199-Park-Ave-Sonoma-CA-95476/15800416_zpid/"}] |
| ZPIDs | zpids | Zillow property IDs collected elsewhere. | ["15800416"] |
| Search results dataset ID | searchResultsDatasetId | Enrich rows from another Zillow listing/search dataset. | abc123DatasetId |
| Maximum properties | maxItems | Cap unique properties and control spend. | 10 |
| Include photos | includePhotos | Save photo arrays when exposed. | true |
| Include price and tax history | includeHistory | Save priceHistory and taxHistory. | true |
| Maximum retries per source | maxRetries | Retry temporary blocks, rate limits, and server errors. | 2 |
| Request timeout | requestTimeoutSecs | Bound each source request while preserving cleanup time. | 30 |
| Proxy configuration | proxyConfiguration | Use 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: 1until 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 originalscrapedAt, and includes a warning and cache age. - Use retries deliberately: The default retries temporary failures twice per source. Lower
maxRetriesfor 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 ApifyClientclient = 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 toRUN_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.
Related actors
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.
