Zillow Listings Scraper: Zestimates & Price Cuts, No Login avatar

Zillow Listings Scraper: Zestimates & Price Cuts, No Login

Pricing

from $1.33 / 1,000 listing saveds

Go to Apify Store
Zillow Listings Scraper: Zestimates & Price Cuts, No Login

Zillow Listings Scraper: Zestimates & Price Cuts, No Login

Scrape Zillow listings for sale, for rent and sold by city, ZIP, search URL or address. Get price, Zestimate, rent estimate and full property details, and track price cuts and status changes.

Pricing

from $1.33 / 1,000 listing saveds

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Features

Limited permissions

Share

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.

Use it if you track US homes for sale, for rent or sold. The smallest run usually ends in under a minute: enter Austin, TX, keep 10 properties and click Start.

Zillow Listings Scraper: search by city, ZIP or URL, get listing rows with price and Zestimate, and see new listings, price cuts and status changes

Table of contents

What it does

The Actor reads public Zillow pages and saves US properties as rows in a Dataset. You can start from:

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

Each row has the address, price, Zestimate, rent Zestimate, beds, baths, living area, status, days on Zillow, price per square foot and gross rental yield. With full details on, it also has the description, price history, tax history, schools, photos and home features.

In monitor mode the Actor remembers what it saw. On the next run it marks each home as new, priceDown, priceUp, pending, sold, removed or statusChanged, and it can save only the changed homes.

Good fit

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

๐Ÿ‘‰ Try it now: open the input form

How it works

  1. You give a place (city, ZIP, URL or map point) or exact homes (URLs, IDs or addresses).
  2. The Actor opens Zillow search pages one by one and reads the home cards. If Zillow shows only part of a large map, it can split the map into smaller areas. For exact homes it reads each property page.
  3. It adds simple numbers: price per square foot, price to Zestimate and gross rental yield.
  4. In monitor mode it compares each home with the saved snapshot and writes what changed.
  5. It saves rows to the Dataset, a run report to RUN_SUMMARY and market medians to MARKET_SUMMARY.

๐Ÿ‘‰ Try it now: open the input form

Quick start

Input form: box 1 is the city field with Austin, TX, box 2 is Maximum properties set to 10

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

    Output table: box 1 is the address, price, Zestimate and rent Zestimate columns, box 2 is the Export button

Expected result: 10 homes for sale in Austin, TX, one row per home. In our latest tests this run usually took 3 to 10 seconds, and a slow run took up to 40 seconds when Zillow blocked the first routes and the run had to retry. A run costs $0.023 on the Free plan (1 search page + 10 listings). The $0.001 in the run header of the screenshot is only the platform usage that we pay; your price is the events listed under Pricing.

๐Ÿ‘‰ Try it now: open the input form

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
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

๐Ÿ‘‰ Try it now: open the input form

Input

