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.
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. The documentation says these datasets cover several geographic levels and are available for public use under the published terms with clear Zillow attribution.
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.
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—not the IP address—defines access.
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.
Scraping Zillow Data FAQ
Can I legally scrape Zillow?
Zillow's current consumer-service terms prohibit automated queries, including scraping. 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, Zillow's developer directory currently lists APIs and datasets for several use cases. Access differs by product: research metrics are downloadable CSVs, while Zestimate, MLS listing, and public-record interfaces use request-based or invite-only access.
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.
Should I use a browser to scrape Zillow?
Not as a workaround for access rules. A browser does not provide permission, and copied sessions or hidden browser endpoints are not substitutes for an approved interface. Use a browser only if a written agreement explicitly authorizes that method and defines its scope.
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.
Conclusion
Scraping Zillow data responsibly means choosing a source you are allowed to automate and proving where every observation came from. For market research, that may be an official Zillow CSV; for valuations, listings, or public records, it may be a contract-governed API or licensed feed.
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.