MCP server exposing Zillow property + agent data as 3 tools: search by ZIP, search by URL, lookup by zpid. Connect Claude Desktop, Cursor, ChatGPT to /mcp endpoint. Pay-per-property pricing — $0.08 on FREE, down to $0.05 on DIAMOND. Same data + pricing as the parent scraper.
All notable changes to Zillow MCP Server are documented here.
The format follows Keep a Changelog .
[0.0.23] - 2026-05-21
Added
Plain city URLs now work — a Zillow city link such as https://www.zillow.com/austin-tx/ or https://www.zillow.com/austin-tx/houses/ is read as a location search; previously these returned no results unless a filter was applied first on Zillow. The home-type and listing segments — /houses/, /condos/, /townhomes/, /apartments/, /multi-family/, /lots-land/, /manufactured/, /sold/, /rentals/, /fsbo/ — map to the matching search. Applies to both regular runs and the zillow_search_by_url tool. searchQueryState, _rb browse, recently-sold, and single-property URLs are unaffected.
Same input shape, output columns, dataset shape, MCP tool list, and pricing.
[0.0.22] - 2026-05-21
Fixed
Running with default settings no longer fails — starting the actor without a target (for example, clicking Start on the default ZPID mode with no ZPIDs) now performs a small demo run instead of failing with an error. The same applies to ZIP and URL modes left empty. Demo runs are capped at 10 properties for cheap testing; the full property cap is restored once you provide your own target.
Plain Zillow browse URLs now work — for-sale browse URLs like https://www.zillow.com/homes/Beverly-Hills,-CA_rb/ are now read as a location search (previously they returned no results). Applies to both regular runs and the zillow_search_by_url tool.
Same input shape, output columns, dataset shape, MCP tool list, and pricing.
[0.0.21] - 2026-05-19
Fixed
Apartment-building rentals now emit useful data — enrichProperties() now short-circuits for ForRent multi-unit apartment buildings (lat-long fallback identifier, isBuilding: true) and emits a record directly from the search-result payload instead of calling /property?zpid which can't process those identifiers. brokerName = building name, address parsed from p.address, price from lowest unit rent. New additive PropertyEnriched fields availabilityCount and unitsAvailable. Ported from parent zillow-scraper 2.3.69. Applies to both regular-run and zillow_search_by_zip / zillow_search_by_url MCP tools.
Same input shape, output dataset is a superset (two new fields), same pricing.
[0.0.20] - 2026-05-19
Fixed
Rental search default-fix — sale-flags clearing bug — 0.0.19 set the cleared flags to explicit false instead of deleting them. Empirically the upstream returns 0 results for explicit-false vs full inventory for absent keys. Auto-fix now deletes the keys (applies to both the regular-run handler and the zillow_search_by_zip MCP tool). Ported from parent zillow-scraper 2.3.65.
Same input shape, output columns, dataset shape, KVS records, MCP tool list, and pricing.
[0.0.19] - 2026-05-19
Changed
Rental search default-fix — extended — the auto-fix introduced in 0.0.18 also now clears the form-default sale-side listing flags (isForSaleByAgent: true + isForSaleByOwner: true) on ForRent searches when they match the form-default signature. Applies to both the regular-run handler and the zillow_search_by_zip MCP tool. Ported from parent zillow-scraper 2.3.64.
Same input shape, output columns, dataset shape, KVS records, MCP tool list, and pricing.
[0.0.18] - 2026-05-19
Changed
Rental search default-fix — both the regular-run handler and the zillow_search_by_zip MCP tool now auto-enable the "Apartments" home type when they detect form-default filters on a ForRent search (i.e. Houses + Townhomes + Condos + Multi-family all on, Apartments off). The original defaults are tuned for ForSale where apartments are rare; for rentals apartments are the majority of inventory, and the same defaults were yielding ~83% zero-result rate vs ~20% with apartments on. If you really want SFR-only rentals, set isApartment=false together with the other home types you want off — the auto-fix only triggers on the exact form-default signature.
Input schema — isApartment field description rewritten to call out the rental-search best practice and explain the auto-fix.
Ported from parent zillow-scraper 2.3.63. Same input shape, output columns, dataset shape, KVS records, MCP tool list, and pricing.
[0.0.17] - 2026-05-19
Changed
URL handling (regular-run + zillow_search_by_url tool) — clearer error when zillowUrl is missing (now includes an example URL, how to obtain one, and the call shape). Added a pre-flight warning when the URL looks like a single-address shortcut (e.g. /homes/<address>_rb/) — those redirect on Zillow's side and never return listings, so the warning points to the right alternative before the upstream call. Added a tip when a /homedetails/.../<zpid>_zpid/ URL is auto-converted, suggesting the zillow_lookup_property tool / ZPID mode as the cleaner shape for future calls.
RUN_SUMMARY — added properties.capStatus (unlimited_complete / cap_reached / no_results) and properties.capNote so consumers reading the run via the API can tell the difference between "this is the full upstream inventory" and "we hit the cap, more available." Wired into all 3 MCP tool handlers (zillow_search_by_zip, zillow_search_by_url, zillow_lookup_property) plus the regular-run handler via a new setCapContext() API in storage-records.ts.
Input schema — zillowUrl field description rewritten to explain the search-URL requirement (must contain searchQueryState=) and point single-property users to the zillow_lookup_property tool / ZPID mode.
Same input shape, output columns, dataset shape, KVS records, MCP tool list, and pricing.
[0.0.16] - 2026-05-08
Changed
Maintenance build — no user-facing changes.
[0.0.15] - 2026-05-07
Changed
README — refreshed structure for clarity (restored prior section layout). Same input, output, dataset shape, and pricing.
[0.0.14] - 2026-05-07
Changed
Maintenance build — no user-facing changes. Input schema, output dataset columns, KVS records, console output, error messages, defaults, and pricing are all unchanged from 0.0.13. Saved tasks continue to work identically.
[0.0.13] - 2026-05-07
Changed
README — aligned to Apify quality template (same shape as the parent and sibling actors). Hero rewritten with value-first prose and a "beyond what Zillow's official API offers" comparison; numbered 3-step Quick start; new 🎯 What it does / 📦 Output sample / 🧭 When to use it sections; new 💡 Tips & Best Practices section (4 sub-sections × 3 bullets); new 🛟 Support & feedback section pointing to Apify Store reviews / bookmark / Issues tab; new dedicated ⚖️ Is it legal to scrape Zillow? H2 with link to Apify's web-scraping legality blog; FAQ expanded from 0 to 10 Q&As (legality, ban risk, MCP vs regular run, Standby costs, agent auto-discovery, data freshness, cost cap). Section order normalized to match the family. No functional changes — same data, tools, pricing, schema.
[0.0.12] - 2026-05-07
Added
Full functional parity with the parent scraper. Each property now goes through the same 3-tier agent-email resolution chain (property details → agent profile → name search) and returns 77 fields instead of 42 — including bathroomsFull/Half, lotSize, parking, openHouseSchedule, parcelNumber, view, architecturalStyle, appliances, heating/cooling/flooring/laundryFeatures/fireplaceFeatures/communityFeatures, hasBasement/Garage/Pool/Video/3DModel, lastTaxAssessedValue, lastTaxPaid, mainPhoto, priceChange, datePriceChanged, schools.
Two opt-in enrichment toggles available on every tool and the regular-run dispatcher: enrichWalkScore (adds walkScore / transitScore / bikeScore, 0–100 each) and enrichPhotos (adds the full Zillow photo gallery as photos[]). Each adds 1 upstream call per property; no extra Apify event charge.
5 storage records per run — RUN_SUMMARY, SKIPPED_ITEMS, FREE_LIMITS_APPLIED, USER_MESSAGE, status.html — matching the parent's operational-record surface. In Standby mode the counters aggregate across all MCP tool calls in the same instance and flush every 10 calls and on Actor.exit. KVS schema (.actor/key_value_store_schema.json) documents all 5 collections.
FREE-plan agent-email masking. Real emails on paid plans, j***@a***.com pattern + masked_upgrade_to_unlock source on FREE — same gating as the parent scraper.
Changed
Per-fetch upstream timeout reduced from 30s to 15s — same as the parent (v2.3.45). Retry logic preserved (2 retries on 429 and 2 on network error).
[0.0.5] - 2026-05-07
Added
Full schema set: external INPUT_SCHEMA (.actor/input_schema.json) mirroring the parent scraper's structure (mode + ~50 filter fields, sectionCaption groupings), output schema (.actor/output_schema.json) declaring the default dataset as the run's primary output, and Standby web-server OpenAPI 3 schema (.actor/web_server_openapi.json) documenting POST /mcp + the 3 tool argument shapes. Apify Console now renders all schemas under actor settings (no more "Consider implementing" hints), and the input form for regular runs exposes the same filter set customers expect from the parent.
Regular-run dispatcher honors the full filter surface: price / rent / beds / baths / sqft / lot size / year built ranges, all home types, all listing types (auctions, foreclosures, FSBO/agent, pending, backup offers), features (garage, pool, A/C, waterfront, basement state), views (city / mountain / park / water), 3D tours, open houses, HOA cap, parking minimum, sort order, days-on-Zillow, free-text keywords. All forwarded to the upstream search endpoint via a single generic forwarding pass in buildSearchParams().
Changed
Regular-run dispatcher now accepts zpids (array) instead of zpid (singular) — symmetric with parent and lets one run process multiple ZPIDs in a single dispatch. All filters moved from the nested filters: {} JSON object to top-level input fields (parent's UX). MCP tool handlers retain their nested filters argument shape (the MCP convention agents expect) — both paths share the same internal helpers.
[0.0.4] - 2026-05-07
Fixed
TypeScript build error in the regular-run dispatcher (constants for the FREE-tier cap and per-tool-call ceiling were referenced before declaration after the 0.0.3 hybrid-input refactor). No customer-facing behavior change.
[0.0.3] - 2026-05-07
Added
Regular run mode with INPUT_SCHEMA. Previously the actor ran exclusively in Standby mode — clicking "Start" in the Apify Console showed "Actor was started without input" with no useful UI. Now the actor is hybrid: connect via MCP at /mcp for the full 3-tool experience, OR fill the input form (mode + zpid/zip_codes/zillow_url + max_properties + filters) and click Start for a one-shot regular run that pushes results to the dataset. Same dataset shape, same PPE pricing. mcp.apify.com auto-tool now uses this INPUT_SCHEMA for its tool surface too.
[0.0.2] - 2026-05-07
Fixed
zillow_lookup_property and the post-search enrichment chain called the wrong upstream path (/individualProperty) and failed every tool call with a 404. Switched to /property?zpid=... which is the path the parent scraper uses. End-to-end smoke now passes for both zillow_lookup_property and zillow_search_by_zip.
[0.0.1] - 2026-05-07
Added
Initial release of Zillow MCP Server — first MCP-wrapper actor in the Zillow family.
Standby-mode actor exposing a Model Context Protocol (MCP) endpoint at /mcp over Streamable HTTP transport. Always-on (no cold-start) — connect any MCP client (Claude Desktop, Cursor, ChatGPT, VS Code) to https://<actor-id>.apify.actor/mcp and the actor's tools appear in the client's tool catalog.
3 agent-friendly tools mirroring the parent scraper's 3 search modes:
zillow_search_by_zip(zip_codes, max_properties?, filters?) — find properties by US ZIP code or location name. Returns enriched property records with address, price, beds/baths, sqft, agent name + phone, listing status. Up to 20 ZIPs per call.
zillow_search_by_url(zillow_url, max_properties?) — paste any Zillow search URL (filters baked into searchQueryState are honored automatically) or a single-property _zpid page.
zillow_lookup_property(zpid) — direct lookup of a single property by its Zillow Property ID.
Pay-per-event pricing 1:1 with the parent Zillow Property & Agent Data Scraper: $0.08 per property enriched on FREE tier, tiered down to $0.05 on DIAMOND. One-time apify-actor-start event ($0.00005) per actor start, per GB memory.
Free plan caps at 15 properties per tool call; paid plans up to 50 per tool call (single-call ceiling, not per-day).
41-column dataset row per enriched property, written to the actor's default dataset on every tool call so results are inspectable in the Apify Console alongside the MCP response.
Auto-discoverable on mcp.apify.com once published with category MCP Servers.
Notes
v1 enrichment is BASIC: each property is enriched via a single upstream /individualProperty call. The parent scraper's full enrichment chain (agent-email lookup via profile + agent search fallback, Walk Score / Transit Score, full photo galleries) is intentionally out of scope for v1 and tracked for v2.
Same RapidAPI provider as parent (RAPIDAPI_KEY env var). Tool calls fail fast with a clear error if the env var is missing.