No field is required. Give a place or exact homes. The form opens with Austin, TX and 10 properties.

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
modeTaskstringnodefault searchsearch, details, monitorSearch places, read exact homes only, or search and compare with the last runmonitorUse details when you have only URLs, IDs or addresses
locationsCities or ZIP codesarray of stringsone input neededprefill ["Austin, TX"]US city with state, or 5-digit ZIPAdds a Zillow search for each place["78701"]Always add the state to a city
searchUrlsZillow search URLsarray of URLsone input neededemptyhttps://www.zillow.com/... search pagesKeeps the map area and filters of the URLZillow URL from your browserBest way to copy a complex Zillow filter
propertyUrlsProperty URLsarray of URLsone input neededemptyZillow home, building or address pagesReads these exact pages.../64625418_zpid/Use building pages with extractBuildingUnits
zpidsZillow property IDsarray of stringsone input neededemptydigits onlyReads each property by ID["64625418"]Fastest way to check a known home
addressesStreet addressesarray of stringsone input neededemptyfull US address with city and stateFinds the property, then reads it["11008 Sierra Ridge Ct, Austin, TX 78739"]Write the full address
statusListing statusstringnodefault fromUrlfromUrl, forSale, forRent, sold, allReplaces the status of the URL; cities use for saleforRentSet it when you search by city
maxItemsMaximum propertiesintegernodefault 100, prefill 100 or more; 0 = all availableStops after this many unique homes500Start small, then raise it
includeDetailsInclude full property detailsbooleannofalsetrue/falseReads each property page for history, schools and featurestrueTurn on only when you need these fields
outputFormatOutput formatstringnodefault flatflat, nestedFlat writes lists as JSON text in cells; nested keeps themnestedFlat for Sheets, nested for code
onlyChangesSave only changed listingsbooleannofalsetrue/falseSaves only new and changed homestrueUse with a schedule
stateNameMonitor storage namestringnodefault zillow-scraper-monitorstarts with zillow-scraper, lowercase, digits, dashes, up to 63 charsWhere the snapshot is kept between runszillow-scraper-austinOne name per monitor
splitMapSplit large map searchesbooleannodefault truetrue/falseSplits the map when Zillow caps the result listtrueKeep on for big cities
proxyModeSearch page connection routestringnodefault autoauto, datacenter, residential, unblockerHow search pages are loadedautoKeep auto
maxRequestsMaximum source requestsintegernoempty1 or moreStops after this many requests to Zillow200Use as an extra safety limit
sortSort listingsstringnoempty (URL sort)relevance, newest, priceLow, priceHigh, beds, sqft, lot, zestimateSets the Zillow sortnewestnewest for daily monitors
latitude, longitude, radiusMilesMap point and radiusnumbersnoradius 5 milesvalid coordinatesSearches inside a circle30.27, -97.74, 3Give both coordinates
minPrice โ€ฆ maxLotSizePrice, beds, baths, area, year, HOA, lotnumbersnoempty0 or more; min not above maxZillow filtersminBeds: 3Leave empty to keep URL filters
homeTypes, keywords, daysOnZillow, soldInLastDaysType, keywords, time windowsmixednoemptysee the formZillow filtersdaysOnZillow: "7"
hasPool, hasGarage, petsAllowed, waterView and other yes/no filtersHome and rental filtersbooleannoemptytrue/falseZillow filtershasPool: trueLeave unset to keep defaults
extractBuildingUnitsBuilding outputstringnodefault disableddisabled, availableFor building pages: summary row or one row per available unitavailable
includeWalkScoreWalk, transit and bike scoresbooleannofalsetrue/falseExtra request per propertytrueUses the property-check-plus price
includeNearbyHomesNearby comparable homesbooleannofalsetrue/falseExtra request per propertytrueUses the property-check-plus price
includeInvestorMetricsInvestor metricsbooleannofalsetrue/falseAdds investorMetrics and investorAssumptions to each row; no extra requesttrueNo extra charge
investorDownPaymentPct, investorInterestRatePct, investorLoanTermYearsLoan assumptionsnumbersnoempty (20%, Zillow rate or 7%, 30 years)0 to 100, 0 to 30, 0 to 50Replace the defaults in the metricsinvestorDownPaymentPct: 25Used only with includeInvestorMetrics
investorPropertyTaxRatePct, investorInsuranceAnnual, investorOperatingExpensePctCost assumptionsnumbersnoempty (listing or Zillow tax, 0.35% of price, 30% of rent)0 to 10, 0 or more, 0 to 100Replace the defaults in the metricsinvestorOperatingExpensePct: 35Used only with includeInvestorMetrics
investorRepairCost, investorMaoPctFlip assumptionsnumbersnoempty (0 and 70%)0 or more, 0 to 100Used for the maximum allowable offerinvestorRepairCost: 40000Used only with includeInvestorMetrics
datasetIdRe-check homes from an earlier DatasetstringnoemptyID of a Dataset you own (10 to 30 letters and digits)Reads zpid, URL or address from its rows and runs the Actor in details modeaBcDeFgHiJkLmNoPqOne property check per home
deliveryConnector, deliveryTargetSend results tostringsnoemptyyour MCP connector; Notion page link or Slack channel IDPosts a short summary after the runNotion page linkSee below

