Zillow Search Scraper avatar

Zillow Search Scraper

Pricing

$1.00 / 1,000 results

Go to Apify Store
Zillow Search Scraper

Zillow Search Scraper

Search public Zillow property listings by ZIP code. Export sale, rental, and recently sold homes with prices, addresses, photos, property facts, and listing links.

Pricing

$1.00 / 1,000 results

Rating

0.0

(0)

Developer

MLG Data

MLG Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share

Scrape Zillow property listings by US ZIP code, including homes for sale, rentals, and recently sold properties. Export Zillow search data to JSON, CSV, or Excel with prices, addresses, listing links, property facts, photos, and status fields. This provides a structured Zillow search data source for recurring market research and listing comparisons.

Search results are collected from public search pages. Each dataset item represents a search card: a home, sold property, or rental building. The actor follows result pages, removes repeated identifiers within each ZIP code, and stops at the limits you set. A run can cover several ZIP codes. When you select more than one listing category, results are collected in this order: for sale by agent, for sale by owner, for rent, then recently sold. The result limit for a ZIP code applies across those categories.

What data can you extract from Zillow?

The output uses one stable record shape across sale, rent, and sold searches. A field is null when the public search card does not supply it. For instance, a sold property has listingSoldPrice and may have no active listingPriceAmount; a rental building can have rentalUnits instead of one bedroom count. These values describe the search card at collection time, not a complete property history.

FieldDescriptionExample
zpidListing or building identifier458671486
providerListingIdProvider identifier for rental buildings when present2336vc4z7pn5g
propertyUrlPublic property or building page URLProperty link
sourceSearchUrlSearch URL that yielded the listingSearch link
searchZipCodeRequested ZIP code10014
listingStatusforSale, forRent, or soldforSale
statusTextStatus shown on the search cardActive
homeTypeProperty type such as CONDOCONDO
cardTypehome or buildinghome
listingPriceAmountSale price or starting monthly rent85000000
listingPriceCurrencyISO price currencyUSD
listingPriceFormattedDisplayed sale or rental price$85,000,000
listingSoldPriceSold price for recently sold listings2285000
addressFullFull displayed address125 Perry St #Phe, New York, NY 10014
addressStreetStreet address125 Perry St #Phe
addressUnitUnit or apartment# PHE
addressCityCityNew York
addressStateTwo-letter state codeNY
addressZipCodeListing ZIP code10014
addressCountryCountryUSA
latitudeLatitude40.734997
longitudeLongitude-74.007034
bedroomsBedroom count6
bathroomsBathroom count10
livingAreaLiving area7700
livingAreaUnitLiving area unitsqft
lotAreaLot area2500
lotAreaUnitLot area unitsqft
daysOnZillowDays shown in structured listing data300
dateSoldSold date in YYYY-MM-DD format2026-09-25
zestimateEstimated home value when supplied2923300
rentZestimateEstimated monthly rent when supplied4500
taxAssessedValueTax assessed value when supplied211115
priceChangeMost recent price change amount-100000
priceChangedAtMost recent price change date2026-09-15
priceReductionDisplayed price reduction text$100,000 (Sep 15)
hasImageWhether an image is availabletrue
has3DModelWhether a 3D tour is availablefalse
hasVideoWhether a video is availablefalse
mainImageMain listing photo URLPhoto link
listingPhotosPhoto URLs and captions from the search card[{"url": "...", "caption": null}]
photoCountNumber of listed photos17
isZillowOwnedWhether the listing is marked as owned by Zillowfalse
isFSBAFor-sale-by-agent flagtrue
isFSBOFor-sale-by-owner flagfalse
isComingSoonComing-soon flagfalse
isPendingPending flagfalse
isOpenHouseOpen-house flagtrue
isNewHomeNew-home flagfalse
isForAuctionAuction flagfalse
isForeclosureForeclosure flagfalse
isBankOwnedBank-owned flagfalse
contingencyTypeContingent listing typenull
brokerNameListing brokerage shown on the cardCompass
marketingTaglineShort card highlightOutdoor kitchen
cardHighlightCard highlight categoryhomeInsight
openHouseOpen-house details or displayed open-house timeTue. 4:30-5:30pm
factsAndFeaturesAdditional card facts when suppliedFeature object
marketingTreatmentsMarketing labels on the listing["paid"]
priceIncludesMonthlyFeesWhether shown rent includes required monthly feesfalse
isRentalWithBasePriceWhether rental price is a base pricetrue
availabilityDateRental availability date when supplied2026-10-07 00:00:00
availabilityCountAvailable unit count on a rental building2
rentalUnitsAvailable unit summaries for a rental buildingUnit summaries
isBuildingWhether the card represents a rental buildingfalse
scrapedAtUTC collection timestampUTC timestamp
isValidWhether identifier, URL, and address are presenttrue

listingPhotos contains photo objects with url and optional caption. rentalUnits contains the unit summaries shown on building cards, such as a displayed starting rent and bedroom count. Coordinates are separate numeric fields, which makes the CSV export easier to map. Prices remain numeric where the source gives a number; the displayed price is preserved separately because rental cards may show a plus sign or monthly suffix. For sold records, dateSold uses a date string when Zillow includes a timestamp in the search card.

