🏡 Zillow ZIP Code Search Scraper
Pricing
from $2.99 / 1,000 results
🏡 Zillow ZIP Code Search Scraper
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
🚀 Scrape Zillow listings by ZIP code at scale. Pull homes for sale, rent, sold, FSBO, and more — with prices 💰, beds/baths 🛏️🛁, square footage 📐, photos 📸, Zestimate®, broker info, and exact lat/long coordinates. Built for speed, accuracy, and tough anti-bot defenses with smart proxy fallback.
💡 Why Choose This Scraper?
- ⚡ Lightning-fast — concurrent pagination across multiple ZIPs at once
- 🧠 Smart proxy fallback — direct → 🏢 datacenter → 🏘️ residential (3 retries). Sticks once it works.
- 🛡️ Browser-grade fingerprinting — TLS + HTTP/2 impersonation via
curl_cffislips past Cloudflare-style defenses - 💾 Live-saving — every listing is pushed to the dataset the moment it is parsed. A crash mid-run still leaves you with usable data.
- 🎯 Real fields, not guesses — pulls the same payload the Zillow website sees, including
hdpData.homeInfo, photo carousels, andlatLong - 📦 Bulk ZIP input — paste 1 ZIP or 1,000 in one run
- 🆓 Generous free tier — start scraping with no proxy at all
✨ Key Features
- 📮 Bulk ZIP search — one Zillow request per ZIP, parallelized
- 📈 Status filters — for-sale by agent, FSBO, for-rent, recently sold
- 💰 Price filters — min/max sale price OR max monthly rent (auto-switches with "For Rent")
- 📅 Days-on-Zillow filter — last 24h, 7d, 14d, 30d, 90d, 6m, 12m, 24m, 36m
- 🔢 Per-ZIP cap —
maxItemslimits how many listings each ZIP returns - 📸 Photo URLs — full carousel of listing photos at multiple sizes
- 🌐 Geo-coordinates — exact lat/long per home for mapping pipelines
- 🛡️ Auto proxy ladder — escalates only when blocked, never wastes proxy quota when direct works
- 🔁 Retry logic — exponential backoff with jitter on 429/5xx
- 📊 Real-time logs — see each listing land as it is pushed
📥 Input
{"zipCodes": ["10014", "07306"],"forSaleByAgent": true,"forSaleByOwner": false,"forRent": false,"sold": false,"priceMax": 4000000,"priceMin": 0,"daysOnZillow": "","maxItems": 50,"proxyConfiguration": { "useApifyProxy": false }}
Field reference
| Field | Type | Description |
|---|---|---|
zipCodes ⭐ | array of strings | US ZIP codes to search. One Zillow query per ZIP. Bulk input supported. |
forSaleByAgent | boolean | Include broker / MLS listings. Default true. |
forSaleByOwner | boolean | Include FSBO listings. Default false. |
forRent | boolean | Include rentals. When true, priceMax becomes the max monthly rent. Default false. |
sold | boolean | Search recently sold homes instead of active listings. Default false. |
priceMax | integer | Maximum sale price (or rent if forRent). 0 = no cap. |
priceMin | integer | Minimum sale price (or rent if forRent). 0 = skip. |
daysOnZillow | enum | "", 1, 7, 14, 30, 90, 6m, 12m, 24m, 36m. |
maxItems | integer | Listings per ZIP. 0 = unlimited. Zillow itself caps each search at ~800. |
proxyConfiguration | object | Optional Apify proxy. Default: no proxy. Auto-fallback if Zillow blocks. |
📤 Output
Each pushed item is the full Zillow listing object enriched with searchZipCode. Trimmed example:
{"searchZipCode": "10014","zpid": "79983681","statusType": "FOR_SALE","statusText": "Active","price": "$700,000","unformattedPrice": 700000,"address": "138 W 10th St APT 3RW, New York, NY 10014","addressCity": "New York","addressState": "NY","addressZipcode": "10014","beds": 1,"baths": 1.0,"area": 0,"homeType": "CONDO","daysOnZillow": 20,"zestimate": 707400,"rentZestimate": 7656,"brokerName": "Listing by: Douglas Elliman","imgSrc": "https://photos.zillowstatic.com/fp/f7d637ffc322501c9f39e1df2b0a038e-p_e.jpg","detailUrl": "https://www.zillow.com/homedetails/138-W-10th-St-APT-3RW-New-York-NY-10014/79983681_zpid/","latitude": 40.734512,"longitude": -74.000626,"hdpData": { "homeInfo": { /* full Zillow homeInfo */ } },"carouselPhotosComposable": { /* photo gallery */ }}
Output field reference
| Field | What it is |
|---|---|
searchZipCode 📮 | The ZIP this row was scraped from |
zpid 🆔 | Zillow's unique property ID |
statusType / statusText 🚦 | Listing status (FOR_SALE, RECENTLY_SOLD, FOR_RENT, …) |
price / unformattedPrice 💰💵 | Formatted + numeric price |
address 📍 | Full street address |
beds / baths / area 🛏️🛁📐 | Property specs |
homeType 🏠 | CONDO, SINGLE_FAMILY, TOWNHOUSE, … |
daysOnZillow 📅 | Days since first listed |
zestimate / rentZestimate 📈💵 | Zillow's automated valuations |
brokerName 🏢 | Listing agent / brokerage |
imgSrc / carouselPhotosComposable 📸 | Primary photo + full gallery |
detailUrl 🔗 | Direct Zillow listing link |
latitude / longitude 🌐 | Exact coordinates |
hdpData.homeInfo 🧾 | The complete Zillow HDP payload |
🚀 How to Use (Apify Console)
- 🔐 Log in at console.apify.com → Actors.
- 🔍 Find Zillow ZIP Code Search Scraper and open it.
- ⚙️ Set the inputs:
- Add one or more ZIP codes.
- Toggle which listing types you want (sale / FSBO / rent / sold).
- Set
maxItemsper ZIP (e.g. 50). - Leave proxy on no proxy to start — actor will auto-fallback if needed.
- ▶️ Click Start.
- 📺 Watch the live log — each listing prints as it is collected.
- 📥 Open the Dataset tab when the run finishes.
- 📤 Export to JSON / CSV / Excel / API.
🤖 Use via API
curl -X POST "https://api.apify.com/v2/acts/<USERNAME>~zillow-zip-code-search-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"zipCodes": ["10014", "07306"],"forSaleByAgent": true,"priceMax": 4000000,"maxItems": 50}'
Async (start the run, then poll the run / dataset endpoints):
curl -X POST "https://api.apify.com/v2/acts/<USERNAME>~zillow-zip-code-search-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"zipCodes":["90210"], "maxItems": 25}'
🎯 Best Use Cases
- 🏠 Real-estate market analysis — track active inventory and sold comps per ZIP
- 📊 Lead generation — agents/brokers prospecting fresh listings in their farm areas
- 🧠 Investment research — find undervalued properties using Zestimate vs. asking price
- 📰 Journalism & data viz — neighborhood-level housing data for stories and dashboards
- 🤖 AI / ML pipelines — clean, structured listings to train pricing or recommendation models
- 🏘️ Rental pricing — toggle
forRent: trueto benchmark rents in a ZIP - 🗺️ Geo analysis — use built-in lat/long to drop points on a map
💰 Pricing
This actor uses Apify's pay-per-event model — you only pay for what you scrape.
| Event | Description |
|---|---|
apify-actor-start 🚀 | Small one-time charge per run. First 5 seconds of compute on Apify. |
apify-default-dataset-item 📦 | Charged per listing pushed to the dataset. |
💡 Tip: start with no proxy + low
maxItemsto estimate cost. Scale up once the numbers look right.
❓ Frequently Asked Questions
Q: Does this need a proxy?
A: No. By default the actor runs direct. It only escalates to a datacenter proxy if Zillow blocks, then to a residential proxy (with 3 retries) if that also fails. Once it finds a working transport, it sticks with it for the rest of the run.
Q: Why does Zillow cap each ZIP at ~800 listings?
A: That's a Zillow website limit, not a scraper limit. For dense ZIPs, narrow your search with a priceMax or daysOnZillow filter to slice the inventory into smaller buckets.
Q: Does this work for rentals?
A: Yes — set forRent: true. The priceMax field then becomes the max monthly rent.
Q: Can I scrape sold homes?
A: Yes — set sold: true. You'll see RECENTLY_SOLD in the statusType field.
Q: What if a ZIP fails?
A: Failures are isolated per ZIP. Other ZIPs keep running. Failed ZIPs are logged in the final summary and produce no rows for that section.
Q: How are duplicates handled?
A: Listings are deduplicated by zpid within each ZIP before being pushed.
Q: Why are some area fields 0?
A: Zillow does not publish square footage for every listing (especially co-ops and some condos). The area: 0 mirrors what the Zillow API returns.
⚖️ Legal & Cautions
- 📜 Data is collected from publicly available Zillow pages.
- 🤝 Use responsibly — respect Zillow's Terms of Service and applicable laws (GDPR, CCPA, etc.).
- 🚫 Do not scrape private accounts or paywalled content.
- 🐢 Be a good citizen: keep
maxItemsreasonable, leave proxy fallback enabled.
📨 Support & Feedback
- 💬 Found a bug or have a feature idea? Open an issue from the Actor's Issues tab.
- ⭐ If this saved you time, a Store rating goes a long way!
