Skip to content

Properties

Single-property lookups by URL, address, or zpid. Returns the full property record.

GET /v1/properties/by-url

Cost · 1 credit per record returned (minimum 1) · failed calls are free

QueryTypeRequiredNotes
urlstringyesFull Zillow URL: homedetails, b, community, or apartments
statusenumnoFOR_SALE (default), RECENTLY_SOLD, FOR_RENT
extract_unitsenumnodisabled (default), all, for_sale, recently_sold, for_rent, off_market, for building URLs
fieldsstringnoField projection (see Field projection)

200 response

{
"data": { "zpid": "{zpid}", "address": {...}, "price": 750000, "...": "..." },
"request_id": "..."
}

When extract_units != disabled and the URL is a multi-unit building, data is an array.

Errors: invalid_url, invalid_status, invalid_extract_units, not_found, upstream_timeout, upstream_error.

GET /v1/properties/by-address

Cost · 3 credits per successful call (we resolve the address upstream) · failed calls are free

QueryTypeRequired
addressstringyes
statusenumno
fieldsstringno

address should be the full street + city + state + zip. We geocode it upstream.

GET /v1/properties/{zpid}

Cost · 1 credit per successful lookup — caching (24h TTL) is a transparent optimization: same price, faster responses · failed calls are free

zpid-based lookup, cache-first (24h TTL). Returns the full property record. Caching is an internal performance optimization and does not change the price — every successful lookup costs 1 credit, whether served from cache or freshly fetched. To see the exact credits billed for any request, read the X-Credits-Charged response header, or correlate the response’s request_id to its row in /v1/usage (credits_charged):

{
"data": { "zpid": "{zpid}", "...": "..." },
"request_id": "..."
}

Sub-resources

Each sub-resource returns just the slice you need, no need to parse a 5 MB detail blob if you only want photos or schools.

GET /v1/properties/{zpid}/photos

Cost · 1 credit per call · failed calls are free

{
"data": [
{
"url": "https://photos.zillowstatic.com/fp/.../p_d.jpg",
"caption": "",
"subjectType": null,
"mixedSources": {
"jpeg": [
{ "url": "...", "width": 192 },
{ "url": "...", "width": 384 },
{ "url": "...", "width": 768 },
{ "url": "...", "width": 1536 }
],
"webp": [{ "url": "...", "width": 192 }, { "url": "...", "width": 1536 }]
}
}
],
"meta": { "count": 35, "photo_count": 35, "has_3d": false, "has_video": false }
}

Top-level url is the default-resolution JPEG. mixedSources.jpeg and mixedSources.webp give you each photo at multiple widths so you can pick the smallest size that fits your UI.

GET /v1/properties/{zpid}/price-history

Cost · 1 credit per call · failed calls are free

{
"data": [
{ "date": "2024-08-15", "event": "Listed for sale", "price": 750000, "priceChangeRate": 0 },
{ "date": "2018-03-22", "event": "Sold", "price": 211000, "priceChangeRate": 0.18 }
]
}

GET /v1/properties/{zpid}/tax-history

Cost · 1 credit per call · failed calls are free

{ "data": [{ "time": 1704067200000, "taxPaid": 2841, "value": 248000, "valueIncreaseRate": 0.04 }], "meta": {...} }

GET /v1/properties/{zpid}/schools

Cost · 1 credit per call · failed calls are free

{ "data": [{ "name":"Mountain View Elementary", "rating":7, "distance":0.4, "type":"public", "level":"Elementary" }], "meta": {...} }

GET /v1/properties/{zpid}/nearby

Cost · 1 credit per call · failed calls are free

Comparable nearby listings (top ~12 from the upstream).

GET /v1/properties/{zpid}/agent

Cost · 1 credit per call · failed calls are free

{
"data": {
"agentName": "...", "agentEmail": "...", "agentPhoneNumber": "...", "agentLicenseNumber": "...",
"brokerName": "...", "brokerPhoneNumber": "...", "attributionInfo": {...}
}
}

GET /v1/properties/{zpid}/zestimate

Cost · 1 credit per call · failed calls are free

{
"data": {
"zestimate": 765000, "rent_zestimate": 3200,
"tax_assessed_value": 248000, "last_sold_price": 211000, "currency": "USD"
}
}

GET /v1/properties/{zpid}/open-houses

Cost · 1 credit per call · failed calls are free

{
"data": [{ "startTime": "2026-05-04T18:00:00Z", "endTime": "2026-05-04T20:00:00Z" }],
"meta": { "tour_eligibility": {...} }
}

GET /v1/properties/{zpid}/facts

Cost · 1 credit per call · failed calls are free

Full resoFacts blob (MLS attribute set, appliances, flooring, parking, view, etc.).

POST /v1/properties/batch

Cost · 1 credit per record returned (settled when the async job completes) · failed calls are free

Async. Up to 500 entries per job.

Body

{
"urls": ["https://www.zillow.com/homedetails/.../{zpid}_zpid/", "..."],
"addresses": ["350 5th Ave, New York, NY 10118"],
"propertyStatus": "FOR_SALE",
"extractBuildingUnits": "disabled",
"maxItems": 500
}

202 response

{ "data": { "job_id": "8c2a...", "status": "running" }, "request_id": "..." }

Then poll GET /v1/jobs/{job_id} or use a webhook.