Zillow Suite Scraper - For Sale, For Rent & Sold Comps
Pricing
from $1.95 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
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 case | How |
|---|---|
| Comparative market analysis (CMA) | searchMode: sold on the subject ZIP code, then compare price_per_sqft, living_area_sqft and date_sold |
| Investment screening | searchMode: forSale + minPrice/maxPrice + homeTypes, then rank by rent_zestimate ÷ price for gross yield |
| Rental market pricing | searchMode: forRent, group rent_min/rent_max by zip_code and bedroom count |
| Agent and brokerage lead lists | includeDetails: true → listing_agent_name, listing_agent_phone, brokerage_name |
| Price-drop alerts | schedule a daily run and watch price_change, price_change_date and price_reduction |
| Territory heatmaps | latitude / longitude on every row feed straight into any GIS or mapping tool |
| Tax and assessment research | tax_assessed_value on search rows, full tax_history in detail mode |
Input parameters
| Field | Type | Default | Description |
|---|---|---|---|
queries | string[] | — | 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. |
searchMode | string | forSale | forSale, forRent or sold. |
maxResults | integer | 10 | Listings to return per entry in queries. |
includeDetails | boolean | false | Also visit each property page for the extended field set. |
maxDetailPages | integer | all | Cap on how many listings get the extra property-page visit. |
sortBy | string | relevance | relevance, newest, priceAsc, priceDesc, livingArea, lotSize. |
minPrice / maxPrice | integer | — | Sale price bounds, or monthly rent bounds in forRent mode. |
minBeds / minBaths | integer | — | Minimum bedroom / bathroom count. |
homeTypes | string[] | all | Any of houses, townhomes, condos, apartments, multiFamily, lotsLand, manufactured. |
proxyConfiguration | object | US residential | Zillow 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)
| Field | Type | Description |
|---|---|---|
zpid | string | Zillow property ID — the stable key for deduplication and joins |
property_url | string | Absolute canonical listing URL |
source_query | string | The queries entry that produced this row |
search_mode | string | forSale, forRent or sold |
listing_status | string | FOR_SALE, FOR_RENT, SOLD, PENDING, … |
status_text | string | Human-readable status, e.g. "House for sale" |
home_type | string | SINGLE_FAMILY, CONDO, TOWNHOUSE, MULTI_FAMILY, LOT, MANUFACTURED, … |
address | string | Full one-line address |
street_address | string | Street line only |
city | string | City |
state | string | Two-letter state code |
zip_code | string | ZIP code |
country | string | Country code, normally USA |
latitude | number | Decimal degrees |
longitude | number | Decimal degrees |
price | number | List price, sold price, or starting rent — always numeric |
price_formatted | string | Price as Zillow displays it |
currency | string | ISO currency code, normally USD |
rent_min | number | Lowest advertised rent (rental buildings) |
rent_max | number | Highest advertised rent (rental buildings) |
price_per_sqft | number | Computed price ÷ living_area_sqft |
bedrooms | number | Bedroom count |
bathrooms | number | Bathroom count (can be fractional, e.g. 2.5) |
living_area_sqft | number | Interior area in square feet |
lot_area_value | number | Lot size as Zillow reports it |
lot_area_unit | string | Unit for lot_area_value (acres or sqft) |
lot_size_sqft | number | Lot size normalised to square feet |
zestimate | number | Zillow's estimated market value |
rent_zestimate | number | Zillow's estimated monthly rent |
tax_assessed_value | number | Latest assessed value |
days_on_zillow | number | Days the listing has been live |
listed_date | string | ISO 8601 UTC listing date |
date_sold | string | ISO 8601 UTC sale date (sold mode) |
price_change | number | Signed price change in currency units |
price_change_date | string | ISO 8601 UTC date of that change |
price_reduction | string | Reduction as displayed, e.g. "$25,000 (Jul 23)" |
open_house | string | Next open-house slot, when advertised |
broker_name | string | Listing brokerage from the search card |
agent_name | string | Listing agent from the search card |
is_zillow_owned | boolean | Zillow-owned inventory flag |
has_3d_model | boolean | 3D home tour available |
has_video | boolean | Video tour available |
is_building | boolean | Row is an apartment building rather than one unit |
building_name | string | Building name (rentals) |
units_available | number | Available units in the building (rentals) |
units | array | Per-unit {beds, price, price_formatted} (rentals) |
image_url | string | Primary photo URL |
photo_count | number | Number of photo URLs returned |
photos | array | Full-size photo URLs |
scraped_at | string | ISO 8601 UTC timestamp of the scrape |
Detail fields (includeDetails: true)
| Field | Type | Description |
|---|---|---|
year_built | number | Construction year |
description | string | Full listing description text |
county | string | County name |
mls_id | string | MLS listing number |
parcel_number | string | Assessor parcel number (APN) |
zoning | string | Zoning code |
architectural_style | string | e.g. "Mediterranean" |
levels / stories | string | Storey description |
property_condition | string | e.g. "Updated/Remodeled" |
monthly_hoa_fee | number | Monthly HOA dues |
property_tax_rate | number | Effective tax rate percentage |
annual_tax_amount | number | Most recent annual tax bill |
last_sold_price | number | Previous sale price |
last_sold_date | string | ISO 8601 UTC previous sale date |
on_market_date | string | ISO 8601 UTC date the listing went live |
listing_agent_name | string | Listing agent |
listing_agent_phone | string | Listing agent phone |
listing_agent_email | string | Listing agent email when published |
listing_agent_license | string | Agent licence number |
brokerage_name | string | Listing brokerage |
brokerage_phone | string | Brokerage phone |
listing_last_updated | string | ISO 8601 UTC last MLS update |
parking_capacity | number | Total parking spaces |
garage_capacity | number | Garage spaces |
has_garage / has_pool / has_cooling / has_heating | boolean | Amenity flags |
fireplaces | number | Fireplace count |
heating / cooling / appliances / flooring / view | array | RESO fact lists |
virtual_tour_url | string | External virtual-tour link |
page_view_count | number | Zillow page views |
favorite_count | number | Times saved by Zillow users |
price_history | array | {date, event, price, price_per_sqft, source} |
tax_history | array | {date, tax_paid, assessed_value} |
schools | array | {name, rating, grades, distance_miles} |
open_house_schedule | array | {start, end} in ISO 8601 UTC |
detail_photos | array | Full 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
priceis 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: trueaddslast_sold_pricewhere Zillow has it. - Rental buildings are shallower than homes. Apartment complexes are returned as one
building row with
is_building: true, arent_min/rent_maxrange and aunitsarray, 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
nullor 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
maxDetailPagesto 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
maxResultson 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.