This repository provides two distinct methods for scraping Zillow data:
- A free, small-scale scraper for basic data collection
- An enterprise-grade API solution for large-scale data extraction
- Free Zillow Data Scraper
- Limitations of Free Scraper
- Zillow Scraper API
- No-Code Scraper Option
- Additional Options
- Support & Resources
The free scraper allows you to collect property data from Zillow search pages on a small scale.
Parameter | Required | Description |
---|---|---|
coords | Yes | Boundary coordinates [west, east, south, north] |
pages | Yes | Number of pages to scrape |
To use the scraper, modify the coordinates and page count in the following code according to your location and data requirements:
# free_zillow_scraper/property_data.py
def get_search_params():
return (
-118.668176, # West longitude
-118.155289, # East longitude
33.703652, # South latitude
34.337306, # North latitude
5 # Number of pages to scrape
)
Hint: Geographical coordinates can be found in the <script>
tag of Zillow's search page for any location. Look for the following tag:
<script id="__NEXT_DATA__" type="application/json">
{
"id": "20595672",
"price": "$1,599,900",
"zestimate": 1605500,
"location": {
"address": "2215 Wellington Rd, Los Angeles, CA 90016",
"city": "Los Angeles",
"state": "CA",
"zip": "90016",
"coordinates": {"lat": 34.036064, "lon": -118.33622},
},
"details": {
"beds": 4,
"baths": 3.0,
"area_sqft": 1886,
"lot_acres": 8577.0,
"property_type": "SINGLE_FAMILY",
},
"listing": {
"status": "House for sale",
"days_on_zillow": 5,
"broker": "ehomes",
"url": "https://www.zillow.com/homedetails/2215-Wellington-Rd-Los-Angeles-CA-90016/20595672_zpid/",
},
},
The free Zillow scraper works well for small-scale data extraction but has the following limitations:
- Rate Limiting: Zillow blocks requests after a few scrapes.
- IP Blocking: Frequent scraping from the same IP can lead to bans.
- Limited Scalability: Not suitable for high-volume data collection.
- Captcha: Zillow may present CAPTCHAs to block automated requests.
- Honeypots: Zillow uses honeypot traps to detect and block bots.
For large-scale scraping, consider using the Zillow Scraper API described below.
The Bright Data Zillow Scraper API provides a scalable, reliable, and hassle-free solution for extracting large-scale Zillow data without the need to build or maintain your own infrastructure.
- Scalable & Reliable: Optimized for high-volume and real-time data collection.
- Anti-Blocking: Built-in proxy rotation and CAPTCHA solving.
- Legal Compliance: Fully GDPR and CCPA compliant.
- Global Coverage: Access data from any region or language.
- Real-Time Data: Fresh data with minimal latency.
- Advanced Filtering: Customize data extraction with precise filters.
- Pay-as-You-Go: Only pay for successful responses.
- Free Trial: Includes 20 free API calls to get started.
- Dedicated Support: 24/7 technical assistance.
- No-Code Option: Scrape Zillow data via API or no-code scrapers.
- Sign Up: Create a Bright Data account.
- Get API Token: Obtain your API key from the dashboard.
- Choose Endpoint: Select from the available API endpoints below.
Collect property details by providing the property URL.
Parameter | Required | Description |
---|---|---|
url |
Yes | Zillow property URL |
properties = [
{"url": "https://www.zillow.com/homedetails/73-Beverly-Park-Ln-Beverly-Hills-CA-90210/20533547_zpid/"},
{"url": "https://www.zillow.com/homedetails/1945-N-Edgemont-St-Los-Angeles-CA-90027/20809871_zpid/"}
]
π Complete Python script: zillow_properties.py
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '[
{
"url": "https://www.zillow.com/homedetails/2506-Gordon-Cir-South-Bend-IN-46635/77050198_zpid/?t=for_sale"
}
]' \
"https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_lfqkr8wm13ixtbd8f5&include_errors=true"
{
"property_overview": {
"address": "73 Beverly Park Ln, Beverly Hills, CA 90210",
"price": "$89,900,000",
"status": "FOR_SALE",
"living_area": "28,500 sq ft",
"lot_size": "2.68 acres",
"bedrooms": 9,
"bathrooms": 22,
},
"key_features": {
"highlights": [
"85-foot infinity lap pool",
"Two kitchens (including commercial-grade)",
"5,000 sq ft primary suite",
"Screening room",
"Gated community with guard",
],
"views": ["City", "Ocean", "Mountain", "Canyon"],
},
"financial": {
"last_sold": "2021-04-08 for $28,500,000",
"property_tax_rate": "1.18%",
"monthly_hoa": "$6,216",
},
}
π This is a partial response. See the full JSON response for complete property details.
Search properties using location and other criteria.
π‘ Note: Some properties may have multiple units, which can result in several records. To limit results, use the Limit per input.
Parameter | Required | Description |
---|---|---|
location |
Yes | Can be a zip code, city, or state. |
listingCategory |
Yes | Options: Sold, House for rent, House for sale. |
HomeType |
Yes | Home type from Zillow (e.g., Houses, Apartments, Townhomes). |
filters = [
{"location": "92027", "listingCategory": "Sold", "HomeType": "Houses"},
{"location": "New York", "listingCategory": "House for rent", "HomeType": "Condos"},
{"location": "Colorado", "listingCategory": "", "HomeType": ""},
]
π Complete Python script: zillow_discovered_properties.py
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '[{"location": "New York", "listingCategory": "House for rent", "HomeType": "Houses"},
{"location": "02118", "listingCategory": "House for sale", "HomeType": "Condos"},
{"location": "Colorado", "listingCategory": "", "HomeType": ""}]' \
"https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_lfqkr8wm13ixtbd8f5&include_errors=true&type=discover_new&discover_by=input_filters"
{
"address": {
"streetAddress": "569 Hayward Pl",
"city": "Escondido",
"state": "CA",
"zipcode": "92027",
},
"homeStatus": "SOLD",
"bedrooms": 4,
"bathrooms": 2,
"livingArea": 1446,
"livingAreaUnits": "Square Feet",
"lotSize": 5933,
"lotAreaUnits": "Square Feet",
"homeType": "SINGLE_FAMILY",
"yearBuilt": 1987,
"lastSoldPrice": 689000,
"dateSoldString": "2022-08-11",
"zestimate": 818100,
"rentZestimate": 3752,
"schools": [
{
"name": "Glen View Elementary School",
"distance": 0.6,
"rating": 5,
"grades": "K-5",
},
{
"name": "Hidden Valley Middle School",
"distance": 1.2,
"rating": 5,
"grades": "6-8",
},
{
"name": "Orange Glen High School",
"distance": 1.4,
"rating": 5,
"grades": "9-12",
},
],
"url": "https://www.zillow.com/homedetails/569-Hayward-Pl-Escondido-CA-92027/16696746_zpid/",
}
π This is a partial response. See the full JSON response for complete property details.
Search for properties directly using Zillow search page URLs.
π‘ Note: Some properties may have multiple units, which can result in several records. To limit results, use the Limit per input.
Parameter | Required | Description |
---|---|---|
url |
Yes | Direct Zillow search URL with complete search parameters |
urls = [
{"url": "https://www.zillow.com/south-bend-in/?searchQueryState=%7B%22pagination%22%3A..."},
{"url": "https://www.zillow.com/new-york-ny/rentals/?searchQueryState=%7B%22isMapVisible%22%3A..."},
{"url": "https://www.zillow.com/sands-point-ny/rentals/?searchQueryState=%7B%22isMapVisible%22%3A..."},
]
π Complete Python script: zillow_discovered_properties_by_url.py
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '[{"url": "https://www.zillow.com/south-bend-in/?searchQueryState=%7B%22pagination%22%3A..."}]' \
"https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_lfqkr8wm13ixtbd8f5&include_errors=true&type=discover_new&discover_by=url"
{
"zpid": 77029580,
"address": {
"streetAddress": "1937 Churchill Dr",
"city": "South Bend",
"state": "IN",
"zipcode": "46617",
},
"price": 435000,
"bedrooms": 4,
"bathrooms": 4,
"livingArea": 3197,
"lotAreaValue": 0.46,
"lotAreaUnits": "Acres",
"yearBuilt": 1968,
"homeStatus": "FOR_SALE",
"zestimate": 420400,
"lastSoldPrice": 134000,
"dateSold": "2013-05-20",
"schools": [
{"name": "McKinley Elementary School", "rating": 4},
{"name": "Edison Intermediate Center", "rating": 2},
{"name": "Rise Up Academy At Eggleston", "rating": 1},
],
"mortgageRates": {"thirtyYearFixedRate": 6.536},
"listingProvidedBy": {"name": "Eric M Bomkamp", "phoneNumber": "574-360-2569"},
"url": "https://www.zillow.com/homedetails/1937-Churchill-Dr-South-Bend-IN-46617/77029580_zpid/",
}
π This is a partial response. See the full JSON response for complete property details.
Collect pricing history for a property.
Parameter | Required | Description |
---|---|---|
url |
Yes | Zillow property URL. |
urls = [
{"url": "https://www.zillow.com/homedetails/8305-Blue-Heron-Way-Raleigh-NC-27615/6468808_zpid/"},
{"url": "https://www.zillow.com/homedetails/930-3rd-St-SE-Hickory-NC-28602/71557289_zpid/"},
]
π Complete Python script: zillow_price_history.py
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '[{"url": "https://www.zillow.com/homedetails/8305-Blue-Heron-Way-Raleigh-NC-27615/6468808_zpid/"},
{"url": "https://www.zillow.com/homedetails/930-3rd-St-SE-Hickory-NC-28602/71557289_zpid/"}]' \
"https://api.brightdata.com/datasets/v3/trigger?dataset_id=gd_lxu1cz9r88uiqsosl&include_errors=true"
{
"url": "https://www.zillow.com/homedetails/8305-Blue-Heron-Way-Raleigh-NC-27615/6468808_zpid/",
"zpid": "6468808",
"date": "2020-11-13T00:00:00.000Z",
"event": "Sold",
"price": 440000,
"price_per_squarefoot": 127,
"source": "Doorify MLS",
"timestamp": "2025-02-09T16:56:42.074Z",
}
π This is a partial response. See the full JSON response for complete property details.
Bright Data No-Code Scraper offers a user-friendly way to collect Zillow data without programming.
- Configure scrapers in minutes.
- Automate the entire data collection process.
- Download results directly in multiple formats.
For detailed instructions, visit our Getting Started guide.
Fine-tune your data collection with these parameters:
Parameter | Type | Description | Example |
---|---|---|---|
limit |
integer |
Max results per input | limit=10 |
include_errors |
boolean |
Get error reports for troubleshooting | include_errors=true |
notify |
url |
Webhook notification URL to be notified upon completion | notify=https://notify-me.com/ |
format |
enum |
Output format (e.g., JSON, NDJSON, JSONL, CSV) | format=json |
π‘ Pro Tip: You can deliver data to an external storage or a webhook.
- API Documentation: Bright Data Docs
- Scraping Best Practices: Avoid Getting Blocked
- Technical Support: Contact Us