A powerful Python scraper for extracting real estate data from Zillow. Search properties, get property details, find agents, analyze housing markets, and run skip traces using the Zillow Scraper API by RealtyAPI.
- Property Data Extraction - Get detailed property info by address, ZPID, or Zillow URL
- Zillow Search - Search for sale, for rent, and sold listings with 30+ filters
- Multi-Location Search - Search up to 5 locations in a single API call
- Coordinate Search - Circle search by latitude, longitude, and radius
- Comparable Homes - Find comps for any property
- Price History - Full price and tax history
- Zestimate History - 10 years of Zillow home value estimates
- Walk/Transit/Bike Scores - Walkability and transit scores
- Climate Risk Data - Environmental and climate risk assessment
- Property Images - All listing photos
- Housing Market Analytics - Zillow Home Value Index (ZHVI) data
- Agent Search - Find and filter real estate agents
- Skip Tracing - Find property owner information
- MLS Search - Look up properties by MLS number
- Bulk Mode - Process hundreds of properties from
input.jsonwith progress tracking - Export to JSON or CSV - Save results in your preferred format
Sign up at realtyapi.io to get your API key.
git clone https://github.com/realtyapi/zillow-scraper-python.git
cd zillow-scraper-python
pip install -r requirements.txtpython scraper.pyThe scraper will prompt you for your API key on first run and save it for future use.
import requests
url = "https://zillow.realtyapi.io/pro/byaddress"
params = {
"propertyaddress": "1875 AVONDALE Circle, Jacksonville, FL 32205"
}
headers = {
"x-realtyapi-key": "YOUR_API_KEY"
}
response = requests.get(url, headers=headers, params=params)
print(response.json())from zillow_api import ZillowAPI
api = ZillowAPI("YOUR_API_KEY")
# Get full property details
data = api.get_property_by_address("1875 AVONDALE Circle, Jacksonville, FL 32205")
print(data)data = api.get_property_by_zpid("44471319")
print(data)data = api.get_property_by_url(
"https://www.zillow.com/homedetails/2762-Downing-St-Jacksonville-FL-32205/44471319_zpid/"
)
print(data)data = api.search_by_address(
location="New York, NY",
listing_status="For_Sale",
sort_order="Newest",
bed_min="2",
bathrooms="TwoPlus",
list_price_range="min:500000, max:2000000",
home_type="Houses, Condos/Co-ops",
page=1,
)
print(data)data = api.search_by_address(
location="Los Angeles, CA",
listing_status="For_Rent",
sort_order="Price_Low_to_High",
bed_min="1",
home_type="Apartments/Condos/Co-ops",
)
print(data)data = api.search_by_address(
location="Miami, FL",
listing_status="Sold",
sold_in_last="30_days",
sort_order="Newest",
)
print(data)data = api.search_by_address(
location="New York, NY; Seattle, WA; Austin, TX; 78006; Denver, CO",
listing_status="For_Sale",
)
print(data)data = api.search_by_coordinates(
latitude="40.599283",
longitude="-74.129194",
radius="0.5",
listing_status="For_Sale",
)
print(data)data = api.search_by_mls("MLS123456")
print(data)data = api.get_comparable_homes(
byaddress="1221 Victoria St APT 301, Honolulu, HI 96814"
)
print(data)data = api.get_price_history(byzpid="44471319")
print(data)data = api.get_property_images(
byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205"
)
print(data)data = api.get_walk_transit_bike_scores(
byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205"
)
print(data)data = api.get_zestimate_history(
byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205",
recent_first="True",
)
print(data)data = api.get_climate_data(
byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205"
)
print(data)data = api.get_tax_history(byzpid="44471319")
print(data)# City-level data
data = api.get_housing_market(
search_query="Austin, TX",
home_type="All_Homes",
exclude_rental_trends=False,
)
print(data)
# Nationwide data
data = api.get_housing_market(search_query="USA")
print(data)# Search agents by location
data = api.search_agents(
location="Saint Louis, MO",
is_top_agent=True,
specialties="luxury-homes",
)
print(data)
# Get agent details
data = api.get_agent_details(username="Alex-Antigua")
print(data)
# Get agent's sold properties
data = api.get_agent_sold(username="Alex-Antigua")
print(data)
# Get agent reviews
data = api.get_agent_reviews(username="Alex-Antigua")
print(data)# Note: Each skip trace call costs 10 API requests
data = api.skip_trace_by_address(
street="3828 Double Oak Ln",
citystatezip="Irving, TX 75061",
)
print(data)data = api.autocomplete("649 Keller St, Bay St Louis")
print(data)Every scraper option supports two modes:
Enter one input manually. The scraper shows a preview (first 1000 characters) of the response, then asks if you want to save the full output as JSON or CSV.
Process hundreds of inputs automatically. The scraper reads from input.json, runs each request one by one, shows a progress bar, and saves all results at the end.
[========================------] 80% (8/10) 1875 AVONDALE Circle, Jacksonville
No response data is printed during bulk runs - only progress and a final summary.
- Copy
input_sample.jsontoinput.json - Fill in only the sections you need
- Run
python scraper.py, pick your operation, then select "Bulk run"
{
"property_addresses": [
"1875 AVONDALE Circle, Jacksonville, FL 32205",
"1221 Victoria St APT 301, Honolulu, HI 96814"
],
"property_zpids": [
"44471319",
"2089316022"
],
"property_urls": [
"https://www.zillow.com/homedetails/2762-Downing-St-Jacksonville-FL-32205/44471319_zpid/"
],
"search_locations": [
{
"location": "New York, NY",
"listing_status": "For_Sale",
"sort_order": "Newest",
"bed_min": "2",
"bathrooms": "TwoPlus",
"list_price_range": "min:500000, max:2000000",
"page": 1
},
"Austin, TX"
],
"search_coordinates": [
{
"latitude": "40.599283",
"longitude": "-74.129194",
"radius": "0.5",
"listing_status": "For_Sale"
}
],
"search_urls": [
"https://www.zillow.com/new-york-ny/"
],
"search_mls_numbers": [
"MLS123456"
],
"autocomplete_queries": [
"649 Keller St, Bay St Louis",
"New York"
],
"property_details": [
{"address": "1875 AVONDALE Circle, Jacksonville, FL 32205"},
{"zpid": "44471319"},
{"url": "https://www.zillow.com/homedetails/..."}
],
"market_queries": [
{"search_query": "Austin, TX", "home_type": "All_Homes"},
"New York, NY",
"USA"
],
"agent_searches": [
{"location": "Saint Louis, MO", "is_top_agent": true, "specialties": "luxury-homes"},
"Los Angeles, CA"
],
"agent_profiles": [
{"agent_link": "https://www.zillow.com/profile/Alex-Antigua"},
{"username": "Alex-Antigua"},
"Alex-Antigua"
],
"skip_traces": [
{"street": "3828 Double Oak Ln", "citystatezip": "Irving, TX 75061"}
]
}Simple string values work for basic lookups. Use objects when you need filters (search params, pagination, etc.).
After every operation, you choose how to save results:
| Option | Format | Best for |
|---|---|---|
| 1 | JSON (.json) | Full nested data, programmatic access |
| 2 | CSV (.csv) | Spreadsheets, Excel, data analysis |
| 3 | Both | Keep JSON for detail + CSV for quick review |
All output is saved to the output/ directory.
export REALTYAPI_KEY=rt_your_key_here
python scraper.pyThe scraper saves your key to config.json on first run. You can also create it manually:
{
"api_key": "rt_your_key_here"
}from zillow_api import ZillowAPI
api = ZillowAPI("rt_your_key_here")| Value | Description |
|---|---|
For_Sale |
Active for-sale listings |
For_Rent |
Active rental listings |
Sold |
Recently sold properties |
| Value | Description |
|---|---|
Homes_for_you |
Default for For Sale |
Rental_Priority_Score |
Default for For Rent |
Price_High_to_Low |
Highest price first |
Price_Low_to_High |
Lowest price first |
Newest |
Most recently listed |
Bedrooms |
Most bedrooms first |
Bathrooms |
Most bathrooms first |
Square_Feet |
Largest first |
Lot_Size |
Largest lot first |
Year_Built |
Newest built first |
| Value | Description |
|---|---|
No_Min / No_Max |
No limit |
Studio |
Studio |
1 - 5 |
Number of bedrooms |
| Value | Description |
|---|---|
Any |
No filter |
OnePlus |
1+ bathrooms |
OneHalfPlus |
1.5+ bathrooms |
TwoPlus |
2+ bathrooms |
ThreePlus |
3+ bathrooms |
FourPlus |
4+ bathrooms |
For Sale / Sold:
Houses, Townhomes, Multi-family, Condos/Co-ops, Lots-Land, Apartments, Manufactured
For Rent:
Houses, Apartments/Condos/Co-ops, Townhomes
Any, 1_day, 7_days, 14_days, 30_days, 90_days, 6_months, 12_months, 24_months, 36_months
Any, No_HOA_Fee, 50_dollars_month, 100_dollars_month, 200_dollars_month, 300_dollars_month, 400_dollars_month, 500_dollars_month, 600_dollars_month, 700_dollars_month, 800_dollars_month, 900_dollars_month, 1000_dollars_month
No, Yes_Finished, Yes_Unfinished, Yes_Both
Any, OnePlus, TwoPlus, ThreePlus, FourPlus
first-time-home-buyers, foreclosure, investment-properties, lot-or-land, luxury-homes, military-or-veterans, new-construction, property-management, relocation, rentals, senior-communities, vacation-short-term-rentals
arabic, bengali, cantonese, farsi, filipino, french, german, greek, hebrew, hindi, hungarian, italian, japanese, korean, mandarin, polish, portuguese, russian, spanish, thai, turkish, vietnamese
| Category | Endpoint | Description |
|---|---|---|
| Property | /pro/byaddress |
Property details by address |
| Property | /pro/byzpid |
Property details by ZPID |
| Property | /pro/byurl |
Property details by Zillow URL |
| Search | /search/byaddress |
Search by location (30+ filters) |
| Search | /search/bycoordinates |
Circle search by lat/lng/radius |
| Search | /search/byurl |
Search by Zillow URL |
| Search | /search/bymls |
Search by MLS number |
| Search | /autocomplete |
Autocomplete suggestions |
| Details | /propimages |
Property images |
| Details | /pricehistory |
Price history |
| Details | /comparable_homes |
Comparable homes |
| Details | /similar_properties |
Similar properties |
| Details | /nearby_properties |
Nearby properties |
| Details | /walk_transit_bike |
Walk/transit/bike scores |
| Details | /climate |
Climate risk data |
| Details | /taxinfo_history |
Tax assessment history |
| Details | /owner-agent |
Listing agent info |
| Details | /apartment_details |
Apartment details |
| Details | /lotid_from_address |
LOT ID lookup |
| Charts | /graph_charts |
Zestimate history, tax charts |
| Market | /housing_market |
ZHVI & market analytics |
| Agents | /agent/search |
Search agents |
| Agents | /agent/details |
Agent profile |
| Agents | /agent/forSaleProperties |
Agent's for-sale listings |
| Agents | /agent/forRentProperties |
Agent's rental listings |
| Agents | /agent/soldProperties |
Agent's sold history |
| Agents | /agent/reviews |
Agent reviews |
| Skip Trace | /skip/byaddress |
Skip trace by address |
zillow-scraper/
├── scraper.py # Interactive CLI (test one or bulk run)
├── zillow_api.py # Zillow API client library
├── config.py # API key management
├── examples.py # Code examples for every endpoint
├── input_sample.json # Template for bulk input (copy to input.json)
├── input.json # Your bulk input data (gitignored)
├── requirements.txt # Python dependencies
├── config.json # Your API key (auto-created, gitignored)
├── output/ # Saved JSON/CSV outputs (auto-created)
└── README.md # This file
- Python 3.7+
requestslibrary
Sign up at realtyapi.io to get your Zillow Scraper API key.
RealtyAPI also offers scraper APIs for:
MIT
Keywords: zillow scraper, zillow api, zillow data scraper, zillow property data, zillow scraper python, zillow listing scraper, zillow real estate api, scrape zillow, zillow scraping tool, zillow api python, zillow property scraper, zillow home data api, zillow zestimate api, zillow search api, zillow agent api, zillow comps api, zillow price history api, zillow rental data, zillow sold homes data, zillow market data, zillow skip trace, real estate scraper, real estate api, property data api, housing data api, mls data api, property scraper python, real estate data extraction, zillow automation, zillow data mining, zillow web scraper, zillow crawler, zillow property lookup, zpid lookup, zillow comparable homes, zillow walk score api, zillow housing market data, zhvi data api, realtyapi, realty api