Skip to main content
Glama
zillow-leads-property-data

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.

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

sample/sample_listings.csv

20 real enriched rows (Chicago/Houston/Phoenix) — flat, spreadsheet-ready

sample/sample_listings.jsonl

Same rows, one JSON object per line, with a nested price_history array per listing

examples/python_quickstart.py

Call the actor from Python via apify-client, wait for results, print a summary

examples/node_quickstart.js

Same, 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.ipynb

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

Available Tools

10 tools
abort-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

    A4.1/5.0

    Scored across 10 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count5/5

    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.

    Completeness5/5

    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

    ActivityStale
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides real-time access to Zillow real estate data, enabling property search, details, Zestimates, market trends, and mortgage calculations via natural language.
      11 npm
      56
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Integrates Zillow real estate data with AI assistants, enabling property search, neighborhood insights, and affordability calculations through natural language.
      11 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      REST 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.
      8
      MIT No Attribution
    • A
      license
      A
      quality
      A
      maintenance
      Enables 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.
      21
      747 npm
      MIT