Scraping Zillow data should begin with source permission, not selectors. Zillow's current terms prohibit automated queries, including screen and database scraping, on its consumer services. For most projects, the workable route is an official Zillow research download, an approved Zillow or Bridge API, an MLS or partner feed, your own export, or written authorization that covers the exact data and use.
That still leaves a useful engineering problem: choosing the right source, preserving its license and provenance, normalizing changing real estate records, and validating observations before they affect analysis. This guide shows that workflow without teaching automation against Zillow pages or ways to bypass access controls.
If your project spans several listing providers rather than Zillow specifically, start with the broader real estate scraping pipeline. The article below stays focused on Zillow-source decisions and approved data ingestion. It is not legal advice.
What Zillow's terms of use say about scraping
Zillow's Terms of Use include a "Prohibited Use" section. Secondary sources report that the current version was last updated October 28, 2025 (Zillow's own page blocked automated fetching when this post was refreshed in October 2026, so confirm the date on the page). In it, you agree not to:
"conduct automated queries (including screen and database scraping, spiders, robots, crawlers, bypassing "captcha" or similar precautions, or any other automated activity with the purpose of obtaining information from the Services)"
What this covers, in plain terms:
- Scrapers, crawlers, and bots that collect information from Zillow's consumer services are prohibited.
- Getting around CAPTCHAs or similar precautions is named directly.
- "Any other automated activity" to obtain information is included, so browser automation and AI agents are not an exception.
- Manual use of the site for personal or permitted professional purposes is treated differently from automated collection.
Zillow's terms change over time, so read the current version before a project starts. Zillow's separate Public Records Data Terms are also reported to prohibit scrapers and similar copying tools, so check them if you use public-record data. The terms do not apply in the same way to Zillow's separate developer products. Zillow Research downloads, the Zestimate API, and the Bridge APIs each have their own terms, and those are the approved routes described below.
Scraping Zillow data: start with the approved source
Review the Zillow Terms of Use before building anything. The terms distinguish limited manual use and certain aggregate data from automated queries, and they can change. A page being visible in a browser does not make an automated collection method permitted.
Choose the source according to the question you need to answer:
| Data need | Best starting source | Important constraint |
|---|---|---|
| Regional home values, rents, inventory, sales, or market trends | Zillow Research real estate metrics download | Aggregate time series; attribution and dataset terms apply |
| Current property, rental, or foreclosure Zestimate | Approved Zestimate API access | Commercial access is request-based and governed by its agreement |
| MLS listing records | Bridge Listing Output or an MLS-authorized feed | Access is controlled by participating MLS organizations |
| Parcel, assessment, or transaction records | Bridge Public Records API or a licensed public-record source | Invite-only access and use-specific terms |
| Data from your own listings or account workflow | Authorized export or partner integration | Keep use within the product agreement |
| Consumer web-page content | Written authorization for the exact automated method | Do not automate if permission is absent or unclear |
Zillow's Data & APIs directory is the current catalog to review. It is more reliable than an old tutorial that assumes a retired endpoint or an API key available to every developer.

