# Zillow Listings Scraper API

> Scrape Zillow listings via API: search by city, ZIP, coordinates, polygon, address or MLS id for sale, rent or sold homes, 60+ filters. JSON or CSV.

- URL: https://everydata.io/zillow-real-estate-listings-api
- Updated: 2026-09-30
- Publisher: everydata.io (https://everydata.io)

Every listing search on Zillow – a city, a ZIP code, a drawn polygon, a radius around a point – can be reproduced as an API call, so you can scrape Zillow search results without running a browser. The everydata.io Zillow Listings Scraper API, currently in beta, returns the listing cards for a location with the same filters the site offers: for sale, for rent or recently sold, price and size ranges, home types, pools, garages, views, school filters and pet rules for rentals. Results come back paged as JSON, or as CSV when you would rather open them in a spreadsheet.

## Key facts

- Platform: [Zillow API](https://everydata.io/apis/zillow) (beta)
- Main endpoint: `GET /zil/search`
- Quota: A call to the Zillow API counts as 2 requests against the monthly quota.
- Pricing: 100 free requests a month; paid plans from €30 a month for 5,000 requests (€1.00–€6.00 per 1,000 requests). One quota is shared across all 35 platforms; failed requests (5xx, blocked pages) are not counted.

## What you get

Each entry in results is a listing card: zpid, streetAddress, city, state, zipcode, latitude and longitude, price and currency, bedrooms, bathrooms and livingArea, homeType and homeStatus, daysOnZillow and timeOnZillow, plus zestimate, rentZestimate and taxAssessedValue where Zillow has them. Flags such as isZillowOwned, isPremierBuilder, isShowcaseListing, isPreforeclosureAuction and listing_sub_type (is_FSBA, is_FSBO …) describe the listing type, and imgSrc gives the hero photo.

Paging metadata is explicit: resultsPerPage (41 in the example), totalPages and totalResultCount. Sorting follows Zillow's own options via sortSelection – priorityscore (Zillow's default relevance), days (newest), priced / pricea (price descending / ascending), beds, baths, size, lot, zest and zesta – and doz restricts to listings added in the last 1, 7, 14, 30, 90 days or 6 to 36 months. Five ways to define the search area are available: location text, lat/long radius, polygon, single address and MLS number.

- Listing cards with zpid, address, coordinates, price, beds, baths, livingArea, homeType, homeStatus
- zestimate, rentZestimate and taxAssessedValue on every card where available
- status forSale (default), forRent or recentlySold; listing_type by_agent or by_owner_other
- Range filters: price, beds, baths, sqft, lotSize, built year, HOA, monthly payment, parking spots, GreatSchools rating
- Boolean filters: isSingleFamily, isCondo, isTownhouse, isMultiFamily, hasPool, hasGarage, isWaterfront, isNewConstruction, onlyPriceReduction …
- Rental filters: onlyRentalPetsAllowed, onlyRentalCatsAllowed, onlyRentalLargeDogsAllowed, onlyRentalIncomeRestricted
- output=json (default) or output=csv; paging via page with totalPages and totalResultCount

## How it works

Call GET /zil/search with location – an address, neighbourhood, city or ZIP – and any filters you need. The example asks for single-family homes for sale in Houston, TX with at least three bedrooms under $300,000, sorted by newest. The response is shortened to one listing; a real page carries about 40.

```bash
curl -s "https://api.everydata.io/zil/search?location=Houston%2C+TX&status=forSale&price_max=300000&beds_min=3&isSingleFamily=true&sortSelection=days&page=1" \
  -H "x-api-key: YOUR_API_KEY"
```

Response (shortened):

```json
{
  "responseStatus": "PAGE_FOUND",
  "responseMessage": "Page successfully found!",
  "results": [
    {
      "zpid": 28253016,
      "streetAddress": "15626 Laurel Heights Dr",
      "city": "Houston",
      "state": "TX",
      "zipcode": "77084",
      "country": "USA",
      "latitude": 29.85,
      "longitude": -95.68,
      "price": 275000,
      "priceForHDP": 275000,
      "currency": "USD",
      "bedrooms": 3,
      "bathrooms": 2,
      "livingArea": 1850,
      "homeType": "SINGLE_FAMILY",
      "homeStatus": "FOR_SALE",
      "homeStatusForHDP": "FOR_SALE",
      "daysOnZillow": 5,
      "timeOnZillow": 432000000,
      "zestimate": 280100,
      "rentZestimate": 2100,
      "taxAssessedValue": 240000,
      "listing_sub_type": {
        "is_FSBA": true
      },
      "isZillowOwned": false,
      "isPremierBuilder": false,
      "isShowcaseListing": false,
      "imgSrc": "https://photos.zillowstatic.com/fp/1.jpg"
    }
  ],
  "resultsPerPage": 41,
  "totalPages": 20,
  "totalResultCount": 812
}
```

Geographic alternatives use the same filters and return the same shape. GET /zil/search-by-coordinates takes lat, long and d (the diameter in miles, e.g. 0.5) for a radius around a point. POST /zil/search-by-polygon-v2 accepts a JSON body with polygon as an array of [lat, lng] pairs – built for long boundaries such as school districts or drive-time isochrones. GET /zil/search-by-address returns the full property object for one street address, and GET /zil/search-by-mls resolves an MLS number to its Zillow record.

Paging is straightforward: repeat the call with page=2, 3 … until page equals totalPages. Zillow limits any single search to about 20 pages, so for dense markets narrow the area (ZIP instead of city, or a polygon) or split by price bands to see everything. Pass output=csv to receive the same results as a CSV file for analysts; xlsx is listed by Zillow's interface but is not supported here – convert the CSV instead.

Statuses map to Zillow's tabs: forSale is the default, forRent switches to rental listings (where the rental-only filters apply and price is the monthly rent), recentlySold returns closed sales with the sold price.

## What teams build with this

### Market monitoring dashboards

Pull all for-sale and recently-sold listings per ZIP every night to track inventory, median asking price, days on market and price cuts (onlyPriceReduction=true).

### Buyer and investor alerts

Save a filter set – price ceiling, beds, hasPool, isNewConstruction – and notify users about listings with doz=1 that match, including the hero photo and Zestimate gap.

### Rental sourcing

Query status=forRent with pet and income filters to list available rentals around a workplace using search-by-coordinates, then rank by rent versus rentZestimate.

### Territory analysis with polygons

Brokerages and proptech teams post custom polygons – a farm area, a school zone – to count active listings and estimate market share per agent via the MLS attribution on each property.

## Pricing

Each results page – about 40 listings – is one request (2 quota units), in JSON or CSV. Covering 100 ZIP codes with two pages each per day is roughly 6,000 requests or 12,000 units a month, which fits Production (50,000 units, €80); a Starter plan (5,000 units, €30) suits a handful of neighbourhoods. Polygon, coordinate and address searches cost the same as a location search, and Zillow-side 5xx errors are never billed.

## FAQ

### What can I pass as location?

A street address, a neighbourhood, a city such as "Houston, TX" or a ZIP code. For a radius use search-by-coordinates with lat, long and d; for an arbitrary shape use search-by-polygon-v2.

### How many results are on a page and how deep can I page?

Around 40 listings per page (resultsPerPage tells you the exact number). totalPages caps at about 20, so narrow the area or add filters for large markets.

### Can I export to Excel?

Set output=csv to receive the results as CSV, which Excel and Google Sheets open directly. Native xlsx output is not supported.

### Can I search rentals and sold homes?

Yes – status=forRent returns rental listings with rental-specific filters, status=recentlySold returns closed sales. Both share the same result fields.

### Is this API in beta?

Yes, the Zillow endpoints are currently in beta. They are included in every plan at the normal Zillow rate of 2 quota units per request; field names mirror Zillow's own data and may gain additional fields over time.

## Related use cases

- [Zillow API for Property Data](https://everydata.io/zillow-property-data-api)
- [Zillow Zestimate & Rent Estimate API](https://everydata.io/zillow-zestimate-api)
- [Amazon Search API](https://everydata.io/amazon-search-results-api)

## More

- [All platforms](https://everydata.io/apis) · [Pricing](https://everydata.io/pricing) · [API reference](https://everydata.io/docs) · [Getting started](https://everydata.io/docs/getting-started) · [MCP server](https://everydata.io/docs/mcp) · [Status](https://everydata.io/status)
- Machine-readable: [llms.txt](https://everydata.io/llms.txt), [llms-full.txt](https://everydata.io/llms-full.txt), [OpenAPI](https://api.everydata.io/openapi.json)
