Zillow Scraper - Listings, Zestimate, Sold & Price History avatar

Zillow Scraper - Listings, Zestimate, Sold & Price History

Pricing

from $0.85 / 1,000 listings

Go to Apify Store
Zillow Scraper - Listings, Zestimate, Sold & Price History

Zillow Scraper - Listings, Zestimate, Sold & Price History

Scrape Zillow listings by city, ZIP, map area or search URL (for sale, for rent, sold) for $0.85 per 1,000: price, Zestimate, beds, baths, sqft, photos. Optional property details: price and tax history, schools, comps, full fact sheet. Goes past the 820-result cap. No login.

Pricing

from $0.85 / 1,000 listings

Rating

0.0

(0)

Developer

Top Api

Top Api

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

15 hours ago

Last modified

Share

What does Zillow Scraper do?

Zillow Scraper extracts Zillow listings from zillow.com and turns a city, ZIP code, neighborhood, county, map area or Zillow search URL into structured rows: one row per home for sale, for rent or recently sold, with price, address, beds, baths, square feet, Zestimate and photos. Built for real estate investors, analysts and proptech teams who need Zillow data in a spreadsheet or an API without copying listings by hand.

Zillow scraper ยท Zillow API alternative ยท Zillow data scraper ยท Zillow listings scraper ยท Zestimate scraper ยท Zillow sold homes scraper

Zillow listings search page that Zillow Scraper turns into rows

  • Every Zillow search tab: for sale, for rent (including apartment buildings with their floor plans) and recently sold, with the same filters as zillow.com - price, beds, baths, square feet, lot, year built, HOA, days on Zillow, home types, keywords, pool, garage, views, open houses, price cuts.
  • Past Zillow's 820-result limit: Zillow lists 20 pages of 41 homes per search. Zillow Scraper splits the map into smaller areas by itself, so a whole city comes back (5,557 Austin listings available; 1,000 delivered in 30 seconds on a test run).
  • Property details on demand: description, year built, price history, tax history, nearby schools, nearby homes, comparable homes, HOA, parking, MLS number, parcel number, page views and saves, every photo in full size and the full fact sheet (about 25 to 90 facts per home, depending on the listing).
  • Zestimate history: up to 10 years of monthly Zestimate values per home.
  • Look up single properties by Zillow URL, ZPID or street address.
  • Monitoring: schedule it daily and get only the listings you have not received before, optionally with price and status changes.
  • No login, cookies or Zillow API key.
  • Export anywhere: JSON, CSV, Excel, XML; schedules, webhooks, Make, Zapier, n8n, Google Sheets; the Apify API and MCP server.

What data can you get from Zillow?

๐Ÿ†” Zillow ID (zpid) and link๐Ÿท๏ธ Status: for sale, for rent, sold, pending, coming soon๐Ÿ’ฒ Price, sold price, price change
๐Ÿ“ Address, ZIP, county, coordinates๐Ÿ›๏ธ Beds, baths, living area, lot size๐Ÿ  Home type and listing type (MLS-listed, by owner, new construction, foreclosure, auction)
๐Ÿ“ˆ Zestimate and rent Zestimate๐Ÿงพ Tax-assessed value, annual tax, tax rate๐Ÿ“… Days on Zillow, date posted, date sold
๐Ÿ“ท Photos (carousel, or every photo in full size)๐Ÿ•’ Open house times๐Ÿข Apartment buildings: units, rents, specials
๐Ÿ“œ Price history (listingPriceHistory)๐Ÿงฎ Tax history (listingTaxHistory)๐Ÿซ Nearby schools with ratings
๐Ÿ˜๏ธ Nearby homes and comparable homes๐Ÿ“‰ Zestimate history (10 years, monthly)๐Ÿ”Ž Fact sheet (about 25-90 facts): heating, cooling, parking, HOA, appliances, roof, zoning
๐Ÿ—‚๏ธ MLS number and parcel number๐Ÿ‘€ Page views and saves on Zillow๐Ÿ“ Full description and highlights

On a 1,000-listing Austin test run, price, address, coordinates, beds, baths, home type, days on Zillow and photos were filled on 100% of rows and living area on 97%. On a 100-listing run with property details, description, year built, price history, nearby schools, nearby homes, parcel number and MLS number were filled on 100% of rows, tax history on 87% and page views on 93%.

How to scrape Zillow with Zillow Scraper

  1. Create a free Apify account - $5 of monthly credit, no card needed.
  2. Open Zillow Scraper and click Try for free.
  3. Type a city, ZIP code or neighborhood into Locations (or paste a Zillow search URL), pick For sale, For rent or Recently sold, and set Max results.
  4. Optional: add filters, and switch on Include property details for price history, tax history, schools and comps.
  5. Click Start. Rows stream into the dataset as they are found.
  6. Open the Storage tab and Export as JSON, CSV or Excel - or let a schedule run it for you.