This decision prevents a common design failure: collecting listing pages when the actual question only needs a monthly metro-level index. The narrower official source is usually easier to validate and gives you a clearer right to store, transform, and publish the result.
Market research and aggregate metrics
Zillow's Real Estate Metrics documentation points to downloadable CSV datasets for home values, rents, inventory, sales, and other market measures. As of October 2026, the page says most datasets cover neighborhood, ZIP code, city, county, metro, state, and national levels, many going back to the late 1990s. The data is free for public use under Zillow's Terms of Use, and the page states that "proper and clear attribution of all data to Zillow is required." Zillow's developer directory also lists a Neighborhood Data product under Public Data.
Use this route when the unit of analysis is a region and time period, not a current property listing. Record the dataset name, geography, metric definition, download URL, retrieval time, and attribution requirement alongside each import.
Property-level valuations
The current Zestimate API page describes request-based commercial access for property, rental, and foreclosure Zestimates. It directs research and academic users toward the looser-use aggregate metrics instead.
Do not substitute page extraction for API approval. If the application truly needs current property-level valuations, request access, document the accepted use, and build against the response and rate limits in that agreement.
MLS listings and public records
For listing data, the Bridge Listing Output documentation describes an invite-only REST API whose records are normalized to the RESO Data Dictionary. Access remains at the discretion of participating MLS organizations.
For parcel, assessment, and transaction history, Zillow describes a separate Bridge Public Records API. Keep public-record facts separate from listings and estimates: they have different sources, update schedules, identifiers, and allowed uses.
If none of these interfaces fits, identify an authorized MLS feed, county open-data source, licensed provider, or partner export. "Available somewhere on Zillow" is not a source license.
Why Zillow scraper tools do not change the terms question
The pages that rank for this topic are mostly how-to scrapers: Python tutorials built on httpx or Requests, hosted scraper actors on Apify, scraping APIs, and Chrome extensions that export search results to CSV. Many of them describe Zillow data as publicly available and focus on getting past blocks.
A hosted tool changes who runs the request, not what Zillow's terms say about automated queries. If your project depends on Zillow's consumer pages, the safer questions are whether you hold written permission, whether an official source covers the field you need, and whether a licensed MLS or public-record feed answers it instead. Scraping tool vendors say they do not give legal advice, and so does this guide. Ask counsel when the use is commercial.
Define the dataset before you download it
Write one sentence describing the output before touching the data. Examples include:
- Track a published rent index by metro and month.
- Compare inventory trends across a fixed set of counties.
- Update valuations for properties covered by an approved API agreement.
- Reconcile MLS listing status for records supplied by an authorized partner.
Those are different datasets. Combining them into one "Zillow property" table creates ambiguous fields and encourages unsupported joins.
For aggregate metrics, a useful observation shape is:
{
"source": "zillow-research",
"dataset": "approved-metric-name",
"region_id": "example-region-id",
"region_name": "Example Metro",
"region_type": "metro",
"metric": "documented-metric",
"period": "2026-06-30",
"value": "412500.00",
"unit": "USD",
"retrieved_at": "2026-07-30T12:00:00Z",
"source_revision": "sha256:example"
}
For a property-level API, keep at least three entities separate:
| Entity | Meaning | Stable identity candidate |
|---|---|---|
| Property | A parcel, building, or unit | Authorized property or parcel ID |
| Listing | One offer to sell or rent | Source plus MLS/listing ID |
| Observation | A value, status, or price seen at one time | Entity ID plus observation timestamp and source |
A Zestimate is an estimate observation, not a sale price. A listing price is an offer, not proof of a transaction. A tax assessment is another measurement again. Preserve those meanings in field names instead of flattening them all into value.
Use the RESO Data Dictionary as a vocabulary reference when mapping MLS fields. You do not need to copy every RESO resource, but established names make it easier to distinguish listing status, property type, living area, and source event dates.
Ingest an official Zillow Research CSV
The research-download route is the most accessible example because it uses a documented CSV rather than a consumer page. Copy the current download URL from the official metrics page, review that dataset's terms and definition, and place the URL in an environment variable.
This Python example downloads one approved CSV, keeps a content hash for revision tracking, checks its identity columns, and reshapes dated values into observations:
import hashlib
import os
import re
from datetime import datetime, timezone
from io import BytesIO
import pandas as pd
import requests
source_url = os.environ["ZILLOW_RESEARCH_CSV_URL"]
response = requests.get(source_url, timeout=60)
response.raise_for_status()
raw = response.content
source_hash = hashlib.sha256(raw).hexdigest()
retrieved_at = datetime.now(timezone.utc).isoformat()
frame = pd.read_csv(BytesIO(raw))
identity_columns = ["RegionID", "RegionName", "RegionType"]
missing = [column for column in identity_columns if column not in frame.columns]
if missing:
raise ValueError(f"Unexpected dataset schema; missing: {missing}")
date_columns = [
column
for column in frame.columns
if re.fullmatch(r"\d{4}-\d{2}-\d{2}", str(column))
]
if not date_columns:
raise ValueError("No dated metric columns found")
observations = frame.melt(
id_vars=identity_columns,
value_vars=date_columns,
var_name="period",
value_name="value",
).dropna(subset=["value"])
observations["source"] = "zillow-research"
observations["retrieved_at"] = retrieved_at
observations["source_revision"] = f"sha256:{source_hash}"
Do not assume every research CSV uses the same optional columns. Some datasets include state names, size ranks, bedroom categories, or seasonal-adjustment variants. Validate the exact dataset contract and allow known optional columns rather than silently accepting any schema.
Store the raw file or an immutable object reference when the license and retention policy permit it. Zillow may revise historical series, so a later download can legitimately differ from an earlier one. The content hash tells you which source revision produced a chart or model.
Validate Zillow data before publishing changes
Validation should answer both "did the import run?" and "does this observation still mean what we think it means?"
For aggregate time series, check:
- Dataset name and metric definition match the configured job.
- Region ID, name, and type are present and use expected values.
- Date columns parse as real periods and move forward monotonically.
- Units, seasonal adjustment, property type, and bedroom segment are explicit.
- Duplicate region-period pairs do not enter the published table.
- Missing values remain missing rather than being converted to zero.
- Large revisions are flagged for review instead of overwritten invisibly.
For an approved property or listing API, also check identity, transaction type, currency, listing status, event time, and whether the record is a property, listing, valuation, assessment, or sale. Rejecting an unknown response is safer than coercing it into the closest familiar shape.

