zillow-leads-property-data
zillow-leads-property-data
Code samples, a sample dataset, and a full workflow notebook for the Zillow Leads & Property Data Apify actor.
The actor pulls Zillow listings enriched with agent/broker contact info, full price-history timelines, 20yr+ tax history, foreclosure/distress flags, schools, and the resoFacts long tail (heating/cooling/construction). Pay-per-event pricing, no subscription: $0.70 per 1,000 bare rows, $1.20 per 1,000 enriched rows.
Actor: https://apify.com/germane_binoculars/zillow-leads-property-data
Architecture writeup: Predictable web scraping with web extensions — why this actor runs on a real browser session instead of a proxy farm, and what that buys you against Zillow's PerimeterX + AWS WAF.
Try it in 30 seconds, no signup beyond an Apify account
The actor's catalog mode returns a cached, already-enriched snapshot
instantly, no bounding box, no wait:
{ "mode": "catalog", "metro": "Chicago" }Run it from the Apify Console
or via apify-client (see examples/ below).
Related MCP server: Zillow MCP Server
What's in this repo
Path | What it is |
| 20 real enriched rows (Chicago/Houston/Phoenix) — flat, spreadsheet-ready |
| Same rows, one JSON object per line, with a nested |
| Call the actor from Python via |
| Same, in Node, via |
| One-tool MCP server for Claude Desktop, Cursor and any MCP client; see |
| A realistic lead-gen workflow: run the actor, dedupe against a prior export, filter to rows with agent phone numbers, export a clean CSV |
Field reference
Two depths, listings (bare) and enriched (the default):
listings: address, price, beds/baths, status, lot/living area, listing-type flags — whatever Zillow's own search API returns, no detail-page fetch involved. Seesample_listings.csvfor the shape (a subset of the columns shown there — the sample above is enriched-depth, listings-depth rows omit everything past the bare fields).enriched(default): everything inlistings, plus agent/broker contact (name, phone, email, brokerage, MLS attribution), full price-history and 20yr+ tax-history timelines, foreclosure/distress signals, assigned + nearby schools, HOA fees, and the resoFacts long tail (heating/cooling/parking/construction).
Full field list, pricing table, and every input mode (catalog / custom_search / recent_activity) are documented on the actor's own README.
Dedup across repeat orders
Every delivery writes a DEDUP_UPDATE record to the run's key-value store:
the union of the zpids and MLS IDs you already had plus everything just shipped.
Feed those two arrays back into your next order's dedupZpids/dedupMlsIds
fields and you're never charged for the same row twice. See
notebook/zillow_leads_workflow.ipynb for a worked example.
Use it from an AI agent (MCP)
This actor is callable as a tool via Apify's hosted MCP server
(https://mcp.apify.com) or the local @apify/actors-mcp-server, no manual
input-form filling required — catalog mode (the default) is a good agent
smoke test since it returns cached rows in seconds with no polling loop
needed. See the actor's own README for the full agent-facing input schema
and the fire/poll/fetch pattern for a live-collection order.
Questions / issues
This repo is documentation and samples only — it doesn't run the actor
itself. For a specific order that isn't behaving as expected, check that
run's key-value store STATUS record first (the actor writes a plain-English
reason there for any zero-row or partial result), then open an issue here or
reach out via the actor's Apify Store page.
Available Tools
10 toolsabort-actor-runA
Abort an Actor run that is currently starting or running. Results include the updated run details.
Inputs: runId (required), gracefully.
germane_binoculars--zillow-leads-property-dataA
Calls the Actor "germane_binoculars/zillow-leads-property-data" and retrieves its output results: Zillow listings enriched with agent/broker contact info, price/tax history, foreclosure flags, and schools. Catalog mode is an instant paid sample that usually returns rows in a single call. Every other mode dispatches a live-collection order measured in minutes to hours; such calls return a runId plus status immediately — poll via get-actor-run, then fetch rows with get-dataset-items. If a previous call was lost to a client timeout, DO NOT re-submit (you would pay twice): recover the existing runId with get-actor-run-list.
Inputs: mode, depth, metro, bounds, +7 more.
get-actor-runA
Get detailed information about a specific Actor run: status, storages (datasets/key-value stores alias map), stats, summary, nextStep.
Inputs: runId (required), waitSecs.
get-actor-run-listA
List Actor runs for the authenticated user, newest first with desc=true — the recovery entry point when a previous actor-tool call was lost to a client timeout. Account-wide (there is no per-actor filter): match entries on their actId if the account runs other actors too. Each entry's id field is the runId the companion tools take, and entries also carry defaultDatasetId and defaultKeyValueStoreId.
Inputs: desc, limit, offset, status.
get-actor-run-logA
Retrieve recent log lines for a specific Actor run — live collection progress, or the tail of a FAILED run.
Inputs: runId (required), lines.
get-dataset-itemsA
Get items (rows) from a dataset — the output/results produced by an Actor run. When the actor tool returns RUNNING, this fetches rows once terminal.
Inputs: datasetId (required), desc, omit, clean, +4 more.
get-dataset-listA
List datasets on the account — locates a run's output dataset when its ID was lost. Actor runs produce unnamed datasets, so set unnamed=true.
Inputs: desc, limit, offset, unnamed.
get-key-value-store-keysA
List the keys in a key-value store with pagination — for this actor's runs, look for ORDER_SUMMARY, DEDUP_UPDATE and STATUS.
Inputs: keyValueStoreId (required), limit, exclusiveStartKey.
get-key-value-store-listA
List key-value stores on the account — locates a run's store (ORDER_SUMMARY / DEDUP_UPDATE / STATUS records) when its ID was lost. Set unnamed=true to include run-produced stores.
Inputs: desc, limit, offset, unnamed.
get-key-value-store-recordA
Get a single record from a run's key-value store: ORDER_SUMMARY (what actually applied), DEDUP_UPDATE (re-upload on your next order), STATUS (zero-row explanation).
Inputs: recordKey (required), keyValueStoreId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct resource or action: actor invocation, run management, dataset reads, and key-value store reads are well separated. A few pairs like get-actor-run vs get-actor-run-list could be confused by name alone, but the descriptions clarify their roles.
Most tools consistently follow a get-<resource>-<detail> pattern, with abort-actor-run as a clear exception. The main inconsistency is the actor invocation tool, which uses the actor identifier instead of a descriptive action verb, making the set slightly uneven.
Ten tools is well-scoped for this server: one to start/collect data, a few to monitor runs, and several to retrieve or recover outputs and storage. Each tool has a clear role without redundancy or bloat.
The toolset covers the full lifecycle of the Zillow leads collection workflow: launching, launching/collecting, polling, aborting, reading logs, fetching dataset rows, and recovering lost run/store/dataset IDs. The recovery and monitoring utilities prevent common dead ends and paid re-execution mistakes.
Maintenance
Related MCP Connectors
Zillow real estate listings for sale, rent, and sold, via an Apify Actor, hosted MCP.
Zillow for-sale, for-rent and sold listings, and full property details, as structured JSON.
Zillow homes and rentals, Zumper rentals and Craigslist housing listings as tools. Runs on Apify.
Zillow homes and agent contacts for AI agents — search by ZIP, by URL, or look up a zpid.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides real-time access to Zillow real estate data, enabling property search, details, Zestimates, market trends, and mortgage calculations via natural language.11 npm56MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates Zillow real estate data with AI assistants, enabling property search, neighborhood insights, and affordability calculations through natural language.11 npm1MIT
- AlicenseNot gradedqualityCmaintenanceREST API and MCP server for Zillow property data: Zestimates, rent estimates, tax records, listing search, price history, photos, and 300+ fields. 4 tools with OAuth 2.1 + PKCE. Free tier: 100 credits.8MIT No Attribution
- AlicenseAqualityAmaintenanceEnables natural-language access to Zillow real-estate data, including property search, details, Zestimate history, saved searches/homes, and market reports, by routing requests through the user's authenticated browser session.21747 npmMIT