Zillow Real Estate Scraper
Pricing
from $5.00 / 1,000 results
Zillow Real Estate Scraper
Scrape Zillow property listings by location. Extract addresses, prices, beds/baths, square footage, Zestimate, agent info, and more.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
MItchell Peavler
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape property listings from Zillow for any location in the United States. Extract detailed real estate data including prices, property details, Zestimates, agent information, and more.
What does Zillow Scraper do?
This actor scrapes Zillow.com search results for a given location and returns structured property listing data. It handles Zillow's dynamic JavaScript rendering and anti-bot protections using Playwright with stealth techniques and residential proxy rotation.
Use it to:
- Monitor real estate markets - Track listing prices, inventory, and trends in any US market
- Build property datasets - Collect structured data for analysis, machine learning, or CRM import
- Compare listings - Aggregate listings across neighborhoods or zip codes
- Track price changes - Run periodically to detect new listings and price adjustments
- Analyze Zestimates - Compare asking prices to Zillow's automated valuations
Features
- Scrape listings by city, zip code, or neighborhood
- Filter by listing type (for sale, for rent, recently sold)
- Filter by price range, bedrooms, and home type
- Sort results by price, newest, square footage, and more
- Extracts 18+ data fields per listing
- Handles pagination automatically
- Stealth browser fingerprinting to avoid blocks
- Session rotation with residential proxies
- Human-like delays and scrolling behavior
- Structured JSON output ready for analysis
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
location | String | Yes | - | City and state, zip code, or neighborhood (e.g., "Austin, TX", "90210") |
maxResults | Integer | No | 20 | Maximum listings to return (0 = unlimited, max 500) |
listingType | String | No | for_sale | One of: for_sale, for_rent, sold |
minPrice | Integer | No | - | Minimum listing price |
maxPrice | Integer | No | - | Maximum listing price |
minBeds | Integer | No | - | Minimum bedrooms (1-5) |
maxBeds | Integer | No | - | Maximum bedrooms (1-5) |
homeType | String | No | all | One of: all, houses, condos, townhomes, apartments, manufactured, lots |
sortBy | String | No | default | Sort order: default, newest, price_low, price_high, beds, baths, sqft, lot_size |
includePhotos | Boolean | No | false | Include photo URLs (increases scrape time slightly) |
proxyConfiguration | Object | No | Residential | Proxy settings. Residential proxies strongly recommended. |
Example Input
{"location": "Austin, TX","maxResults": 50,"listingType": "for_sale","minPrice": 300000,"maxPrice": 600000,"minBeds": 3,"homeType": "houses","sortBy": "newest","includePhotos": true}
Output
The actor stores results in a dataset. Each item represents one property listing with the following fields:
| Field | Type | Description |
|---|---|---|
address | String | Full street address |
city | String | City name |
state | String | State abbreviation |
zipCode | String | ZIP code |
price | Number | Listing price in USD |
bedrooms | Number | Number of bedrooms |
bathrooms | Number | Number of bathrooms |
sqft | Number | Living area in square feet |
lotSize | Number | Lot size value |
lotSizeUnit | String | Lot size unit (sqft or acres) |
propertyType | String | House, Condo, Townhouse, etc. |
listingStatus | String | For Sale, Pending, Sold, etc. |
daysOnZillow | Number | Days the listing has been on Zillow |
yearBuilt | Number | Year the property was built |
url | String | Direct Zillow listing URL |
zestimate | Number | Zillow's estimated value |
rentZestimate | Number | Zillow's estimated rent |
pricePerSqft | Number | Price per square foot |
hoaFee | Number | Monthly HOA fee (if applicable) |
listingAgent | String | Listing agent or broker name |
description | String | Listing description (when available) |
photoUrls | Array | Property photo URLs (if includePhotos is true) |
latitude | Number | Property latitude |
longitude | Number | Property longitude |
zpid | String | Zillow Property ID |
scrapedAt | String | ISO timestamp of when the data was scraped |
Example Output
{"address": "1234 Oak Lane, Austin, TX 78701","city": "Austin","state": "TX","zipCode": "78701","price": 475000,"bedrooms": 3,"bathrooms": 2,"sqft": 1850,"lotSize": 6500,"lotSizeUnit": "sqft","propertyType": "House","listingStatus": "For Sale","daysOnZillow": 12,"yearBuilt": 2005,"url": "https://www.zillow.com/homedetails/1234-Oak-Ln-Austin-TX-78701/12345678_zpid/","zestimate": 490000,"rentZestimate": 2800,"pricePerSqft": 257,"hoaFee": null,"listingAgent": "Compass Real Estate","description": "Beautiful 3-bedroom home in downtown Austin...","photoUrls": ["https://photos.zillowstatic.com/fp/abc123-p_e.jpg"],"latitude": 30.2672,"longitude": -97.7431,"zpid": "12345678","scrapedAt": "2025-01-15T10:30:00.000Z"}
Proxy Requirements
Zillow has aggressive anti-bot protections. Residential proxies are required for reliable operation. The actor is pre-configured to use Apify's residential proxy group.
If you use your own proxies, ensure they are residential-grade. Datacenter proxies will be blocked quickly.
Performance and Cost Estimates
| Listings | Estimated Time | Estimated Cost (Apify) |
|---|---|---|
| 20 | 2-3 minutes | ~$0.10-0.15 |
| 50 | 4-7 minutes | ~$0.20-0.35 |
| 100 | 8-15 minutes | ~$0.40-0.70 |
| 200 | 15-25 minutes | ~$0.80-1.40 |
Costs depend on proxy usage (residential proxies are billed per GB) and compute time. Actual costs may vary based on Zillow's response times and retry rates.
Tips for Best Results
- Use specific locations - "Austin, TX" works better than just "Austin"
- Set reasonable maxResults - Start small (20-50) to verify results before scaling up
- Use filters - Narrowing by price, beds, or home type reduces pages to scrape
- Schedule runs - Set up periodic runs to track market changes over time
- Monitor logs - Check run logs for CAPTCHA or rate-limiting warnings
Limitations
- Zillow may change their page structure at any time, which could temporarily affect data extraction
- Very high-volume scraping may trigger rate limits or blocks
- Some fields (description, year built) are only available on detail pages and may be null in search results
- Photo URLs are temporary and may expire after a few days
- Maximum of 500 listings per run (Zillow limits search results to ~800 total)
Legal Notice
This actor is provided for educational and research purposes. Users are responsible for ensuring their use complies with Zillow's Terms of Service and applicable laws. The actor does not use any Zillow API keys or authenticated access.