Zillow Suite Scraper - For Sale, For Rent & Sold Comps avatar

Zillow Suite Scraper - For Sale, For Rent & Sold Comps

Pricing

from $1.95 / 1,000 results

Go to Apify Store
Zillow Suite Scraper - For Sale, For Rent & Sold Comps

Zillow Suite Scraper - For Sale, For Rent & Sold Comps

Scrape public Zillow homes for sale, rentals, apartment buildings, and sold comparables. Get prices, beds, baths, area, Zestimates, taxes, days on market, photos, coordinates, and listing URLs. Optional details add agents, MLS IDs, history, schools, and property facts.

Pricing

from $1.95 / 1,000 results

Rating

0.0

(0)

Developer

Thirdwatch

Thirdwatch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Zillow Suite Scraper — For Sale, For Rent & Sold Comps

Export public Zillow listings as clean, analysis-ready rows. One Actor covers the three searches real-estate teams actually run:

  • For sale — active listings with price, beds, baths, living area, lot size, Zestimate, days on market and the canonical listing URL.
  • For rent — rental homes and apartment buildings with the advertised rent range and per-unit bed/price breakdown.
  • Sold — recently sold comparables with sold date, living area, lot size, tax assessed value and Zestimate, for CMA and valuation work.

Give it a ZIP code, a city, a neighbourhood, a county, a Zillow search URL, or a single property URL. Every row is normalised: prices and areas are numbers (never strings), dates are ISO 8601 UTC, URLs are absolute, currency is explicit, and the query that produced the row is stamped on it as source_query.

Optional detail mode visits each property page and adds year built, the full listing description, listing agent name and phone, MLS ID, HOA fee, property tax rate, price history, tax history, assigned schools, RESO facts and the complete photo set.


What you get

Use caseHow
Comparative market analysis (CMA)searchMode: sold on the subject ZIP code, then compare price_per_sqft, living_area_sqft and date_sold
Investment screeningsearchMode: forSale + minPrice/maxPrice + homeTypes, then rank by rent_zestimate ÷ price for gross yield
Rental market pricingsearchMode: forRent, group rent_min/rent_max by zip_code and bedroom count
Agent and brokerage lead listsincludeDetails: truelisting_agent_name, listing_agent_phone, brokerage_name
Price-drop alertsschedule a daily run and watch price_change, price_change_date and price_reduction
Territory heatmapslatitude / longitude on every row feed straight into any GIS or mapping tool
Tax and assessment researchtax_assessed_value on search rows, full tax_history in detail mode

Input parameters

FieldTypeDefaultDescription
queriesstring[]Required. One entry per search. ZIP code (90210), city + state (Austin, TX), neighbourhood (Williamsburg, Brooklyn, NY), county (Travis County, TX), a full Zillow search URL, or a /homedetails/ property URL.
searchModestringforSaleforSale, forRent or sold.
maxResultsinteger10Listings to return per entry in queries.
includeDetailsbooleanfalseAlso visit each property page for the extended field set.
maxDetailPagesintegerallCap on how many listings get the extra property-page visit.
sortBystringrelevancerelevance, newest, priceAsc, priceDesc, livingArea, lotSize.
minPrice / maxPriceintegerSale price bounds, or monthly rent bounds in forRent mode.
minBeds / minBathsintegerMinimum bedroom / bathroom count.
homeTypesstring[]allAny of houses, townhomes, condos, apartments, multiFamily, lotsLand, manufactured.
proxyConfigurationobjectUS residentialZillow only serves listing data to US IPs. Keep the default unless supplying your own.

Example input

{
"queries": ["Austin, TX", "78704", "Travis County, TX"],
"searchMode": "forSale",
"maxResults": 200,
"sortBy": "newest",
"minPrice": 400000,
"maxPrice": 900000,
"minBeds": 3,
"homeTypes": ["houses", "townhomes"],
"includeDetails": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Sold comparables for a single ZIP code:

{
"queries": ["90210"],
"searchMode": "sold",
"maxResults": 300
}

A single property, fully enriched:

{
"queries": ["https://www.zillow.com/homedetails/1740-Carla-Rdg-Beverly-Hills-CA-90210/20534384_zpid/"],
"includeDetails": true
}

Output fields

Every row carries the core block below. Rows produced with includeDetails: true (and rows from a /homedetails/ URL) additionally carry the detail block.

Core fields (every row)

FieldTypeDescription
zpidstringZillow property ID — the stable key for deduplication and joins
property_urlstringAbsolute canonical listing URL
source_querystringThe queries entry that produced this row
search_modestringforSale, forRent or sold
listing_statusstringFOR_SALE, FOR_RENT, SOLD, PENDING, …
status_textstringHuman-readable status, e.g. "House for sale"
home_typestringSINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, LOT, MANUFACTURED, …
addressstringFull one-line address
street_addressstringStreet line only
citystringCity
statestringTwo-letter state code
zip_codestringZIP code
countrystringCountry code, normally USA
latitudenumberDecimal degrees
longitudenumberDecimal degrees
pricenumberList price, sold price, or starting rent — always numeric
price_formattedstringPrice as Zillow displays it
currencystringISO currency code, normally USD
rent_minnumberLowest advertised rent (rental buildings)
rent_maxnumberHighest advertised rent (rental buildings)
price_per_sqftnumberComputed price ÷ living_area_sqft
bedroomsnumberBedroom count
bathroomsnumberBathroom count (can be fractional, e.g. 2.5)
living_area_sqftnumberInterior area in square feet
lot_area_valuenumberLot size as Zillow reports it
lot_area_unitstringUnit for lot_area_value (acres or sqft)
lot_size_sqftnumberLot size normalised to square feet
zestimatenumberZillow's estimated market value
rent_zestimatenumberZillow's estimated monthly rent
tax_assessed_valuenumberLatest assessed value
days_on_zillownumberDays the listing has been live
listed_datestringISO 8601 UTC listing date
date_soldstringISO 8601 UTC sale date (sold mode)
price_changenumberSigned price change in currency units
price_change_datestringISO 8601 UTC date of that change
price_reductionstringReduction as displayed, e.g. "$25,000 (Jul 23)"
open_housestringNext open-house slot, when advertised
broker_namestringListing brokerage from the search card
agent_namestringListing agent from the search card
is_zillow_ownedbooleanZillow-owned inventory flag
has_3d_modelboolean3D home tour available
has_videobooleanVideo tour available
is_buildingbooleanRow is an apartment building rather than one unit
building_namestringBuilding name (rentals)
units_availablenumberAvailable units in the building (rentals)
unitsarrayPer-unit {beds, price, price_formatted} (rentals)
image_urlstringPrimary photo URL
photo_countnumberNumber of photo URLs returned
photosarrayFull-size photo URLs
scraped_atstringISO 8601 UTC timestamp of the scrape

Detail fields (includeDetails: true)

FieldTypeDescription
year_builtnumberConstruction year
descriptionstringFull listing description text
countystringCounty name
mls_idstringMLS listing number
parcel_numberstringAssessor parcel number (APN)
zoningstringZoning code
architectural_stylestringe.g. "Mediterranean"
levels / storiesstringStorey description
property_conditionstringe.g. "Updated/Remodeled"
monthly_hoa_feenumberMonthly HOA dues
property_tax_ratenumberEffective tax rate percentage
annual_tax_amountnumberMost recent annual tax bill
last_sold_pricenumberPrevious sale price
last_sold_datestringISO 8601 UTC previous sale date
on_market_datestringISO 8601 UTC date the listing went live
listing_agent_namestringListing agent
listing_agent_phonestringListing agent phone
listing_agent_emailstringListing agent email when published
listing_agent_licensestringAgent licence number
brokerage_namestringListing brokerage
brokerage_phonestringBrokerage phone
listing_last_updatedstringISO 8601 UTC last MLS update
parking_capacitynumberTotal parking spaces
garage_capacitynumberGarage spaces
has_garage / has_pool / has_cooling / has_heatingbooleanAmenity flags
fireplacesnumberFireplace count
heating / cooling / appliances / flooring / viewarrayRESO fact lists
virtual_tour_urlstringExternal virtual-tour link
page_view_countnumberZillow page views
favorite_countnumberTimes saved by Zillow users
price_historyarray{date, event, price, price_per_sqft, source}
tax_historyarray{date, tax_paid, assessed_value}
schoolsarray{name, rating, grades, distance_miles}
open_house_schedulearray{start, end} in ISO 8601 UTC
detail_photosarrayFull photo set from the property page

Example output

{
"zpid": "20534384",
"property_url": "https://www.zillow.com/homedetails/1740-Carla-Rdg-Beverly-Hills-CA-90210/20534384_zpid/",
"source_query": "90210",
"search_mode": "forSale",
"listing_status": "FOR_SALE",
"status_text": "House for sale",
"home_type": "SINGLE_FAMILY",
"address": "1740 Carla Rdg, Beverly Hills, CA 90210",
"city": "Beverly Hills",
"state": "CA",
"zip_code": "90210",
"latitude": 34.107277,
"longitude": -118.398026,
"price": 10495000,
"currency": "USD",
"price_per_sqft": 2395.57,
"bedrooms": 4,
"bathrooms": 5,
"living_area_sqft": 4381,
"lot_size_sqft": 20721,
"zestimate": 9744000,
"rent_zestimate": 23360,
"tax_assessed_value": 2875317,
"days_on_zillow": 45,
"price_change": -1255000,
"scraped_at": "2026-07-28T04:11:20+00:00"
}

Use cases

  • Real estate investors: Compare asking prices, rent estimates, taxes, and property facts across a buy box.
  • Agents and appraisers: Build recent sold-comparable datasets for market analysis.
  • Property managers: Monitor rental inventory and asking rents by ZIP code or neighbourhood.
  • Housing researchers: Track listing supply, price changes, and days on market over time.

Limitations

Read these before planning a large run.

  • Roughly 980 listings per search area. Zillow serves a fixed 41 listings per page and stops returning new results after about 24 pages, regardless of how many homes match. A search for a large city will report tens of thousands of matches but only ever hand over the first ~980. To cover a whole metro, pass many narrow queries — ZIP codes, neighbourhoods or counties — rather than one broad city query. The Actor logs a warning when it hits this ceiling.
  • Sold prices are missing in non-disclosure states. Texas, Utah, Idaho, Kansas, Louisiana, Mississippi, Missouri, Montana, New Mexico, North Dakota, Wyoming and Alaska do not publish sale prices, so price is empty on sold rows there. Sold date, address, beds, baths, area, lot size, Zestimate and tax assessed value are still returned. In disclosure states the sold price is populated. includeDetails: true adds last_sold_price where Zillow has it.
  • Rental buildings are shallower than homes. Apartment complexes are returned as one building row with is_building: true, a rent_min/rent_max range and a units array, not as one row per unit. Building rows have no Zestimate, tax value or lot size, because Zillow does not attach a property record to them. Single-family rentals return the full field set.
  • Not every field exists on every listing. New construction, off-market and agent-withheld listings routinely omit Zestimate, lot size, bathroom counts or photos. Missing values are returned as null or an empty string rather than being guessed.
  • Detail mode is much slower. It costs one extra page load per listing and those pages are large. Use maxDetailPages to enrich only the top slice of a result set.
  • A share of requests get challenged. Zillow rejects a minority of IP sessions outright. The Actor retries on a fresh session with backoff, which recovers almost all of them, but an unusually aggressive run can still finish short of maxResults on some queries.
  • US only, and US IPs only. Zillow serves US inventory and refuses non-US traffic. Keep the preconfigured US connection settings.
  • Public data only. No login, cookies or Zillow API key are used, so anything behind a Zillow account — saved searches, agent-only fields, contact-gated content — is out of scope.

FAQ

Can I scrape a specific property? Yes. Put its /homedetails/…_zpid/ URL directly in queries; it is returned as a single fully detailed row.

Can I paste a Zillow search URL I built in the browser? Yes. Any zillow.com search URL in queries is used as the search seed. Filters set in the Actor input are applied on top of it.

How do I get more than ~980 results for a city? Split the city into ZIP codes or neighbourhoods and pass them all in queries. Results are deduplicated on zpid, so overlapping areas are safe.

Are rows deduplicated across runs? No — deduplication is per run. Use zpid as the primary key in your own store.

Does it return Zestimates for sold homes? Yes, where Zillow publishes one. Sold rows carry zestimate, rent_zestimate and tax_assessed_value alongside date_sold.

Compared to alternatives

  • vs. maxcopell Zillow actors: One actor covers for-sale listings, rentals, sold comparables, and optional property details with a shared schema.
  • vs. separate search and detail actors: Detail enrichment is optional, so you can use fast listing rows for broad research and enrich only the properties that matter.

Last verified: 2026-07


Built by Thirdwatch. Scrapes public listing data only.