Zillow Search Scraper avatar

Zillow Search Scraper

Pricing

from $1.15 / 1,000 property listings

Go to Apify Store
Zillow Search Scraper

Zillow Search Scraper

Go beyond a single Zillow result window with automatic pagination and search subdivision. Collect deduplicated listings by ZIP, location, URL, or map bounds, with your own result limit and coverage metadata.

Pricing

from $1.15 / 1,000 property listings

Rating

0.0

(0)

Developer

Al Ol

Al Ol

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 hours ago

Last modified

Categories

Share

Zillow Search Scraper: Real Estate Listings by ZIP Code

Scrape Zillow real estate listings by ZIP code, city, county, search URL, or map bounds. Zillow Search collects for-sale, rental, sold, FSBO, and foreclosure listing cards, with automatic pagination and subdivision of dense searches. Set your own result limit and collect deduplicated property data across multiple locations in one run.

  • Expand grouped buildings automatically: discover individual properties inside building cards, verify each matching property, and combine them with ordinary listings without duplicate ZPIDs.
  • Scale the search to your needs: maxResults has no fixed upper bound in the input schema; choose a positive limit of at least 20. The default is 20. Source availability, subdivision depth, run time, and budgets still constrain collection, so complete market coverage is not guaranteed.
  • Start with the location you have: combine ZIP codes, city or county names, Zillow search URLs, and map bounds, with filters for your target inventory.
  • See what was collected: normalized rows include quality metadata for coverage, truncation, and missing data. Available listing dates support analysis, and updatedSince supports incremental exports.

Zillow Search collects normalized US real-estate listing cards by ZIP code, free-text location, Zillow search URL, or geographic bounds. It is designed for market research, inventory feeds, property discovery, price tracking inputs, and downstream enrichment with Zillow Property Details.

The Actor writes listing cards to the default Dataset. For detailed data from property pages, including available agent and broker attribution, use Zillow Property Details. For ongoing change tracking with saved monitor state, use Zillow Listing Monitor. Standalone professional profiles are not supported by our current Actors.

Use cases

  • Build current for-sale, rental, sold, FSBO, or foreclosure inventories for a market.
  • Compare asking prices, property types, listing age, and available inventory across locations.
  • Produce filtered listing feeds for analytics, CRM import, or later property-detail runs.
  • Run incremental exports using Zillow's listing modification timestamp when it is available.
  • Search an exact Zillow result URL or a custom map rectangle without converting it to a ZIP code.

Automatic building expansion

Zillow sometimes combines several properties into one building card (isBuilding=true). This Actor opens the building’s exposed unit inventory, retrieves the actual property records for matching candidates, and merges them into collection by ZPID. A property appearing both individually and inside a group is counted once. There is no extra input switch.

Search status, price, bedroom, bathroom, size, property-type, and map-bound filters are checked against individual properties. Sold and off-market units are not added to an active-sale search. Existing result limits and budgets still apply; expanding buildings requires additional source requests and may increase run time.

Zillow may return null, empty lists, or omit optional unit lists. These values are skipped while available individual properties are still processed; missing inventory alone does not degrade the scan or trigger retries. Floor-plan IDs and building minimum prices are never substituted for individual property records. Actual fetch failures, unfinished pagination, and invalid property data still affect collection quality.

Input examples

At least one of zipCodes, locationQueries, searchUrls, or mapBounds must identify a search area. Multiple location inputs create multiple targets in one run.

{
"zipCodes": [
"78704"
],
"maxResults": 100
}
{
"locationQueries": [
"Austin, TX",
"Travis County, TX"
],
"listingTypes": [
"forSale",
"fsbo"
],
"priceMin": 300000,
"priceMax": 900000,
"bedsMin": 3,
"bathsMin": 2,
"sqftMin": 1500,
"homeTypes": [
"house",
"townhome"
],
"daysOnZillowMax": 30,
"keywords": [
"garage",
"pool"
],
"maxResults": 500
}
{
"zipCodes": [
"78704"
],
"updatedSince": "2026-08-01T00:00:00Z",
"updatedSinceUnknownPolicy": "exclude",
"externalId": "august-feed",
"correlationId": "sync-2026-08-30"
}

