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
| Query | Type | Required | Notes |
|---|---|---|---|
url | string | yes | Full Zillow URL: homedetails, b, community, or apartments |
status | enum | no | FOR_SALE (default), RECENTLY_SOLD, FOR_RENT |
extract_units | enum | no | disabled (default), all, for_sale, recently_sold, for_rent, off_market — for building URLs |
fields | string | no | Field projection (see Field projection) |
200 response
{ "data": { "zpid": "11026031", "address": {...}, "price": 295000, "...": "..." }, "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
| Query | Type | Required |
|---|---|---|
address | string | yes |
status | enum | no |
fields | string | no |
address should be the full street + city + state + zip. We geocode it upstream.
GET /v1/properties/{zpid}
Cost · 1 credit per call · failed calls are free
zpid-based lookup. Returns the full property record.
{ "data": { "zpid": "11026031", "...": "..." }, "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": 295000, "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": 305100, "rent_zestimate": 1850, "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/.../11026031_zpid/", "..."], "addresses": ["18 Zelma Dr, Greenville, SC 29617"], "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.