โฌ‡๏ธ Input

ParameterTypeDescription
๐Ÿ” What to scrape
searchLocationListCities, ZIP codes, neighborhoods or counties: "Austin, TX", "78704", "Travis County, TX". An exact street address returns that one property.
listingStatusSelectforSale (default), forRent or sold - applies to Locations, ZIP codes and map areas.
searchUrlsList of {"url": ...} objectsZillow search URLs, e.g. [{"url": "https://www.zillow.com/austin-tx/sold/"}], or a URL with ?searchQueryState=. The URL's filters and map area are kept.
startUrlsList of {"url": ...} objectsZillow property URLs, e.g. [{"url": "https://www.zillow.com/homedetails/29375136_zpid/"}]. One row each, with property details.
zipCodesListUS ZIP codes to search, e.g. 78704.
zpids / addressesList of stringsZillow property IDs, e.g. ["29375136"], or addresses like ["123 Main St, City, ST 12345"]. One row each, with property details.
mapBoundsObjectA map rectangle: {"north": 30.29, "south": 30.25, "east": -97.72, "west": -97.76}.
latitude, longitude, distanceMilesNumberSearch around a point; radius in miles (default 5).
searchResultsDatasetIdStringDataset of an earlier Zillow run: every row with a zpid or property URL is fetched again with full property details.
๐ŸŽฏ Filters (applied by Zillow)
sortBySelectrelevance (Zillow's default), newest, priceLowToHigh, priceHighToLow, bedrooms, bathrooms, squareFeet, lotSize.
homeTypesMulti-selecthouse, townhouse, multiFamily, condo, lot, apartment, manufactured. Empty = all.
minPrice / maxPriceIntegerUSD; monthly rent when the status is For rent.
minBeds / maxBeds / minBathsNumberBedroom and bathroom bounds.
minSqft / maxSqft / minLotSize / maxLotSizeIntegerLiving area and lot, square feet.
minYearBuilt / maxYearBuilt / maxHoaFeeIntegerYear built window; monthly HOA ceiling.
daysOnZillowSelectListed within (or, for sold, sold within) 1 / 7 / 14 / 30 / 90 days, 6 / 12 / 24 / 36 months.
keywordsStringZillow's keyword filter, e.g. "pool".
listingTypesMulti-selectFor sale: MLS-listed, by owner, new construction, foreclosures, auctions, coming soon, foreclosed, pre-foreclosures, pending & under contract, accepting backup offers.
mustHave / views / parkingSpotsMulti-select / IntegerPool, A/C, waterfront, single story, garage, basement, 3D tour, open house, price cut; city / mountain / park / water view; minimum parking spots.
customFilterStateObjectAny other Zillow filterState key, merged last.
โœ‚๏ธ Refine results
minDaysOnZillowIntegerKeep listings on Zillow at least this many days.
withZestimateOnly / withPhotosOnlyBooleanKeep only rows with a Zestimate / with a photo. Default false.
โž• Extra data
includeDetailsBooleanProperty details for every home row - charged as property-details at $0.0016 per row that gets them. Apartment-building rows carry floor-plan rents but no property details, and are not charged for them. With compact on, the compact row keeps the details it was charged for (see compact). Default false.
includeZestimateHistoryBooleanWith details: monthly Zestimate for up to 10 years. No extra charge.
๐Ÿ” Monitoring
monitorModeBooleanReturn only listings not delivered by previous runs. Pair with a daily schedule. The memory is saved during the run as well, so a run that Apify restarts or migrates still remembers everything it delivered.
trackPriceChangesBooleanAlso return a known listing when its price or status changed (monitorChange, previousPrice).
monitorStoreNameStringNamed key-value store for the memory. Default zillow-scraper-monitor.
๐Ÿ“ฆ Output
maxResultsIntegerDefault 100; 0 = up to 100,000 rows, the most one run delivers.
maxResultsPerSearchIntegerLimit per location / URL / ZIP. 0 = none.
extractionMethodSelectPAGINATION_WITH_ZOOM_IN (default, full inventory), PAGINATION (up to ~820 per search, sorted), MAP_MARKERS (500 per call, one photo per row).
compact / flatOutputBooleancompact: core fields only, for AI assistants and LLMs - zpid, link, status, price, address, beds, baths, area, home type, Zestimates, days on Zillow, coordinates, photo and searchInput. A row that got property details also keeps what they were charged for: year built, description, price per square foot, annual tax, monthly HOA, parcel and MLS numbers, views and saves, price and tax history, schools, comparable homes, Zestimate history, every photo URL, resoFacts and detailsSource. flatOutput: dot-named columns for spreadsheets.
โš™๏ธ Advanced
proxyConfigurationProxyLeave as is: Apify's own connection first, Apify datacenter proxy sessions added by the actor.
maxConcurrencyIntegerParallel connections, default 4.

Input JSON

{
"searchLocation": ["Austin, TX", "78704"],
"listingStatus": "forSale",
"minBeds": 3,
"maxPrice": 750000,
"homeTypes": ["house", "townhouse"],
"includeDetails": true,
"maxResults": 200
}

Pick the listing status before anything else

Zillow keeps homes for sale, rentals and sold homes in separate searches, so listingStatus decides which one every location is searched in. Do: "listingStatus": "sold" with "daysOnZillow": "90" for sales of the last 90 days ยท Don't: search for sale and filter by "sold" afterwards - sold homes are not in that search.

Paste a Zillow search URL to keep every filter you set on the map

Draw an area or set filters on zillow.com, copy the address bar and put it in searchUrls. Zillow Scraper keeps the URL's filters and map area as they are; the filter inputs apply to Locations, ZIP codes and map areas only.

In the input form you paste the URLs one per line. In JSON or an API call, searchUrls and startUrls are lists of objects with a url key (a plain string is rejected by Apify before the run starts):

{
"searchUrls": [{ "url": "https://www.zillow.com/austin-tx/sold/" }],
"startUrls": [{ "url": "https://www.zillow.com/homedetails/29375136_zpid/" }],
"zpids": ["29477119"]
}

Use the map methods to go past 820 results

Zillow shows at most 20 pages of 41 homes per search. With the default PAGINATION_WITH_ZOOM_IN, a search that has more homes than that is split into four smaller map areas, again and again, until every area fits; duplicates are removed. MAP_MARKERS reads 500 homes per call the same way and is the fastest route to a full inventory, with one photo per row instead of the photo carousel.

Turn on property details only when you need them

Search rows already carry price, address, beds, baths, area, home type, days on Zillow, tax-assessed value and photos. includeDetails opens each property page for the history, schools, comps and facts - it takes about two seconds per home and is charged per row that gets it.

โฌ†๏ธ Output

Every listing becomes one dataset item. Here is the table view of a run for ZIP 78704 with property details on:

Zillow Scraper output dataset with Zillow listings and property details

A search row as JSON (shortened):

{
"zpid": "29575637",
"propertyUrl": "https://www.zillow.com/homedetails/8302-Racine-Trl-Austin-TX-78717/29575637_zpid/",
"listingStatus": "forSale",
"listingPrice": { "amount": 389900, "currency": "USD", "formatted": "$389,900" },
"listingAddress": { "street": "8302 Racine Trl", "city": "Austin", "state": "TX", "zipCode": "78717", "full": "8302 Racine Trl, Austin, TX 78717" },
"coordinates": { "latitude": 30.491026, "longitude": -97.74046 },
"homeType": "SINGLE_FAMILY",
"bedrooms": 4,
"bathrooms": 2,
"livingArea": 1515,
"lotArea": { "value": 5989.5, "unit": "sqft" },
"daysOnZillow": 9,
"taxAssessedValue": 422216,
"photoCount": 25,
"searchInput": "Austin, TX"
}

A row with property details adds (shortened; zpid 29477119, 1509 Grayford Dr, listed at $1,895,000):

{
"yearBuilt": 1964,
"pricePerSquareFoot": 682,
"taxAnnualAmount": 20025,
"parcelId": "308059",
"mls": { "id": "2477927", "name": "Unlock MLS" },
"pageViewCount": 625,
"favoriteCount": 74,
"listingPriceHistory": [{ "date": "2026-10-07", "event": "Listed for sale", "price": 1895000, "source": "Unlock MLS", "sourceType": "mls" }],
"listingTaxHistory": [{ "year": 2025, "taxPaid": 22096.26, "value": 1269986 }],
"nearbySchools": [{ "name": "Joslin Elementary School", "distance": 0.6, "grades": "PK-5", "type": "Public", "isAssigned": true }],
"nearbyProperties": ["... 8 nearby homes"],
"comparableHomes": ["... 5 comparable homes"]
}

Fields

FieldTypeWhat it isFill on test run
zpid, propertyUrlstringZillow property ID and page100%
listingPriceobjectAsking price or rent {amount, currency, formatted}100% (for sale)
listingSoldPrice, dateSoldobject, stringSale price where Zillow publishes it; sale datedate 100% (sold)
listingAddress, coordinatesobjectStreet, city, state, ZIP, county; latitude / longitude100%
bedrooms, bathrooms, livingAreanumberSize of the home100% / 100% / 97%
homeType, listingTypestring, objectSingle family, condo...; MLS-listed / by owner / new / foreclosure / auction flags100%
daysOnZillow, priceChangenumberTime on market; last price change100% / 49%
zestimate, rentZestimatenumberShown by Zillow on a minority of active listings, most sold homes20% / 22% (for sale)
taxAssessedValue, lotAreanumber, objectAssessed value; lot size88% / 98%
mainImage, listingPhotosstring, arrayPhotos100%
description, yearBuilt, pricePerSquareFootdetailsListing text, year built, price per square foot. Phone numbers, e-mail addresses, licence numbers, links to non-tour websites, and names in contact phrasing (after "call", "contact" or "text", beside a role title such as Realtor, or beside a phone number or e-mail) in the text read [contact removed]100%
listingPriceHistory, listingTaxHistorydetailsPrice events with their data source (MLS, owner, public record, Zillow); yearly tax and assessed value100% / 87%
nearbySchools, nearbyProperties, comparableHomesdetailsSchools with rating and distance; nearby homes; Zestimate comps100% / 100% / 90%
zestimateHistorydetailsMonthly Zestimate, up to 10 years88%
hoa, monthlyHoaFee, parking, propertyFeatures, resoFactsdetailsAssociation: hoa.fee as Zillow states it, per hoa.feeFrequency (Monthly, Quarterly, Annually); monthlyHoaFee = that fee per month (Zillow's own figure, or the stated fee divided by its period; null when the listing only says it has an HOA fee, with no amount). Parking, and the full fact sheet (about 25-90 facts, depending on the listing)HOA 38%, others 100%
mls, parcelId, countyFIPS, datePosteddetailsListing and record identifiers100% / 100% / 87% / 100%
pageViewCount, favoriteCountdetailsViews and saves on Zillow (active listings)93%
virtualTourUrldetails3D or video tour on a tour host (Zillow, Matterport, YouTube, Vimeo, Property Panorama and similar); null when the only tour is on another website40%

Fill figures: search fields from a 1,000-row Austin run; detail fields from a 100-row run in ZIP 78704 (for-sale homes); virtualTourUrl from 126 properties across the Austin, Denver, Miami and Seattle test runs.

How can I use Zillow data?

  • ๐Ÿ˜๏ธ Real estate investors - pull every listing in a ZIP with price, size and days on Zillow, sort by price per square foot and find homes sitting longest on the market.
  • ๐Ÿ“Š Market analysts - track inventory, price cuts and sold prices by neighborhood week over week with a daily schedule.
  • ๐Ÿงพ Appraisers and lenders - pull price history, tax history and Zillow's comparable homes for a list of addresses.
  • ๐Ÿข Rental operators - collect rents, floor plans and leasing specials of apartment buildings in a city.
  • ๐Ÿค– AI and proptech teams - feed compact rows to an LLM or a valuation model through the API or MCP.
  • ๐Ÿ—๏ธ Builders and developers - find lots and new-construction listings with lot size, zoning and schools.

How much does it cost to scrape Zillow?

Zillow Scraper is pay-per-result: $0.85 per 1,000 listings (listing, $0.00085 each), no start fee. Property details add $1.60 per 1,000 (property-details, $0.0016 per row that gets them). A property looked up by URL, ZPID or address is one listing plus its details: $0.00245.

RowsListings onlyWith property details
10$0.0085$0.0245
100$0.085$0.245
1,000$0.85$2.45
10,000$8.50$24.50

Apify's platform usage is included. Measured: 41 listings in 6 seconds, 1,000 listings in 31 seconds, 100 listings with property details and Zestimate history in about 3.5 minutes, all on 256 MB.

Integrations, API, scheduling & MCP

  • Schedules: run Zillow Scraper daily or weekly from the Schedules tab; with monitorMode each run returns only new listings.
  • Webhooks: fire a URL when a run finishes - push listings to your CRM, Slack or a sheet.
  • No-code: Make, Zapier, n8n, Google Sheets, Airtable, Slack via Apify integrations.
  • API: call it from Node.js or Python with apify-client - code on the API tab and the Apify API reference.
  • MCP / AI assistants: connect Claude, Cursor or any MCP client through the MCP tab and ask for Zillow listings in plain language.

More scrapers from TopApi

โญ Google Maps Reviews Scraper - reviews of local businesses around a property๐Ÿ”Ž Facebook Search Posts Scraper - local posts by keyword, date and location๐Ÿ’ผ Indeed Jobs Scraper - hiring and salaries in a housing market
๐ŸŽต TikTok Scraper - home-tour and neighborhood videos by hashtagโ–ถ๏ธ YouTube Shorts Scraper - real estate Shorts by keyword or hashtag๐Ÿš— AutoScout24 Listings Scraper - car listings with prices and specs
๐Ÿงญ All TopApi actors

Limits & empty runs

  • Results per search: Zillow serves 20 pages of 41 homes; the default method splits the map to go further. A city of 5,557 listings returned 1,000 rows in 30 seconds with 2 map splits.
  • Speed: each connection is paced to about one request per second, the rate Zillow serves without refusing; four connections run in parallel. A refused connection pauses and resumes, or is replaced.
  • Empty dataset: the run's status message says why - Zillow has no listings for these filters, every listing was removed by your refine filters, monitoring found nothing new, or Zillow refused every connection. There is no start fee, so a run that delivers no rows has no charges.
  • Restarts: if Apify migrates or restarts a run, the rows already in the dataset count toward maxResults and the per-search limit, are never delivered or charged twice, and stay in the monitor memory.
  • Apartment buildings: building rows (cardType apartmentBuilding, no ZPID) carry the building's floor-plan rents, available units and specials, but no property details; includeDetails adds details to home rows only and charges only for rows that get them.
  • Not available: sold prices in states where Zillow does not publish them (Texas is one); Zestimates that Zillow hides on many active listings.
  • No personal contact details: rows carry property data only. In the listing text, phone numbers, e-mail addresses, licence numbers and links to websites other than tour hosts are replaced by [contact removed], and so are names in contact phrasing ("call Jane Smith", "Jane Smith, Realtor", "Jane Smith 512-...", "Jane Smith of

FAQ

How many listings can Zillow Scraper collect in one run?

As many as Zillow has for the search, up to 100,000 rows per run: the default method splits the map past Zillow's 820-result page limit. Set maxResults to 0 for up to 100,000 rows, or a smaller number to cap the bill.

Is there a Zillow API?

Zillow offers several APIs, but they need an approved API key and come with usage limits. Zillow Scraper reads the same public pages a visitor sees and returns them as JSON, so you can use it like a Zillow API through Apify, with no key.

Can I run Zillow Scraper on a schedule to get new listings automatically?

Yes. Save your input as a task, open Schedules, pick the cadence and switch on monitorMode: each run then returns only listings not delivered before. Add trackPriceChanges to also get listings whose price or status changed.

How do I get price history, tax history and schools with Zillow Scraper?

Switch on includeDetails. Every home row then carries listingPriceHistory, listingTaxHistory, nearbySchools, nearbyProperties, comparableHomes, the full fact sheet and every photo. With compact on, the compact row keeps the histories, schools, comparable homes, fact sheet and photo URLs. Add includeZestimateHistory for 10 years of monthly Zestimates.

Can I scrape Zillow rentals and sold homes with Zillow Scraper?

Yes. Set listingStatus to forRent or sold. Rentals include apartment buildings with their floor-plan rents and specials; sold rows carry the sale date and, where Zillow publishes it, the sale price.

Can I integrate Zillow Scraper with other apps?

Yes - Make, Zapier, n8n, Google Sheets, Slack and more via Apify integrations, or use webhooks to trigger an action when a run finishes.

Can I use Zillow Scraper with the Apify API or in Python?

Yes. Use apify-client for Node.js or Python; the API tab has ready-to-paste code.

Can I use Zillow Scraper through an MCP server?

Yes. Open the MCP tab, connect your MCP client (Claude Desktop, Cursor and others) and ask for Zillow listings in plain language. Turn on compact for rows sized for AI assistants.

Do I need a Zillow account, cookies or an API key?

No. Zillow Scraper reads only what Zillow shows publicly; you pass locations, URLs, ZPIDs or addresses and nothing else.

Why did my Zillow Scraper run return no results?

Most often the filters match no homes (check the same filters on zillow.com), the location was not recognized (try "City, ST" or a ZIP code), or monitoring found nothing new since the last run. The status message and the RUN_SUMMARY record name the cause.

Zillow Scraper extracts publicly available property data such as prices, addresses and listing details. Results can still contain personal information, which is protected by regulations such as GDPR; scrape personal data only with a legitimate reason, and consult a lawyer if unsure. See Apify's post on the legality of web scraping.

Your feedback

We keep improving Zillow Scraper. Found a bug or missing a field? Open an issue on the Issues tab.