Zillow property listings scraper
Pricing
$1.00 / 1,000 results
Zillow property listings scraper
💰 $1.00 per 1000 results ❗Collect Zillow property listings for sale, for rent, or sold with beds, baths, price, and map-area filters. Get one structured dataset record per listing for lead generation, market research, and real-estate analysis.
Pricing
$1.00 / 1,000 results
Rating
0.0
(0)
Developer
Data Dino
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Collect structured Zillow listings for properties for sale, for rent, or sold. Search by a city, neighborhood, ZIP code, or address, then narrow results with bedroom, bathroom, price, rental, and map-area filters. The actor pushes one dataset item per listing, flattening each listing's fields (price, address, beds, baths, coordinates, and more) into a single-level record for direct export and analysis.
Best for
- Real-estate inventory and market research
- Price and availability monitoring
- Investment-property discovery
- Lead-generation datasets
- Rental listing collection
- Feeding Zillow listing IDs and URLs into a separate property-details workflow
This actor favors a simple typed input configuration instead of requiring users to construct Zillow's encoded searchQueryState URL.
Features
- Three listing modes:
for_sale,for_rent, andsold. - Typed property filters: minimum and maximum beds, bathrooms, and price.
- Rental filters: optionally return entire-place rentals or room rentals.
- Location search: search by city, neighborhood, ZIP code, or address.
- Custom map area: specify north-east and south-west latitude/longitude bounds and map zoom.
- Controlled output size: cap the number of pushed records with
maxResults. - Flat, export-ready fields: each record exposes ZPID, price, address and its components, beds, baths, area, coordinates, home type/status, Zestimate, rent Zestimate, tax values, lot information, and other listing fields at the top level when Zillow supplies them.
- Proxy and retry support: provide an optional proxy when needed; blocked requests can be retried with a refreshed proxy session.
Input
mode is required. All other fields are optional.
| Field | Type | Description | Default |
|---|---|---|---|
mode | string | Listing group to collect: for_sale, for_rent, or sold. | for_sale |
searchValue | string | City, neighborhood, ZIP code, or address search term. Leave empty for a map-area search using the bounds below. | Empty |
minBeds | integer | Minimum number of bedrooms. | 1 |
maxBeds | integer | Maximum number of bedrooms. | Empty |
minBathrooms | integer | Minimum number of bathrooms. | 1 |
maxBathrooms | integer | Maximum number of bathrooms. | Empty |
minPrice | integer | Minimum listing price in USD. | Empty |
maxPrice | integer | Maximum listing price in USD. | Empty |
isEntirePlace | boolean | For for_rent mode, return entire-place rentals only. | false |
isRoom | boolean | For for_rent mode, return room rentals only. | false |
neLat | number | North-east latitude bound for the map-area search. | 38.602951833355434 |
neLong | number | North-east longitude bound for the map-area search. | -87.22283859375 |
swLat | number | South-west latitude bound for the map-area search. | 23.42674607019482 |
swLong | number | South-west longitude bound for the map-area search. | -112.93084640625 |
zoom | integer | Zillow map zoom value. Lower values cover a wider area. Allowed range: 1–20. | 5 |
pagination | integer | Pagination page passed to the Zillow search request. This actor requests one configured page; it does not automatically iterate through all pages. | 1 |
maxResults | integer | Maximum number of listing records pushed to the dataset after the response is received. | All returned listings |
proxy | string | Optional HTTP(S) proxy, for example http://user:password@host:port. Used for this run when provided. | Empty; managed fallback may apply |
Example: San Diego homes for sale
{"mode": "for_sale","searchValue": "San Diego, CA","minBeds": 2,"minBathrooms": 1,"maxPrice": 1500000,"neLat": 33.4,"neLong": -116.7,"swLat": 32.5,"swLong": -117.6,"zoom": 11,"pagination": 1,"maxResults": 100}
Example: Wisconsin listings with a proxy
{"mode": "for_sale","searchValue": "Wisconsin","maxResults": 25,"proxy": "http://user:password@proxy.example.com:3000"}
For production runs, prefer a proxy that you control and do not share proxy credentials publicly. Zillow may still challenge an exit IP even when a proxy is configured.
Output
The actor pushes one record per listing. Each listing is flattened into a single-level record: top-level listing fields (ZPID, formatted price, combined address, beds, baths, area, status, images, detail URL) are emitted directly, while the nested hdpData.homeInfo fields (numeric price, address components, home type/status, Zestimate, rent Zestimate, living area, tax and lot values) are lifted to the top level. mode, searchValue, and source provide run context.
{"mode": "for_sale","searchValue": "Wisconsin","source": "mapResults","zpid": "40599602","imgSrc": "https://photos.zillowstatic.com/fp/518d4eb3bfa93a3b270692c747d6bdb1-p_e.jpg","hasImage": true,"detailUrl": "/homedetails/1303-Green-Valley-Dr-Neenah-WI-54956/40599602_zpid/","statusType": "FOR_SALE","statusText": "House for sale","price": "$339,900","unformattedPrice": 339900,"priceLabel": "$340K","address": "1303 Green Valley Dr, Neenah, WI 54956","streetAddress": "1303 Green Valley Dr","city": "Neenah","state": "WI","zipcode": "54956","beds": 3,"baths": 3,"area": 1800,"livingArea": 1800,"latitude": 44.197407,"longitude": -88.4915,"homeType": "SINGLE_FAMILY","homeStatus": "FOR_SALE","zestimate": 351800,"rentZestimate": 1825,"taxAssessedValue": 275200,"lotAreaValue": 0.28,"lotAreaUnit": "acres"}
Field availability varies by listing, listing mode, and Zillow response. For example, Zestimate, rent Zestimate, tax values, lot values, open-house information, broker data, and listing flags may be absent from individual records.
If Zillow returns no mapResults or listResults array, the actor pushes one fallback record containing the raw result payload instead of silently dropping the response:
{"mode": "for_sale","searchValue": "San Diego, CA","result": {"...": "raw Zillow response"}}
How result selection works
- The actor loads the input from Apify.
- It invokes the Zillow scraper with the selected filters and map settings.
- If
mapResultscontains listings, those records are selected; otherwise,listResultsis used. maxResultsis applied after the Zillow response is received.- Each selected listing is pushed as a separate dataset item.
- If neither listing array is present, the raw response is pushed as one fallback item.
Proxy and reliability
The scraper supports:
- An optional proxy supplied for the run.
- Automatic retries for request, response-shape, and parsing failures.
- Sticky-session rotation when the configured proxy supports it.
If you provide proxy credentials, keep them private. Zillow may still block or challenge an exit IP even when a proxy is configured.
Limitations and coverage guidance
- One configured request:
paginationselects a page but does not automatically crawl every page. - Map result limits: Zillow limits the number of results returned for a map area. For dense regions, use narrower bounds or a higher zoom and run multiple searches.
- No adaptive subdivision: this actor does not currently split dense regions into quadrants or provide a
scrapeAllmode. - No detail scraping: this actor collects search-result data. It does not currently retrieve full property details such as year built, agent contact data, complete photo galleries, price history, or last sold price.
- Raw response variability: Zillow can add, remove, or omit fields between listings and over time. Treat optional fields as nullable.
- Relative detail URLs: observed Zillow search responses may provide a relative
detailUrl; convert it to an absolute Zillow URL downstream when needed. - Legal and privacy use: use collected data in accordance with Zillow's terms, applicable laws, and privacy/data-use requirements.
For larger coverage requirements, split searches by ZIP code, neighborhood, price range, or smaller map bounds. Use the emitted ZPID and detail URL as handoff keys for a separate property-detail enrichment process.
Run steps
- Open the actor in Apify.
- Choose
mode. - Set
searchValueand any property filters. - Narrow the map bounds and increase
zoomfor dense locations. - Optionally set
maxResultsand a proxy. - Start the run.
- Export the dataset as JSON, CSV, Excel, or another supported Apify format.
Related workflows
Use this actor for broad listing discovery, then pass the resulting ZPIDs or detail URLs to a separate property-details scraper when you need deeper property-level enrichment. The current actor intentionally keeps search collection and detail enrichment separate so basic inventory runs remain predictable and bounded.