# Zillow Scraper: Listings, Zestimates and Price Cuts

> Zillow scraper for US homes: search by city, ZIP, map or URL. Get price, Zestimate, rent estimate, beds and status. Track new listings and price cuts.

URL: https://cliqtomedia.com/actors/zillow-scraper/

Category: Real estate, travel & cars · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/zillow-scraper?fpr=cliqto

Get US homes from Zillow as clean rows. Start from a city, a ZIP code, a search URL or exact homes. Run it on a schedule to see new listings, price cuts and status changes.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `Austin, TX` in Cities or ZIP codes. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

This Zillow scraper gets home listings from Zillow for a US city, ZIP code, map area or search URL. It returns one row per home with price, Zestimate, rent estimate, beds, baths, size and status. It can also read full property details and tell you what changed since the last run.

- a city with a state, or a ZIP code (`Austin, TX`, `78701`);
- a Zillow search URL that you copy from your browser, with its map area and filters;
- a point on the map and a radius in miles;
- exact homes: property URLs, Zillow property IDs (zpid) or street addresses;
- an apartment building page, to get the units that are available now.

### Good for

- Export homes for sale, for rent or recently sold in a city or ZIP code to CSV or Excel.
- Watch a market every day and get only new listings, price cuts and status changes.
- Check a list of exact properties: Zestimate, rent estimate, price and tax history, schools.
- Compare price per square foot and rough rental yield before a deeper look.
- Turn on investor metrics to get a rough monthly payment, cash flow, cap rate, cash-on-cash return and maximum allowable offer for each home.
- Re-check the homes from an earlier run by its Dataset ID and see what changed in price, Zestimate and status.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Search page checked | $0.004 (from $0.0028 on paid Apify plans) | One requested Zillow search, building, or address page. Empty pages, unchanged monitoring pages, and failed source checks are billed. Retries are included. |
| Listing saved | $0.0019 (from $0.00133 on paid Apify plans) | One basic property or building listing saved to the dataset. |
| Property checked | $0.0033 (from $0.00231 on paid Apify plans) | One Zillow property ID lookup, including a not-found or failed source response. The detailed result is included. |
| Property checked with scores or comparables | $0.0045 (from $0.00315 on paid Apify plans) | One property lookup with optional mobility scores or nearby comparable homes. The detailed result is included. Not-found and failed checks are billed. |

- One result: about $0.0019.
- 1,000 results: about $1.90.
- Every day 100 results, for 30 days: about $5.70 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 8 November 2026. Current price: https://apify.com/cliqtomedia/zillow-scraper?fpr=cliqto

## Questions

### Do I need a Zillow account or API key?

No. The tool reads public Zillow pages. You need only an Apify account.

### Why is the Zestimate empty for some homes?

Zillow does not show a Zestimate for every home. The tool leaves the field empty and does not guess.

### Does it work outside the US?

No. It reads US Zillow only.

### How do I get only new listings and price cuts?

Set `mode` to `monitor`, turn on `onlyChanges` and give a `stateName`. Run it on a schedule. The first run saves all homes; later runs save only changes.

### Can I export recently sold homes?

Yes. Set `status` to `sold`. You can add `soldInLastDays`, for example `"30"`.

## Data fields

- `zpid` (string): Zillow property ID.
- `url` (string): Public Zillow property page.
- `address` (string): Street address shown by Zillow.
- `price` (number): Listing price in US dollars.
- `zestimate` (number): Zillow estimated value, when available.
- `rentZestimate` (number): Zillow estimated monthly rent, when available.
- `beds` (number): Bedrooms.
- `baths` (number): Bathrooms.
- `sqft` (number): Living area in square feet.
- `status` (string): Listing status from Zillow.
- `daysOnZillow` (number): Days on Zillow, when available.
- `pricePerSqft` (number): Listing price divided by living area.
- `priceToZestimate` (number): Listing price divided by Zestimate.
- `grossRentalYield` (number): Estimated annual rent divided by listing price for sale homes, or Zestimate for rentals, before costs. A value of 0.08 means 8%.
- `fetchedAt` (string): UTC time this property was read.
- `id` (string): Stable property or building identifier.
- `recordType` (string): Property or apartment-building row.
- `buildingId` (string): Public building identifier for a building row.
- `buildingName` (string): Apartment complex name.
- `priceMin` (number): Lowest advertised rent for a building.
- `priceMax` (number): Highest advertised rent, when the source gives a closed range.
- `lat` (number): Latitude.
- `lng` (number): Longitude.
- `yearBuilt` (number): Year the property was built.
- `monthlyHoaFee` (number): Monthly HOA fee in US dollars.
- `description` (string): Public property description with phone numbers and email addresses removed.
- `photos` (array/string): Public photo URLs. Flat output uses JSON text.
- `priceHistory` (array/string): Public price events. Flat output uses JSON text.
- `taxHistory` (array/string): Public tax assessments and payments. Flat output uses JSON text.
- `schools` (array/string): Nearby public school names, ratings, grades, and distances. Flat output uses JSON text.
- `zestimateHistory` (array/string): Public historical estimated values when Zillow provides them.
- `changes` (array/string): New, priceDown, priceUp, pending, sold, removed, or statusChanged.
- `priceCutCount` (number): Number of price reductions in the available price history.
- `walkScore` (number): Public Walk Score when requested and available.
- `nearbyHomes` (array/string): Nearby comparable homes when requested and available.
- `source` (string): Data source name.
- `sourceUrl` (string): Search or property URL that produced the row.
- `rentalYieldValueBasis` (string): Value used for gross rental yield: listingPrice for sale listings, zestimate for rentals.
- `unitCount` (number): Total building units reported by Zillow, when available.
- `investorMetrics` (object/string): Estimated monthly cash flow, cap rate, cash-on-cash return, rent-to-price, ARV and 70% rule offer. Present only when Add investor metrics is on.

