Web Scraping
Aadithyan
AadithyanJun 26, 2026

Explore Zillow web scraping, API access, Python scraper options, GitHub tools, legal risks, and safer real estate data workflows for 2026.

Zillow Web Scraping: API, Python & Legal Risks

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:

  1. DIY scraping: High maintenance, high legal risk, high block rates.
  2. Managed scraping API: Solves technical blockages, but underlying policy risk remains.
  3. Official listing feed: The safest, cleanest path for eligible brokerages and MLS participants.
  4. 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:

  1. Listing-layer data: Sourced from the MLS. Includes list price, status, address, bedrooms, bathrooms, square footage, and agent details.
  2. Public-record data: Sourced from counties. Includes prior sales, tax history, and parcel assessments.
  3. 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:

  1. 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.
  2. 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.
  3. 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:

python
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 CSS

Two 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 driverDIY in-house scraperManaged extraction API
Residential proxiesYou buy, rotate, and monitor IP poolsIncluded; requests run on premium residential IPs
Browser automation infraYou build and scale JS-rendering clustersHandled by the platform
Retry / block computeYou pay compute for every 403 and re-runAbsorbed into the request
Engineering hoursOngoing time fighting schema drift and blocksNear zero; you keep only data logic
Throughput at scaleBounded by your infra and threadingBatch 100–100k URLs, results in 5–7 minutes
Billing unit that mattersCost per successful record, not per requestDeterministic 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:

bash
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:

json
{
  "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.

About the Author

Aadithyan Nair

Founding Engineer, Olostep · Dubai, AE

Aadithyan is a Founding Engineer at Olostep, focusing on infrastructure and GTM. He's been hacking on computers since he was 10 and loves building things from scratch (including custom programming languages and servers for fun). Before Olostep, he co-founded an ed-tech startup, did some first-author ML research at NYU Abu Dhabi, and shipped AI tools at Zecento, RAEN AI.

On this page

Read more