Zillow Scraper
Pricing
from $0.60 / 1,000 results
Zillow Scraper
Scrape Zillow listings by city, ZIP, or neighborhood. Pull homes for sale, for rent, and recently sold with prices, beds, baths, photos, and Zestimates, plus full detail: price and tax history, schools, lot facts, and agent contacts. No 1,000-result cap. Export to CSV, JSON, or Excel for comps.
Pricing
from $0.60 / 1,000 results
Rating
0.0
(0)
Developer
SilentFlow
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Turn any U.S. city, ZIP, or neighborhood into a clean feed of Zillow listings. For sale, for rent, or recently sold, with prices, beds, baths, photos, valuations, and full property detail in one structured record per home.
Type a location. Get back every listing that matches, with the fields you actually use for comps, lead lists, and market analysis. No copy-pasting from Zillow tabs, no building search URLs by hand, no hitting the 1,000-result wall.
How it works

- You enter a location. A city like
Austin, TX, a ZIP like90210, a neighborhood, county, or state. Add price, bed, bath, or home-type filters if you want. - The scraper pulls every matching listing. Buy, rent, or sold, across the whole area, not just the first page Zillow shows you.
- You get one structured record per home, ready to export to CSV or Excel, drop into a sheet, or feed into a model or dashboard.
Turn on Fetch Details and each home is enriched with its full property profile: price history, tax history, assigned schools, lot and construction facts, HOA, agent name and phone, and more.
β¨ Why teams choose this over other Zillow scrapers
Building search URLs by hand just to scrape a city? Hitting the 1,000-result cap on a big metro? Stuck with raw listing dumps that are missing the fields you actually need?
- ποΈ Just type a location. A city, ZIP, neighborhood, or address. No building a Zillow URL, no copying map coordinates, no learning a query format. Most scrapers make you do that work yourself.
- βΎοΈ No 1,000-result limit. Pull every for-sale, rental, or sold home in an entire metro, not the capped page Zillow shows in the browser. Big markets come back complete.
- π Buy, rent, and sold in one place. One Actor handles all three. Switch with a single setting instead of wiring up three different tools.
- π The full property story, not just the card. Turn on detail enrichment and get price history, tax history, assigned schools, lot and construction facts, HOA, and Zestimate. The data behind the listing, not just the headline.
- π Agent contact details. Pull the listing agent's name, phone, and brokerage for outreach and lead lists, captured straight from the listing.
- πΈ Whole photo galleries, ready to use. Full-resolution image URLs for every photo, not a single thumbnail and not raw keys you have to assemble.
- π Spot price drops and deals. Every listing carries its price change and the date it changed, so you can surface reductions the moment they happen.
- π° Pay per result, not per minute. Proxies included, no compute fees. You pay for homes delivered, and nothing else.
- π§Ή One clean record per home. Normalized JSON with a flat, predictable shape. It drops straight into a spreadsheet, a CRM, or an AI workflow.
π― What you can do with Zillow data
| Team | What they build |
|---|---|
| Real estate investors | Pull every sold home in a ZIP with price and tax history to run comps and spot undervalued deals |
| Agents and brokerages | Build for-sale and for-rent lead lists by city with the listing agent's name and phone attached |
| Proptech and data products | Power a property search app or AVM with normalized buy, rent, and sold listings at scale |
| Market analysts | Track price drops, days on market, and inventory across neighborhoods over time |
| Mortgage and lending | Enrich applications with tax history, valuations, and assigned-school data for a property |
| Rental operators | Aggregate every rental in a metro with rent, beds, baths, and per-unit pricing for buildings |
| Researchers | Compare home values, year built, and lot size across cities and ZIP codes |
π₯ Input parameters
You only need a location and how many homes you want. Everything else is optional.
Core
| Field | Type | Required | Description |
|---|---|---|---|
location | string | Yes* | A city, ZIP, neighborhood, county, state, or address. Example: Austin, TX. |
locations | array of strings | No | Search several locations in one run. Overrides location when set. |
operation | string | No | buy, rent, or sold. Default buy. |
maxItems | integer | Yes | Maximum number of listings to return. Default 100. |
fetchDetails | boolean | No | Enrich each listing with full detail-page data (price/tax history, schools, lot facts, agent). Default false. |
* Provide either location or locations.
Filters
| Field | Type | Description |
|---|---|---|
minPrice / maxPrice | integer | Price range. Per month for rentals. 0 for any. |
minBeds / maxBeds | integer | Bedroom range. 0 for any. |
minBaths | number | Minimum bathrooms. |
homeTypes | array | Restrict to houses, townhomes, multifamily, condos, land, apartments, manufactured. Empty for all. |
sortBy | string | newest, relevance, lowPrice, highPrice, bedrooms, bathrooms, sqft, lotSize, yearBuilt. |
locationType | string | Force a match type (city, zipcode, neighborhood, county, state) when a name is ambiguous. Auto-detects by default. |
{"location": "Austin, TX","operation": "buy","maxItems": 500,"minPrice": 300000,"maxPrice": 600000,"minBeds": 3,"homeTypes": ["houses"],"sortBy": "newest"}
π Output data
One record per home. The base record covers everything on the listing card and more.
{"zpid": "29489604","url": "https://www.zillow.com/homedetails/5800-Breezewood-Dr-Austin-TX-78745/29489604_zpid/","operation": "buy","statusText": "Active","homeStatus": "FOR_SALE","homeType": "SINGLE_FAMILY","price": 350000,"currency": "USD","pricePerSqft": 299.15,"beds": 3,"baths": 2,"livingArea": 1170,"lotAreaValue": 6298.776,"lotAreaUnit": "sqft","address": { "streetAddress": "5800 Breezewood Dr", "city": "Austin", "state": "TX", "zipcode": "78745" },"latitude": 30.204609,"longitude": -97.77888,"daysOnZillow": 1,"zestimate": 352800,"rentZestimate": 2450,"taxAssessedValue": 328033,"priceChange": -17000,"datePriceChanged": "2026-06-18","listingTypes": ["FSBA"],"brokerName": "Jorgenson Real Estate","photos": ["https://photos.zillowstatic.com/fp/00b223faef21b41ee54f5db0bcf4a1ce-p_e.jpg"]}
With fetchDetails: true, each record gains a details object with the full property profile:
{"zpid": "29489604","price": 350000,"details": {"description": "Clean, move-in-ready home in South Austin...","yearBuilt": 1971,"lotSize": "6,298 sqft","parcelNumber": "04160911220000","taxAnnualAmount": 5793,"monthlyHoaFee": 0,"stories": 1,"heating": ["Central", "Electric"],"cooling": ["Central Air", "Electric"],"appliances": ["Dishwasher", "Gas Range", "Microwave", "Oven"],"agentName": "Mike Kelly","agentPhone": "(512) 439-3698","brokerName": "Jorgenson Real Estate","mlsId": "4443738","priceHistory": [{ "date": "2026-06-25", "event": "Listed for sale", "price": 350000, "pricePerSqft": 299 }],"taxHistory": [{ "year": "2025", "taxPaid": 4744.89, "value": 328033, "valueIncreaseRate": -0.14 }],"schools": [{ "name": "Pleasant Hill Elementary School", "rating": 3, "grades": "PK-5", "distance": 0.6 }]}}
ποΈ Data fields
Listing
| Category | Fields |
|---|---|
| Identity | zpid, url, operation, statusType, statusText, homeStatus |
| Price | price, priceText, currency, pricePerSqft, priceChange, datePriceChanged |
| Size | beds, baths, livingArea, lotAreaValue, lotAreaUnit, homeType |
| Location | address (street, city, state, ZIP), latitude, longitude |
| Market | daysOnZillow, zestimate, rentZestimate, taxAssessedValue, dateSold |
| Flags | listingTypes, isFeatured, isZillowOwned, isNonOwnerOccupied, isPremierBuilder, hasVideo, has3DModel |
| Media | imgSrc, photos |
| Broker | brokerName |
| Rentals | unit, isBuilding, buildingName, minBaseRent, maxBaseRent, unitCount, units |
Details (with fetchDetails: true)
| Category | Fields |
|---|---|
| Description | description, yearBuilt, lotSize, stories, parcelNumber |
| Facts | heating, cooling, appliances, flooring, hasGarage, parkingCapacity, pricePerSqft |
| Money | zestimate, rentZestimate, monthlyHoaFee, propertyTaxRate, taxAnnualAmount, lastSoldPrice |
| History | priceHistory, taxHistory |
| Schools | schools (name, rating, grades, distance, link) |
| Agent | agentName, agentPhone, agentEmail, brokerName, mlsId, mlsName |
π Examples
Get the newest homes for sale in a city
{ "location": "Austin, TX", "operation": "buy", "maxItems": 200 }
Pull every recently sold home in a ZIP for comps
{ "location": "78745", "operation": "sold", "maxItems": 1000, "fetchDetails": true }
Build a rental lead list under a budget
{ "location": "Denver, CO", "operation": "rent", "maxPrice": 2500, "minBeds": 2, "maxItems": 500 }
Find 4-bed houses in a price band with full detail
{ "location": "Phoenix, AZ", "operation": "buy", "minBeds": 4, "minPrice": 400000, "maxPrice": 700000, "homeTypes": ["houses"], "fetchDetails": true, "maxItems": 300 }
Scrape several metros in one run, cheapest first
{ "locations": ["Miami, FL", "Tampa, FL", "Orlando, FL"], "operation": "buy", "sortBy": "lowPrice", "maxItems": 1500 }
π€ Copy to your AI assistant
Paste this block into Claude, ChatGPT, or Cursor to give it full context about this scraper:
You have access to the Zillow Scraper on Apify: silentflow/zillow-scraperIt scrapes U.S. residential listings (for sale, for rent, recently sold) from Zillow by location.Input schema:- location (string): a city, ZIP, neighborhood, county, state, or address. Required unless locations is set.- locations (array of strings): scrape several locations in one run; overrides location.- operation (string): "buy" | "rent" | "sold". Default "buy".- maxItems (integer, required): max listings to return. Default 100. No hard cap from the source.- minPrice, maxPrice (integer): price range (per month for rent). 0 = any.- minBeds, maxBeds (integer): bedroom range. 0 = any.- minBaths (number): minimum bathrooms.- homeTypes (array): "houses","townhomes","multifamily","condos","land","apartments","manufactured".- sortBy (string): "newest","relevance","lowPrice","highPrice","bedrooms","bathrooms","sqft","lotSize","yearBuilt".- locationType (string): force "city"|"zipcode"|"neighborhood"|"county"|"state"; auto-detects by default.- fetchDetails (boolean, default false): enrich each listing with price/tax history, schools, lot facts, HOA, and agent contact.Output per listing (flat JSON): zpid, url, operation, statusText, homeStatus, homeType, price, currency,pricePerSqft, beds, baths, livingArea, lotAreaValue, lotAreaUnit, address{streetAddress,city,state,zipcode},latitude, longitude, daysOnZillow, zestimate, rentZestimate, taxAssessedValue, priceChange, datePriceChanged,listingTypes, brokerName, photos[], and (for rentals) buildingName/minBaseRent/maxBaseRent/units.With fetchDetails, a details object adds description, yearBuilt, lotSize, parcelNumber, heating/cooling/appliances,agentName/agentPhone/agentEmail/brokerName/mlsId, priceHistory[], taxHistory[], schools[].Pay per result. Proxies included. Use apify-client for Python or JS.
π» Integrations
Build a comps list for an investor (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("silentflow/zillow-scraper").call(run_input={"location": "78745","operation": "sold","maxItems": 1000,"fetchDetails": True,})comps = []for home in client.dataset(run["defaultDatasetId"]).iterate_items():comps.append({"address": home["address"]["streetAddress"],"soldPrice": home.get("price"),"soldDate": home.get("dateSold"),"perSqft": home.get("pricePerSqft"),"beds": home.get("beds"),})comps.sort(key=lambda c: c["soldPrice"] or 0)print(f"{len(comps)} comparable sales")
Build an agent lead list (JavaScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('silentflow/zillow-scraper').call({location: 'Denver, CO',operation: 'buy',fetchDetails: true,maxItems: 500,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const leads = items.map(h => h.details && ({agent: h.details.agentName,phone: h.details.agentPhone,brokerage: h.details.brokerName,listing: h.url,})).filter(Boolean);console.log(`${leads.length} agent leads ready for outreach`);
Export straight to CSV (Apify CLI)
apify call silentflow/zillow-scraper \--input '{"location":"Phoenix, AZ","operation":"rent","maxItems":1000}' \--output-dataset \| apify datasets get-items --format csv > phoenix-rentals.csv
π Performance
| Metric | Value |
|---|---|
| Markets | All U.S. cities, ZIPs, neighborhoods, counties, states |
| Operations | For sale, for rent, recently sold |
| Result cap | None from the source. Set maxItems to whatever you need. |
| Coverage | Whole-metro, not the capped browser page |
| Detail enrichment | Optional, per listing |
| Proxies | Residential, included |
| Reliability | High |
πΎ Data export
Every run produces a dataset you can download from the Apify console as JSON, CSV, Excel, XML, or RSS, or pull programmatically:
https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN
Schedule runs, trigger them by API, or connect the output to Make, Zapier, Google Sheets, or your own database.
π‘ Tips for best results
- Use a clear location.
Austin, TXbeatsAustin. Add the state to avoid matching the wrong city. For a single property, paste the full address. - Filter at the source. Set
minPrice,minBeds, andhomeTypesin the input instead of pulling everything and filtering later. You get exactly what you need and nothing extra. - Turn on
fetchDetailsonly when you need depth. The base listing already has price, beds, baths, photos, and valuations. Add detail when you want price history, schools, lot facts, or agent contact. - Run several markets at once. Pass a
locationsarray to cover a whole region in one run instead of starting one job per city. - For sold comps, always enable
fetchDetails. Zillow hides the sold price on the result card, so detail enrichment fills it in along with the full sale and tax history.
β FAQ
What does this scraper extract? Residential listings from Zillow for sale, for rent, and recently sold, with price, beds, baths, square footage, lot size, location, photos, Zestimate, days on market, and listing status. With detail enrichment it also returns description, price and tax history, assigned schools, construction and lot facts, HOA, and the listing agent's contact.
How do I search? Do I need a Zillow URL? No URL needed. Type a city, ZIP, neighborhood, county, state, or address. The scraper resolves it for you.
Can I scrape several locations in one run?
Yes. Use the locations array. Each location is searched and the results are combined and de-duplicated.
Is there a limit on how many homes I can get?
No hard cap from the source. The scraper covers a whole market, not the capped page the browser shows. Set maxItems to your target.
Do I need a Zillow account or login? No. The scraper reads publicly available listing data. No login, no API key.
How fresh is the data? Each run reads Zillow live, so you get the current listings and prices at the moment you run it.
Why is the price empty on some sold homes?
Zillow does not show the sold price on the search card. Turn on fetchDetails and the sold price is filled in from the property's price history.
Can I get the listing agent's contact?
Yes, with fetchDetails. You get the agent's name, phone, and brokerage. Email is included when the listing exposes it publicly.
What about apartment buildings with many units? Buildings return as one record with the building name, availability, and per-unit pricing (beds and rent) instead of a single price.
βοΈ Legal
This Actor extracts publicly available data from Zillow. It does not bypass any login, paywall, or CAPTCHA. Users are responsible for complying with Zillow's terms of service and applicable laws in their jurisdiction. The data returned is informational; verify accuracy for regulated use cases such as lending, appraisal, or compliance.
π¬ Support
Need something this scraper doesn't do yet? We ship features fast.
- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing questions? Check the Monetization tab on the Actor page
Response time: usually under 24 hours.
Check out our other scrapers: silentflow on Apify