Can you scrape Zillow? Yes, technically. Should you? That depends entirely on your legal risk tolerance and engineering budget.
Zillow treats its real estate data as a heavily guarded strategic asset. With no self-serve public API available today, developers often default to unofficial scraping methods. However, Zillow's web scraping policy strictly prohibits automated queries. Combined with aggressive bot protections and massive recent litigation—including a September 2025 FTC antitrust lawsuit and a July 2025 copyright infringement case over photo reuse—building a DIY scraper is a high-risk operational choice.
If you need structured real estate data, you are usually better off using an official partner feed, an alternative dataset, or a managed extraction API rather than maintaining a fragile in-house scraper.
Does Zillow allow web scraping?
No. Zillow's current Terms of Use explicitly prohibit automated queries, screen scraping, crawlers, and bypassing CAPTCHA-like protections. While you can technically extract data from public Zillow pages, doing so at scale violates their web scraping policy and introduces significant legal and operational risks. For commercial scale, teams should evaluate official partner feeds, alternative datasets, or compliant managed data providers first.
4 ways to get Zillow or real estate listing data:
- DIY scraping: High maintenance, high legal risk, high block rates.
- Managed scraping API: Solves technical blockages, but underlying policy risk remains.
- Official listing feed: The safest, cleanest path for eligible brokerages and MLS participants.
- Alternative public datasets: The smartest route for historical research and AI model training (e.g., county records, ZTRAX).
Zillow API Reality Check: Is There a Public API Today?
Most developers searching for a public listings endpoint are looking for something that no longer exists. The legacy Zillow API is gone, replaced entirely by closed partnership agreements and restricted data feeds.
Is the Zillow API free, and can you get a Zillow API key?
No, a general, free Zillow API key is no longer available to the public. If you review the current Zillow API documentation, you will find it geared strictly toward approved feed agreements, Bridge Interactive syndication, and specialized MLS partnerships—not a self-serve developer portal for open listing access.
What official access paths still exist?
If you represent a brokerage, MLS, or authorized syndication workflow, you do not need to scrape. Zillow offers direct feed agreements and a Partnership Platform. This is the cleanest route to keep listings visible and compliant.
If you find specialized endpoints—like the Public Records Data Terms—treat them strictly as legacy infrastructure. Always verify your eligibility on Zillow's official partner portal before writing any integration code.
What Zillow Data Actually Is (And What You Can Extract)
Do not treat a Zillow property page as a single source of truth. The platform blends three distinct data layers. Before evaluating any data extraction tool, define exactly which layer you need.
The three layers of Zillow data:
- Listing-layer data: Sourced from the MLS. Includes list price, status, address, bedrooms, bathrooms, square footage, and agent details.
- Public-record data: Sourced from counties. Includes prior sales, tax history, and parcel assessments.
- Proprietary algorithmic data: Sourced from Zillow's models. Includes the Zestimate and Rent Zestimate.
How accurate is Zestimate data for analysis?
Zillow's Zestimate is a proprietary valuation model, not an appraisal. It relies heavily on MLS feeds and public records, carrying a nationwide median error rate of around 1.9% for on-market homes, but skewing significantly higher (around 7%) for off-market properties. Treat it as a directional signal, and cross-validate off-market assumptions with county records.
Search-page results yield lightweight presentational data (price, beds/baths, status), while deep-dive extraction on individual detail pages yields richer context (price history, tax assessments, high-resolution media).
Zillow Web Scraping Policy and Legal Risk
Separate the engineering challenge from the legal reality. Just because a script can bypass a block does not mean you are immune to civil risk, copyright claims, or contract breach.
What Zillow's Terms of Use explicitly say:
- Manual copying: Zillow allows manual copying of information for strictly limited personal or "Pro Use" cases.
- Automated extraction: Section 5 strictly prohibits robots, spiders, crawlers, and bypassing CAPTCHA-like precautions.
- Competitive restrictions: You cannot use Zillow data to develop competing products or services.
- Media reuse: Zillow does not grant rights to underlying listing images or property descriptions.
Is scraping Zillow legal?
It is not a simple yes or no. While past cases like hiQ v. LinkedIn narrowed certain Computer Fraud and Abuse Act (CFAA) theories regarding public data, they do not erase copyright infringement or breach of contract risks.
If you scrape and republish media, scale aggressively, or build a competing product, you invite aggressive enforcement. In March 2026, CoStar Group filed an amended complaint in its copyright infringement lawsuit against Zillow, alleging that tens of thousands of CoStar-owned images are still being used on Zillow's website—up from around 47,000 when the lawsuit was originally filed in July 2025, to around 53,000 images.
Simultaneously, the FTC's September 2025 antitrust lawsuit against Zillow and Redfin over rental advertising competition continues to move through federal court as of May 2026. Real estate platform data is under microscopic legal scrutiny.
Why Zillow Is Hard to Scrape (Technical Paths)
The stable way to extract Zillow data is to skip DOM parsing and read the JSON the page already carries. Zillow embeds its frontend data model in a __NEXT_DATA__ script tag, and its search views hydrate from GraphQL payloads. Residential proxies are mandatory at scale: datacenter IPs draw 403 blocks, and the fix is rotating residential IPs to avoid getting blocked.
If you have a lawful, approved use case, the engineering challenge is finding the least fragile extraction layer. Modern real estate portals rotate class names, load data asynchronously, and heavily penalize basic HTML parsing.
The stability ladder for Zillow data extraction:
- HTML and CSS selector parsing: Highly fragile. If you build a Zillow scraper in Python using basic BeautifulSoup selectors, it will break during the next minor UI update.
- Page-embedded structured data: More durable. Modern frontends often embed JSON directly into the page source (e.g.,
__NEXT_DATA__tags). This powers the frontend data model and outlasts superficial CSS changes. - Internal request observation: Advanced. Observing internal network behavior (like GraphQL persisted queries) provides the cleanest data but triggers intense bot-detection scrutiny.
A minimal Python approach reads the embedded __NEXT_DATA__ JSON instead of scraping DOM elements. Once you have the script tag, you parse the JSON in Python with json.loads:
import json
import requests
from bs4 import BeautifulSoup
# Residential proxy is mandatory; datacenter IPs return 403.
proxies = {"http": "http://user:pass@residential-proxy:port",
"https": "http://user:pass@residential-proxy:port"}
headers = {"User-Agent": "Mozilla/5.0"}
resp = requests.get("https://www.zillow.com/homedetails/...",
headers=headers, proxies=proxies, timeout=30)
if resp.status_code == 403:
# Rotate to a fresh residential IP and retry.
raise SystemExit("403 blocked: rotate residential proxy and retry")
soup = BeautifulSoup(resp.text, "html.parser")
next_data = soup.find("script", id="__NEXT_DATA__")
data = json.loads(next_data.string) # structured JSON, not brittle CSSTwo limits shape any pipeline. Zillow aggressively caps search results at roughly 500 per query, so dense markets need splitting into smaller geographic bounding boxes or strict price filters. And every request needs 403 detection with a residential-proxy retry, or block rates spike.
Evaluating Zillow Scraper GitHub Repositories
A public repository proves a script worked once. It does not prove it works at scale today.
Do free Zillow scraper Python scripts on GitHub still work?
Rarely for long. Zillow frequently updates its DOM structure, embedded data models, and bot protections. A Zillow scraper GitHub repo relying on hardcoded CSS classes or stale user agents will fail almost immediately in a production environment. Use public scripts for educational reference, not core infrastructure.
The rapid audit framework for scraping repos:
- Red Flags: Hardcoded HTML classes, zero retry logic, missing CAPTCHA detection, no output validation.
- Green Flags: Parses structured JSON data, enforces field schemas, includes exponential retries, and exposes explicit rate controls.
If you build an internal Zillow API Python pipeline, you must implement schema tests, deduplication logic, and high observability for error rates.
What It Costs: DIY Scraping vs. Managed Tools
Do not price your pipeline based on the cost of the code. Maintenance is the actual bill.
Building internally requires funding residential proxies, browser automation clusters, server compute for retries, and dedicated engineering hours to fight schema drift. Evaluating vendors by "cost per 1,000 requests" is a trap. You must measure cost per 1,000 successful records.
A cheap proxy network that gets blocked 60% of the time costs exponentially more in compute than a premium API that returns deterministic JSON. The comparison below maps each real cost driver to who owns it under each model:
| Cost driver | DIY in-house scraper | Managed extraction API |
|---|---|---|
| Residential proxies | You buy, rotate, and monitor IP pools | Included; requests run on premium residential IPs |
| Browser automation infra | You build and scale JS-rendering clusters | Handled by the platform |
| Retry / block compute | You pay compute for every 403 and re-run | Absorbed into the request |
| Engineering hours | Ongoing time fighting schema drift and blocks | Near zero; you keep only data logic |
| Throughput at scale | Bounded by your infra and threading | Batch 100–100k URLs, results in 5–7 minutes |
| Billing unit that matters | Cost per successful record, not per request | Deterministic JSON per successful record |
The takeaway: the headline "per request" number hides the compute, proxy, and engineering costs that a managed API folds into a single line item.
Better Alternatives to Scraping Zillow
Match your data type to the source, not the brand name.
For live listings and brokerages:
Use Zillow's official feed and partnership routes. If you are an MLS participant, this preserves listing integrity and ensures compliance.
For historical transactions and assessments:
Skip consumer portals entirely. Go directly to local county assessors, or use ZTRAX.
What is ZTRAX? It is a massive public-record real estate database originally built by Zillow. It is now exclusively distributed via ICPSR at the University of Michigan, after Zillow discontinued distribution of ZTRAX in October 2023.
It includes more than 400 million detailed public records, covering deed transfers, mortgages, foreclosures, auctions, and property tax delinquencies for both commercial and residential properties. The data is available for academic, nonprofit, and government research.
For structured property signals:
Evaluate licensed third-party data providers who aggregate property data legally. Treat these providers as structured-source comparables before committing engineering resources to a scraper.
Operationalizing an Approved Real Estate Data Workflow
If you have a lawful, approved workflow, your bottleneck is turning repeated page access into stable data contracts. Scaling requires URL inventory management, deduplication, and fast re-runs.
Instead of fighting markup and proxy bans every week, offload the browser layer. Using a platform like Olostep turns valid real estate pages into clean output through a unified Web Data API. The same approach lets you build a real estate web scraper that converts property pages into structured data. Three endpoints cover the workflow:
/scrapes: Turn one property URL into structured JSON, Markdown, HTML, PDF, or a screenshot./batches: Submit 100 to 100k regional URLs asynchronously and receive results in 5–7 minutes, enabling batch scraping at scale./parsers: Enforce a schema so extraction returns deterministic, backend-ready JSON.
A single scrape posts a URL and asks for JSON, routed through a residential IP by country:
curl -X POST https://api.olostep.com/v1/scrapes \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url_to_scrape": "https://www.zillow.com/homedetails/...",
"formats": ["json"],
"country": "US",
"parser": { "id": "your_parser_id" }
}'Use a parser for a known schema, or llm_extract with a schema when you want the model to structure the fields. If you are weighing the two approaches, see parsers vs. LLM extraction. A sample JSON response:
{
"id": "scrape_abc123",
"result": {
"json_content": {
"address": "123 Main St, Austin, TX 78701",
"list_price": 725000,
"bedrooms": 3,
"bathrooms": 2,
"living_area_sqft": 1840,
"status": "For Sale"
}
}
}You keep the data logic; the API handles residential IPs, JS rendering, and the browser environment.
Decision Framework: Pick the Right Path
- Live listings (Brokers/Agents): Use official direct feeds or the Zillow Partnership Platform.
- Historical research (Academia/Gov): Access the ZTRAX database via ICPSR or pull direct county records.
- Scale extraction (Approved commercial workflows): Use a managed extraction pipeline (like Olostep) to handle proxies and JSON normalization.
- One-off localized research: Build a lightweight Python scraper using embedded page JSON, assuming you accept the maintenance burden and adhere to terms of use.
Stop treating web scraping as the default. Start with your required schema, assess your legal eligibility, and choose the most stable infrastructure that supports your downstream decisions.
