Zillow ZIP Code Scraper avatar

Zillow ZIP Code Scraper

Pricing

from $0.79 / 1,000 listings

Go to Apify Store
Zillow ZIP Code Scraper

Zillow ZIP Code Scraper

Scrape Zillow by ZIP code: for sale, rent, sold. 55 filters, map tiling, price history. $0.80/1K results — the lowest price on Apify, cheaper than any alternative.

Pricing

from $0.79 / 1,000 listings

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

14 days ago

Last modified

Share

zillow-zip-scraper

Scrape Zillow by ZIP code and get full property records back in a single run — search and detail in one Actor, with no second scraper to wire up. Feed it ZIP codes, property URLs, or ZPIDs. No API key required.


Why this scraper?

🏠 One Actor, not two

Most Zillow workflows need a search scraper to collect URLs and a second detail scraper to enrich them. This Actor does both. Give it a ZIP code, switch on Fetch property detail pages, and every listing comes back enriched — description, photos, year built, MLS ID, HOA fee, tax rate.

🎯 Filters that actually filter

Every filter is verified against live Zillow before it ships. Set a $3M ceiling and you get homes under $3M, not the whole ZIP code. Filters that Zillow silently ignores are not offered at all, rather than shipped as switches that quietly do nothing.

🔗 Drop-in for URL-based scrapers

Already have a list of Zillow property URLs or ZPIDs? Paste them into Start URLs or ZPIDs and skip the search entirely. Same enriched output.

📍 Precise location data

Full address, city, state, ZIP, county and latitude/longitude on every record.

💵 Valuation signals

Zestimate, rent Zestimate, tax-assessed value, price per square foot, price-change flags and days on Zillow.


Input parameters

ParameterTypeDefaultDescription
zipCodesarray["90210"]US ZIP codes to scrape. Leave empty if using Start URLs or ZPIDs.
operationTypestringsalesale, rent, or sold.
startUrlsarray[]Zillow property detail URLs to scrape directly.
zpidsarray[]Zillow property IDs to scrape directly.
fetchDetailsbooleanfalseVisit each property's detail page for the full field set. Adds one request per property.
maxItemsinteger100Max listings per run. 0 = unlimited.
priceMin / priceMaxinteger0Price range in USD. 0 = no bound.
bedsMin / bedsMaxinteger0Bedroom range. 0 = any.
bathsMininteger0Minimum bathrooms. 0 = any.
sqftMin / sqftMaxinteger0Living area range in sq ft. 0 = any.
yearBuiltMin / yearBuiltMaxinteger0Construction year range. 0 = any.
maxHoainteger0Max HOA fee in USD/month. 0 = any.
sortBystringdaysdays, featured, pricelow, pricehigh, beds, baths, size, zestimate, lot.
daysOnZillowstring(any)Only listings posted within 1, 7, 14, 30, 90, 180 or 365 days.
keywordsstring(empty)Free-text keyword, e.g. pool, mountain view.
mustHavePoolbooleanfalseOnly listings with a pool.
mustHaveGaragebooleanfalseOnly listings with a garage.
mustHaveACbooleanfalseOnly listings with air conditioning.
has3DTourbooleanfalseOnly listings with a 3D virtual tour.

Output schema

Always present

FieldTypeDescription
zpidstringZillow property ID.
urlstringCanonical listing URL.
addressstringFull address as displayed.
streetAddress, city, state, zipcode, countrystringAddress components.
latitude, longitudenumberGPS coordinates.
pricenumberListing price in USD (null if not published).
priceTextstringPrice as displayed, e.g. $1,750,000.
currencystringAlways USD.
zestimatenumberZillow's estimated market value (null if hidden).
rentZestimatenumberEstimated monthly rent (null if unavailable).
taxAssessedValuenumberTax-assessed value (null if unavailable).
beds, bathsnumberBedroom and bathroom counts.
livingAreanumberLiving area in sq ft.
lotAreaValue, lotAreaUnitnumber / stringLot size and unit.
pricePerSqftnumberPrice per square foot.
homeTypestringe.g. SINGLE_FAMILY, CONDO, TOWNHOUSE.
listingStatusstringe.g. FOR_SALE, SOLD, FOR_RENT.
statusTextstringStatus as displayed on the listing card.
daysOnZillownumberDays the listing has been live.
priceChangenumberMost recent price change in USD (null if none).
priceChangedDatestringISO date of the last price change.
dateSoldstringISO sale date (sold listings only).
brokerNamestringListing brokerage.
imgSrcstringPrimary listing image URL.
hasPhotos, hasVideo, has3DModelbooleanMedia availability flags.
isNewConstruction, isComingSoon, isFSBO, isForeclosure, isOpenHouse, isPriceReducedbooleanListing flags.
openHouseStart, openHouseEndstringISO timestamps of the next open house.
sourcestringAlways zillow.com.
scrapedAtstringISO timestamp of the scrape.
detailFetchedbooleanWhether the detail-page fields below were populated.

With fetchDetails: true