With updatedSinceUnknownPolicy: "include", listings without a Zillow modification timestamp are retained for higher recall. With "exclude", only rows with a timestamp at or after updatedSince are emitted.

{
"mapBounds": {
"north": 30.35,
"south": 30.2,
"east": -97.65,
"west": -97.85
},
"listingTypes": [
"forRent"
],
"maxResults": 250
}

Search within a radius and sale-date window

Use center with radiusMiles for an exact circular target. A fractional radius such as 2.5 miles is supported. Do not combine it with ZIP codes, location queries, search URLs or map bounds. Cards without coordinates are excluded. Sale-date boundaries are inclusive; unknown sale dates are excluded. Date windows require only the sold listing type and cannot be combined with daysOnZillowMax or search URLs.

{
"center": {
"latitude": 47.6,
"longitude": -122.3
},
"radiusMiles": 2.5,
"listingTypes": [
"sold"
],
"soldDateFrom": "2026-08-01",
"soldDateTo": "2026-09-11",
"maxResults": 20
}

The source is queried over an enclosing rectangle; exact radius and sale-date filters run before the result limit. A narrow window may still require many source requests. Use upstream attempt/cost limits to bound that work; reaching them can leave the result incomplete.

Output examples

Listing row

The following synthetic example is shortened for readability. Optional fields can be absent; fields that Zillow knows to be unavailable can be null.

{
"externalId": "august-feed",
"correlationId": "sync-2026-08-30",
"zpid": "123456789",
"url": "https://www.zillow.com/homedetails/example/123456789_zpid/",
"address": {
"street": "100 Example Ave",
"city": "Austin",
"state": "TX",
"zip": "78704",
"full": "100 Example Ave, Austin, TX 78704"
},
"latitude": 30.25,
"longitude": -97.75,
"status": "FOR_SALE",
"price": 625000,
"currency": "USD",
"zestimate": 618000,
"rentZestimate": 3200,
"beds": 3,
"baths": 2,
"livingAreaSqft": 1840,
"lotAreaSqft": 6534,
"homeType": "SINGLE_FAMILY",
"daysOnZillow": 12,
"lastModifiedAt": "2026-08-29T15:30:00.000Z",
"photoUrl": "https://photos.zillowstatic.com/example.jpg",
"providerListingId": "AUS-100200",
"listingSubTypes": [
"FSBA",
"OPEN_HOUSE"
],
"has3DModel": false,
"hasVideo": true,
"hasOpenHouse": true,
"openHouseStartAt": "2026-09-01T17:00:00.000Z",
"openHouseEndAt": "2026-09-01T20:00:00.000Z",
"carouselPhotoUrls": [
"https://photos.zillowstatic.com/example-1.jpg",
"https://photos.zillowstatic.com/example-2.jpg"
],
"scrapedAt": "2026-08-30T10:00:00.000Z",
"quality": {
"expected": null,
"fetched": 1,
"deduplicated": 1,
"coverage": null,
"truncated": false,
"degraded": false,
"dataAgeSeconds": 0,
"completeness": "unknown",
"reasons": []
}
}

Construction year, sale data and price basis

yearBuilt, lastSoldPrice, lastSoldDate and pricePerSqft are nullable. Ordinary search cards usually do not include construction year; an expanded building unit may provide it. No per-card Details request is added to fill these fields. Older stored cards may omit them.

lastSoldDate is the source's calendar sale date, not the listing or modification date. lastSoldPrice uses an exact disclosed numeric price on a confirmed sold card; it stays null when absent or conflicting. Rounded display labels such as "$1.28M" do not replace an exact numeric sale price. Some markets do not disclose sale prices.

