How to Scrape Zillow Real Estate Data in 2026
By Marcus Reiner · 2026-03-23 · 10 min read · Engineering
Zillow runs PerimeterX and rate-limits hard. Here's the stack that pulls full listing data without bans.
Zillow's defense
PerimeterX (now HUMAN) on every detail page, IP-based rate limit ~1 req per 4 seconds, and a JS challenge on suspicious traffic. Map view is GraphQL-backed and the easiest entry point.
Use the map GraphQL endpoint
Zillow's search results are powered by a public GraphQL endpoint that returns paginated listings as JSON. Hit it with a residential IP and proper headers — no JS rendering needed. ~100× faster than scraping the rendered page.
- POST to /async-create-search-page-state with a search bounds bounding box
- Returns up to 500 listings per page
- Paginate by tightening the bounding box
Detail pages need residential + slow polling
Property detail pages (price history, tax, photos) require fetching the slug URL. Decodo residential with sticky 10-min sessions, 1 req per 5s per IP. Budget ~$3 per 1k detail pages.
ZHVI and public APIs
Zillow's research data (ZHVI, ZORI indices) is published as free CSVs. Use them for macro market analysis instead of scraping. Saves bandwidth and is more accurate.
Legal note
Zillow's ToS forbids scraping. Civil enforcement (cease-and-desist, account ban) is the typical response, not CFAA suits. Consult counsel for commercial redistribution.
FAQ
Can I get MLS data this way?
No — MLS data requires a Realtor license and an MLS feed agreement. Zillow's public surface is a subset.