Zillow Property API
$0.005 / property
$5.00 / 1K · pay per delivered property
A Zillow property API for a list of zpids: address split into city, state and ZIP, listing status and home type, price, beds and baths, living area and lot size with units, year built, coordinates, the listing description, last-sold price and date, the recent price history, brokerage and MLS id, photo count and photo URLs. Pass zpids or /homedetails/ URLs, one row per property.
$0.005 per delivered property · $2 free every month · Failed runs never billed
What it does
What a Zillow property API does
Where the Zillow search collector returns the board, this one returns the dossier: everything the home-details page holds for a single property, including the fields a results card omits — the price_history array of {date, price, event} events, last_sold_price with date_sold, year_built, the mls_id and brokerage, and the listing description up to its first 1500 characters.
The two estimate fields are handled by refusal, not by guessing. zestimate and rent_zestimate are populated only when Zillow server-renders them for that page and are left null otherwise — they are Zillow's figures, never ours, and never back-filled from a nearby number. Living area and lot size each carry their own unit field, so a sqft value is never confused with an m² one.
Inputs
The whole request. Anything you leave out falls back to the default shown in the catalog.
| Input | Type | Required | What it does |
|---|---|---|---|
properties | array | yes | zpids or /homedetails/ URLs (zillow_search returns both). |
max_results | integer | no | How many properties to deliver at most (1–20). You pay only for delivered properties. |
Outputs — 54 fields, one row per property
What one property looks like
Every delivered property carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.
| Field | Type | What it holds |
|---|---|---|
zpid | string | Zillow property id. |
url | string | Home-details URL. |
address | string · nullable | Street address. |
city | string · nullable | City. |
state | string · nullable | State. |
zipcode | string · nullable | ZIP. |
status | string · nullable | Listing status (FOR_SALE, SOLD…). |
home_type | string · nullable | SINGLE_FAMILY, CONDO… |
price | number · nullable | Listing price. |
currency | string · nullable | Price currency. |
zestimate | number · nullable | Zestimate when server-rendered. |
rent_zestimate | number · nullable | Rent Zestimate when server-rendered. |
beds | number · nullable | Bedrooms. |
baths | number · nullable | Bathrooms. |
living_area | number · nullable | Living area. |
living_area_unit | string · nullable | sqft/m². |
lot_size | number · nullable | Lot size value. |
lot_size_unit | string · nullable | Lot size unit. |
year_built | integer · nullable | Year built. |
latitude | number · nullable | Latitude. |
longitude | number · nullable | Longitude. |
description | string · nullable | Listing description (first 1500 chars). |
last_sold_price | number · nullable | Last sold price. |
date_sold | string · nullable | Last sold date. |
price_history | object[] | Recent price events ({ date, price, event }). |
brokerage | string · nullable | Listing brokerage. |
mls_id | string · nullable | MLS id. |
photo_count | integer · nullable | Total photos on the listing. |
photos | string[] | First photo URLs. |
country | string · nullable | Country code as Zillow states it (USA). |
neighborhood | string · nullable | Neighbourhood name. |
time_zone | string · nullable | IANA time zone of the property. |
property_type | string · nullable | Property type in words, e.g. "Single Family Residence". |
listing_type | string · nullable | How it is listed: For Sale by Agent, For Sale by Owner, New Construction, Foreclosure, Auction, Coming Soon, Pending. |
mls_status | string · nullable | Status as the MLS reports it (Active, Pending…). |
mls_name | string · nullable | Name of the MLS the listing comes from. |
listing_updated | string · nullable | When the listing was last updated at the source (YYYY-MM-DD HH:MM:SS). |
listing_contact_phone | string · nullable | Phone number the listing publishes for enquiries. |
lot_size_sqft | number · nullable | Lot size in square feet. |
price_per_sqft | number · nullable | Price per square foot. |
days_on_zillow | integer · nullable | Days on Zillow. |
price_change | number · nullable | Latest price change; negative on a price cut. |
price_change_date | string · nullable | Date of that change (YYYY-MM-DD). |
baths_full | integer · nullable | Full bathrooms. |
baths_half | integer · nullable | Half bathrooms. |
heating | string · nullable | Heating as listed. |
cooling | string · nullable | Cooling as listed. |
parking | string · nullable | Parking as listed, e.g. "2 Attached Garage spaces". |
hoa | string · nullable | HOA dues as listed, when stated. |
highlights | string[] · nullable | Short highlights Zillow extracts from the listing. |
open_houses | object[] · nullable | Scheduled open houses: start, end. |
virtual_tour_url | string · nullable | 3D home tour URL. |
is_showcase | boolean | True for a Zillow Showcase listing. |
image | string · nullable | Main photo URL. |
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_property/run \
-H "Authorization: Bearer $QD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"properties":["29423772"],"max_results":1}'
Example response
$ curl $QD/zillow_property/run \
-H "Authorization: Bearer $QD_API_KEY" \
-d '{"properties": ["29423772"], "max_results": 1}'
{ "status": "done", "count": 1,
"results": [
{
"zpid": "…",
"url": "…",
"address": "…",
"city": "…" } ],
"cost": 0.005 }
# 1 property × $0.005 · nothing delivered, nothing charged
Try it
Zillow property details, running now
Change the input and run it against the live collector — nothing to install, no sign-up.
Run it from your own code, on your own inputs
Same collector, same rows — $2 of free API credit every month, no card.
Pricing
Zillow Property API pricing
$0.005 per delivered property. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 400 properties 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.
What people build with the Zillow property API
Three shapes of work this endpoint was designed around.
Comp dossiers
Resolve zpids from a Zillow search into full records with price history and last-sold data for a comp set.
Valuation inputs
Feed beds, baths, living area, year built and coordinates into your own model instead of a single estimate.
Listing archives
Snapshot description, status, brokerage and photos for a watchlist of properties over time.
Zillow Property API versus rolling your own
The differences that actually cost time when you build this in-house.
| DIY scraper | This collector | |
|---|---|---|
| Coverage | One field row from search | The full home-details record |
| Zestimate | Presented as a fact | Only when Zillow renders it, else null |
| Units | A bare number | Living area and lot size each with their unit |
What people search for
Live autocomplete demand around Zillow property details, pulled with our own Keyword ideas collector.
Sources and standards
The platform documentation and standards this collector is built against — check any claim on this page against the primary source:
What do I pass — a zpid or a URL?
Either a Zillow property id or a full /homedetails/ URL; the collector reads the zpid from the URL. The Zillow search collector returns both, so its rows feed straight into this one.
Is the Zestimate always included?
Only when Zillow server-renders it on the page. When it does, zestimate and rent_zestimate are filled with Zillow's own numbers; when it does not, they stay null rather than being estimated on our side.
Do I get the full price history?
You get the recent price events the page publishes as price_history — each with its date, price and event type — along with the discrete last_sold_price and date_sold fields.
Is there a free Zillow property API?
Every account gets $2 of credit every month with no card, which is about 400 delivered properties on this endpoint at $0.005 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.005. A run capped at 20 properties — the maximum for this collector — costs $0.1 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.
Run the Zillow property API now
$2 of free credit every month, no card. Your key returns its own prices from GET /v1/scraper/collectors.