FieldTypeDescription
descriptionstringFull listing description text.
yearBuiltnumberConstruction year.
monthlyHoaFeenumberHOA fee in USD/month (null if none).
propertyTaxRatenumberAnnual property tax rate, as a percentage.
mlsIdstringMLS listing number.
parcelIdstringCounty parcel identifier.
countystringCounty name.
photosstring[]Full-resolution photo URLs.
photoCountnumberNumber of photos returned.
bathroomsFull, bathroomsHalfnumberBathroom breakdown.
lotSizestringLot size as published, e.g. 5,863 sqft or 0.54 Acres.
propertySubTypestringe.g. SingleFamilyResidence.
hasGaragebooleanGarage present.
garageSpaces, parkingCapacitynumberParking capacity.
parkingFeaturesstringParking description.

When fetchDetails is false, every field in the second table is returned as null (or [] / 0) rather than omitted, so the output shape stays stable.

Example record

{
"zpid": "20523735",
"url": "https://www.zillow.com/homedetails/9861-Easton-Dr-Beverly-Hills-CA-90210/20523735_zpid/",
"address": "9861 Easton Dr, Beverly Hills, CA 90210",
"city": "Beverly Hills",
"state": "CA",
"zipcode": "90210",
"latitude": 34.109878,
"longitude": -118.42045,
"price": 1750000,
"priceText": "$1,750,000",
"zestimate": 1802400,
"rentZestimate": 8500,
"beds": 2,
"baths": 2,
"livingArea": 1503,
"pricePerSqft": 1164,
"homeType": "SINGLE_FAMILY",
"listingStatus": "FOR_SALE",
"daysOnZillow": 12,
"brokerName": "Compass",
"description": "A rare opportunity to own a restored piece of Hollywood history in Benedict Canyon. Built in 1928...",
"yearBuilt": 1928,
"monthlyHoaFee": null,
"propertyTaxRate": 1.18,
"mlsId": "SB26151873",
"county": "Los Angeles County",
"photos": ["https://photos.zillowstatic.com/fp/example-photo.jpg"],
"photoCount": 50,
"bathroomsFull": 2,
"lotSize": "5,863 sqft",
"hasGarage": true,
"garageSpaces": 2,
"detailFetched": true,
"source": "zillow.com",
"scrapedAt": "2026-07-13T18:11:04.512Z"
}

Examples

All homes for sale in a ZIP code:

{
"zipCodes": ["90210"],
"operationType": "sale",
"maxItems": 100
}

Filtered search — under $3M, 2+ bedrooms, cheapest first:

{
"zipCodes": ["90210"],
"operationType": "sale",
"priceMax": 3000000,
"bedsMin": 2,
"sortBy": "pricelow"
}

Full detail records, including description and photos:

{
"zipCodes": ["10001", "10002"],
"operationType": "sale",
"fetchDetails": true,
"maxItems": 50
}

Scrape specific properties directly, with no search:

{
"startUrls": [
{ "url": "https://www.zillow.com/homedetails/1420-Davies-Dr-Beverly-Hills-CA-90210/20523735_zpid/" }
],
"zpids": ["20533547"]
}

Daily feed of newly listed homes:

{
"zipCodes": ["90210"],
"operationType": "sale",
"daysOnZillow": "1",
"sortBy": "days"
}

💰 Pricing

You pay per listing returned. Failed retries are never charged, and a listing whose detail enrichment fails is never charged the detail rate.

What you getPrice
Listing (search result, all core fields)$0.79 per 1,000
Listing + detail (adds description, photos, year built, MLS ID, HOA, tax rate, parking)$2.19 per 1,000

Detail enrichment visits each property's own page, so it costs more to produce and is priced separately. Leave Fetch property detail pages off and you only ever pay the listing rate.

ResultsListings onlyWith detail
100~$0.08~$0.22
1,000~$0.79~$2.19
10,000~$7.90~$21.90
100,000~$79.00~$219.00

Running a Zillow search scraper and a separate detail scraper typically costs around $5.00 per 1,000 combined. This Actor does both in one run.

Use the Max Items cap to control your spend exactly.


Performance

Run sizeTypical time
100 listings (search only)under 1 minute
1,000 listings (search only)4–8 minutes
100 listings with fetchDetails3–6 minutes

fetchDetails adds one request per property, so detail runs take considerably longer than search-only runs.


Known limitations

  • Price history, tax history and school ratings are not returned. Zillow serves these from an endpoint its bot protection blocks. We would rather leave the fields out than ship empty columns.
  • Waterfront, open-house-only and price-reduced filters are not offered. Zillow silently ignores these filter parameters and returns unfiltered results, so shipping them would mean shipping switches that do nothing.
  • zestimate, rentZestimate and taxAssessedValue are null whenever Zillow does not publish them for a property.
  • Zillow caps each search at roughly 20 pages per ZIP code. For very dense ZIP codes, narrow the search with price or bedroom filters to reach the full inventory.
  • Agent and individual contact details are never collected.

Technical details

  • Source: zillow.com — US residential listings
  • Coverage: nationwide, by ZIP code, property URL, or ZPID
  • Retry: automatic retry with fresh residential IPs and exponential backoff

Need a custom scraper?

Unfenced Group builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl