Zillow Scraper Pro avatar

Zillow Scraper Pro

Pricing

from $2.00 / 1,000 search-page-processeds

Go to Apify Store
Zillow Scraper Pro

Zillow Scraper Pro

Scrape Zillow property listings and deep details by ZIP code or URL. Returns address, price, beds, baths, sqft, Zestimate, price history, tax records, school ratings, and agent info. Anti-bot resilient via residential proxies and fingerprint spoofing. Supports for_sale, for_rent, and recently_sold.

Pricing

from $2.00 / 1,000 search-page-processeds

Rating

0.0

(0)

Developer

Tony

Tony

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Zillow Scraper Pro — Zillow API with Built-In MCP Server for AI Agents

The Zillow scraper built for AI agents, real estate investors, and data teams. Extract Zillow property listings, Zestimates, price history, tax records, school ratings, and agent contact info from any ZIP code, city, or Zillow search URL — with a built-in MCP server that plugs straight into Claude, GPT, Cursor, and other LLM agents.

Unlike every other Zillow scraper on Apify, this one is designed to be called by AI — not just by humans. It ships with a full JSON Schema, a two-tier pricing model (fast summary vs. deep detail), and anti-bot resilience tuned for Zillow's Imperva / PerimeterX WAF.

Use cases: real estate lead generation, MLS-style listing monitoring, Zestimate data extraction, property investor comp analysis, rental market research, AI-powered real estate agents, bulk Zillow data export, house price history tracking.


Why Zillow Scraper Pro

FeatureZillow Scraper ProTypical Apify Zillow Scrapers
MCP server built in✅ Native Claude / LLM integration
Two-tier pricing✅ Fast summary + deep detail❌ One price fits all
Zestimate transparencyzestimateStatus + comp-based fallback for new construction❌ Null zestimates with no context
Anti-bot resilience✅ TLS fingerprinting + pre-warmed session pool⚠️ Breaks on every Zillow update
Rent Zestimate✅ Included⚠️ Sometimes
School ratings + walk score✅ Included in detail mode⚠️ Usually extra cost
ZIP code, URL, and city search✅ All three⚠️ Usually one
For Sale / For Rent / Recently Sold✅ All three⚠️ Usually for-sale only

What it scrapes from Zillow

Search inputs:

  • Scrape Zillow by ZIP code — e.g. ["10001", "90210", "78701"]
  • Scrape Zillow by city or neighborhood URL — e.g. https://www.zillow.com/austin-tx/
  • Scrape Zillow by custom filtered search URL — price, beds, sqft, property type, etc.
  • Listing types: for_sale, for_rent, recently_sold

Data extracted per property (detail mode):

  • Pricing: list price, Zestimate, Rent Zestimate, price/sqft, price history, tax assessed value
  • Property facts: beds, baths, sqft, lot size, year built, property type, stories, HOA fee
  • Location: full address, ZIP code, latitude, longitude
  • Real estate context: days on market, listing status, MLS name, MLS ID
  • Agent & broker: agent name, phone, broker name, broker phone
  • School data: school name, rating (GreatSchools), grades served, distance, public/private
  • Walkability: Walk Score, Transit Score, Bike Score
  • Tax history: year-by-year tax paid and assessed value
  • Rich media: hi-res photo URLs, floor plans where available
  • Property description: full listing description text
  • resoFacts: appliances, flooring, cooling, heating, parking, and every structured field Zillow publishes

Built for AI agents (MCP-native)

Most Zillow scrapers output JSON and stop there. Zillow Scraper Pro publishes a full Model Context Protocol schema so LLM agents (Claude, GPT, Cursor, LangChain, LlamaIndex) can reason about the data before calling it.

Three ways to use with AI

1. Via the Apify MCP server (no code)

Server URL: https://mcp.apify.com/mcp

Add to Claude Desktop, then ask naturally: "Find 3-bed houses under $500K in Austin listed in the last 30 days." Claude calls the actor, filters the results, and answers. No code, no SDK.

2. Via the built-in local MCP server

$node src/mcp-server.js

Runs a standards-compliant MCP server on your machine, exposing search_zillow, get_property_details, and bulk_scrape_zip as callable tools. Connect any MCP client.

3. Via the Apify API Same actor, standard REST/JS client. Use when you want a traditional scraper API without the AI layer.

Agent-friendly output fields

Every record includes three fields specifically for agent reasoning:

FieldPurpose
dataDepthsummary | detail | summary_fallback — tells the agent whether to re-request with scrapeDetails: true
zestimateStatusavailable | new_construction | not_published — explains why a Zestimate is null instead of hiding it
estimatedValuePPSFComp-based valuation fallback computed from the median price-per-sqft in the same search. Useful when Zillow won't publish a Zestimate (new construction, coops, luxury).
scrapedAtISO 8601 — lets the agent assess data freshness
sourceAlways "zillow" — for multi-source pipelines

