Zillow Scraper: Public Zillow Pages via API
A public Zillow property page gives the price, the Zestimate and Rent Zestimate, the price history, the tax history, the home facts, days on Zillow and the listing agent; a search page gives a summary of about 40 homes per page. ProxyField's Web Scraping API, which fetches any URL, returns these public pages for $0.50 per 1,000 successful results over plain HTTP, from $0.20 at volume, or $2.00 per 1,000 with JS rendering, and you read the fields from the JSON embedded in the page. There is no separate Zillow API on ProxyField, and Zillow's own data APIs are for approved partners. Zillow's terms of use forbid automated collection, so read them first. To start, contact sales, or run your own scraper on ProxyField's 61.2M+ US residential IPs with the Easy Trial: 1 GB for $2.95.
Through the sales team on our 24/7 live chat
| Fetch | Entry | Volume, from |
|---|---|---|
| HTTP | $0.50 | $0.20 |
| JS rendering | $2.00 | $1.00 |
Billed on successful results only.
What data can you get from Zillow?
A public Zillow property page shows the price, the Zestimate and Rent Zestimate where Zillow displays them, the price history, the tax history, the home facts, days on Zillow, and the listing agent and brokerage. Search pages show a summary of each home, at most 20 result pages of about 40 homes per search; the history, the Zestimates and the agent are on the property page.
Read moreShow less
| Data | Where on Zillow | Search page | Property page |
|---|---|---|---|
| Address, Zillow property ID (zpid), coordinates | Header, map | Yes | Yes |
| List price, listing status (for sale, pending, sold, for rent) | Header | Yes | Yes |
| Beds, baths, living area, lot size, home type, year built | Facts and features | Beds, baths, area | All |
| Zestimate and Rent Zestimate | Value section, where shown | Sometimes | Yes, where shown |
| Price history: listing dates, price cuts, past sales | Price history table | No | Yes |
| Tax history: assessed value, property tax by year | Tax history table | No | Yes |
| Days on Zillow, views, saves | Header | Days on Zillow | Yes |
| Listing agent and brokerage | "Listed by" block | Brokerage, often | Yes |
| Photos and description | Gallery, overview | First photo | All |
- A Zestimate is Zillow's automated estimate of a home's value, not an appraisal. Zillow recalculates it, and it is not shown for every home.
- Price and tax history come from records Zillow receives, such as listing feeds and county records, so coverage varies by area and some rows are missing.
- The data sits as JSON inside the page. Zillow's pages have carried it in an embedded script, with keys such as
zpid,price,zestimate,rentZestimate,priceHistory,taxHistoryanddaysOnZillow. Zillow can rename them at any time, so read the keys from a sample page of your own.
The Python code below reads these keys from a property page and prints one record per home, like this (example values, not a real listing):
{"zpid": 87654321, "status": "FOR_SALE", "price": 485000, "zestimate": 472000, "rentZestimate": 2850, "beds": 3, "baths": 2, "sqft": 1540, "daysOnZillow": 9, "priceHistory": [{"date": "2026-10-16", "event": "Listed for sale", "price": 485000}], "taxHistory": [{"time": 1735689600000, "taxPaid": 6180, "value": 431000}], "agent": "Jane Example", "brokerage": "Example Realty"}The API returns the page itself as HTML, Markdown or plain text, or a JSON envelope with the status code, the final URL, the headers, the cookies and the content; it has no parsed Zillow fields, so your parser reads them, as the code below does.
Agent profile pages
An agent profile (zillow.com/profile/<name>/) shows the agent's name, brokerage, service areas, recent sales and reviews. Agents publish these to win clients: treat them as personal data, use them with the listing, and do not build contact lists for cold outreach from them.
Is there a reliable Zillow scraper API?
Not an open one from Zillow: its data APIs go to approved partners under the Zillow API terms, and its Bridge MLS listings API is invite-only, with each MLS partner deciding on access and the data returned as JSON in the RESO data dictionary standard. For production data, a licensed property-data API or an MLS feed gives you the rights; for public pages, a scraping API or your own scraper. Your choices:
| Item | Zillow Group partner APIs | Licensed property-data APIs or MLS feeds | ProxyField Web Scraping API | Your own scraper on ProxyField proxies |
|---|---|---|---|---|
| Who can use it | Approved partners, per product | Customers who sign the vendor's or the MLS's license | ProxyField customers | Anyone with code |
| Data | What each product allows | What the license covers, with redistribution rights | Public Zillow pages as a visitor sees them | Public Zillow pages |
| Zillow's terms | Inside them | Not Zillow data | Zillow's terms forbid automated collection | The same |
| Cost | Set by Zillow | Set by the vendor | $0.50 per 1,000 successful results, from $0.20 | Traffic, from $1.95/GB |
| You parse | No | No | Yes | Yes, and you handle blocks |
Read moreShow less
What "reliable" means on ProxyField: billing on successful results only, at $0.50 per 1,000. Billed: a page Zillow answered with a 2xx status. Not billed: blocked requests, timeouts and errors on our side; a blocked request is retried on new IPs, and the retries are not billed. Every response says whether it was billed. A target's 404 or 410, and a sign-in page the site serves with a 200 status, count as billed results.
| What breaks a Zillow scraper | What you see | What to do |
|---|---|---|
| Too many requests from one IP | 403, 429 or a challenge page instead of listings | Slow to 1 request every few seconds per IP and stop; do not retry at once |
| A page redesign | The embedded keys (zpid, priceHistory) are missing | Save the HTML of every page that does not parse; check the parser on a sample every week |
| The search cap | No more than 20 result pages of about 40 homes | Split large areas by ZIP code or price band |
| Missing values | No Zestimate, or gaps in price or tax history | Store nulls; Zillow does not show every field for every home |
| Restricted paths | /api/, /graphql/ and searchQueryState URLs are disallowed in robots.txt | Fetch public search and property pages only |
How the Web Scraping API fetches a Zillow page
You send the URL of a public Zillow search or property page and choose plain HTTP or JS rendering; the API returns the page. The API takes a POST to https://api.proxyfield.io/v1/scrape with your API key in an Authorization: Bearer <api_key> header and a JSON body: url, render (false for plain HTTP, true for JS rendering), country and output (html, markdown, text or json). Parameter reference: API documentation. More on the API itself: Web Scraping API.
# The request the Web Scraping API takes (access through Contact sales)
curl https://api.proxyfield.io/v1/scrape \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.zillow.com/new-york-ny-10001/", "render": false, "country": "us", "output": "json"}'Example response (shortened; content is the page's HTML, with Zillow's embedded page data inside):
{
"metadata": {"id": "req_60361c1a7bfae8e9", "api": "web_scrape", "status": "success", "billed": true},
"status_code": 200,
"final_url": "https://www.zillow.com/new-york-ny-10001/",
"content_type": "text/html; charset=utf-8",
"content": "<!DOCTYPE html><html lang=\"en\">…</html>"
}| Choice | Price per 1,000 successful results | Use it for |
|---|---|---|
| Plain HTTP | $0.50, from $0.20 at volume | Search and property pages whose data is embedded in the HTML |
| JS rendering | $2.00, from $1.00 at volume | Pages or sections that load only in a browser |
Zillow pages carry their listing data as JSON inside the HTML, so plain HTTP is the place to start.
Pricing: $0.50 per 1,000 Zillow pages, from $0.20
Zillow pages cost the Web Scraping API's price: $0.50 per 1,000 successful results over plain HTTP, from $0.20 at volume, and $2.00 per 1,000 with JS rendering, from $1.00 at volume. You pay only for successful results. The volume prices start at 10,000 successful results in one purchase.
Contact sales through the sales team on our 24/7 live chat.
At the volume price the 60,000 property pages cost $12 over plain HTTP. Payment and balance: the same crypto balance as proxies, which never expires; there is no subscription or monthly fee. All prices: pricing.
Through the sales team on our 24/7 live chat
| Workload (30-day month) | Results | Plain HTTP at $0.50 | JS rendering at $2.00 |
|---|---|---|---|
| 20 ZIP codes, 10 search pages each, weekly | about 860 | about $0.43 | about $1.71 |
| 5,000 property pages, once a month | 5,000 | $2.50 | $10 |
| 2,000 new listings a day, property pages | 60,000 | $30 | $120 |
Why Zillow is hard to scrape
Zillow challenges automated traffic: fast request rates and clients without normal browser headers see a block page or a challenge instead of the listings, and server IP ranges tend to meet more challenges than home connections (our assessment). A search also shows at most 20 result pages of about 40 homes, so large areas have to be split into smaller searches, such as single ZIP codes or price bands. Zillow's robots.txt disallows /api/, /graphql/, /homes/ and search URLs with a searchQueryState parameter.
Best proxy setup for scraping Zillow across US cities
Read Zillow's terms of use and robots.txt first: they restrict automated collection. The setup in one line: US residential IPs with a new IP on every request, one city per job in the username, ZIP codes split in the URL, and 1 request every few seconds per IP. On ProxyField that starts at 1 GB for $2.95; 10 GB costs $27.90.
-
US residential IPs, a new IP on every request
ProxyField has 61.2M+ residential IPs in the United States, in all 50 states and 2,800+ cities.
-
One city per job
Put the city in the username, such as
<login>-country-us-city-new_york, and queue each city's searches as their own job. More city keys: the city name in lowercase with underscores for spaces (-city-<city>). -
Split by ZIP code in the URL, such as
zillow.com/new-york-ny-10001/. The ZIP comes from the URL, not from the IP; ProxyField targets states and cities, not ZIP codes. -
Keep the rate low
1 request every few seconds per IP, no parallel bursts across cities, and stop on a 403 or a challenge page instead of retrying.
-
Pick proxies or the API by volume
For a few hundred pages, your own script on proxies is enough; above that, the Web Scraping API at $0.50 per 1,000 pages saves the block handling.
Residential proxies cost $2.95/GB for 1 GB and from $1.95/GB at volume, with no subscription; the traffic never expires, and all purchases are final. More on US proxies.
Scrape Zillow with Python and ProxyField proxies
For a few hundred pages, Python through US residential IPs works: fetch a property page, find the JSON that Zillow embeds in the HTML and read the home's fields from it. The code walks the embedded data to the record that holds zpid and priceHistory, because Zillow moves it between page versions.
Read moreShow less
import json
import requests
from bs4 import BeautifulSoup
proxy = "http://<login>-country-us-city-new_york:<password>@gate.proxyfield.io:7000"
url = "https://www.zillow.com/homedetails/<address>/<zpid>_zpid/" # a public property page
def find_home(node):
"""Walk the embedded page data (some of it is JSON inside strings) to the dict with zpid and priceHistory."""
if isinstance(node, str) and node[:1] in "{[":
try:
node = json.loads(node)
except ValueError:
return None
if isinstance(node, dict):
if "zpid" in node and "priceHistory" in node:
return node
node = list(node.values())
if isinstance(node, list):
for child in node:
found = find_home(child)
if found:
return found
return None
resp = requests.get(url, proxies={"http": proxy, "https": proxy},
headers={"User-Agent": "Mozilla/5.0", "Accept-Language": "en-US"}, timeout=30)
if resp.status_code != 200:
raise SystemExit(f"Blocked: {resp.status_code} - slow down, stop and check later")
soup = BeautifulSoup(resp.text, "html.parser")
home = None
for tag in soup.find_all("script", type="application/json"): # embedded page data
home = find_home(tag.string or "")
if home:
break
if not home:
open("page.html", "w").write(resp.text) # save it and see what changed
raise SystemExit("No home data found: saved page.html")
agent = home.get("attributionInfo") or {}
print(json.dumps({
"zpid": home.get("zpid"), "status": home.get("homeStatus"), "price": home.get("price"),
"zestimate": home.get("zestimate"), "rentZestimate": home.get("rentZestimate"),
"beds": home.get("bedrooms"), "baths": home.get("bathrooms"), "sqft": home.get("livingArea"),
"daysOnZillow": home.get("daysOnZillow"),
"priceHistory": [{k: h.get(k) for k in ("date", "event", "price")} for h in (home.get("priceHistory") or [])[:3]],
"taxHistory": [{k: t.get(k) for k in ("time", "taxPaid", "value")} for t in (home.get("taxHistory") or [])[:2]],
"agent": agent.get("agentName"), "brokerage": agent.get("brokerName"),
}))It prints one line like the record in What data can you get from Zillow?. The key names are the ones Zillow's pages have used; Zillow can rename them, so check them against a page of your own. Install the libraries with pip install requests beautifulsoup4.
What teams use Zillow data for
- Investment screening price per square foot, days on market and price cuts by ZIP code.
- Rental analysis rents and Rent Zestimates against sale prices, for yield estimates.
- Comparables recent sold homes near a property, for pricing and appraisal checks.
- Market reports inventory, new listings and median prices by city each week.
- Proptech products alerts and dashboards built on your own copy of public facts.
Zillow listings into a spreadsheet without code
The API returns pages that a script turns into rows; a no-code export for the API: not in the first version of the API. Without code today, the practical routes are a browser extension for a few result pages, or an automation tool with an HTTP step that calls the API and writes to Google Sheets. For Redfin, Realtor.com and other portals, see the real estate scraper.
Is it legal to scrape Zillow?
Zillow's terms of use forbid automated collection, so scraping even public pages is a breach of its terms, separate from whether it breaks a law. Prices, sizes and listing status are facts; listing photos and descriptions can be protected by copyright, so store facts rather than republishing content, and treat agent and owner names as personal data. For production use or resale, a licensed property-data source or an MLS feed gives you the rights that scraping does not. The full answer is in Is It Legal to Scrape eBay, Walmart, Zillow and Other Marketplaces? and Is Web Scraping Legal? US, EU and UK Rules (2026).
ProxyField's acceptable use policy allows collecting public web data and market research, and forbids accessing data behind logins you are not entitled to. This is not legal advice.
ProxyField's rule for every site: public pages only, and follow the site's terms.
More scraper APIs
- Real estate scraper Redfin, Realtor.com, Rightmove, idealista and other portals on the same API.
- Web Scraping API any URL, plain HTTP or with JS rendering, from $0.20 per 1,000 successful results.
- Google Maps scraper Google Maps search results, $1.50 per 1,000 successful results, from $1.00.
- Google SERP API the Google results page as JSON, $1.20 per 1,000 successful results, from $0.80.
- All scraper APIs
Zillow Scraper FAQ
24/7 support by live chat, including help with setup and integration.
Is there a reliable Zillow scraper API for US real estate data?
ProxyField's Web Scraping API fetches any URL, including public Zillow search, property, rental and sold pages, for $0.50 per 1,000 successful results, from $0.20 at volume, billed on successful results only; there is no separate Zillow API. Zillow itself has no open API: its data APIs go to approved partners, its Bridge MLS listings API is invite-only, and its terms of use forbid automated collection. For production data with redistribution rights, a licensed property-data API or an MLS feed is the alternative.
What data can I get from Zillow with a scraper, like Zestimates, price history and agent details?
A public property page shows the price, the Zestimate and Rent Zestimate where Zillow displays them, the price history with listing dates and price cuts, the tax history with assessed values, the home facts, days on Zillow and the listing agent and brokerage. Search pages show only the summary: address, price, beds, baths, area and status. Agent names are personal data, so use them for the listing, not for cold-outreach lists.
What is a Zestimate?
Zillow's automated estimate of a home's market value, shown on many property pages, with a Rent Zestimate for the rent. It is a model's estimate, not an appraisal, and Zillow recalculates it over time.
What's the easiest way to pull Zillow and Redfin listings into a spreadsheet without coding?
For a few result pages, a browser extension that exports a table to CSV is the easiest route. For regular pulls, an automation tool with an HTTP step can call a scraping API and write rows to Google Sheets; on ProxyField's Web Scraping API, each page costs $0.50 per 1,000 successful results.
What's the best proxy setup for scraping Zillow listings across US cities?
ProxyField's rotating US residential proxies, from $1.95/GB, with a new IP on every request, one city per job in the username, ZIP codes split in the URL and a low rate per IP. ProxyField has 61.2M+ residential IPs in the United States, in all 50 states and 2,800+ cities. Read Zillow's terms and robots.txt first: they restrict automated collection.
How do I scrape Zillow?
Build the search URLs for your ZIP codes or cities, fetch each results page and the property pages it links to, and read the listing data from the JSON that Zillow embeds in the HTML. Rotate US residential IPs and keep the rate low, or send the URLs to a scraping API.
How do I scrape Zillow with Python?
Use requests through a US residential proxy, parse the page with Beautiful Soup and load the embedded page JSON, as in the code on this page. Then pick the listing fields you need and save the HTML of any page that does not parse, so you can see what changed.
Does Zillow have an official API?
Zillow Group offers data APIs, such as listings, public records and Zestimate data, to approved partners under its own terms. There is no open API that lets anyone search Zillow's listings.
What are the main challenges when extracting data from Zillow?
Challenges on fast traffic, at most 20 result pages per search, and page data that changes shape when Zillow updates its site. Split large areas into ZIP codes or price bands and check your parser on a sample every week.
Why scrape Zillow, and how is Zillow data used?
Investors screen markets by price per square foot and days on market, landlords compare rents, analysts track inventory and price cuts, and agents pull comparables from recent sales. Most of these uses need only facts such as price, size and status.
Show 9 more questionsShow fewer questions
Do Zillow's terms allow web scraping?
No: Zillow's terms of use forbid automated collection, so scraping breaches its terms even when the pages are public. Whether it breaks a law is a separate question; this is not legal advice.
Does Zillow's robots.txt allow scraping?
Only in part. On 2026-10-25 it disallowed /api/, /graphql/, /homes/ and search URLs with a searchQueryState parameter for all crawlers, while property pages under /homedetails/ were not disallowed as a whole. Robots.txt is a crawler convention, and Zillow's terms of use still forbid automated collection.
Do I need an account to scrape Zillow?
No. Search results, property pages, rentals and sold homes are visible to logged-out visitors, and a scraper should never sign in. Saved homes and messages behind a login are out of scope.
How much does it cost to scrape Zillow?
On ProxyField's Web Scraping API, 5,000 Zillow property pages cost $2.50 over plain HTTP and 60,000 cost $30, or $12 at the volume price. With your own scraper you pay for traffic instead, from $1.95/GB for residential proxies.
Can I scrape Zillow by ZIP code?
Yes: Zillow's search takes a ZIP code in the URL, so you fetch one search per ZIP and follow its result pages. The ZIP comes from the URL, not from the IP, so any US IP works; ProxyField targets states and cities, not ZIP codes.
What are the alternatives to scraping Zillow?
Zillow Group's partner APIs if you qualify, a licensed property-data API, or an MLS feed through a broker or the MLS itself. They cost more than scraping but come with the right to use and often to redistribute the data.
What is a Zillow scraper?
A tool or script that collects public listing data from Zillow automatically: addresses, prices, home facts, listing status and history. It can be your own code on proxies or a scraping API that fetches the pages for you.
Is there a Zillow scraper on GitHub?
Yes, several open-source Zillow scrapers are on GitHub, mostly Python scripts that read the embedded page data. Many stop working when Zillow changes its pages, so check the last update and run them through rotating residential IPs.
Do Zillow scraper Chrome extensions work?
They work for a few result pages, because they read what your own browser has loaded. They do not scale to thousands of listings or run on a schedule; for that you need a script or an API.
Related pages
Collect Zillow pages with the Web Scraping API
Billed on successful results only. Contact sales for the Web Scraping API and the volume you need, or run your own scraper on residential proxies. 24/7 live chat helps with setup and integration.