zestimate

zestimate is Zillow's Zestimate for the home: Zillow's own estimate of its market value, returned exactly as the home's Zillow page shows it at the time of the lookup.

FieldType
data.zestimatenumber or null

What it means

The Zestimate is Zillow's figure, made by Zillow. PropertiesAPI reads it from the public page and returns it in US dollars; it doesn't adjust it and doesn't make estimates of its own.

It comes back for listed and unlisted homes alike. For a home that isn't for sale, it is often the only value on the page, which is why PropertiesAPI keeps it in zestimate and leaves price null instead of mixing the two.

Zillow updates its estimates on its own schedule. A lookup returns the value shown at that moment, together with scrapedAt, so store the two together if you track the estimate over time.

Recorded example

Recorded lookup of a home for sale
{
  "homeStatus": "FOR_SALE",
  "price": 400000,
  "zestimate": 403100
}
Recorded lookup of a home that isn't listed
{
  "homeStatus": "OTHER",
  "price": null,
  "zestimate": 1032400
}
Recorded lookup of a home for sale
{
  "homeStatus": "FOR_SALE",
  "price": 549999,
  "zestimate": null
}

Values are copied from recorded lookups of public Zillow pages, with the other fields of data left out. They show the shape and typical values, not today's data for these homes.

When it is null

  • Zillow doesn't show a Zestimate for the home. In our recorded lookups that was common for land, small multi-family buildings, some condos, some new construction and apartment building rentals.
  • The field is null, never zero, when there is no estimate.

Read it in code

Send a Zillow link, a zpid or an address to GET /v1/zillow/property with your key in the x-api-key header, then read the field from data:

curl and jq
curl -sG "https://api.propertiesapi.com/v1/zillow/property" \
  -H "x-api-key: $PROPERTIESAPI_KEY" \
  --data-urlencode "url=https://www.zillow.com/homedetails/1704-Shelbourne-Dr-Austin-TX-78752/29412761_zpid/" \
  | jq '.data | {zestimate}'
Python
import os
import requests

r = requests.get(
    "https://api.propertiesapi.com/v1/zillow/property",
    params={"url": "https://www.zillow.com/homedetails/1704-Shelbourne-Dr-Austin-TX-78752/29412761_zpid/"},
    headers={"x-api-key": os.environ["PROPERTIESAPI_KEY"]},
    timeout=120,
)
r.raise_for_status()
home = r.json()["data"]
z = home["zestimate"]
print("Zestimate:", "not shown" if z is None else f"{z:,.0f}")
JavaScript (Node)
const url = "https://www.zillow.com/homedetails/1704-Shelbourne-Dr-Austin-TX-78752/29412761_zpid/";
const res = await fetch(
  `https://api.propertiesapi.com/v1/zillow/property?url=${encodeURIComponent(url)}`,
  { headers: { "x-api-key": process.env.PROPERTIESAPI_KEY } },
);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { data: home } = await res.json();
const z = home.zestimate;
console.log("Zestimate:", z == null ? "not shown" : z.toLocaleString("en-US"));

Common mistakes

  • Showing the Zestimate as an asking price. Label it as Zillow's estimate.
  • Filling a null Zestimate with the price or an average. Keep it null so users can tell an estimate from a gap.
  • Calling it your own valuation. It is Zillow's estimate, and Zillow is not affiliated with PropertiesAPI.

Zillow is a trademark of Zillow, Inc. PropertiesAPI is an independent service and is not affiliated with, endorsed by or sponsored by Zillow.

zestimate questions

Is there an official Zillow Zestimate API?+

Zillow retired its public Zestimate calls. PropertiesAPI is an independent service that returns the Zestimate shown on the public home page, in data.zestimate.

Why is zestimate null?+

Zillow doesn't show one for every home. Land, multi-family homes and some new construction often have none.

How fresh is the Zestimate?+

It is the value on the page when the lookup ran; scrapedAt says when that was.