Anti-bot: why this one doesn't break

Zillow runs Imperva / PerimeterX with TLS fingerprinting, JavaScript canvas/WebGL fingerprinting, navigator.webdriver detection, and behavioral heuristics. Most Zillow scrapers on the market break within hours of a Zillow deploy. This actor uses:

  1. HTTP-only stealth with Chrome TLS fingerprinting (got-scraping) — sub-second requests, no browser overhead, no JavaScript runtime to fingerprint
  2. Residential proxy routing via Apify's residential pool — datacenter IPs are blocked at the edge
  3. Pre-warmed session pool with session affinity — survives rate-limit bursts that kill fresh-session scrapers
  4. __NEXT_DATA__ + gdpClientCache extraction — pulls data from Zillow's embedded JSON payloads, so layout changes don't break selectors
  5. Auto-retry on PerimeterX challenges — detects challenge pages and retries with a fresh residential IP (up to 4 retries, with exponential backoff)
  6. Configurable human-like delays — 3–8 second jitter between requests (tunable per run)

The result: sub-minute runs at 20-property scale, and weeks between block incidents instead of hours.


Input

FieldTypeDefaultDescription
zipCodesstring[][]ZIP codes to search — e.g. ["10001", "90210"]
startUrlsURL[][]Any Zillow search or listing URL
listingTypestringfor_salefor_sale, for_rent, or recently_sold
maxListingsinteger100Max properties to collect per run
scrapeDetailsbooleantrueVisit each listing for deep data (priced higher per property)
maxConcurrencyinteger2Parallel requests — keep 1–3 for Zillow safety
requestDelayMsinteger4000Delay between requests (3000–8000ms recommended)
proxyConfigobjectRESIDENTIALApify proxy settings — datacenter proxies will fail

Minimum input: one zipCode or startUrl.


Output schema

Each dataset item is one property. dataDepth tells you which tier the item came from.

Summary fields (all runs, dataDepth: "summary")

{
"zpid": "12345678",
"url": "https://www.zillow.com/homedetails/...",
"address": "123 Main St, New York, NY 10001",
"price": 850000,
"beds": 3,
"baths": 2,
"sqft": 1400,
"propertyType": "condo",
"listingType": "FOR_SALE",
"listingStatus": "For Sale",
"daysOnMarket": 12,
"zestimate": 860000,
"zestimateStatus": "available",
"rentZestimate": 4200,
"estimatedValuePPSF": null,
"latitude": 40.7128,
"longitude": -74.006,
"yearBuilt": 1985,
"imgSrc": "https://...",
"scrapedAt": "2026-04-15T12:00:00.000Z",
"source": "zillow",
"dataDepth": "summary"
}

Detail fields (scrapeDetails: true, dataDepth: "detail")

All summary fields plus:

{
"lotSizeSqft": 2500,
"stories": 3,
"description": "Bright corner unit...",
"monthlyHoaFee": 450,
"taxAssessedValue": 720000,
"pricePerSqft": 607,
"priceHistory": [
{ "date": "2023-03-15", "price": 795000, "event": "Listed for sale", "pricePerSqft": 568 }
],
"taxHistory": [
{ "year": 2023, "taxPaid": 9800, "value": 700000 }
],
"schools": [
{ "name": "PS 1 Tottenville", "rating": 7, "grades": "K-5", "distance": 0.3, "type": "public" }
],
"agent": {
"agentName": "Jane Smith",
"agentPhoneNumber": "212-555-0100",
"brokerName": "Compass",
"mlsName": "REBNY",
"mlsId": "REBNY-123456"
},
"walkScore": 98,
"transitScore": 100,
"bikeScore": 85,
"resoFacts": {
"appliances": ["Dishwasher", "Refrigerator"],
"flooring": ["Hardwood"],
"heating": ["Forced air"],
"cooling": ["Central"]
},
"photos": ["https://..."],
"dataDepth": "detail"
}

Pricing — two-tier pay-per-event

This actor uses pay-per-event (PPE) pricing. You pay only for what you actually use, and you get two distinct tiers so you never overpay for depth you didn't need.

EventPriceWhen you payUse when
apify-actor-start$0.00005 (first 5 seconds waived)Once per run — Apify platform event, effectively free for almost all runsAutomatic
search-page-processed$0.002Per ZIP / search URL handledAlways — covers the anti-bot cost of the search endpoint
property-summary-returned$0.003Per property with ~20 core fields (address, price, Zestimate, beds, baths, sqft, yearBuilt, agent, photos)Monitoring, alerting, bulk exports — when you need breadth over depth
property-detail-enriched$0.015Per property with 40+ fields (full description, resoFacts, HOA, tax, walk/transit scores, price history, schools)Comp analysis, lead generation, due diligence — when you need depth over breadth