With empty input, Search and Monitor use Austin, TX. Details mode with no URL, ID or address stops with PROPERTY_INPUT_REQUIRED before any request, and you pay nothing. Duplicate homes across inputs are saved and charged once per run.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Details modemode: detailslocations, searchUrlsSearch inputs are ignored; only URLs, IDs and addresses are readzpids onlyOne property check per home
Search with detailsmode: searchincludeDetails: trueEach found home is also read in full50 homesProperty check per home instead of listing price
Scores or nearby homesincludeWalkScore or includeNearbyHomesany modeProperty page plus one more lookup1 zpidProperty-check-plus price per home
Investor metricsincludeInvestorMetrics: trueinvestor* fieldsYour numbers replace the defaults; each source is listed in investorAssumptionsinvestorDownPaymentPct: 25No extra charge
Dataset IDdatasetIdsearch inputsThe Dataset rows decide the homes; the Actor runs in details mode, property lists you fill in are addeddatasetId of last weekOne property check per home
StatusstatusURL filtersA set status replaces the status in the URLsold + URLnone
MonitoronlyChanges: truemaxItemsUnchanged homes also count toward the limitmaxItems: 1000Pages are charged even when nothing changed
Big mapsplitMap: truemaxItems above Zillow windowThe map is split into smaller areasmaxItems: 0More pages, more time

Input examples

Homes for sale in a city (prefill)

{
"locations": ["Austin, TX"],
"maxItems": 10
}

Expected behavior: one search page, 10 homes for sale. Expected output: property rows with address, price, zestimate, rentZestimate, status. Limit or cost note: $0.023 on the Free plan in our test (1 page + 10 listings).

Rentals in another city

{
"locations": ["Miami, FL"],
"status": "forRent",
"maxItems": 10
}

Expected behavior: rentals instead of homes for sale. Expected output: rental rows with price (monthly rent), rentZestimate, beds, sqft.

Daily monitor of price cuts and new listings

{
"mode": "monitor",
"locations": ["Austin, TX"],
"onlyChanges": true,
"stateName": "zillow-scraper-austin",
"maxItems": 1000
}

Expected behavior: the first run saves every home it sees. Later runs save only homes with a change. Expected output: rows with changes, for example ["priceDown"]. Limit or cost note: in our test the first run saved 1000 homes from 27 pages in about 3 minutes with the run timeout set to 1800 seconds; a repeat run over 900 of the same homes saved only the 2 that had changed and charged the 25 pages plus those 2 rows. The default timeout is 300 seconds, so raise Timeout in the run options for more than a few hundred homes.

Exact home with scores and nearby homes

{
"mode": "details",
"zpids": ["64625418"],
"includeWalkScore": true,
"includeNearbyHomes": true,
"outputFormat": "nested"
}

Expected behavior: one full property row, usually within a minute (about 3 seconds in our test). Expected output: priceHistory, taxHistory, schools, walkScore, nearbyHomes.

Available units in an apartment building

{
"mode": "details",
"propertyUrls": [
{
"url": "https://www.zillow.com/apartments/dallas-tx/hanover-turtle-creek/CpjCGP/"
}
],
"extractBuildingUnits": "available",
"maxItems": 3
}

Expected behavior: reads the building page, then each available unit. Expected output: unit rows with buildingName, price, beds, sqft.

Investor metrics for rentals and sales

{
"locations": ["Austin, TX"],
"maxItems": 10,
"includeInvestorMetrics": true,
"investorDownPaymentPct": 25,
"investorOperatingExpensePct": 35
}

Expected output: the usual rows plus investorMetrics (monthlyMortgagePayment, monthlyCashFlow, capRate, cashOnCashReturn, rentToPrice, afterRepairValue, maxAllowableOffer) and investorAssumptions. Homes without a price or a rent estimate get investorMetrics: null.

Re-check homes from an earlier run

{
"datasetId": "<Dataset ID of an earlier run>"
}

Expected output: one full row per home found in that Dataset, with the current price, Zestimate and status. Property IDs, URLs and addresses you fill in are checked too, and search inputs are ignored. At most 10000 Dataset rows are read, and maxItems limits how many homes are checked. A badly formed ID stops the run with INVALID_DATASET_ID, an ID that cannot be opened with your account (not found, deleted or not yours) with DATASET_NOT_FOUND, and a Dataset without any zpid, property URL or address with DATASET_HAS_NO_PROPERTIES. These stops cost nothing.

๐Ÿ‘‰ Try it now: open the input form

Output

Each Dataset row is one property, one apartment building or one building unit. The Properties view in the Output tab shows the main columns.

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
zpidZillow property IDstringyes (building rows)64625418Zillow
recordTypeRow typestringnoproperty, buildingActor
urlZillow property pagestringnohttps://www.zillow.com/homedetails/...Zillow
addressFull addressstringno11008 Sierra Ridge Ct, Austin, TX 78739Zillow
priceListing price, monthly rent for rentals, or sold price; empty when Zillow has not published a price yetnumberyes1375000Zillow
zestimateZillow estimated valuenumberyes1338600Zillow, not for every home
rentZestimateZillow estimated monthly rentnumberyes6427Zillow
beds, baths, sqftBedrooms, bathrooms, living areanumberyes5, 4, 4395Zillow
statusListing statusstringyesFOR_SALE, FOR_RENT, sold statusesZillow
daysOnZillowDays on Zillownumberyes23Zillow
pricePerSqftPrice divided by living areanumberyes312.86Actor calculation
priceToZestimatePrice divided by Zestimatenumberyes1.027Actor calculation
grossRentalYieldYearly rent estimate divided by price, before costsnumberyes0.0561Actor calculation, see rentalYieldValueBasis
buildingName, priceMin, priceMaxBuilding name and rent rangemixedyesHanover Turtle Creekbuilding rows only
description, priceHistory, taxHistory, schools, photosFull detailstext or listyeslist of eventswith includeDetails or details mode
walkScore, nearbyHomesScores and comparable homesmixedyes78with the plus options
investorMetrics, investorAssumptionsMonthly payment, cash flow, cap rate, cash-on-cash return, rent to price, after-repair value, maximum allowable offer, and the assumptions behind themobjectyessee example belowincludeInvestorMetrics; empty when price or rent is missing
changesWhat changed since the last runlistyesnew, priceDown, priceUp, pending, sold, removed, statusChangedmonitor only
fetchedAtTime the row was read (UTC)stringno2026-11-01T08:17:29.253ZActor

In flat format lists and objects are JSON text in one cell. In nested format they stay lists and objects.

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDataset, Properties viewOne row per homeOpen, export or use the fields
Domain-empty resultDataset empty; RUN_SUMMARY resultReason: NO_MATCHES or NOT_FOUNDNo rowsCheck the place, filters or ID
No changes in a monitorDataset empty; RUN_SUMMARY resultReason: NO_CHANGESNo rowsNothing to do
Partial resultDataset rows + RUN_SUMMARY status: partial with stopReasonRows saved before the stopRead stopReason, raise the limit if needed
Technical failureRun status FAILED, RUN_SUMMARY error code; saved rows stayError code such as SOURCE_BLOCKEDRun again later
Market summaryKey-value store record MARKET_SUMMARYMedians of the observed homesUse as a quick market view

Output example

{
"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"
}

With Investor metrics on (includeInvestorMetrics: true, down payment 25%, operating expenses 35%), the same home also gets these two fields. They are JSON text. The rate, tax and insurance came from defaults, and every assumption is listed in the row:

{
"investorMetrics": "{\"monthlyMortgagePayment\":6860.93,\"monthlyCashFlow\":-4344.84,\"capRate\":0.022,\"cashOnCashReturn\":-0.1517,\"rentToPrice\":0.0047,\"afterRepairValue\":1338600,\"maxAllowableOffer\":937020}",
"investorAssumptions": "{\"purchasePrice\":1375000,\"downPaymentPct\":25,\"downPaymentSource\":\"input\",\"interestRatePct\":7,\"interestRateSource\":\"default\",\"note\":\"Estimate calculated by this Actor, not financial advice.\"}"
}

The row above is trimmed and comes from the prefill run. null means Zillow did not show this value on the search page. Turn on full details to get more fields. Not every home has every field.

Send results to Slack or Notion

