Zillow ZIP Code Scraper
Pricing
from $0.79 / 1,000 listings
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
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
14 days ago
Last modified
Categories
Share

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
| Parameter | Type | Default | Description |
|---|---|---|---|
zipCodes | array | ["90210"] | US ZIP codes to scrape. Leave empty if using Start URLs or ZPIDs. |
operationType | string | sale | sale, rent, or sold. |
startUrls | array | [] | Zillow property detail URLs to scrape directly. |
zpids | array | [] | Zillow property IDs to scrape directly. |
fetchDetails | boolean | false | Visit each property's detail page for the full field set. Adds one request per property. |
maxItems | integer | 100 | Max listings per run. 0 = unlimited. |
priceMin / priceMax | integer | 0 | Price range in USD. 0 = no bound. |
bedsMin / bedsMax | integer | 0 | Bedroom range. 0 = any. |
bathsMin | integer | 0 | Minimum bathrooms. 0 = any. |
sqftMin / sqftMax | integer | 0 | Living area range in sq ft. 0 = any. |
yearBuiltMin / yearBuiltMax | integer | 0 | Construction year range. 0 = any. |
maxHoa | integer | 0 | Max HOA fee in USD/month. 0 = any. |
sortBy | string | days | days, featured, pricelow, pricehigh, beds, baths, size, zestimate, lot. |
daysOnZillow | string | (any) | Only listings posted within 1, 7, 14, 30, 90, 180 or 365 days. |
keywords | string | (empty) | Free-text keyword, e.g. pool, mountain view. |
mustHavePool | boolean | false | Only listings with a pool. |
mustHaveGarage | boolean | false | Only listings with a garage. |
mustHaveAC | boolean | false | Only listings with air conditioning. |
has3DTour | boolean | false | Only listings with a 3D virtual tour. |
Output schema
Always present
| Field | Type | Description |
|---|---|---|
zpid | string | Zillow property ID. |
url | string | Canonical listing URL. |
address | string | Full address as displayed. |
streetAddress, city, state, zipcode, country | string | Address components. |
latitude, longitude | number | GPS coordinates. |
price | number | Listing price in USD (null if not published). |
priceText | string | Price as displayed, e.g. $1,750,000. |
currency | string | Always USD. |
zestimate | number | Zillow's estimated market value (null if hidden). |
rentZestimate | number | Estimated monthly rent (null if unavailable). |
taxAssessedValue | number | Tax-assessed value (null if unavailable). |
beds, baths | number | Bedroom and bathroom counts. |
livingArea | number | Living area in sq ft. |
lotAreaValue, lotAreaUnit | number / string | Lot size and unit. |
pricePerSqft | number | Price per square foot. |
homeType | string | e.g. SINGLE_FAMILY, CONDO, TOWNHOUSE. |
listingStatus | string | e.g. FOR_SALE, SOLD, FOR_RENT. |
statusText | string | Status as displayed on the listing card. |
daysOnZillow | number | Days the listing has been live. |
priceChange | number | Most recent price change in USD (null if none). |
priceChangedDate | string | ISO date of the last price change. |
dateSold | string | ISO sale date (sold listings only). |
brokerName | string | Listing brokerage. |
imgSrc | string | Primary listing image URL. |
hasPhotos, hasVideo, has3DModel | boolean | Media availability flags. |
isNewConstruction, isComingSoon, isFSBO, isForeclosure, isOpenHouse, isPriceReduced | boolean | Listing flags. |
openHouseStart, openHouseEnd | string | ISO timestamps of the next open house. |
source | string | Always zillow.com. |
scrapedAt | string | ISO timestamp of the scrape. |
detailFetched | boolean | Whether the detail-page fields below were populated. |
With fetchDetails: true
| Field | Type | Description |
|---|---|---|
description | string | Full listing description text. |
yearBuilt | number | Construction year. |
monthlyHoaFee | number | HOA fee in USD/month (null if none). |
propertyTaxRate | number | Annual property tax rate, as a percentage. |
mlsId | string | MLS listing number. |
parcelId | string | County parcel identifier. |
county | string | County name. |
photos | string[] | Full-resolution photo URLs. |
photoCount | number | Number of photos returned. |
bathroomsFull, bathroomsHalf | number | Bathroom breakdown. |
lotSize | string | Lot size as published, e.g. 5,863 sqft or 0.54 Acres. |
propertySubType | string | e.g. SingleFamilyResidence. |
hasGarage | boolean | Garage present. |
garageSpaces, parkingCapacity | number | Parking capacity. |
parkingFeatures | string | Parking 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 get | Price |
|---|---|
| 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.
| Results | Listings only | With 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 size | Typical time |
|---|---|
| 100 listings (search only) | under 1 minute |
| 1,000 listings (search only) | 4–8 minutes |
100 listings with fetchDetails | 3–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,rentZestimateandtaxAssessedValueare 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
