Zillow property API

The Zillow property API is the zpid-keyed detail endpoint: hand it property ids and it returns each home-details page as one structured row — address, listing status, home type, price with currency, beds and baths, living area, lot size, year built, coordinates, description, last-sold figures, the recent price history, brokerage and MLS attribution, and photo URLs.

It fetches each page over the TLS tier without a browser and reads what Zillow actually server-renders. That last part matters for one field in particular: the zestimate and rent_zestimate are filled only when Zillow renders them into that page, and are left null otherwise rather than guessed. A zpid that no longer resolves comes back under failed and is never billed.

$0.003 per delivered property, up to 20 propertys per run. Nothing delivered means nothing charged.

How the Zillow property API works

You post a properties array. Each entry can be a bare zpid or a full /homedetails/ URL — both normalise to the same fetch, so the ids a discovery run already produced drop in without a cleanup pass.

Each property becomes one home-details fetch parsed into a flat row. Three behaviours shape how you should read the output:

Do not have zpids yet? Run a location through the Zillow search collector first — it returns both zpids and homedetails URLs, either of which this endpoint accepts.

Inputs

The only required input is properties, an array of up to 20 zpids or homedetails URLs. max_results caps how many the run fetches, which is a cheap guard when the array is assembled by another job. There is no country selector — Zillow is US-focused and the exit is chosen accordingly.

What one property looks like

Each property is one flat row. price pairs with currency, and last_sold_price with date_sold, so a sale is a fact you read rather than infer. living_area and lot_size each ship with their own unit field so square feet and acres never get silently mixed. photos holds the first image URLs and photo_count the total, letting you gauge listing completeness without fetching a single picture.

What the Zillow property API costs

$0.003 per delivered property ($3 per 1,000). Nothing delivered means nothing charged, and the $2 monthly free credit covers roughly 666 propertys here. Volume tiers take up to 30% off.

$0.003 per delivered property, $3 per 1,000. A 10,000-home watchlist refreshed weekly is $30 a week at list price, cheaper on a volume tier. The cost-control pattern here is the split: discover with the far cheaper Zillow search collector, and spend the $0.003 only on the zpids you decided are worth the full detail row.

zpids that fail to resolve are returned under failed and are not billed, so an ageing id set costs you coverage, not money. The free monthly allowance of $2 covers roughly 666 properties, and GET /v1/scraper/collectors reports the price your key pays.

Zillow property API vs Zillow's own data program

People search for a "Zillow API" expecting a public endpoint, but Zillow retired its public API program years ago. What remains is Bridge Interactive and the Zillow Group data feeds, and access to those is gated behind an application, an MLS or partner relationship and a data-licence agreement that dictates what you may store and display. It is built for brokerages syndicating listings, not for a team that wants price and history for a set of ids.

This collector reads the same public home-details page any visitor sees, so there is no application to be approved and no membership to hold — your QuantumProxies key is the only credential. The trade is that you receive the page's public fields, including the Zestimate only when Zillow chooses to render it, rather than a licensed back-end feed.

Versus scraping home-details pages yourself

One home-details page is easy to fetch. A steady stream of them is the actual engineering problem:

Handing the fetch over buys a stable schema and per-row billing. If you would rather run your own crawler and only need clean US exits beneath it, the residential proxies are the network this collector already uses.

What people build with it

Portfolio and comp valuation

Refresh a set of owned or watched zpids and read price, zestimate where present and price_history together to keep an internal valuation model current.

Days-on-market and price-cut tracking

Diff each week's price_history and status to catch the moment a listing cuts its price or moves to pending — the signal that usually precedes a deal.

Listing enrichment for a CRM

Turn a broker's zpid list into full records with beds, baths, living_area, year_built, coordinates and photos, without anyone re-keying a listing by hand.

Limits, accuracy and the legal bit

A single run takes up to 20 zpids; longer id lists are simply more runs, which parallelise up to your plan's rate limit — 60 requests a minute on pay-as-you-go and as high as 1,200 on the top tier. The description is capped at its first 1,500 characters, and unresolvable zpids come back under failed at no charge.

Legally: listing details are published for every visitor to see, and collecting public data is generally lawful in most jurisdictions, but Zillow's terms restrict automated access, US case law in this area keeps shifting, and what you do with the data matters as much as how you gathered it. None of this is legal advice — get some for your own situation.

FAQ

Is there a free Zillow API?

Not a public one any more — Zillow closed its open API, and today's access runs through Bridge Interactive or a partner data feed under a licence agreement. This collector instead reads the public home-details page, and comes with a $2 monthly allowance, roughly 666 properties at $0.003 each, with no card required.

Do I need a Zillow API key or partner account?

No. There is no Zillow registration, MLS membership or data-licence application involved. You authenticate with your QuantumProxies key alone, and the endpoint reads the same page a browser would load.

Does it return the Zestimate?

Only when Zillow server-renders it into that property's page. In that case it appears in zestimate and rent_zestimate; when the page does not carry it, those fields are null rather than an estimate we made up.

How do I get the zpids to send?

Run a city, neighbourhood or search URL through the Zillow search collector, which returns zpids and homedetails URLs, then pass either straight into this endpoint. The two are designed to be chained.

Related scrapers