If you've tried to get data out of Zillow recently, you've probably found that there's no simple public API anymore. Zillow's old public endpoints (GetSearchResults, GetZestimate and friends) were shut down in 2021, and today Zillow Group's data APIs live on the Bridge platform, which needs partner approval.
So most people end up writing a scraper. That works until the page layout changes, or the site starts blocking you, and then you're maintaining a scraper instead of building your project.
In this post I'll show a different route: calling API.SH, which turns public Zillow pages into clean JSON. You'll:
- Search homes for sale, for rent or recently sold, with filters
- Get one property's details, price history, tax history and Zestimate
- Page through all the results
- Export everything to CSV (or straight into Google Sheets)
Full disclosure: I'm building API.SH. Every account gets 1,000 free credits a month, which is plenty to follow along.
Setup
Sign up at api.sh, copy your API key from the dashboard, and install the Python SDK:
pip install apish-sdk export APISH_API_KEY="ash_live_..." 1. Search listings
The search endpoint takes either a location plus filters, or any Zillow search url you've already set up in the browser.
from apish import Apish apish = Apish() # reads APISH_API_KEY res = apish.zillow.search( location="Austin, TX", status="for_sale", min_price="300000", max_price="500000", beds="3", baths="2", ) print(res["total_results"], "homes") for h in res["homes"][:5]: print(h["address"], h["price"], h["beds"], "bd", h["baths"], "ba", h["area"], "sqft", "Zestimate:", h["zestimate"]) Each home comes back with the same fields every time: zpid, address parts, price and unformatted_price, beds, baths, area, home_type, zestimate, days_on_zillow, broker, coordinates, a photo and the listing url.
Swap status to "for_rent" or "sold" for rentals or recent sales. The filter panel's other options (keywords, HOA fee, parking, pool, waterfront, 55+ communities, open house and more) are parameters too; the docs page lists them all.
2. One property: details, price history and Zestimate
Pass the listing URL from a search result:
home = res["homes"][0] p = apish.zillow.property(url=home["url"]) print(p["address"]["streetAddress"], p["city"], p["state"]) print("Price:", p["price"], "Zestimate:", p["zestimate"], "Rent Zestimate:", p["rentZestimate"]) print("Built:", p["yearBuilt"], "Lot:", p["lotSize"], "Tax assessed:", p["taxAssessedValue"]) for event in p.get("price_history") or []: print(event) The property response also carries tax_history, comparables, nearby schools and nearby homes.
If you want the Zestimate over time, there's a separate endpoint for the value chart:
hist = apish.call("/zillow/v1/zestimate-history", {"url": home["url"], "metric": "home_value", "period": "5y"}) metric can also be rent, tax_paid, tax_assessment or listing_price.
3. Page through every result
Search results come in pages. Pass next_page back as page until it's null, or let the SDK do it:
all_homes = [] for page in apish.paginate("/zillow/v1/search", {"location": "Austin, TX", "status": "sold"}, max_pages=10): all_homes.extend(page["homes"]) print(len(all_homes), "sold homes") 4. Export to CSV
Every endpoint can return CSV instead of JSON:
csv_text = apish.zillow.search(location="Austin, TX", status="for_rent", options={"output": "csv"}) open("austin_rentals.csv", "w").write(csv_text) If you'd rather not write code at all, the same calls work from the Google Sheets add-on, Zapier, Make and n8n.
Agents, too
If you're building with Claude or ChatGPT, the API.SH MCP server lets your agent call these endpoints directly, so "find 3-bed homes under $500k in Austin and compare their Zestimates" just works.
What it costs
You pay per call that runs, and calls that fail on our side are free. With 1,000 free credits a month you can try every example above many times over. Pricing is at api.sh/pricing.
A note on using the data
API.SH only reads public pages (nothing behind a login). Whether a particular use of Zillow data is allowed depends on Zillow's terms and your local law, so check both for your use case.
The same approach works for the other sites on API.SH: Redfin, Realtor.com, Rightmove, Zoopla, Idealista and hundreds more, all returning the same kind of JSON. The full list is in the catalog, and the Zillow page is at api.sh/zillow-api.
Questions or a site you'd like added? Drop a comment.
