The public Zestimate API is dead. It died in September 2021 with the rest of Zillow’s Web Services API.

So how do you pull a Zestimate programmatically in 2026? You either have an MLS partnership (and even then, probably not), or you use a third-party REST wrapper.

This post is the working code, the response shape, the cache strategy, and the accuracy reality check.

What is in a Zestimate response

The Zestimate is Zillow’s automated home valuation. It is not a single number on its own. The full Zestimate cluster includes five fields most apps surface together.

FieldWhat it is
zestimateZillow’s estimated market value for the home, in USD.
rent_zestimateZillow’s estimated monthly rent if the home were rented.
tax_assessed_valueThe county tax assessor’s most recent valuation.
last_sold_priceThe price the home most recently sold for.
currencyCurrency code, currently always USD.

Tax-assessed value and last-sold price are not technically Zestimates. They are the comparison numbers most products show alongside the Zestimate, so wrappers tend to ship them in the same response.

The Zestimate API in 2026: your only real options

Two paths exist. The honest version of each.

Bridge Interactive is Zillow Group’s official RESO Web API. If you are an MLS-affiliated brokerage, an IDX vendor, or an approved technology partner, you can apply. Approval is days to weeks. The data is licensed RESO content. The cost is zero.

But the Zestimate is generally not in the feed. Zestimate is Zillow’s proprietary valuation, and Bridge is built around standardized MLS data. Even if you qualify, you usually do not get the field you came for.

Third-party REST wrappers like Zillapi expose the Zestimate as a sub-resource. Anyone can sign up. Pricing is per-credit. The data comes from Zillow’s public listing surface, not the licensed MLS feed.

If your goal is “I need Zestimates in my product this week”, the third-party wrapper is the answer.

How to pull a Zestimate via Zillapi

The endpoint is /v1/properties/{zpid}/zestimate. You need the Zillow zpid, which is the numeric property ID at the end of every Zillow URL. In https://www.zillow.com/homedetails/.../11026031_zpid/, the zpid is 11026031.

Terminal window
curl https://api.zillapi.com/v1/properties/11026031/zestimate \
-H "Authorization: Bearer $ZILLAPI_KEY"

The response:

{
"data": {
"zestimate": 305100,
"rent_zestimate": 1850,
"tax_assessed_value": 248000,
"last_sold_price": 211000,
"currency": "USD"
},
"request_id": "8f7a3b…"
}

One credit per successful response. Cached for 24 hours per zpid on our side, so a same-day repeat is essentially free.

How to get a Zestimate from just an address

If you do not have the zpid, hit the address resolver first.

import os, requests
BASE = "https://api.zillapi.com/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['ZILLAPI_KEY']}"}
# 1. Resolve address to zpid
prop = requests.get(
f"{BASE}/properties/by-address",
params={"address": "17 Zelma Dr, Greenville, SC 29617"},
headers=HEADERS,
timeout=60,
).json()["data"]
zpid = prop["zpid"]
# 2. Pull the Zestimate slice
z = requests.get(
f"{BASE}/properties/{zpid}/zestimate",
headers=HEADERS,
timeout=60,
).json()["data"]
print(f"Zestimate: ${z['zestimate']:,}")
print(f"Rent Zestimate: ${z['rent_zestimate']:,}/mo")

Two calls, two credits.

You can also collapse it into one call with field projection.

Terminal window
curl "https://api.zillapi.com/v1/properties/by-address?\
address=17+Zelma+Dr+Greenville+SC+29617&\
fields=zpid,zestimate,rentZestimate,taxAssessedValue"

Same data, half the round trips, one credit instead of two.

How to get a Zestimate via Bridge Interactive

For completeness, here is what the Bridge path looks like. Apply through your MLS, get approved, then query the Property resource via OData.

Terminal window
curl "https://api.bridgedataoutput.com/api/v2/<dataset>/listings?\$filter=ListingId eq '<id>'" \
-H "Authorization: Bearer $BRIDGE_TOKEN"

In practice, the Zestimate is not in the response for most Bridge partners. If you are pursuing Bridge specifically for Zestimates, talk to your MLS contact first. You may be wasting onboarding time.

Read the Bridge Interactive comparison for the full eligibility picture.

How accurate is the Zestimate, really

Zillow publishes accuracy stats on its Zestimate page and updates them roughly weekly. The numbers as of March 2026:

  • Nationwide median error: 1.74% for on-market homes.
  • Nationwide median error: 7.20% for off-market homes.
  • About 70% of Zestimates fall within 5% of the sale price for on-market homes.

The gap between on-market and off-market is the headline. Active listings sit in markets where Zillow has fresh comparable sales, photos, and seller-supplied details. Off-market homes get whatever public records and historical data are available, which is far less.

Use the Zestimate as a directional signal. For decisions that move money (lending, insurance, formal offers), you want a licensed AVM from a provider like ATTOM or CoreLogic. The Zestimate is good for filtering, ranking, and consumer-facing context. Not for closing.

How often Zestimates change

Zillow updates Zestimates on the order of days, not minutes. The documented refresh cadence has historically been daily for active markets and less frequent for thin ones.

Caching aggressively is safe and saves you credits.

A 24-hour TTL on your side is a good default. We cache 24 hours upstream too, so back-to-back hits within a day cost one credit total.

// App-side cache pattern
async function getZestimate(zpid) {
const cached = await redis.get(`zest:${zpid}`);
if (cached) return JSON.parse(cached);
const r = await fetch(
`https://api.zillapi.com/v1/properties/${zpid}/zestimate`,
{ headers: { authorization: `Bearer ${process.env.ZILLAPI_KEY}` } },
);
const { data } = await r.json();
await redis.setex(`zest:${zpid}`, 86400, JSON.stringify(data));
return data;
}

If your product needs intraday updates, talk to me. The honest answer is that the underlying data does not change that fast.

Batch Zestimates for many properties at once

For more than a handful of zpids, do not loop the single endpoint. Use the async batch endpoint and a webhook so you do not burn turns polling.

Terminal window
curl -X POST https://api.zillapi.com/v1/properties/batch \
-H "Authorization: Bearer $ZILLAPI_KEY" \
-H "content-type: application/json" \
-d '{
"urls": [
"https://www.zillow.com/homedetails/.../11026031_zpid/",
"https://www.zillow.com/homedetails/.../12000000_zpid/"
],
"maxItems": 500
}'

You get a job_id back. Register a webhook (see Webhooks for Zillow listing alerts) and we POST results to your endpoint when the job finishes.

Zestimate vs rent Zestimate for investor math

The two values answer different questions.

Zestimate: what would this home sell for today.

Rent Zestimate: what would this home rent for monthly today.

For investor analytics like cap rate, gross yield, or cash-on-cash return, you usually need both. Zillapi returns them in the same response so one credit covers the pair.

A small calculator example:

def gross_yield(z: dict) -> float:
if not z.get("rent_zestimate") or not z.get("zestimate"):
return 0.0
return (z["rent_zestimate"] * 12) / z["zestimate"]
# $1,850/mo rent on a $305k home is ~7.3% gross yield
print(round(gross_yield(z) * 100, 1), "%")

7.3% gross yield is a starting point, not a deal. You still need to subtract taxes, insurance, vacancy, and capex. But it tells you whether to dig further.

Common Zestimate edge cases

Some properties do not have a Zestimate. Here is when that happens and what to do.

New construction. Homes that just hit the market often have no Zestimate yet because Zillow has no comparable history for them. The Zestimate appears days to weeks after the listing goes live. Treat a missing value as “not yet computed”, not “broken”.

Manufactured homes. Mobile and manufactured homes have lower Zestimate coverage because the underlying public records data is thinner. Expect more null values. Fall back to last sold price or tax-assessed value when you need to render something.

