Quickstart
1. Sign in and create a key
Sign in with your email. We’ll send a magic link, no passwords. Once you land on the dashboard, go to API keys → Create new key. Copy the plaintext that appears. You will not see it again.
Keys look like zk_AbCdEf... and act as bearer tokens.
2. Make your first call
Get a single property by URL:
curl https://api.zillapi.com/v1/properties/by-url \ -H "Authorization: Bearer $ZILLOW_API_KEY" \ --data-urlencode "url=https://www.zillow.com/homedetails/350-5th-Ave-New-York-NY-10118/{zpid}_zpid/" \ -Gconst res = await fetch( `https://api.zillapi.com/v1/properties/by-url?url=${encodeURIComponent(zillowUrl)}`, { headers: { authorization: `Bearer ${process.env.ZILLOW_API_KEY}` } });const { data } = await res.json();console.log(data.zpid, data.address, data.price);import os, requestsr = requests.get( "https://api.zillapi.com/v1/properties/by-url", params={"url": zillow_url}, headers={"Authorization": f"Bearer {os.environ['ZILLOW_API_KEY']}"}, timeout=60,)r.raise_for_status()print(r.json()["data"]["zpid"])req, _ := http.NewRequest("GET", "https://api.zillapi.com/v1/properties/by-url?url="+url.QueryEscape(zillowURL), nil)req.Header.Set("Authorization", "Bearer " + os.Getenv("ZILLOW_API_KEY"))res, _ := http.DefaultClient.Do(req)A successful response:
{ "data": { "zpid": "{zpid}", "address": { "streetAddress": "350 5th Ave", "city": "New York", "state": "NY", "zipcode": "10118" }, "price": 750000, "bedrooms": 3, "bathrooms": 2, "livingArea": 1450, "yearBuilt": 1998, "homeType": "SINGLE_FAMILY", "homeStatus": "FOR_SALE", "latitude": 40.748, "longitude": -73.985, "zestimate": 765000, "rentZestimate": 1850 }, "request_id": "8f7a3b..."}3. Search for listings
curl https://api.zillapi.com/v1/listings/for-sale \ -H "Authorization: Bearer $ZILLOW_API_KEY" \ -H "content-type: application/json" \ -d '{ "filters": { "status": "for_sale", "bbox": { "west": -122.55, "south": 37.70, "east": -122.35, "north": 37.85 }, "price": { "min": 500000, "max": 1500000 }, "beds": { "min": 2 } }, "maxItems": 50 }'Up to 50 results return inline. For more, set async: true and poll
the job_id (see Async jobs) or register a webhook.
4. Get sub-resources
The detail response is large. If you only want photos:
curl https://api.zillapi.com/v1/properties/{zpid}/photos \ -H "Authorization: Bearer $ZILLOW_API_KEY"Or just the Zestimate:
curl https://api.zillapi.com/v1/properties/{zpid}/zestimate \ -H "Authorization: Bearer $ZILLOW_API_KEY"Most calls cost 1 credit; address-based property lookups cost 3. New accounts get 100 free credits at signup. See Pricing for the full per-endpoint breakdown and Rate limits for per-minute caps.
Next
- Zillow API, the complete guide
- Authentication, key rotation
- Async jobs, for batches and large searches
- Webhooks, replace polling
- API reference, every endpoint, every field