Keep failed imports out of market events. A schema change, missing CSV column, API error, or expired credential must not appear downstream as a price drop, zero inventory, deleted listing, or disappeared region.
Treat revisions as data
Append imports and compare them with the last successful version. Derive explicit events such as:
- A new reporting period was added.
- A historical value was revised.
- A region entered or left the dataset.
- A metric definition or segmentation changed.
- An API property observation changed at a known time.
Attach the source hash, retrieval timestamp, parser version, and agreement or dataset identifier to every derived record. That provenance lets you reproduce a result without requesting the source again.
What not to do when scraping Zillow data
Do not build a collector around undocumented page JSON, hidden endpoints, copied browser cookies, CAPTCHA solving, fingerprint spoofing, or rotating addresses after a denial. Those tactics do not create authorization and make the pipeline fragile even before policy and legal risk are considered.
Also avoid:
- Treating
robots.txtas permission. The Robots Exclusion Protocol communicates crawler rules; it does not replace the applicable terms or a data license. - Copying listing photos, descriptions, agent profiles, or reviews when the approved purpose only needs factual measurements.
- Combining Zillow-derived records with personal or sensitive data without a documented purpose and privacy review.
- Using housing data for discriminatory targeting or unsupported high-impact decisions.
- Publishing a metric without its geography, period, unit, definition, and attribution.
- Retrying 401, 403, 429, CAPTCHA, or policy responses through new routes until one works.
For a broader review of access, contract, copyright, privacy, and purpose, use the data scraping legality guide. Legal counsel should assess the specific project when rights or obligations are uncertain.
Do proxies help with Zillow data?
Not for downloading an official public dataset or calling an approved API in the normal case. A direct, stable connection is simpler, and the source agreement defines access, not the IP address.
A proxy can have a narrow infrastructure role if written permission specifically covers automated regional rendering, controlled egress, or testing from defined locations. In that case, use one stable route per session, remain inside the approved request budget, and pause on access denials. Do not use proxy rotation to continue consumer-site automation that Zillow's terms prohibit.
This distinction matters: proxies change network routing. They do not grant a license, expand API scope, or turn an undocumented endpoint into an approved source.
FAQ
Can I legally scrape Zillow?
Zillow's Terms of Use (Prohibited Use section) prohibit automated queries, including screen and database scraping, spiders, robots, crawlers, and bypassing CAPTCHAs. Whether a separate written agreement, API contract, feed license, or law permits a particular project is fact-specific. Do not automate Zillow pages without clear authorization; use an official dataset or approved interface instead.
Does Zillow have an API?
Yes, but not as one open listing API. As of October 2026, Zillow's developer directory lists about 20 products, including Real Estate Metrics, Neighborhood Data, the Public Records API, MLS listings through Bridge, rentals feeds, and the Zestimate API. Research metrics are downloadable CSVs, while Zestimate, MLS listing, and public-record interfaces use request-based or invite-only access.
Do Zillow scraper tools and Chrome extensions make scraping allowed?
No. A tool or hosted scraper changes how the request is sent, not what the terms say about automated queries. Zillow's prohibition names screen and database scraping, robots, and crawlers. Use an official dataset or API, or get written permission, and ask counsel if the use is commercial.
Can I scrape Zestimate values from property pages?
Do not extract them from Zillow property pages without authorization. If current property-level Zestimates are required, review and request access through the official Zestimate API. For academic or market-level research, determine whether the published aggregate metrics answer the question.
What is the best way to collect Zillow market data?
For regional trend analysis, start with the official Zillow Research CSV for the exact metric and geography. Preserve the raw revision, normalize dated columns into observations, validate units and region identity, and include the required attribution in outputs.
Can residential proxies prevent Zillow blocks?
They can change the apparent network location, but they cannot authorize scraping or make prohibited automation compliant. If Zillow returns an access denial, stop the automated path and review the source, agreement, rate, and method rather than rotating addresses.
Final thoughts
Scraping Zillow data responsibly starts with a source you are allowed to automate. For market research, that is usually an official Zillow CSV. For valuations, listings, or public records, it is a contract-governed API or licensed feed. Record where every observation came from.
Once access is clear, treat the work as a versioned data pipeline: define the entity and metric, preserve the raw revision, normalize conservatively, validate before publishing, and keep source terms and attribution attached. If no approved source covers the project, change the source or obtain permission instead of building around the consumer website.