pricePerSqft divides a known numeric card price by positive living area: asking price for active sale listings, monthly rent for rentals, disclosed transaction price for sold cards. These bases are different; do not mix them in a single market median. Unavailable or ambiguous values remain null.

Pricing

There is no fixed start charge. Platform usage is included in the event prices below. Paid runs request at least 20 results, and only a successfully emitted listing is charged as one search-result; failed targets, diagnostics, and empty results are not charged.

The effective result price depends on the customer's Apify tier. Apify applies the rate for the customer's eligible account tier to every charged listing:

Apify tierPer listingPer 1,000 listings
FREE$0.00200$2.00
BRONZE$0.00170$1.70
SILVER$0.00145$1.45
GOLD$0.00115$1.15

Examples: 250 FREE-tier listings cost 250 × $0.00200 = $0.50. Five thousand GOLD-tier listings cost 5,000 × $0.00115 = $5.75.

Prices may change. Under Apify's current policy, users are notified about significant pricing changes such as increases, new paid events, or a pricing-model change, and the existing price normally remains active for 14 days. If the Actor has no paying users, the waiting period may not apply. Price decreases and non-pricing description changes can take effect immediately. Always confirm the current price shown in the Actor's Pricing tab before starting a run.

Limits and reliability

  • Search is US-only and depends on fields Zillow exposes at collection time.
  • Zillow limits visible result windows. The Actor paginates and can split dense result areas, but it cannot guarantee complete market coverage.
  • Multiple targets are de-duplicated before output. maxResults applies to emitted rows across the run.
  • A secondary search path can be degraded and may not preserve every filter available to the primary search path.
  • maxUpstreamCostUsd is best effort because a request cannot be stopped after it has already started.
  • A syntactically successful upstream response is accepted only after endpoint-specific validation; invalid content can be retried or rejected.

The input minimum of 20 requests a result limit; it is not a minimum bill. If only three cards are published, three result events apply. A platform minimum spending limit is the smallest permitted cap, not a fixed fee.

FAQ

How do I scrape Zillow listings by ZIP code?

Supply five-digit strings in zipCodes, select listingTypes, and set maxResults for the listing volume you need. The Actor paginates and subdivides dense searches automatically. Available inventory, run budgets, and collection limits determine the results; a result limit does not guarantee that many listings.

Does this return full property details?

No. Search returns normalized listing cards. Use Zillow Property Details for detailed property data, available history, schools, media, and agent or broker attribution.

Why is the Dataset empty?

The query may have no matches, updatedSince may exclude every row, Zillow may not expose the target, or the target may fail before a valid listing is collected. Check the run log and try a smaller known-valid location.

Are duplicate properties charged twice?

Rows are globally de-duplicated by property identity before emission. Overlapping search targets can still require additional upstream work, but billing is based on successfully emitted search-result rows.

Is updatedSince guaranteed for every listing?

No. Zillow omits lastModifiedAt on some cards. Choose include for recall or exclude for a strict timestamp feed.

Can I cap spending?

Yes. Use maxTotalChargeUsd for a hard PPE cap. Upstream limits control operational work separately from customer event charges.

Explore our other real-estate Actors for property discovery, enrichment, market analysis, and monitoring:

Responsible use and data availability

This Actor retrieves information that Zillow makes publicly accessible. Public availability does not by itself grant permission to collect, store, combine, publish, or otherwise reuse that information. Your use may be governed by Zillow's terms and by MLS, copyright, privacy, fair-housing, marketing, and other applicable rules. You are responsible for confirming a lawful purpose and obtaining any permissions required for your workflow. This independent Actor is not affiliated with, endorsed by, or sponsored by Zillow.

Zillow controls the source content and may change, remove, or withhold fields at any time. The Actor normalizes the information it can retrieve, but it cannot guarantee that every field will be present for every listing or remain available over time.