Quickstart
Your first Zillow lookup. Paste a Zillow link or an address, get the listing back as JSON.
1. Get a key
Sign in with your email and create a key on your dashboard. The free plan includes 50 free lookups (a one-time trial) with no card. Keep the key on your server. Don't ship it in browser code.
2. Make a call
Send a Zillow property link as url. Pick your language; every example reads your key from the PROPERTIESAPI_KEY environment variable, and the dashboard shows the same code with your key filled in:
export PROPERTIESAPI_KEY="your-key"
curl -G "https://api.propertiesapi.com/v1/zillow/property" \
-H "x-api-key: $PROPERTIESAPI_KEY" \
--data-urlencode "url=https://www.zillow.com/homedetails/2640-Steiner-St-San-Francisco-CA-94115/15073305_zpid/"Or send a plain address. We find the matching Zillow property first:
curl -G "https://api.propertiesapi.com/v1/zillow/property" \
-H "x-api-key: $PROPERTIESAPI_KEY" \
--data-urlencode "address=2640 Steiner St, San Francisco, CA 94115"A live lookup takes typically 6 seconds, up to about 20. Set a client timeout of at least 120 seconds: an occasional lookup takes longer. Repeat lookups of the same home within 24 hours come from our cache and are free. The x-cache header says HIT or MISS.
3. Read the response
You get { data, meta }. data is the property: homeStatus, price, zestimate, rentZestimate, beds, baths, livingArea, photos, daysOnZillow, priceHistory, taxHistory, brokerName and more. meta has credits, cached and fetched_at. See every field on the property endpoint page.
4. Handle nulls
If Zillow doesn't show a field for a property, it's null. A home that isn't listed has no price. Some homes have no zestimate. Check for null before you use a value, and don't treat it as zero.
5. Handle errors
400 missing_paramor400 bad_param: send exactly one validurloraddress.404 not_found: no Zillow property matched. Check the address, or send the Zillow URL instead.502 upstream_erroror504 upstream_timeout: the live fetch didn't work this time. Retry with backoff. You aren't billed.503 upstream_busy: wait forretry-afterseconds.
All codes are on the overview.
6. Go bulk
Send up to 50 URLs or addresses in one request. Each result comes back in data with its own ok flag:
curl "https://api.propertiesapi.com/v1/zillow/batch" \
-H "x-api-key: $PROPERTIESAPI_KEY" \
-H "content-type: application/json" \
--max-time 300 \
-d '{"items":["https://www.zillow.com/homedetails/2640-Steiner-St-San-Francisco-CA-94115/15073305_zpid/","130 Water St APT 12D, New York, NY 10005"]}'Next steps
- Browse the endpoints in the sidebar, or import openapi.json into Postman.
- Language guides: JavaScript, Python and Google Sheets.
- Moving from the retired Zillow API? Read the migration guide.
Data is provided as-is, as shown on public Zillow pages, without any guarantee of accuracy or completeness. Zillow is a trademark of Zillow, Inc. PropertiesAPI is an independent service and is not affiliated with, endorsed by or sponsored by Zillow.
Related guides
- Zillow API address lookup: avoid the wrong property
Build safer Zillow address lookups with unit numbers, identity checks, and explicit handling for ambiguous property matches.
- Zillow property IDs: when to use a ZPID lookup
Learn when to use a Zillow property ID, URL, or address, and how to preserve property identity across API requests and exports.
- MLS Feeds vs. Zillow Property Lookups: Choose the Right Data Connection
What an MLS API is, how listing feed access is granted through each MLS, and when a known-property Zillow lookup fits better. A sourced decision matrix for developers.