Zillow property listings scraper avatar

Zillow property listings scraper

Pricing

$1.00 / 1,000 results

Go to Apify Store
Zillow property listings scraper

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

Data Dino

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

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, and sold.
  • 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.

FieldTypeDescriptionDefault
modestringListing group to collect: for_sale, for_rent, or sold.for_sale
searchValuestringCity, neighborhood, ZIP code, or address search term. Leave empty for a map-area search using the bounds below.Empty
minBedsintegerMinimum number of bedrooms.1
maxBedsintegerMaximum number of bedrooms.Empty
minBathroomsintegerMinimum number of bathrooms.1
maxBathroomsintegerMaximum number of bathrooms.Empty
minPriceintegerMinimum listing price in USD.Empty
maxPriceintegerMaximum listing price in USD.Empty
isEntirePlacebooleanFor for_rent mode, return entire-place rentals only.false
isRoombooleanFor for_rent mode, return room rentals only.false
neLatnumberNorth-east latitude bound for the map-area search.38.602951833355434
neLongnumberNorth-east longitude bound for the map-area search.-87.22283859375
swLatnumberSouth-west latitude bound for the map-area search.23.42674607019482
swLongnumberSouth-west longitude bound for the map-area search.-112.93084640625
zoomintegerZillow map zoom value. Lower values cover a wider area. Allowed range: 120.5
paginationintegerPagination page passed to the Zillow search request. This actor requests one configured page; it does not automatically iterate through all pages.1
maxResultsintegerMaximum number of listing records pushed to the dataset after the response is received.All returned listings
proxystringOptional 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

  1. The actor loads the input from Apify.
  2. It invokes the Zillow scraper with the selected filters and map settings.
  3. If mapResults contains listings, those records are selected; otherwise, listResults is used.
  4. maxResults is applied after the Zillow response is received.
  5. Each selected listing is pushed as a separate dataset item.
  6. 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: pagination selects 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 scrapeAll mode.
  • 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

  1. Open the actor in Apify.
  2. Choose mode.
  3. Set searchValue and any property filters.
  4. Narrow the map bounds and increase zoom for dense locations.
  5. Optionally set maxResults and a proxy.
  6. Start the run.
  7. Export the dataset as JSON, CSV, Excel, or another supported Apify format.

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.