[Home](https://scrapfly.io/)/[Scrapers](https://scrapfly.io/scrapers)/Zillow

Listings · Zestimates · search results · rentals

# // Zillow Scraper API

Get Zillow property details, prices, Zestimates, search results and rental listings as clean JSON. Scrapfly handles the bot checks, so you send a URL and read the data.

- **Clone it and run it.** An open-source Zillow scraper for property pages and paginated search results, tested against live Zillow every night.
- **Price, Zestimate and home facts in one request.** Read the listing data Zillow embeds in each property page: beds, baths, living area and year built.
 
 [Get free API key](https://scrapfly.io/register) [View GitHub scraper](https://github.com/scrapfly/scrapfly-scrapers/tree/main/zillow-scraper) [Read Unblocker docs](https://scrapfly.io/docs/scrape-api/unblocker) 

1,000 free credits. No credit card required.

 [  ](https://scrapeway.com/web-scraping-api/scrapfly) [  ](https://www.capterra.com/p/212653/Scrapfly/)  

 4.9/5 from 238 reviews 

 



 

 

 Zillow pages · illustration

 

 

 Property JSON**Output**

```
{
  <span class="c-str">"zpid"</span>: <span class="c-num">15139491</span>,
  <span class="c-str">"status"</span>: <span class="c-str">"FOR_SALE"</span>,
  <span class="c-str">"price"</span>: <span class="c-num">1095000</span>,
  <span class="c-str">"zestimate"</span>: <span class="c-num">1509200</span>,
  <span class="c-str">"rent_zestimate"</span>: <span class="c-num">5110</span>,
  <span class="c-str">"beds"</span>: <span class="c-num">2</span>,
  <span class="c-str">"baths"</span>: <span class="c-num">2</span>,
  <span class="c-str">"sqft"</span>: <span class="c-num">1034</span>,
  <span class="c-str">"year_built"</span>: <span class="c-num">1921</span>
}
```

Printed by the Python request below[See the request ↓](#implementation)

  

What you can scrape from Zillow

Four kinds of Zillow data you can scrape with Scrapfly, no Zillow account required.

 ## // Scrape Zillow property details

Address, list price, beds, baths, living area, lot size, year built and home type, with the listing description, photos and map coordinates. Key every record on the zpid to match the same home across repeat requests.

- zpid
- streetAddress
- price
- bedrooms
- bathrooms
- livingArea
- yearBuilt
- homeType
- responsivePhotos

  ## // Scrape Zestimates and home values

The Zestimate and rent Zestimate Zillow shows for a home, plus price per square foot, listing status and the last sold price for homes with a recorded sale. Store the scrape date with each value to track estimates over time.

- zestimate
- rentZestimate
- pricePerSquareFoot
- homeStatus
- lastSoldPrice

  ## // Scrape Zillow search results

Homes for sale in a city or ZIP code: zpid, listing URL, address, price, beds, baths, living area, coordinates and days on Zillow, plus the total result count. Add the page number to the URL path to collect the next results page.

- zpid
- detailUrl
- unformattedPrice
- beds
- baths
- area
- latLong
- daysOnZillow
- totalResultCount

  ## // Scrape Zillow rental listings

Apartment buildings with their name, address, available unit count and starting rent by bedroom count, alongside single-home rentals with rent, beds and baths. Start from the rentals search URL for a city.

- buildingName
- address
- availabilityCount
- units
- price
- latLong

  



Reliability

## // Get past Zillow's "Access to this page has been denied" block

Zillow's PerimeterX check can answer with HTTP 403 and a "Press &amp; Hold" captcha page instead of the listing. Use Unblocker (formerly ASP) with residential proxies to fetch property, search and rental pages.

`unblocker=true`Enable Scrapfly's [Unblocker](https://scrapfly.io/products/unblocker) for Zillow's bot checks.



`proxy_pool=residential`Send requests through residential proxies, with `country=US` for Zillow.com.



`__NEXT_DATA__`Property and search data sit in the page's embedded JSON. Check for that data before parsing, so a block page never reaches your dataset.



 



Choose your tools

## // Scrapfly products for Zillow scraping

Start with the Web Scraping API, Unblocker and residential proxies. Add a property extraction model, screenshots, a browser session or a URL-list crawl as your workflow needs them. One API key covers all five products.

 ### Web Scraping API for Zillow

Fetch property, search and rental URLs with Unblocker and residential proxies. The listing data comes in the page HTML, ready to parse.

Read the `__NEXT_DATA__` script: property pages carry the home record, and search pages carry the result cards.

 

```
GET /scrape?url=https://www.zillow.com/homedetails/15139491_zpid/&unblocker=true&proxy_pool=residential&country=US
```

 [Explore Web Scraping API →](https://scrapfly.io/products/web-scraping-api)  ### Data Extraction API for Zillow listings

Add `extraction_model=<wbr>real_estate_property</wbr>` for a standard property record, with no parser to write.

Get address, price, price per square foot, living area, bedrooms, bathrooms, year built and photos in the same schema you use for other property sites.

 

```
GET /scrape?url=https://www.zillow.com/homedetails/15139491_zpid/&unblocker=true&proxy_pool=residential&country=US&extraction_model=real_estate_property
```

 [Explore Data Extraction API →](https://scrapfly.io/products/extraction-api)  ### Screenshot API for Zillow listings

Capture the listing page with its photos, price, beds, baths and Zestimate.

Keep a dated visual record of each listing alongside your JSON.

 

```
GET /screenshot?url=https://www.zillow.com/homedetails/15139491_zpid/&country=us&capture=fullpage&format=png
```

 [Explore Screenshot API →](https://scrapfly.io/products/screenshot-api)  ### Cloud Browser API for Zillow sessions

Connect Playwright or Puppeteer to hosted Chromium when your workflow needs a browser session.

Load the listing page and read its rendered content. Set the residential pool and US country on the connection URL.

 

```
chromium.connect_over_cdp("wss://browser.scrapfly.io?key=KEY&proxy_pool=residential&country=us")
```

 [Explore Cloud Browser API →](https://scrapfly.io/products/cloud-browser-api)  ### Crawler API for lists of Zillow URLs

Submit property and search URLs as one bounded job, with Unblocker and residential proxies applied to the requests.

Ask for HTML output and parse the embedded property or search JSON after the job finishes.

- url\_list
- unblocker
- proxy\_pool
- country
- content\_formats

 [Explore Crawler API →](https://scrapfly.io/products/crawler-api)  



One request

## // Fetch a Zillow listing and read its price and Zestimate

The JSON at the top is what this code prints for a San Francisco home for sale: one request, then selected fields from the page's embedded property data.

Install `scrapfly-sdk` and replace the key below. The example uses only the SDK and Python's standard library.

**Prefer the full scraper?** The open-source [Zillow scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/zillow-scraper) covers property pages and search results with pagination in Python 3.10. It runs against live Zillow every night. Clone it, set `SCRAPFLY_KEY`, and run `poetry run python run.py`.

 

 Python · scrapfly-sdkscrape + parse

```
<span class="c-key">import</span> json, re
<span class="c-key">from</span> scrapfly <span class="c-key">import</span> ScrapeConfig, ScrapflyClient

client = ScrapflyClient(key=<span class="c-str">"YOUR_SCRAPFLY_KEY"</span>)
result = client.scrape(ScrapeConfig(
    <span class="c-str">"https://www.zillow.com/homedetails/15139491_zpid/"</span>,
    unblocker=<span class="c-key">True</span>,
    proxy_pool=<span class="c-str">"residential"</span>, country=<span class="c-str">"US"</span>,
))
payload = re.search(
    <span class="c-str">r'<script[^>]+id="__NEXT_DATA__"[^>]*>(.*?)</script>'</span>,
    result.content, re.S,
)
<span class="c-key">if</span> payload <span class="c-key">is</span> <span class="c-key">None</span>:
    <span class="c-key">raise</span> RuntimeError(<span class="c-str">"Zillow returned no property data"</span>)
data = json.loads(payload.group(<span class="c-num">1</span>))
cache = data[<span class="c-str">"props"</span>][<span class="c-str">"pageProps"</span>][<span class="c-str">"componentProps"</span>][<span class="c-str">"gdpClientCache"</span>]
home = next(iter(json.loads(cache).values()))[<span class="c-str">"property"</span>]
listing = {
    <span class="c-str">"zpid"</span>: home[<span class="c-str">"zpid"</span>],
    <span class="c-str">"status"</span>: home[<span class="c-str">"homeStatus"</span>],
    <span class="c-str">"price"</span>: home[<span class="c-str">"price"</span>],
    <span class="c-str">"zestimate"</span>: home[<span class="c-str">"zestimate"</span>],
    <span class="c-str">"rent_zestimate"</span>: home[<span class="c-str">"rentZestimate"</span>],
    <span class="c-str">"beds"</span>: home[<span class="c-str">"bedrooms"</span>],
    <span class="c-str">"baths"</span>: home[<span class="c-str">"bathrooms"</span>],
    <span class="c-str">"sqft"</span>: home[<span class="c-str">"livingArea"</span>],
    <span class="c-str">"year_built"</span>: home[<span class="c-str">"yearBuilt"</span>],
}
print(json.dumps(listing, indent=<span class="c-num">2</span>))
```

 

 



What the data is used for

## // Common Zillow scraping use cases

### Listing price tracking

Track list price and status for a set of homes over time, keyed on the zpid.



### Home valuation

Compare each list price with its Zestimate and price per square foot.



### Rental market research

Follow starting rents and available units by building and bedroom count.



### Investment screening

Rank homes for sale by price, rent Zestimate and living area.



### Inventory monitoring

Count active listings per city or ZIP code from the total result count.



### Property data enrichment

Fill property records with beds, baths, lot size, year built, photos and coordinates.



 



Common questions

## // Zillow scraping FAQ

 Is scraping Zillow legal?There is no universal answer. Legality depends on your jurisdiction, the data, the access method and how you use the result. Keep the workflow to public listing pages, avoid signed-in content, treat agent names and phone numbers as personal data, review Zillow's terms, and get legal advice for commercial use.

 Do I need a Zillow account or API key?No. These requests read public Zillow.com pages signed out. You only need a Scrapfly API key, not a Zillow account or API access.

 Why does Zillow return "Access to this page has been denied"?That is Zillow's PerimeterX bot check. It answers with HTTP 403 and a "Press &amp; Hold" captcha page instead of the listing. Set `unblocker=true`, `proxy_pool=residential` and `country=US`. Check that the response contains the expected property or search JSON before parsing it.

 Can I scrape Zestimates?Yes. A property page embeds the Zestimate and rent Zestimate in `__NEXT_DATA__`, next to the list price, beds, baths and living area. A Zestimate is Zillow's estimate and changes over time, so store the scrape date with each value.

 Can I scrape Zillow search results?Yes. A search page for a city or ZIP code embeds its result cards with zpid, URL, address, price, beds, baths, living area and coordinates, plus the total result count. Add `2_p/` to the search URL for the next page. The open-source scraper handles pagination.

 Can I scrape Zillow rental listings?Yes. The rentals search for a city lists apartment buildings with name, address, available unit count and starting rent by bedroom count, plus single-home rentals with rent, beds and baths.

 How much does scraping Zillow cost?A property or search page with Unblocker and residential proxies costs 25 credits, or 30 when Unblocker loads the page in a browser. The property extraction model adds credits based on the response size; a Screenshot API capture costs 60 credits. Every account starts with 1,000 free credits.

 What are the rate limits when scraping Zillow?Scrapfly sets no Zillow-specific limit. Your maximum parallelism is the concurrency quota on your plan, or a lower cap configured for the project. Each in-flight request uses one slot until it finishes.

 



Start with one request

## Fetch the URL. Read the JSON.

Web Scraping API with Unblocker and residential proxies, one call per Zillow URL.

Proxies across 190+ countries

 [Zillow scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/zillow-scraper) [How to scrape Zillow](https://scrapfly.io/blog/posts/how-to-scrape-zillow) [All scraper pages](https://scrapfly.io/scrapers) 

 

 [Get free API key](https://scrapfly.io/register) [Read the docs](https://scrapfly.io/docs/scrape-api/unblocker)