Example costs:

  • Daily monitoring sweep of 200 ZIP codes × 50 properties summary = $30.40 / day → $912 / month
  • Weekly deep comp analysis of 100 properties with full detail = $1.50 / week → $6 / month
  • One-time market report: 500 properties detail-mode = $7.50

Compare to single-tier competitors: typical detail-scrapers charge $0.003–$0.005 per property regardless of depth, so you pay the same for shallow fields as for the full resoFacts + schools + tax stack. With Zillow Scraper Pro you only pay the premium when you actually need the premium data.


Usage examples

Scrape all Zillow for-sale listings in a ZIP code

{
"zipCodes": ["10001"],
"listingType": "for_sale",
"maxListings": 200,
"scrapeDetails": true
}

Monitor a city in summary mode (cheapest possible)

{
"startUrls": [{ "url": "https://www.zillow.com/new-york-ny/homes-for-sale/" }],
"maxListings": 500,
"scrapeDetails": false
}

Nightly rental-market sweep across multiple ZIPs

{
"zipCodes": ["90210", "90036", "90024"],
"listingType": "for_rent",
"maxListings": 300,
"scrapeDetails": true,
"requestDelayMs": 5000
}

Recently sold comps for an investor's target ZIP

{
"zipCodes": ["78701"],
"listingType": "recently_sold",
"maxListings": 100,
"scrapeDetails": true
}

Deployment

Prerequisites

  • Apify CLI: npm install -g apify-cli
  • Apify account with residential proxy access

Steps

cd zillow-scraper-pro
npm install
apify login
apify run # local test
apify push # deploy to Apify Store

Local testing input

Create .actor/input.json:

{
"zipCodes": ["10001"],
"listingType": "for_sale",
"maxListings": 10,
"scrapeDetails": true,
"requestDelayMs": 3000
}

Troubleshooting

Empty results? Zillow may have shipped a change. Patches ship within 48 hours of a confirmed break — file an Issue on the actor page.

Getting blocked? Confirm proxyConfig is set to RESIDENTIAL. Datacenter IPs are blocked at Zillow's edge immediately.

Null zestimate? Check zestimateStatus. It will be one of:

  • available — Zillow published a value (in the zestimate field)
  • new_construction — property built in the last 5 years; Zillow doesn't publish Zestimates for these. Use estimatedValuePPSF as a comp-based fallback.
  • not_published — coops, mixed-use, or luxury listings where Zillow itself declines to publish. Fallback also available when sqft is known.

Slow runs? requestDelayMs of 3000–8000ms is the safe range for Zillow. Lowering below 2000ms significantly increases block rates.

Running into the $5 Apify free-tier limit? Start with scrapeDetails: false and a small maxListings to explore the schema. Detail mode is designed for production use where the depth justifies the per-property price.


Frequently asked questions

Q: How is this different from maxcopell/zillow-scraper? A: That scraper is search-only at $0.002/property; no detail pages, no MCP, no Zestimate transparency. Zillow Scraper Pro gives you both tiers in one actor plus AI-agent integration.

Q: Does this work for Zillow rentals? A: Yes. Set listingType: "for_rent". Both Zestimate and Rent Zestimate are extracted in detail mode.

Q: Can it handle recently sold properties? A: Yes. Set listingType: "recently_sold" to pull sold comps for investor analysis.

Q: Does this bypass Zillow's login wall? A: This actor only scrapes publicly accessible Zillow pages. It does not access logged-in-only data, scrape personal information beyond what Zillow publishes, or violate authenticated-only features.

Q: Is scraping Zillow legal? A: Web scraping public pages is generally permitted under the hiQ v. LinkedIn precedent for publicly available data, but you are responsible for complying with Zillow's Terms of Service and applicable laws in your jurisdiction. This actor is provided for legitimate research, due diligence, and AI tool-use scenarios.

Q: Can I use this commercially? A: Yes. Output is yours; usage is subject to Apify's terms and Zillow's ToS. The actor source is Apache-2.0 licensed.


Changelog

v2.9 (April 2026) — Added zestimateStatus transparency field, estimatedValuePPSF comp-based fallback, rentZestimate extraction, tiered pay-per-event pricing, built-in MCP server.


License

Apache 2.0


Keywords: Zillow scraper, Zillow API, Zillow data extraction, Zestimate API, real estate scraper, real estate data API, property data extraction, MLS scraper, home listings scraper, Zillow for sale, Zillow for rent, Zillow recently sold, bulk Zillow export, ZIP code property search, Zillow scraper with MCP, Claude real estate agent, AI real estate tool, property scraper with Zestimate, rental listings scraper, house price history API, real estate lead generation.