Zillow Scraper - Property Listings, Prices & Leads
Pricing
from $3.00 / 1,000 property scrapeds
Zillow Scraper - Property Listings, Prices & Leads
Scrape Zillow homes for sale, for rent & recently sold by city, ZIP or URL: price, Zestimate, beds/baths, sqft, lot, photos, price & tax history, schools and listing-agent contacts (name, phone, email). Lead scoring + monitor mode. No API key, no browser.
Pricing
from $3.00 / 1,000 property scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Zillow Scraper — Listings, Prices, History & Agent Leads
Extract complete Zillow property data — for sale, for rent, and recently sold — by city, ZIP, neighborhood, or URL. Get price, Zestimate & rent Zestimate, beds/baths, square footage, lot size, home type, status, days on Zillow, price-change flags, photos and full geo. Switch on full details to add description, year built, HOA, parcel/county, price history, tax history, schools, interior facts — and the listing agent + broker contacts (name, phone, email, license, MLS) that turn every listing into a real-estate lead.
No login, no cookies, no browser — fast JSON extraction straight from Zillow's own data, over residential proxies for reliability.
Why this Zillow scraper?
Most Zillow scrapers stop at the listing card, hide the lead-bearing fields behind a premium tier, or nickel-and-dime you with start fees and per-field add-ons. This actor ships the richest dataset in the category at a challenger price:
| Data | Typical scrapers | This actor |
|---|---|---|
| Price, beds/baths, sqft, lot, status | ✅ | ✅ |
| Zestimate + rent Zestimate + tax-assessed value | partial | ✅ |
| FSBO / new-construction / foreclosure / coming-soon flags | ❌ | ✅ |
| Price-change & days-on-Zillow (price-drop signals) | ❌ | ✅ |
| Price history + tax history | 💲 premium | ✅ opt-in |
| Schools (name, rating, grades, distance) | ❌ | ✅ opt-in |
| Interior facts (heating, cooling, appliances, parking…) | ❌ | ✅ opt-in |
| Listing agent + broker contacts (name, phone, email, license, MLS) | 💲 $0.07/listing elsewhere | ✅ opt-in |
| Deduplicated agent-lead records | ❌ | ✅ opt-in |
| Lead score (0–100) per property & per agent | ❌ | ✅ |
| Monitor mode — only new / price-changed listings | ❌ | ✅ |
| Start fee | 💲 common | $0 — never |
Use cases
- Real-estate lead generation — pull listing agent and broker contacts (phone, email, license, brokerage) from every property; or flip on FSBO-only to find for-sale-by-owner sellers who need an agent, a cash offer, or a wholesaler. Score leads by
leadScore. - Investor & wholesaler deal flow — monitor a market for new listings and price cuts (
priceChange,daysOnZillow,monitorStatus), compare tozestimate, and filter by price band, beds, home type, and days on Zillow. - Comps, CMAs & market analytics — price, sqft,
pricePerSquareFoot, price history and tax history for any city or ZIP feed comparative market analysis and valuation models. - Rental market intelligence — scrape
forRentlistings with rent Zestimates and per-unit pricing across a metro. - Property data enrichment — paste a list of property URLs to hydrate your CRM/database with full Zillow details, schools and agent attribution.
- Brokerage & PropTech pipelines — feed MLS-linked listing data into CRMs, dashboards and AI agents on a schedule.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Zillow Scraper, enter one or more locations (e.g.
Austin, TX) or ZIP codes, pick a Listing type, and click Start. - Watch property records stream into the dataset table. Turn on Include full property details to add history, schools and agent contacts.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Input
{"locations": ["Austin, TX"],"listingType": "forSale","minPrice": 300000,"maxPrice": 700000,"minBeds": 3,"homeTypes": ["houses"],"daysOnZillow": "7","includePropertyDetails": true,"extractAgentLeads": true,"maxResults": 100,"monitorMode": false}
- locations —
City, ST(Austin, TX),City, State name, a neighborhood, or a 5-digit ZIP. - zipCodes — ZIP codes (alternative to locations).
- searchUrls — paste Zillow search/results URLs (their own filters are respected).
- propertyUrls — paste individual
…/homedetails/…_zpid/URLs to scrape full property details directly. - startUrls — any mix of search/property URLs (auto-detected).
- listingType —
forSale(default),forRent, orsold. - forSaleByOwnerOnly — return only FSBO listings (investor/wholesaler seller leads).
- minPrice / maxPrice / minBeds / maxBeds / minBaths / minSqft / maxSqft / minYearBuilt / maxYearBuilt — numeric filters.
- homeTypes —
houses,condos,townhomes,multi-family,apartments,manufactured,lots-land. - daysOnZillow —
1,7,14,30,90(newly listed). - sort —
relevant,newest,price_asc,price_desc,beds,lot_size. - includePropertyDetails (default false) — full per-property data + price/tax history + schools + agent & broker contacts.
- extractAgentLeads (default false) — also emit one deduplicated agent-lead record per listing agent.
- maxResults / maxResultsPerSearch — overall and per-search caps.
- maxRunSeconds (default 240) — soft time budget so scheduled runs never hit the platform timeout. Raise it for big pulls.
- monitorMode (default false) — only new / price-changed listings (see below).
Output
One record per property (type: "property"), plus optional agent-lead records (type: "agent"):
{"type": "property","zpid": "29508552","url": "https://www.zillow.com/homedetails/123-Main-St-Austin-TX-78701/29508552_zpid/","statusType": "FOR_SALE","statusText": "House for sale","price": 450000,"zestimate": 462300,"rentZestimate": 2650,"taxAssessedValue": 401200,"priceChange": -15000,"address": "123 Main St, Austin, TX 78701","city": "Austin","state": "TX","zipcode": "78701","latitude": 30.2649,"longitude": -97.7426,"bedrooms": 3,"bathrooms": 2,"livingArea": 1820,"homeType": "Single Family","daysOnZillow": 5,"isFsbo": false,"brokerName": "Realty ABC","yearBuilt": 1998,"hoaFee": "$45/mo","county": "Travis County","priceHistory": [{ "date": "2026-06-15", "event": "Price change", "price": 450000 }],"taxHistory": [{ "year": 2024, "taxPaid": 8120, "value": 401200 }],"schools": [{ "name": "Austin High", "rating": 8, "level": "High", "distance": 1.2 }],"agentName": "Jane Broker","agentPhone": "(512) 555-0100","agentEmail": "jane@realtyabc.com","agentLicenseNumber": "TX-998877","mlsId": "1234567","leadScore": 78,"leadSignals": ["agentEmail", "agentPhone", "priceCut", "fresh"],"source": "zillow","scrapedAt": "2026-06-23T12:00:00.000Z"}
Empty fields are omitted (no always-blank columns in CSV/Excel). A field is missing only when Zillow doesn't publish it.
Monitor mode — only new & changed listings
Turn on monitorMode and the actor remembers every listing it has seen (by zpid, plus a price/status fingerprint). On the next run it returns only new listings or ones whose price or status changed, each tagged monitorStatus: "new" | "changed". This works independently of Apify Schedules — schedule the actor hourly/daily and every run delivers a clean diff, perfect for new-listing and price-drop alerts. Use distinct monitorStoreName values to track several markets separately.
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it daily with
monitorModeto track new listings & price cuts in a city or ZIP. - Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/zillow-scraper').call({locations: ['Austin, TX'],listingType: 'forSale',minPrice: 300000,maxPrice: 700000,includePropertyDetails: true,extractAgentLeads: true,maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} Zillow properties & agent leads`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new listings or agent leads straight into your CRM.
- Slack — get notified when a monitored market gets a new listing or price drop.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find 3-bed houses under $600k in Austin listed this week and list the agent contacts" and let it run this scraper for you.
More scrapers from scrapesage
Build a complete real-estate & lead-gen stack:
- Redfin Scraper — listings, prices and home data from Redfin.
- Rent.com Scraper — apartment & rental listings with leasing-office contacts.
- Realtor.ca Scraper — Canadian property listings.
- Crexi Scraper — commercial real-estate listings and brokers.
- US Property Records Scraper — owner & assessor property records.
- FastExpert Agent Scraper — real-estate agent leads, reviews & production stats.
- Google Maps Scraper — local business leads with emails & socials.
- Website Contact Scraper — emails, phones & socials from any website.
Tips
- Big cities: Zillow caps a single search at ~500–800 results. To exhaust a large metro, split runs by price band, home type, or ZIP code.
- Speed & cost: leave
includePropertyDetailsoff for fast, cheap bulk listing pulls; turn it on only when you need history, schools or agent contacts. - Large pulls: raise
maxRunSeconds(e.g. 1800) and the run's timeout together; the default 240s soft budget keeps scheduled/health runs well under 5 minutes. - Proxies: keep the default Residential proxy — Zillow blocks datacenter IPs.
- Recurring monitoring: combine Schedules with
monitorModeto track only what's new.
FAQ
How do I scrape Zillow listings for a city or ZIP? Put the city in locations (Austin, TX) or the ZIP in zipCodes, choose a listingType, and run. Add filters (price, beds, home type, days on Zillow) to narrow results.
Does it need a Zillow API key or login? No. The actor reads Zillow's own publicly rendered data over residential proxies — no API key, no account, no browser.
Can I get the listing agent's contact details? Yes — turn on includePropertyDetails to add the agent and broker name, phone, email, license number and MLS to each property, and extractAgentLeads to also get one deduplicated agent record per agent.
How do I get only new listings or price drops? Turn on monitorMode and schedule the actor — each run returns only new or price/status-changed listings, tagged monitorStatus.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
Why is a field missing? Empty fields are omitted to keep exports clean. A field is absent only when Zillow doesn't publish it for that listing. Known source-gated cases: Zestimate is missing on many active MLS listings; agent email is almost never public; the listing agent's direct phone depends on the MLS region (some, e.g. Dallas/NTREIS, expose only the broker phone — which the actor still returns); and recently-sold prices are login-walled by Zillow (see below).
Why don't sold listings have a price? Zillow gates the exact sale price and price history of sold homes behind a login for anonymous access. The actor still returns every sold home's address, beds/baths/sqft, home type, year built, schools and the sale date (dateSold) — just not the closing price. forSale and forRent listings are fully priced.
How are rental apartment buildings handled? Large forRent results are often whole apartment buildings rather than single units. Those records include the building name, rent range (minRent/maxRent), bedroom range, unit count, and the building's leasing phone — a ready-made rental lead.
It returned 0 results / said it was blocked — why? Zillow runs PerimeterX anti-bot. The actor defends against it with US residential proxies, aggressive IP rotation, and an OpenStreetMap geocode fallback that drives Zillow's reliable internal search API when the public page is being challenged. In the rare event Zillow blocks every attempt in a run, the actor finishes cleanly (you are not billed) with a status message — just re-run.
Is scraping Zillow legal? This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and Zillow's terms.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.