How to scrape Zillow by ZIP code

  1. Enter one or more five-digit US ZIP codes in zipCodes. Keep leading zeroes: enter 07306 as text, not a number.
  2. Select one or more listing categories. The default is homes for sale by agent. Enable rentals or recently sold properties when those are the records you need.
  3. Set price, listing-age, and minimum-bedroom filters if needed. For rent searches, price values refer to monthly rent. Use resultsLimit to cap each ZIP code and maxItems to cap the whole run.
  4. Run the actor. Open the default dataset to review the listing records, then download JSON, CSV, or Excel.

The actor searches each ZIP code separately. If you choose multiple categories and want a balanced number from each, run them separately: the first selected category may fill that ZIP code's result limit. A listing that appears in more than one selected category is included once for that ZIP code. Results from distinct ZIP code searches remain separate so each output row keeps its searchZipCode context.

Input

NameTypeDefaultWhat it controls
zipCodesstring listRequiredUS ZIP codes to search.
forSaleByAgentbooleantrueHomes offered for sale by agents.
forSaleByOwnerbooleanfalseOwner-listed sale homes, where available.
forRentbooleanfalseRental homes and apartment building cards.
soldbooleanfalseRecently sold properties.
priceMinintegerUnsetMinimum sale price or monthly rent.
priceMaxintegerUnsetMaximum sale price or monthly rent.
daysOnZillowselectionAnyOne of the public search time windows, from one day to 36 months.
minBedsintegerUnsetMinimum bedroom count.
resultsLimitinteger100Maximum unique results per ZIP code across selected categories; 0 removes this cap.
maxItemsinteger0Maximum output rows across the run; 0 removes this cap.
proxyConfigurationobjectPlatform proxyConnection configuration for public pages.

Example for a sale search in two ZIP codes:

{
"zipCodes": ["10014", "07306"],
"forSaleByAgent": true,
"forSaleByOwner": false,
"forRent": false,
"sold": false,
"priceMax": 5000000,
"minBeds": 2,
"resultsLimit": 100
}

Example for rental research:

{
"zipCodes": ["10014"],
"forSaleByAgent": false,
"forRent": true,
"priceMin": 3000,
"priceMax": 8000,
"resultsLimit": 50
}

Select at least one listing category. If both price bounds are provided, the minimum must not exceed the maximum. An empty ZIP code list or a value that is not five digits stops the run with an input error. A ZIP code can have zero results for a narrow category, especially owner-listed homes or tight price filters.

Output example

This shortened item is from the verified sale run for ZIP code 10014. The actual dataset row also includes optional flags, valuation fields, photo objects, and collection metadata.

{
"zpid": "458671486",
"propertyUrl": "https://www.zillow.com/homedetails/125-Perry-St-PHE-New-York-NY-10014/458671486_zpid/",
"sourceSearchUrl": "https://www.zillow.com/homes/10014_rb/",
"searchZipCode": "10014",
"listingStatus": "forSale",
"statusText": "Active",
"homeType": "CONDO",
"listingPriceAmount": 85000000,
"listingPriceCurrency": "USD",
"listingPriceFormatted": "$85,000,000",
"addressFull": "125 Perry St #Phe, New York, NY 10014",
"addressCity": "New York",
"addressState": "NY",
"addressZipCode": "10014",
"latitude": 40.734997,
"longitude": -74.007034,
"bedrooms": 6,
"bathrooms": 10,
"livingArea": 7700,
"livingAreaUnit": "sqft",
"daysOnZillow": 300,
"hasImage": true,
"photoCount": 17,
"brokerName": "Compass",
"isFSBA": true,
"isValid": true
}

The displayed price and availability can change after collection. Use scrapedAt to distinguish snapshots, and use zpid with searchZipCode to compare repeated runs. A rental building may use a location-like identifier rather than a numeric home identifier; treat zpid as text. providerListingId can give an additional rental identifier when the public card contains one.

Use cases

  • Compare asking prices, living area, and bedroom counts across nearby ZIP codes. Keep the source link beside each row so a reviewer can inspect a listing.
  • Track recently sold prices in a neighborhood and compare them with currently listed asking prices. Run sale and sold searches separately when you need a fixed number of each.
  • Build a rental inventory by ZIP code, including building cards with available unit summaries and starting monthly rents.
  • Monitor new listings within a selected public time window. Store periodic exports and compare identifiers between runs to find additions and removals.
  • Prepare a property research sheet for analysts, investors, or local service teams using CSV or Excel. Filter on listingStatus, homeType, price, and location fields.
  • Review public listing coverage and data quality. Optional fields and isValid help identify which cards have enough information for a downstream workflow.

These are listing discovery uses. The actor does not open every property detail page, assess investment value, verify legal title, or provide a complete sold transaction record. Confirm decisions against current source pages and independent records.

How much does it cost to scrape Zillow?