Multi-unit buildings. Condos and townhomes get individual Zestimates per unit. Apartment buildings as a whole do not. If your zpid points at a building rather than a unit, you may get a partial response.

Newly off-market homes. When a home goes from for-sale to off-market, the Zestimate jumps because the model switches from on-market mode (1.74% median error) to off-market mode (7.20% median error). Expect a discontinuity. Consider holding the on-market value in your cache for 30 days.

Recently sold homes. The Zestimate often lags the actual sale price by several days while Zillow ingests the recording. If you see a Zestimate that conflicts with a confirmed sale, trust the sale.

Handle each case with a graceful default. The model will try to do the right thing.

Common errors and what they mean

Error codeWhat it means
not_foundThe zpid does not exist in Zillow’s index. Double-check the URL.
upstream_timeoutZillow took too long. Retry with backoff, usually transient.
upstream_errorZillow returned an unexpected shape. We log these. Retry once.
rate_limitedYou exceeded the 200 req/min default. Back off and resume.

The full error list lives in the Errors reference.

Frequently asked questions

Is there an official Zestimate API in 2026?

No. Zillow retired the public Web Services API (which included a Zestimate endpoint) in September 2021. The Zestimate is also generally not exposed through Bridge Interactive. The only programmatic path today is a third-party wrapper.

How accurate is the Zestimate?

Zillow publishes a nationwide median error rate of 1.74% for on-market homes and 7.20% for off-market homes as of March 2026. About 70% of Zestimates fall within 5% of the eventual sale price for on-market homes. Treat it as a directional signal, not a price.

How often does the Zestimate update?

Zillow updates Zestimates on the order of days, not minutes. Active markets refresh roughly daily. Thinly traded markets update less often. A 24-hour cache on your side is safe.

What is the difference between Zestimate and rent Zestimate?

The Zestimate is what Zillow estimates a home would sell for today. The rent Zestimate is what it estimates the home would rent for monthly. Investors usually need both for cap rate and gross yield math.

Can I use the Zestimate for lending or appraisal decisions?

No. Zillow itself recommends against this and the median error rate is too wide for transactional use. For decisions that move money you want a licensed AVM from a provider like ATTOM or CoreLogic, not a Zestimate.

How do I get a Zestimate for a property when I only have an address?

Look up the zpid first via an address resolver (Zillapi exposes this at /v1/properties/by-address). Then call the Zestimate sub-resource. Or pass the address directly with field projection to do it in one round trip.

How to handle missing or stale Zestimates in your UI

If your product surfaces Zestimates to end users, you need to think about what happens when the value is null, stale, or wildly off.

Null Zestimate. Show “Not available” rather than $0 or a placeholder. New construction, manufactured homes, and properties Zillow has poor coverage for will return null. Your UI should not pretend it is $0.

Stale Zestimate. A property listed at $400k with a Zestimate of $250k is probably stale, not wrong. The seller may have priced above estimate. Show both side by side and let the user judge.

On-market vs off-market. When a home moves from active to off-market, the Zestimate jumps because the model changes. Display the as-of date prominently so users can see when the number was last updated.

Wide confidence intervals. Some Zestimates carry a high vs low range. Display the range, not just the point estimate, when the spread is more than 10 percent of the value. Honesty about uncertainty builds trust.

A small detail: link the Zestimate value back to the Zillow Zestimate page so curious users can read the methodology. Most product teams skip this. The ones that include it get fewer support tickets about “why is this number wrong”.

Get started

Sign up for Zillapi and pull a Zestimate in your first minute. 100 free credits at signup, no card required.

Pick a zpid from any Zillow URL, paste the curl above, and you will have a Zestimate response on screen before you finish reading this paragraph.


Zillapi is an independent service and is not affiliated with, endorsed by, or sponsored by Zillow Group, Inc. “Zillow” and “Zestimate” are registered trademarks of Zillow Group, Inc. Use of those marks on this site is descriptive (nominative fair use). Read our full trademark posture.