Zillow Scraper - Property Listings, Prices & Leads avatar

Zillow Scraper - Property Listings, Prices & Leads

Pricing

from $3.00 / 1,000 property scrapeds

Go to Apify Store
Zillow Scraper - Property Listings, Prices & Leads

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

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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:

DataTypical scrapersThis actor
Price, beds/baths, sqft, lot, status
Zestimate + rent Zestimate + tax-assessed valuepartial
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 to zestimate, 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 forRent listings 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

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the Zillow Scraper, enter one or more locations (e.g. Austin, TX) or ZIP codes, pick a Listing type, and click Start.
  3. Watch property records stream into the dataset table. Turn on Include full property details to add history, schools and agent contacts.
  4. 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
}
  • locationsCity, 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).
  • listingTypeforSale (default), forRent, or sold.
  • forSaleByOwnerOnly — return only FSBO listings (investor/wholesaler seller leads).
  • minPrice / maxPrice / minBeds / maxBeds / minBaths / minSqft / maxSqft / minYearBuilt / maxYearBuilt — numeric filters.
  • homeTypeshouses, condos, townhomes, multi-family, apartments, manufactured, lots-land.
  • daysOnZillow1, 7, 14, 30, 90 (newly listed).
  • sortrelevant, 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:

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:

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 includePropertyDetails off 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 monitorMode to 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.