The actor is configured at $0.001 per delivered result, or $1 per 1,000 results, with pay-per-result charging. A run returning 100 rows has $0.10 in result charges; 1,000 rows has $1.00; 5,000 rows has $5.00. Account usage and any applicable platform charges can appear separately in your run details. The result limit and account budget can stop a run before all accessible pages are collected.

A request for 100 results is a cap, not a guarantee: the selected ZIP code and filters may yield fewer. Conversely, selecting multiple ZIP codes can produce a larger total than one ZIP code's resultsLimit. Set maxItems when you need a strict total result count and a predictable maximum result charge. Filtering narrowly before a run also avoids spending result charges on records you do not plan to use.

Tips for best results

Begin with one ZIP code and one listing category to check coverage. If the ZIP code has many results, set resultsLimit to the number you actually need. Search several ZIP codes in one run when the same filters apply to all of them. For different price ranges or category mixes, use separate runs so each output is easy to interpret.

The price filter is applied by the public search page. For-sale amounts are property prices, while rental amounts are monthly prices shown on rental cards. A rental building can present several unit prices; listingPriceAmount is parsed from the first displayed unit, and rentalUnits retains the unit summaries. For a precise unit-level comparison, inspect those summaries rather than assuming every unit costs the card's starting price.

Use the listing-age selection for a shorter view of current activity. Zillow's public time-window choices vary by category; verify the chosen period against the output, especially for sold listings. daysOnZillow is copied from the search card when present and can differ from a simple calculation based on the current date. A missing value is represented as null, not zero.

For a regular snapshot, keep the same ZIP codes and filters across runs. Compare zpid and listingStatus, and use scrapedAt to order snapshots. A changed price or missing listing in a later result does not by itself prove a sale: it can also reflect revised filters, ranking, temporary availability, or a public page change.

Limits

The actor reads structured data embedded in public Zillow search pages. Search card fields are less complete than detail pages. Some listings omit living area, valuation, tax value, broker, photo gallery, exact unit details, or sold date. Recently sold cards may show map or street-view imagery rather than property photos; mainImage is then empty. Building cards may omit home type, beds, baths, and living area while supplying available units.

The actor follows up to 20 result pages per ZIP code and category. That protects runs from unbounded paging, but a broad sold search can have more results than those pages expose. Narrow the search by price, listing age, or ZIP code when you need better coverage. The public site can also limit, reorder, or change its result pages. Repeated identifiers within a ZIP code are removed. This makes output stable for one run but does not guarantee every listing in the wider market appears.

Public pages sometimes reject automated traffic. The actor starts with datacenter connections, rotates sessions after blocks, and can fall back to residential connections. That fallback may use paid proxy capacity. If a category has no results, first verify the ZIP code and filters; some owner-listed searches genuinely return zero. If all searches fail, the run reports an error. When one search fails after others succeed, delivered results remain available and the failure appears in the run log.

The actor accepts US five-digit ZIP codes only. It does not support city names, arbitrary map polygons, addresses, saved searches, login-only data, or private account content. Values reflect what the public search page displayed when collected. They should be treated as leads for review rather than certified property records.

FAQ

Is scraping public listings allowed?

Rules depend on the site terms, local law, and how you use the data. Limit collection to publicly visible information, review the applicable terms, and avoid misuse of personal data. This actor is designed for public listing cards and does not sign into accounts. If your use is regulated or high stakes, get appropriate advice before relying on an export.

Do I need to configure a proxy?

The default connection setting is ready for normal runs. The actor tries lower-cost connections first and can change route after a block. You can provide a proxy configuration if your account or workflow requires one. Public-site blocking can still vary by time and location.

How long does a run take?

It depends on ZIP code count, result pages, filters, and whether the public site blocks a request. A verified 40-result search completed successfully, but larger searches and connection retries take longer. The run log shows progress and any search-level failures.

Can I schedule or monitor repeated searches?

Yes. Schedule runs and compare datasets over time. Keep the input fixed if you want comparable snapshots. Monitor both item count and the fill of fields you rely on, because the public page can change its card data without changing the input.

Can I export to a spreadsheet?

Yes. Download the default dataset as CSV or Excel, or use JSON for a programmatic workflow. Flattened address, location, price, and property facts make spreadsheet sorting straightforward. Arrays such as listingPhotos and rentalUnits remain structured values in JSON.

Why is a field empty?

The search card may not publish it for that listing type. Building cards, home cards, and sold cards expose different facts. Empty optional fields are null, while an available photo or unit list may be an empty array. Open the propertyUrl to check the current public page if that field matters.

Why are there fewer results than the limit?

resultsLimit is a maximum. Tight filters, owner-listed inventory, duplicate cards, the site's pagination cap, and changing public availability can reduce the number delivered. For broader coverage, try a larger time window, fewer filters, or several adjacent ZIP codes.

Integrations

Use the dataset endpoint to read results from another application, or connect run completion to a webhook. Scheduled runs can feed a spreadsheet, database, or reporting workflow. The standard platform integrations also support common automation services. Keep the input and scrapedAt with each export so later comparisons have the right context.

Support

Open an issue on the Issues tab; we reply within 24h and add fields on request.