Zillow scraper API
A Zillow scraper API that turns a US location into property rows: price, beds, baths, living area, lot size, home type, listing status, Zestimate and rent Zestimate, days on Zillow, broker, coordinates, photo and the listing URL. For sale, for rent or recently sold.
$0.001 per delivered listing · $2 free every month · Failed runs never billed
$ curl $QD/zillow_search/run \
-H "Authorization: Bearer $QD_API_KEY" \
-d '{"location": "Austin, TX", "status": "for_sale", "max_results": 80}'
{ "status": "done", "count": 80,
"results": [
{
"zpid": "…",
"address": "…",
"street": "…",
"city": "…" } ],
"cost": 0.08 }
# 80 listings × $0.001 · nothing delivered, nothing charged
What a Zillow scraper API does
Real-estate analysis needs the whole board, not one listing at a time: everything for sale in a ZIP, with size, price and location on the same row. This collector paginates a Zillow search and returns exactly that, with the address already split into street, city, state and ZIP.
Zillow ships its results inside the page's data payload — but not always in the same shape: sometimes the search state is a sub-object, sometimes a JSON string nested inside the props tree. Both forms have been seen on the same day, so the parser handles both instead of breaking on whichever one it did not expect.
What one listing looks like
Every delivered listing carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.
| Field | Type | What it holds |
|---|---|---|
rank | integer | 1-based position across pages. |
page | integer | Results page the row came from. |
zpid | string | Zillow property id. |
address | string · nullable | Full address as shown. |
street | string · nullable | Street line. |
city | string · nullable | City. |
state | string · nullable | State code. |
zipcode | string · nullable | ZIP code. |
price | string · nullable | Price as shown. |
price_value | number · nullable | Numeric price. |
currency | string · nullable | Currency symbol. |
beds | number · nullable | Bedrooms. |
baths | number · nullable | Bathrooms. |
area_sqft | number · nullable | Living area in sqft. |
lot_size | number · nullable | Lot size when published. |
home_type | string · nullable | SINGLE_FAMILY, CONDO, TOWNHOUSE… |
status | string · nullable | Status text (Active, Pending…). |
status_type | string · nullable | FOR_SALE / FOR_RENT / SOLD. |
listing_type | string · nullable | For Sale by Agent/Owner, Foreclosure… |
zestimate | number · nullable | Zillow price estimate. |
rent_zestimate | number · nullable | Zillow rent estimate. |
days_on_zillow | number · nullable | Days listed. |
broker | string · nullable | Listing brokerage. |
latitude | number · nullable | GPS latitude. |
longitude | number · nullable | GPS longitude. |
image | string · nullable | Photo URL. |
url | string | Listing URL. |
Inputs
The whole request. Anything you leave out falls back to the default shown in the catalog.
| Input | Type | Required | What it does |
|---|---|---|---|
location | string | yes | City and state, ZIP or neighborhood, e.g. "Austin, TX". |
status | string | no | Which listings to collect. One of: for_sale, for_rent, sold. |
max_results | integer | no | How many listings to deliver at most (1–500). You pay only for delivered listings. |
Pricing
Zillow scraper API pricing
$0.001 per delivered listing. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 listings before you spend anything.
Pay as you go
- $2 free credit / month
- 60 requests / min
- List unit prices
Starter
- $15 free credit / month
- 300 requests / min
- 10% off unit prices
Growth
- $50 free credit / month
- 600 requests / min
- 20% off unit prices
Scale
- $250 free credit / month
- 1,200 requests / min
- 30% off unit prices
Same wallet, same key and same $2 monthly allowance as every other Data API. Prices are launch pricing read live from the billing config — GET /v1/scraper/collectors returns the price your key actually pays.
Integration
One POST, typed rows
Base URL https://api.quanticdata.io/v1, Bearer auth, the same key as every other Data API. Endpoint: POST /v1/.
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/zillow_search/run \
-H "Authorization: Bearer $QD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"location":"Austin, TX","status":"for_sale","max_results":80}'
What people build with the Zillow scraper API
Three shapes of work this endpoint was designed around.
Market analysis
Price per square foot by neighbourhood, computed from rows rather than eyeballed.
Investment screening
Filter for rent Zestimate against asking price across a whole city.
Comparables
Pull recently sold properties around an address to build a comp set.
Zillow scraper API versus rolling your own
The differences that actually cost time when you build this in-house.
| DIY scraper | This collector | |
|---|---|---|
| Coverage | One listing per request | A whole search, paginated |
| Address | One string to parse yourself | Street, city, state and ZIP split |
| Payload shape | Breaks when Zillow changes it | Both known shapes handled |
A closed API and a licensed alternative
Zillow's public API programme has been progressively closed — the GetSearchResults and Zestimate endpoints that powered a generation of side projects are gone, and what remains is partner-oriented. There is no self-serve API returning search results.
The licensed alternative is MLS data, and it is genuinely better where it applies: authoritative, contractually clean, with agent-level fields Zillow never shows. It also requires being a licensed real-estate professional or partnering with one, agreements with hundreds of regional MLSs and a RESO integration. For research, screening and market analysis rather than a brokerage product, public listing data is what is realistically available.
Limits, coverage and the legal bit
Up to 500 listings per run — the deepest cap in the catalogue, because market analysis needs whole markets rather than samples, and a bigger cap also means fewer requests. US only. Addresses arrive pre-split into street, city, state and ZIP, so joins do not depend on an address parser. Throughput is your plan's rate limit rather than anything about the collector: 60 requests/minute on pay-as-you-go, up to 1,200 on the top tier.
Treat both Zestimates as one model's opinion rather than as market truth. Their value in a dataset is as a screening signal — the spread against asking price — not as a valuation.
This is the collector to be most careful with. Collecting publicly visible data is generally lawful in most jurisdictions, and courts have repeatedly declined to treat reading a public page as unauthorised access. Zillow's terms nonetheless explicitly prohibit automated collection and it has historically been willing to enforce them; listing photos and descriptions are copyrighted by the brokerage, and agent names are personal data. Get real advice before building a commercial product on it. None of this is legal advice — get some for your actual use case.
Can I collect rentals and sold properties?
Yes — status accepts for_sale, for_rent and sold.
What counts as a location?
What Zillow accepts: a city and state ("Austin, TX"), a ZIP code, or a neighbourhood name.
Is the Zestimate included?
When Zillow publishes it for the listing, yes, along with the rent Zestimate. Both are Zillow's own estimates, not ours.
Is there a free Zillow scraper API?
Every account gets $2 of credit every month with no card, which is about 2,000 delivered listings on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.
How much does one run cost?
Multiply the rows you actually receive by $0.001. A run capped at 500 listings — the maximum for this collector — costs $0.5 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and GET /v1/scraper/collectors returns the price your key actually pays.
Can I get sold prices as well as asking prices?
Yes — set status to recently sold. It is the status people forget and usually the most valuable, because it records what buyers actually paid rather than what sellers hoped for.
Why is the run cap so high?
Because real-estate questions are about markets, not samples. Five hundred listings per run means a small market fits in one call, which keeps request counts and rate-limit pressure low for a nightly sweep.
Run the Zillow scraper API now
$2 of free credit every month, no card. Your key returns its own prices from GET /v1/scraper/collectors.