Site scraper

Zillow Scraper: Public Zillow Pages via API

HTTP $0.50JS rendering $2.00 per 1,000 results or your own scraper from $1.95/GB

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.

Web Scraping API per 1,000 successful results
Web Scraping API prices per 1,000 successful results
FetchEntryVolume, from
HTTP$0.50$0.20
JS rendering$2.00$1.00

Billed on successful results only.

Your own scraper on residential proxies
from $1.95/GB Easy Trial: 1 GB for $2.95
gate.proxyfield.io:7000
Data

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
DataWhere on ZillowSearch pageProperty page
Address, Zillow property ID (zpid), coordinatesHeader, mapYesYes
List price, listing status (for sale, pending, sold, for rent)HeaderYesYes
Beds, baths, living area, lot size, home type, year builtFacts and featuresBeds, baths, areaAll
Zestimate and Rent ZestimateValue section, where shownSometimesYes, where shown
Price history: listing dates, price cuts, past salesPrice history tableNoYes
Tax history: assessed value, property tax by yearTax history tableNoYes
Days on Zillow, views, savesHeaderDays on ZillowYes
Listing agent and brokerage"Listed by" blockBrokerage, oftenYes
Photos and descriptionGallery, overviewFirst photoAll
  • 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, taxHistory and daysOnZillow. 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):

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

Compare

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:

ItemZillow Group partner APIsLicensed property-data APIs or MLS feedsProxyField Web Scraping APIYour own scraper on ProxyField proxies
Who can use itApproved partners, per productCustomers who sign the vendor's or the MLS's licenseProxyField customersAnyone with code
DataWhat each product allowsWhat the license covers, with redistribution rightsPublic Zillow pages as a visitor sees themPublic Zillow pages
Zillow's termsInside themNot Zillow dataZillow's terms forbid automated collectionThe same
CostSet by ZillowSet by the vendor$0.50 per 1,000 successful results, from $0.20Traffic, from $1.95/GB
You parseNoNoYesYes, 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 scraperWhat you seeWhat to do
Too many requests from one IP403, 429 or a challenge page instead of listingsSlow to 1 request every few seconds per IP and stop; do not retry at once
A page redesignThe embedded keys (zpid, priceHistory) are missingSave the HTML of every page that does not parse; check the parser on a sample every week
The search capNo more than 20 result pages of about 40 homesSplit large areas by ZIP code or price band
Missing valuesNo Zestimate, or gaps in price or tax historyStore nulls; Zillow does not show every field for every home
Restricted paths/api/, /graphql/ and searchQueryState URLs are disallowed in robots.txtFetch public search and property pages only
How it works

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.

Shell
# 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):

JSON
{
  "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>"
}
ChoicePrice per 1,000 successful resultsUse it for
Plain HTTP$0.50, from $0.20 at volumeSearch and property pages whose data is embedded in the HTML
JS rendering$2.00, from $1.00 at volumePages 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

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)
Workload (30-day month), Results, Plain HTTP at $0.50, JS rendering at $2.00
Workload (30-day month)ResultsPlain HTTP at $0.50JS rendering at $2.00
20 ZIP codes, 10 search pages each, weeklyabout 860about $0.43about $1.71
5,000 property pages, once a month5,000$2.50$10
2,000 new listings a day, property pages60,000$30$120
Good to know

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.

  1. 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.

  2. 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>).

  3. 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.

  4. 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.

  5. 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.

Do it yourself

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
Python
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.

Use cases

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.

FAQ

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.

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.