## Input settings

- `mode` (string): Search or monitor cities and URLs. Details mode reads only property URLs, IDs, and addresses; it ignores search inputs. For full search results, use Search with Include full property details. See Pricing for event prices. Empty, unchanged, and failed checks are billed. Plan discounts apply.
- `locations` (array): Enter US cities with a state, or five-digit ZIP codes. For example: Austin, TX or 78701.
- `searchUrls` (array): Paste Zillow search URLs from your browser. Map bounds and search filters are kept unless you set a matching filter below.
- `propertyUrls` (array): Zillow property pages to read. Numeric property URLs use the property-check price. Building and address pages also use the search-page price.
- `zpids` (array): Enter numeric Zillow property IDs. Each ID lookup uses the property-check price, including not-found results.
- `addresses` (array): Enter a full US street address, city, and state for each property.
- `status` (string): Use the filters in a pasted URL, or choose a status to replace them. City searches use homes for sale by default.
- `maxItems` (integer): Stop after this many unique properties have been read across all inputs. Use 0 to read all available results. OnlyChanges also counts unchanged properties toward this limit.
- `includeDetails` (boolean): Read each property page for description, price and tax history, schools, and home features. Available fields vary by property. Each property lookup uses the property-check price; the detailed row is included. Empty and failed checks are billed too.
- `outputFormat` (string): Flat output stores lists and objects as JSON text in cells. Nested output keeps lists and objects.
- `onlyChanges` (boolean): Compare with the saved snapshot and save only new listings, price changes, and status changes. The first run saves every observed listing. Page and property checks are billed even when no rows change.
- `stateName` (string): Named storage for monitoring between runs. Use lowercase letters, numbers, and dashes; start with zillow-scraper and keep the name at most 63 characters. Use a separate name for each independent monitor. Avoid overlapping runs with the same name.
- `splitMap` (boolean): Split map areas when Zillow limits the result window and your requested limit needs more listings. Large searches take more time and requests.
- `proxyMode` (string): Automatic tries datacenter, US residential, then Apify Unblocker for search pages. Property ID lookups use US residential. A fixed page route can fail; attempted checks are billed.
- `maxRequests` (integer): Optional limit on requests sent to Zillow, including retries and redirects. Results already saved are kept when this limit is reached.
- `sort` (string): Set a Zillow sort order. If omitted, the sort in your URL is kept.
- `homeTypes` (array): Keep these home types. Leave empty to keep the Zillow search defaults.
- `keywords` (string): Send these words to Zillow to search listing text.
- `minPrice` (number): Lowest listing price in US dollars.
- `maxPrice` (number): Highest listing price in US dollars.
- `minBeds` (number): Minimum number of bedrooms.
- `maxBeds` (number): Maximum number of bedrooms.
- `minBaths` (number): Minimum number of bathrooms, including half baths.
- `minSqft` (number): Minimum living area in square feet.
- `maxSqft` (number): Maximum living area in square feet.

## Step by step on Apify

1. Open the Input tab. Cities or ZIP codes already has `Austin, TX` (box 1 in the picture). Keep it or type your own city with a state, or a ZIP code.
2. Keep Task empty. It means `Search listings`, and the search uses homes for sale.
3. Keep Maximum properties at `10` for a first test (box 2). Use `0` later to read all results.
4. Click the start button under the form.
5. When the run ends, open the Output tab. Check the `address`, `price`, `zestimate` and `rentZestimate` columns (box 1). Zillow does not show an estimate for every home, so `zestimate` and `rentZestimate` are often empty (in our latest test, 3 homes out of 10 had a Zestimate and rent Zestimate). Click Export to download CSV, Excel or JSON (box 2).

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Export a market | `locations` or `searchUrls`, `status` | Property row | `address`, `price`, `zestimate`, `beds`, `sqft` | CSV/Excel export, Google Sheets |
| Watch new listings and price cuts | `mode: monitor`, `onlyChanges`, `stateName` | Changed property row | `changes`, `price`, `status`, `url` | Schedule + Slack or Notion summary |
| Check exact homes | `propertyUrls`, `zpids` or `addresses` | Property row with details | `zestimate`, `rentZestimate`, `priceHistory`, `taxHistory`, `schools` | API, Make, Zapier |
| Rental research | `status: forRent`, `extractBuildingUnits` | Rental or building unit row | `price`, `rentZestimate`, `grossRentalYield`, `buildingName` | Spreadsheet model |
| Recent sales | `status: sold`, `soldInLastDays` | Sold property row | `price`, `zestimate`, `pricePerSqft`, `daysOnZillow` | Comparison in a spreadsheet |

## Tips

- Copy a Zillow search URL from your browser to keep its map and filters.
- Always add the state to a city, for example Austin, TX.
- Use monitor mode with a schedule and save only changed homes.

## Limits



- US Zillow only. The Actor does not log in and reads only public pages.
- Dataset ID import reads at most 10000 rows and checks at most `maxItems` homes.
- Zillow changes often and sometimes blocks requests or hides a field. Missing values stay `null`; the Actor does not guess them.
- Zillow shows a limited number of homes per map view. With `splitMap` on, the Actor splits the map, but a very dense area can still end with `SOURCE_RESULT_WINDOW` and partial results.
- `maxItems: 0` means all homes the run can read before the run timeout or your cost limit.
- `MARKET_SUMMARY` medians use only the homes seen in this run. They are not a full market census.
- Investor metrics are a rough screening tool, not financial advice. They use the Zillow rent estimate and simple default assumptions (20% down, Zillow 30-year rate or 7%, 30% operating costs). Check `investorAssumptions` in each row and set your own numbers for a serious decision.
- The Actor does not return flood, fire, heat or other climate risk scores. Zillow does not publish them on a page we can read without a login, and we did not find a public route to them.

## Sample result

```json
{
  "zpid": "64625418",
  "recordType": "property",
  "url": "https://www.zillow.com/homedetails/11008-Sierra-Ridge-Ct-Austin-TX-78739/64625418_zpid/",
  "address": "11008 Sierra Ridge Ct, Austin, TX 78739",
  "price": 1375000,
  "zestimate": 1338600,
  "rentZestimate": 6427,
  "beds": 5,
  "baths": 4,
  "sqft": 4395,
  "status": "FOR_SALE",
  "homeType": "SINGLE_FAMILY",
  "daysOnZillow": 23,
  "pricePerSqft": 312.86,
  "priceToZestimate": 1.027,
  "grossRentalYield": 0.0561,
  "rentalYieldValueBasis": "listingPrice",
  "yearBuilt": null,
  "description": null,
  "changes": "[]",
  "fetchedAt": "2026-11-01T08:17:29.253Z"
}
```

## Use it from code

Actor ID: `cliqtomedia/zillow-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/zillow-scraper").call(run_input={
    "mode": "search",
    "locations": [
        "Austin, TX"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~zillow-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "search", "locations": ["Austin, TX"]}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/zillow-scraper")
result = tool.invoke({"run_input": {"mode": "search", "locations": ["Austin, TX"]}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [Redfin & Realtor Listings Scraper (US): Sale, Sold & Rent](https://cliqtomedia.com/actors/us-property-listings/)
- [Craigslist Scraper - Listings, Prices & Photos, No Login](https://cliqtomedia.com/actors/craigslist-scraper/)
- [99acres & MagicBricks India Property Scraper - No Login](https://cliqtomedia.com/actors/india-property-listings/)
- [Airbnb Scraper: Listings, Prices, Calendar - No Login](https://cliqtomedia.com/actors/airbnb-scraper/)
- [Booking.com Scraper: Hotels, Prices, Reviews, No Login](https://cliqtomedia.com/actors/booking-scraper/)
- [Events Scraper: Eventbrite, Meetup & Luma — No Login](https://cliqtomedia.com/actors/events-aggregator/)