Pick your connector in the optional deliveryConnector field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in deliveryTarget: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console โ†’ MCP connectors.

Use case โ†’ fields

Buyer jobInput pathOutput entityKey fieldsNext integration
Market exportlocationsProperty rowprice, zestimate, pricePerSqftCSV, Excel
Monitormode: monitor, onlyChangesChanged rowchanges, price, statusSchedule, Slack, Notion
Property checkzpidsFull rowpriceHistory, taxHistory, schoolsAPI

๐Ÿ‘‰ Try it now: open the input form

Pricing

Pricing unit

You pay per event (pay per event). There is no start fee. Platform usage is paid by us.

EventWhen it is chargedFreeStarterScaleBusiness and higher
search-pageEach Zillow search page or building page that is read$0.004$0.0036$0.0032$0.0028
listingEach saved home from search pages$0.0019$0.00171$0.00152$0.00133
property-checkEach property page check (details, IDs, addresses, units)$0.0033$0.00297$0.00264$0.00231
property-check-plusProperty check with walk score or nearby homes$0.0045$0.00405$0.0036$0.00315
  • A full property row is included in the property check. You do not pay listing on top of it.
  • A search page with no matches is charged as one search-page.
  • A search page that Zillow blocks is also charged as one search-page, because the request was made. The run then ends with SOURCE_BLOCKED and keeps the rows saved before the block.
  • A property check is charged even when the home is not found or Zillow fails, because the work is done.
  • Investor metrics and Dataset ID import (below) have no extra event. You pay the usual listing or property-check.
  • In a monitor, pages and checks are charged even when nothing changed. listing is charged only for saved rows.
  • Invalid input stops before any request and costs nothing.
  • If you set a maximum cost per run, the Actor stops before it, keeps the saved rows and ends with CHARGE_LIMIT.

Cost examples

Event counts were measured on our test runs. Prices are Free plan prices, so Starter, Scale and Business pay less.

ScenarioInput scopeExpected item/event countBase chargeOptional chargeStop/cap behavior
PrefillAustin, TX, 10 homes1 page + 10 listings$0.023noneStops at 10 homes
Big exportAustin, TX, 1000 homes27 pages + 1000 listings$2.008noneStops at 1000 homes, about 3 minutes with timeout 1800 s
Monitor repeatSame homes, a day later27 pages, 0 to a few rows$0.108 and upnoneOnly changed homes are saved; none changed gives NO_CHANGES
One exact home1 zpid1 property check$0.0033$0.0045 with scores or nearby homesusually under a minute
Home not found1 zpid1 property check$0.0033noneNOT_FOUND, no rows
Apartment building1 building, 3 units1 page + 3 property checks$0.0139noneStops at 3 units

Price by size of the export (Free plan)

A search page holds about 37 homes, so each page adds $0.004 to the homes you save. The page fee pays for empty and unchanged pages too, so a very small export costs a little more than the per-home price suggests.

Saved homesPagesTotal (Free)Per home
11$0.0059$0.0059
101$0.023$0.0023
1003$0.202$0.0020
100027$2.008$0.0020

The most popular Zillow scraper in the Store charges $0.0023 per home with no page fee, so $0.023 for 10 homes, $0.23 for 100 and $2.30 for 1000 (checked 2026-11-03). Our price on the Free plan is the same for 10 homes, about 12% lower for 100 homes and about 13% lower for 1000 homes. For 1 home it is higher because of the page fee. On paid Apify plans both prices fall, but the leader's price falls faster (about $0.0013 per home on Gold and $0.0004 on Diamond, against our $0.00133 per home plus $0.0028 per page on Gold), so on Gold and higher plans we are the more expensive choice for small and medium exports.

๐Ÿ‘‰ Try it now: open the input form

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.
  • Building rent ranges are not exact unit prices. Turn on extractBuildingUnits for units.
  • Gross rental yield is before costs and uses the Zillow rent estimate. It is not financial advice.
  • A monitor does not mark a home as removed when the scan was not complete. Use one monitor name per search and do not run two runs with the same stateName at once.
  • No phone numbers, emails, agent or owner contacts. Phone numbers and emails are removed from descriptions.

