Zillow Property Data Scraper
Pricing
$25.00/month + usage
Zillow Property Data Scraper
Scrape Zillow listings into structured data: price, beds/baths, Zestimate, rent estimate, days on Zillow, photos, agent & MLS info + 50 more fields. Paste any search URL, or just pick a location and set filters like on Zillow. Fast API-based scraping. Free trial.
Pricing
$25.00/month + usage
Rating
5.0
(28)
Developer
ВAH
Maintained by CommunityActor stats
45
Bookmarked
134
Total users
1
Monthly active users
24 minutes ago
Last modified
Categories
Share
Zillow Property Data Scraper turns any Zillow search page into a clean, structured feed of every listing on it — 57 fields per home, from a plain search URL. Rated ⭐ 4.98 by users.
What does Zillow Property Data Scraper do?
Zillow Property Data Scraper extracts every listing from a Zillow search or filtered results page. It works as an unofficial Zillow API alternative: paste any search URL — for sale, for rent, sold, or a filtered search — and get back structured JSON with price, beds/baths, Zestimate® & Rent Zestimate®, home type, days on Zillow, lot size, tax value, the full photo gallery, agent & MLS info, and more for each listing.
It paginates automatically and uses direct API-style scraping — no browser — so runs are fast and cheap. Pair it with the Zillow Property Details Scraper to then pull deep details (price/tax history, schools, comparable homes) for any listing you find here.
Why use Zillow Property Data Scraper?
- ✅ No URL needed — just type a location ("Miami, FL") and set filters right in the input form: listing type, price, beds & baths, home type, square feet, year built, days on Zillow, keywords, sort — the same filters as on zillow.com. (Pasting search URLs still works too.)
- ✅ Any search page — for sale, for rent, sold, new construction, or any filtered search URL (with
searchQueryState). - ✅ 57 fields per listing — core facts promoted out of Zillow's nested blob so you don't have to dig; the full raw
home_infois kept too. - ✅ Full photo gallery — not just the cover image: every photo URL for each listing is reconstructed.
- ✅ Agent & MLS info — listing agent (with license # where available) and MLS source, useful for lead-gen and de-duplication.
- ✅ Apartment buildings handled — rental buildings return unit-level rents, availability, fees, and a contact phone.
- ✅
maxItemscap — control exactly how many listings you collect from each search URL (and your cost). - ✅ Fast, API-based — no headless browser; fault-tolerant (one bad page never kills the run).
| Feature | This Actor | Typical alternatives |
|---|---|---|
| Search by location + filters (no URL) | ✅ | ❌ URL only |
| Fields per listing | 57, incl. Zestimate/tax/lot | 10–30 |
| Full photo gallery | ✅ every photo | Usually cover only |
| Agent + MLS info | ✅ | Rarely |
| Rental building details (units/rents/fees) | ✅ | Rarely |
| Method | Direct API (fast) | Often browser-based |
Use cases: market research · lead generation for agents/investors · price & inventory monitoring · building an MLS-style dataset · feeding a valuation model.
What data can you extract from Zillow?
| Field | Type | Description |
|---|---|---|
zillow_id | string | Zillow property ID (ZPID). Rental buildings have no numeric ZPID — Zillow keys them as "lat--long" (e.g. 25.768639--80.198494), kept as-is |
status_type / status | string | FOR_SALE/FOR_RENT/SOLD + page text ("House for sale") |
price / price_value | string/number | Display price and numeric price |
sold_price / date_sold | string | Sale price and date (sold listings) |
bedrooms / bathrooms / living_area | number | Core home facts |
lot_area_value / lot_area_unit | number/string | Lot size |
home_type / home_status | string | SINGLE_FAMILY / CONDO…, FOR_SALE / SOLD… |
zestimate / rent_zestimate | number | Zillow's value and rent estimates |
tax_assessed_value | number | Tax-assessed value |
days_on_zillow / time_on_zillow | number | Time on market |
price_change / price_reduction / date_price_changed | mixed | Recent price cut info |
marketing_status / listing_sub_type | mixed | "For Sale by Agent"; FSBA/FSBO/newHome/comingSoon/openHouse flags |
new_construction_type / builder_name | string | New-construction listings |
open_house / open_house_start / open_house_end | string | Open-house schedule |
address / street / city / state / zipcode | string | Full address parts |
latitude / longitude | number | Coordinates |
broker_name / listing_agent / mls_info | string | Broker, agent (+license # in some states), MLS source |
provider_listing_id | string | Listing provider ID — the MLS number for new-construction listings, the rental listing ID for rentals |
image / photos | string/array | Cover image + full photo gallery URLs |
building_name / units / min_rent / max_rent / available_units / monthly_fee_min / monthly_fee_max / contact_phone | mixed | Rental-building fields |
home_info | object | Full raw home_info blob (all remaining fields) |
How to scrape Zillow search results
- Open the Actor on Apify Store and click Try for free.
- Choose your input — either paste search URLs (any
https://www.zillow.com/homes/...page), or type locations and set filters (listing type, price, beds & baths, home type, and more) right in the form — no URL required. - Set
maxItems(optional) — cap how many listings to collect from each URL or location. - Click Start — the Actor paginates through the results automatically.
- Export as JSON, CSV, Excel, XML, or via API / integrations.
How much does it cost to scrape Zillow?
See the Pricing tab for current rates — every plan includes a free trial. Because this Actor scrapes Zillow's data directly instead of rendering pages in a browser, runs finish quickly and platform usage stays minimal. Use maxItems to cap cost precisely, and schedule it to monitor a market over time.
Input
Option 1 — paste search URLs (if provided, the filter options are ignored):
| Parameter | Type | Description |
|---|---|---|
searchLinks | array | One or more Zillow search / listing page URLs. Filtered URLs (with searchQueryState) work too. |
Option 2 — build a search with filters, exactly like on zillow.com:
| Parameter | Type | Description |
|---|---|---|
locations | array | Address, neighborhood, city, or ZIP — same as Zillow's search box (e.g. "Miami, FL", "90210"). |
listingType | select | For sale (default) / For rent / Sold. |
priceMin / priceMax | integer | Price range in USD. For rentals this is the monthly rent. |
bedroomsMin / bathroomsMin | select | Any / 1+ / 2+ … — same options as Zillow's "Beds & baths". |
homeTypes | multi-select | Houses / Townhomes / Multi-family / Condos/Co-ops / Lots/Land / Apartments / Manufactured. All selected by default. |
squareFeetMin/Max, lotSizeMin/Max, yearBuiltMin/Max | integer | Same as Zillow's Filters panel (lot size in sqft). |
daysOnZillow | select | Any / 1 day / 7 / 14 / 30 / 90 days / 6–36 months — only recently posted listings. |
mustHaveOpenHouse / mustHave3DTour | boolean | Same as Zillow's Tours filters. |
keywords | string | "MLS #, yard, etc." — matches words in listing descriptions. |
sortBy | select | Homes for You (default) / Newest / Price / Bedrooms / Bathrooms / Square Feet / Lot Size. |
Both options:
| Parameter | Type | Description |
|---|---|---|
maxItems | integer | Optional. Max listings collected from each search URL or location. Empty = scrape everything (up to ~20 pages / ~800 listings per search, a Zillow-side limit). |
{"locations": ["Miami, FL"],"listingType": "forSale","priceMax": 600000,"bedroomsMin": "3","daysOnZillow": "30","sortBy": "days","maxItems": 200}
Output
One dataset item per listing. Real example (for-sale home, arrays truncated with ...):
{"search_term": "https://www.zillow.com/homes/for_sale/Greenville, SC/","address": "26 Macdee Way, Greenville, SC 29607","status_type": "FOR_SALE","status": "House for sale","price": "$515,000","price_value": 515000,"sold_price": "","date_sold": "","bedrooms": 4,"bathrooms": 3,"living_area": 2400,"lot_area_value": 9147.6,"lot_area_unit": "sqft","home_type": "SINGLE_FAMILY","home_status": "FOR_SALE","zestimate": 503400,"rent_zestimate": 2800,"tax_assessed_value": 285000,"days_on_zillow": 1,"time_on_zillow": 86400000,"marketing_status": "For Sale by Agent","price_change": "", // filled only when the price recently changed"price_reduction": "","listing_sub_type": { "is_FSBA": true },"street": "26 Macdee Way","city": "Greenville","state": "SC","zipcode": "29607","latitude": 34.79,"longitude": -82.33,"zillow_id": "12345678","detail_url": "https://www.zillow.com/homedetails/26-Macdee-Way-Greenville-SC-29607/12345678_zpid/","broker_name": "Example Realty","mls_info": "", // "Listing provided by X MLS" in some regions"listing_agent": "Jennifer Winton", // agent name; adds "DRE # ..." in CA"provider_listing_id": "30031448", // MLS number (new construction) / rental listing ID"has_3d_model": true,"has_video": false,"image": "https://photos.zillowstatic.com/fp/....jpg","photos": ["https://photos.zillowstatic.com/fp/<key1>-p_e.jpg","https://photos.zillowstatic.com/fp/<key2>-p_e.jpg"// ... full gallery, ~39 photos],"home_info": { "zpid": 12345678, "homeType": "SINGLE_FAMILY", "priceForHDP": 515000 /* ... all raw fields */ }}
Rental apartment buildings return building-level fields instead:
{"status_type": "FOR_RENT","zillow_id": "30.2653--97.7112", // buildings have no numeric ZPID — Zillow keys them by "lat--long""building_name": "Cabbage Row Apartments","address": "... Austin, TX","units": [ { "price": "$1,326+", "beds": "1", "roomForRent": false } /* ... */ ],"min_rent": 1188,"max_rent": 1709,"available_units": 107,"contact_phone": "(512) 649-6511","photos": [ "https://photos.zillowstatic.com/fp/....jpg" ]// beds/baths/zestimate are empty for buildings — Zillow serves those per-unit, not per-building}
Tips and known limitations
- Pages per search: Zillow caps a search at ~20 pages (~800 listings). To get more, split your area into smaller searches (by city, ZIP, or price band) and pass multiple
searchLinks. - Rentals are buildings: for-rent searches mostly return apartment buildings, so per-home fields (beds/baths/zestimate) are empty — use
units,min_rent/max_rent,available_unitsinstead. Buildings also have no numeric ZPID:zillow_idholds Zillow's own"lat--long"building key. - Some fields are conditional:
mls_info,sold_price,open_house,price_reduction,new_construction_typeonly appear for the relevant listing types. - Clean output: nulls and empty blocks are stripped; top-level fields are always present. Need deep per-property data (tax/price history, schools, comps)? Feed the
detail_urls into Zillow Property Details Scraper.
FAQ and support
Is it legal to scrape Zillow?
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
How do I get more than ~800 results for an area?
That's a Zillow-side pagination limit per search. Split the area into smaller searches (city → ZIP codes, or by price range) and pass them all in searchLinks.
Something broke or you need an extra field?
Zillow changes its site regularly; this Actor is actively maintained. Report issues in the Issues tab on the Actor page — feature requests are welcome.


