Skip to content

realtyapi/Zillow-Scraper-API-Python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zillow Scraper API - Python

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.

Features

  • 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.json with progress tracking
  • Export to JSON or CSV - Save results in your preferred format

Quick Start

1. Get Your API Key

Sign up at realtyapi.io to get your API key.

2. Install

git clone https://github.com/realtyapi/zillow-scraper-python.git
cd zillow-scraper-python
pip install -r requirements.txt

3. Run the Interactive Scraper

python scraper.py

The scraper will prompt you for your API key on first run and save it for future use.

4. Or Use the API Directly in Your Code

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())

Usage Examples

Property Lookup by Address

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)

Property Lookup by ZPID

data = api.get_property_by_zpid("44471319")
print(data)

Property Lookup by Zillow URL

data = api.get_property_by_url(
    "https://www.zillow.com/homedetails/2762-Downing-St-Jacksonville-FL-32205/44471319_zpid/"
)
print(data)

Search Homes for Sale

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)

Search Rentals

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)

Search Recently Sold Homes

data = api.search_by_address(
    location="Miami, FL",
    listing_status="Sold",
    sold_in_last="30_days",
    sort_order="Newest",
)
print(data)

Multi-Location Search (up to 5)

data = api.search_by_address(
    location="New York, NY; Seattle, WA; Austin, TX; 78006; Denver, CO",
    listing_status="For_Sale",
)
print(data)

Search by Coordinates

data = api.search_by_coordinates(
    latitude="40.599283",
    longitude="-74.129194",
    radius="0.5",
    listing_status="For_Sale",
)
print(data)

Search by MLS Number

data = api.search_by_mls("MLS123456")
print(data)

Get Comparable Homes (Comps)

data = api.get_comparable_homes(
    byaddress="1221 Victoria St APT 301, Honolulu, HI 96814"
)
print(data)

Get Price History

data = api.get_price_history(byzpid="44471319")
print(data)

Get Property Images

data = api.get_property_images(
    byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205"
)
print(data)

Get Walk, Transit & Bike Scores

data = api.get_walk_transit_bike_scores(
    byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205"
)
print(data)

Get Zestimate History (10 Years)

data = api.get_zestimate_history(
    byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205",
    recent_first="True",
)
print(data)

Get Climate Risk Data

data = api.get_climate_data(
    byaddress="1875 AVONDALE Circle, Jacksonville, FL 32205"
)
print(data)

Get Tax Assessment History

data = api.get_tax_history(byzpid="44471319")
print(data)

Housing Market Analytics (ZHVI)

# 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)

Find Real Estate Agents

# 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)

Skip Tracing

# 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)

Autocomplete

data = api.autocomplete("649 Keller St, Bay St Louis")
print(data)

Scraper Modes

Every scraper option supports two modes:

Test Mode (Single Input)

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.

Bulk Mode (from input.json)

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.

Bulk Mode - input.json Format

  1. Copy input_sample.json to input.json
  2. Fill in only the sections you need
  3. Run python scraper.py, pick your operation, then select "Bulk run"

input.json Structure

{
  "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.).

Output Formats

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.

API Configuration

Option 1: Environment Variable

export REALTYAPI_KEY=rt_your_key_here
python scraper.py

Option 2: Config File

The scraper saves your key to config.json on first run. You can also create it manually:

{
  "api_key": "rt_your_key_here"
}

Option 3: Direct in Code

from zillow_api import ZillowAPI
api = ZillowAPI("rt_your_key_here")

Search Filter Reference

Listing Status

Value Description
For_Sale Active for-sale listings
For_Rent Active rental listings
Sold Recently sold properties

Sort Order

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

Bedrooms

Value Description
No_Min / No_Max No limit
Studio Studio
1 - 5 Number of bedrooms

Bathrooms

Value Description
Any No filter
OnePlus 1+ bathrooms
OneHalfPlus 1.5+ bathrooms
TwoPlus 2+ bathrooms
ThreePlus 3+ bathrooms
FourPlus 4+ bathrooms

Home Type

For Sale / Sold: Houses, Townhomes, Multi-family, Condos/Co-ops, Lots-Land, Apartments, Manufactured

For Rent: Houses, Apartments/Condos/Co-ops, Townhomes

Days on Zillow / Sold In Last

Any, 1_day, 7_days, 14_days, 30_days, 90_days, 6_months, 12_months, 24_months, 36_months

Max HOA (For Sale / Sold only)

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

Basement

No, Yes_Finished, Yes_Unfinished, Yes_Both

Parking Spots

Any, OnePlus, TwoPlus, ThreePlus, FourPlus

Agent Specialties

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

Agent Languages

arabic, bengali, cantonese, farsi, filipino, french, german, greek, hebrew, hindi, hungarian, italian, japanese, korean, mandarin, polish, portuguese, russian, spanish, thai, turkish, vietnamese

All Available Endpoints

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

File Structure

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

Requirements

  • Python 3.7+
  • requests library

Get Your API Key

Sign up at realtyapi.io to get your Zillow Scraper API key.

Related APIs

RealtyAPI also offers scraper APIs for:

License

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

About

Zillow Scraper API in Python. Use this to get Zillow data saved to Json/Csv/Excel.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages