Property & travel · Live on Apify

Zillow Scraper: Listings, Zestimates and Price Cuts

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.

About $1.90 for 1,000 results$0.0019 per result + $0 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

zpid64625418
recordTypeproperty
urlhttps://www.zillow.com/homedetails/11008-Sierra-Ridge-Ct-Austin-TX-787…

How to use it: 3 steps

  1. Make a free Apify accountApify 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 StartNo 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 resultsWhen 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.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

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.

Who uses it

Home buyers and agents

Export homes for sale in a city to a spreadsheet.

Real estate investors

Compare price per square foot and rough rental yield.

Market watchers

Get only new listings and price cuts each day.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
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.

Examples

  • 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. That is enough for about 2,600 results.

Prices checked on 8 November 2026. See the current price on Apify.

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".

Details

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
TaskInputYou getKey fieldsNext step
Export a marketlocations or searchUrls, statusProperty rowaddress, price, zestimate, beds, sqftCSV/Excel export, Google Sheets
Watch new listings and price cutsmode: monitor, onlyChanges, stateNameChanged property rowchanges, price, status, urlSchedule + Slack or Notion summary
Check exact homespropertyUrls, zpids or addressesProperty row with detailszestimate, rentZestimate, priceHistory, taxHistory, schoolsAPI, Make, Zapier
Rental researchstatus: forRent, extractBuildingUnitsRental or building unit rowprice, rentZestimate, grossRentalYield, buildingNameSpreadsheet model
Recent salesstatus: sold, soldInLastDaysSold property rowprice, zestimate, pricePerSqft, daysOnZillowComparison in a spreadsheet
Tips for better results
  • 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 and good to know
  • 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

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one 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. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
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)
cURL
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"]}'
LangChain · langchain-apify
# 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)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (40)
FieldTypeMeaning
zpidstringZillow property ID.
urlstringPublic Zillow property page.
addressstringStreet address shown by Zillow.
pricenumberListing price in US dollars.
zestimatenumberZillow estimated value, when available.
rentZestimatenumberZillow estimated monthly rent, when available.
bedsnumberBedrooms.
bathsnumberBathrooms.
sqftnumberLiving area in square feet.
statusstringListing status from Zillow.
daysOnZillownumberDays on Zillow, when available.
pricePerSqftnumberListing price divided by living area.
priceToZestimatenumberListing price divided by Zestimate.
grossRentalYieldnumberEstimated annual rent divided by listing price for sale homes, or Zestimate for rentals, before costs. A value of 0.08 means 8%.
fetchedAtstringUTC time this property was read.
idstringStable property or building identifier.
recordTypestringProperty or apartment-building row.
buildingIdstringPublic building identifier for a building row.
buildingNamestringApartment complex name.
priceMinnumberLowest advertised rent for a building.
priceMaxnumberHighest advertised rent, when the source gives a closed range.
latnumberLatitude.
lngnumberLongitude.
yearBuiltnumberYear the property was built.
monthlyHoaFeenumberMonthly HOA fee in US dollars.
descriptionstringPublic property description with phone numbers and email addresses removed.
photosarray/stringPublic photo URLs. Flat output uses JSON text.
priceHistoryarray/stringPublic price events. Flat output uses JSON text.
taxHistoryarray/stringPublic tax assessments and payments. Flat output uses JSON text.
schoolsarray/stringNearby public school names, ratings, grades, and distances. Flat output uses JSON text.
zestimateHistoryarray/stringPublic historical estimated values when Zillow provides them.
changesarray/stringNew, priceDown, priceUp, pending, sold, removed, or statusChanged.
priceCutCountnumberNumber of price reductions in the available price history.
walkScorenumberPublic Walk Score when requested and available.
nearbyHomesarray/stringNearby comparable homes when requested and available.
sourcestringData source name.
sourceUrlstringSearch or property URL that produced the row.
rentalYieldValueBasisstringValue used for gross rental yield: listingPrice for sale listings, zestimate for rentals.
unitCountnumberTotal building units reported by Zillow, when available.
investorMetricsobject/stringEstimated 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 (25)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Taskmodestring"search"
Cities or ZIP codeslocationsarray["Austin, TX"]
Zillow search URLssearchUrlsarray
Property URLspropertyUrlsarray
Zillow property IDszpidsarray
Street addressesaddressesarray
Listing statusstatusstring"fromUrl"
Maximum propertiesmaxItemsinteger10
Include full property detailsincludeDetailsbooleanfalse
Output formatoutputFormatstring"flat"
Save only changed listingsonlyChangesbooleanfalse
Monitor storage namestateNamestring"zillow-scraper-monitor"
Split large map searchessplitMapbooleantrue
Search page connection routeproxyModestring"auto"
Maximum source requestsmaxRequestsinteger
Sort listingssortstring
Home typeshomeTypesarray
Listing keywordskeywordsstring
Minimum priceminPricenumber
Maximum pricemaxPricenumber
Minimum bedroomsminBedsnumber
Maximum bedroomsmaxBedsnumber
Minimum bathroomsminBathsnumber
Minimum living areaminSqftnumber
Maximum living areamaxSqftnumber

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure