Zestimate API: How to Get Zestimates Programmatically

August 3, 2026 · 7 min read

The Zestimate is the single most requested field in property data. Investors screen deals with it, lenders sanity-check collateral with it, and proptech products display it because users expect to see it. So it is no surprise that "Zestimate API" is one of the most common searches that leads developers to us.

Here is the short version: Zillow does not offer a public Zestimate API anymore, but you can still get Zestimates programmatically for any US address. This guide shows exactly how — and documents a gotcha that surprises almost everyone the first time: the Zestimate is often null for homes that are actively listed for sale.

What happened to Zillow's GetZestimate API?

Zillow used to run a public API program with a GetZestimate endpoint. Developers registered for a ZWSID key, called the endpoint with a property ID, and got the Zestimate back in XML. Zillow shut that program down in 2021 and moved data access to Bridge Interactive, its enterprise data platform, which requires an application, approval, and typically MLS affiliation.

For an individual developer, a small team, or even most mid-size proptech companies, that path is a non-starter. If you want the details on what replaced the public program, we cover it in Does Zillow have an API in 2026?

How to get Zestimates by address today

Third-party property data APIs fill the gap. APIllow returns the zestimate and rent_zestimate fields — along with 50+ other fields like price history, tax history, and school ratings — for any address, with a free tier of 50 requests per month.

One request, by street address:

# Get the Zestimate for an address curl -X POST https://api.apillow.co/v1/properties \ -H "x-api-key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"addresses": ["1874 Bromton Dr, Lyndhurst, OH 44124"]}'

The response includes the valuation fields alongside the rest of the property record:

{ "address": "1874 Bromton Dr, Lyndhurst, OH 44124", "status": "SOLD", "zestimate": 312400, "rent_zestimate": 2150, "last_sold_price": 289000, "price_history": [...], "tax_history": [...] }

If you work in Python, the 5-minute Python tutorial walks through the same flow with requests, including polling for large batches.

The gotcha: Zestimates are often null on active listings

This is the part almost no one documents. If you request an actively listed home — status FOR_SALE or FOR_RENT — the zestimate field frequently comes back null. The first assumption is always "the API is broken." It is not. Zillow suppresses the Zestimate on many active listings, showing the list price instead, and the underlying data reflects that: across our production traffic, active listings routinely return a null Zestimate while sold and off-market homes return a populated one.

The practical pattern for a robust integration:

Listing status Zestimate field Use this for valuation
FOR_SALE / FOR_RENT (active) Usually null price (the list price)
SOLD Populated zestimate + last_sold_price
OFF-MARKET Populated zestimate — this is where it shines

In code, that's a three-line fallback:

def valuation(prop): # Active listings: trust the list price; Zestimate is usually null if prop["status"] in ("FOR_SALE", "FOR_RENT"): return prop["price"] return prop["zestimate"] or prop["last_sold_price"]

If your workload is mostly off-market valuation — driving-for-dollars lists, direct-mail targeting, portfolio marks — the Zestimate is available exactly where you need it. If your workload is active-listing analysis, the list price is the better signal anyway.

Rent Zestimates work the same way

The rent_zestimate field is Zillow's estimated monthly rent. Rental investors use it for quick cash-flow screens: pull a batch of addresses, compute rent_zestimate * 12 / zestimate for a gross yield, and sort. Because both fields arrive in the same payload as beds, baths, square footage, and tax history, one API call per property covers a full first-pass underwrite.

How accurate is the Zestimate?

Zillow publishes its own error statistics: a median error rate of roughly 2% for on-market homes and roughly 7% for off-market homes. Two practical implications:

Batch Zestimates for thousands of addresses

Address lists come in batches, and the API accepts them that way — up to 1,000 properties per request. Send the batch, get a job_id, poll for results:

# Batch: up to 1,000 addresses per request curl -X POST https://api.apillow.co/v1/properties \ -H "x-api-key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"addresses": ["addr1", "addr2", "..."], "max_items": 1000}' # → {"job_id": "..."} — poll GET /v1/results/{job_id}

If the goal is a spreadsheet rather than an app, the Excel/CSV export guide turns this exact flow into a ready-to-use script.

What this costs

Zestimate lookups are priced like any other property lookup: the free tier includes 50 requests a month, and paid plans work out to roughly $0.002–$0.003 per property. The full breakdown — including how the math compares to enterprise data contracts — is in the pricing comparison.

Get Zestimates for any address

Free tier, no credit card. Your first Zestimate is one POST request away.

Get API Key

Related reading

Final takeaway

There is no public Zestimate API from Zillow, but Zestimates are still one API call away. Just build for the one quirk that matters: active listings usually return a null Zestimate — use the list price there, and let the Zestimate do its real job on off-market homes.