Odel
zillow leads property data

zillow leads property data

Local
@kmatataJavaScriptMITUpdated 2w ago

MCP server for the zillow-leads-property-data actor: Zillow leads with agent contacts and history.

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.

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

What's in this repo

PathWhat it is
sample/sample_listings.csv20 real enriched rows (Chicago/Houston/Phoenix) — flat, spreadsheet-ready
sample/sample_listings.jsonlSame rows, one JSON object per line, with a nested price_history array per listing
examples/python_quickstart.pyCall the actor from Python via apify-client, wait for results, print a summary
examples/node_quickstart.jsSame, in Node, via apify-client
mcp-server/One-tool MCP server for Claude Desktop, Cursor and any MCP client; see mcp-server/README.md
notebook/zillow_leads_workflow.ipynbA 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. See sample_listings.csv for 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 in listings, 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.