๐Ÿ‘‰ Try it now: open the input form

API, export and integrations

  • API: start the Actor with the same JSON as the input examples, then read the Dataset items.
  • Export: CSV, Excel, JSON, XML or HTML from the Output tab or the Dataset API.
  • Scheduling: create a schedule with mode: monitor and onlyChanges: true to get only new homes and price changes.
  • Webhooks / no-code: use an Apify webhook, Make, Zapier or n8n on run success and read the changes, price and url fields.
  • SDK / MCP / agent: see below.
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~zillow-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locations":["Austin, TX"],"maxItems":10}'

Use with AI agents (MCP)

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/zillow-scraper.
  • Smallest useful input: {"locations":["Austin, TX"],"maxItems":10}.
  • Key output fields: address (full address), price (listing price or monthly rent in USD), zestimate (Zillow value estimate), rentZestimate (monthly rent estimate), changes (what changed in a monitor).
  • The prefill run usually ends in under a minute and costs $0.023 on the Free plan. A 1000-home search takes about 3 minutes (set the run timeout to 1800 seconds) and costs about $2.01 on the Free plan.
  • Limits: US only, public pages only, null when Zillow does not show a value.

๐Ÿ‘‰ Try it now: open the input form

Troubleshooting

The run stops at once with an INVALID_ error

Symptom: the run fails in a second with a code like INVALID_LOCATION, INVALID_ZPID or PROPERTY_INPUT_REQUIRED. Likely reason: a field has a wrong format, or there is no place and no exact home. Check: cities need a state (Austin, TX), ZIP codes need 5 digits, IDs need digits only, min values must not be above max values. Action: fix the field and start again. Nothing was charged.

The Dataset ID is rejected

Symptom: the run fails at once with INVALID_DATASET_ID, DATASET_NOT_FOUND or DATASET_HAS_NO_PROPERTIES. Likely reason: the ID is not 10 to 30 letters and digits, the Dataset does not exist or belongs to another account, or its rows have no zpid, url or address. Check: copy the ID from the run's Storage tab in your own account; open the Dataset and look for those columns. Action: fix the ID and start again. Nothing was charged. Only the first 10000 rows are read.

The Dataset is empty

Symptom: the run succeeded but has no rows. Likely reason: RUN_SUMMARY shows NO_MATCHES (filters too strict), NOT_FOUND (wrong ID or address) or NO_CHANGES (monitor with no changes). Check: open the same search on Zillow in your browser. Action: relax the filters or fix the ID.

Fewer homes than expected

Symptom: the run ends with partial and SOURCE_RESULT_WINDOW. Likely reason: Zillow shows only part of a large map. Check: splitMap is on and maxItems is high enough. Action: turn on splitMap, raise maxItems or split the search into ZIP codes.

The run failed with SOURCE_BLOCKED or SOURCE_RATE_LIMIT

Symptom: run status FAILED with a source error. Likely reason: Zillow refused the request this time. Check: rows saved before the error stay in the Dataset. Action: keep proxyMode on auto and run again later.

The run stopped with CHARGE_LIMIT, REQUEST_LIMIT or TIME_LIMIT

Symptom: the run succeeded with partial. Likely reason: your maximum cost per run, maxRequests or the run timeout was reached. Action: raise the limit, or lower maxItems.

๐Ÿ‘‰ Try it now: open the input form

FAQ

Do I need a Zillow account or API key?

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

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.

Why is the Zestimate empty for some homes?

Zillow does not show a Zestimate for every home. The Actor keeps null and does not guess.

Can I export recently sold homes?

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

How much does 1000 homes cost?

In our test 1000 homes from Austin took 27 search pages: $2.008 on the Free plan and about $1.41 on Gold and higher plans. Full details for each home cost more, because each home needs its own property check.

๐Ÿ‘‰ Try it now: open the input form

๐Ÿ‘‰ Try it now: open the input form

Support

For a bug, question or feature request, open the Actor's Issues tab on Apify. Include the run ID, the input mode and the error code from RUN_SUMMARY. Never send your API token or other private data.

๐Ÿ‘‰ Try it now: open the input form