Zillow Real Estate Scraper — Homes, Rentals & Sold Properties avatar

Zillow Real Estate Scraper — Homes, Rentals & Sold Properties

Pricing

Pay per usage

Go to Apify Store
Zillow Real Estate Scraper — Homes, Rentals & Sold Properties

Zillow Real Estate Scraper — Homes, Rentals & Sold Properties

Scrape Zillow real estate listings for any US location. Extract property prices, Zestimates, square footage, bedrooms, bathrooms, lot size, year built, property type, listing agent, photos, and more. Supports for-sale, rental, and recently-sold listings with price and bedroom filters. Parse __NEXT_D

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ricardo Akiyoshi

Ricardo Akiyoshi

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 hours ago

Last modified

Categories

Share

Zillow Real Estate Scraper

Scrape Zillow listings for any US location. Extract property prices, Zestimates, square footage, bedrooms, bathrooms, lot size, year built, property type, listing agent, broker, photos, and more.

Supports homes for sale, rentals, and recently sold properties. Filter by price range, bedrooms, and bathrooms.

Features

  • Three listing types -- homes for sale, rentals, and recently sold properties
  • Any US location -- search by city, zip code, neighborhood, or paste any Zillow search URL
  • Deep data extraction -- prices, Zestimates, beds/baths, sqft, lot size, year built, HOA fees, tax assessments
  • Three extraction strategies -- parses __NEXT_DATA__ (Next.js), hdpApolloPreloadedData (GraphQL cache), and CSS selectors as fallback
  • Detail page scraping -- optionally visit each listing for full descriptions, all photos, price history, tax history, and school info
  • Agent and broker info -- listing agent name, brokerage, phone number, MLS ID
  • Smart pagination -- automatically follows Zillow's multi-page results
  • Deduplication -- tracks seen ZPIDs and addresses to avoid duplicate listings
  • Anti-bot handling -- 8 rotating User-Agent strings with full realistic browser headers, CAPTCHA detection, graceful shutdown
  • Price and bedroom filters -- narrow searches before scraping to reduce page loads
  • Proxy support -- residential proxies strongly recommended for Zillow
  • Pay-per-event -- charged per listing scraped

Use Cases

Real Estate Investment Analysis

Scrape listings across multiple cities to compare property values, identify undervalued markets, and track price trends over time. Cross-reference listing prices with Zestimates to find deals.

Rental Market Research

Monitor rental listings to analyze rent prices by neighborhood, bedroom count, and property type. Track seasonal fluctuations and identify emerging rental markets.

Property Valuation

Collect recently sold properties to build comparable sales (comps) datasets for appraisals. Include tax history, price history, and property details for thorough analysis.

Lead Generation

Extract broker and agent contact information alongside property data for real estate marketing, outreach, and CRM enrichment.

Market Analytics

Build datasets of property listings with geolocation data for mapping, heatmaps, and spatial analysis of real estate markets.

Academic Research

Collect structured housing data for economics research, urban planning studies, and demographic analysis.

Input

FieldTypeDefaultDescription
searchUrlString(empty)Full Zillow search URL (overrides location/listingType)
locationStringlos-angeles-caCity, zip, or neighborhood slug
listingTypeStringfor_salefor_sale, for_rent, or sold
maxResultsInteger25Maximum listings to scrape (0 = unlimited)
minPriceInteger0Minimum price filter
maxPriceInteger0Maximum price filter
minBedsInteger0Minimum bedrooms
minBathsInteger0Minimum bathrooms
scrapeDetailsBooleanfalseVisit detail pages for full data
maxConcurrencyInteger2Parallel requests (keep low for Zillow)
proxyConfigurationObject(none)Apify proxy settings (residential recommended)

Location Format

Use Zillow's URL-friendly slug format:

LocationSlug
Los Angeles, CAlos-angeles-ca
New York, NYnew-york-ny
Miami, FLmiami-fl
Chicago, ILchicago-il
San Francisco, CAsan-francisco-ca
Austin, TXaustin-tx
Seattle, WAseattle-wa
Denver, COdenver-co
Manhattan, New Yorkmanhattan-new-york-ny
Beverly Hills, CAbeverly-hills-ca
ZIP code 9021090210
ZIP code 1000110001

Input Examples

Homes for sale in Los Angeles under $1M

{
"location": "los-angeles-ca",
"listingType": "for_sale",
"maxResults": 100,
"maxPrice": 1000000
}

Rentals in Manhattan, 2+ bedrooms

{
"location": "manhattan-new-york-ny",
"listingType": "for_rent",
"maxResults": 50,
"minBeds": 2
}

Recently sold homes in ZIP 90210

{
"location": "90210",
"listingType": "sold",
"maxResults": 200,
"scrapeDetails": true
}

Custom Zillow search URL

{
"searchUrl": "https://www.zillow.com/san-francisco-ca/houses/?searchQueryState=%7B%22pagination%22%3A%7B%7D%7D",
"maxResults": 50
}

Investment analysis: cheap homes in Detroit with details

{
"location": "detroit-mi",
"listingType": "for_sale",
"maxResults": 300,
"maxPrice": 100000,
"minBeds": 3,
"scrapeDetails": true,
"maxConcurrency": 1,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Output

Each listing is saved to the default dataset. Output varies depending on whether detail page scraping is enabled.

Standard output (search page only)

{
"zpid": "20485713",
"address": "123 Main St, Los Angeles, CA 90001",
"streetAddress": "123 Main St",
"city": "Los Angeles",
"state": "CA",
"zipcode": "90001",
"price": 850000,
"priceFormatted": "$850,000",
"currency": "USD",
"zestimate": 875000,
"zestimateFormatted": "$875,000",
"rentZestimate": 3200,
"bedrooms": 3,
"bathrooms": 2,
"sqft": 1650,
"lotSize": "5,500 sqft",
"yearBuilt": 1972,
"propertyType": "SINGLE_FAMILY",
"listingStatus": "FOR_SALE",
"daysOnZillow": 14,
"listingUrl": "https://www.zillow.com/homedetails/123-Main-St-Los-Angeles-CA-90001/20485713_zpid/",
"imageUrl": "https://photos.zillowstatic.com/fp/abc123-p_e.jpg",
"allImages": [
"https://photos.zillowstatic.com/fp/abc123-p_e.jpg",
"https://photos.zillowstatic.com/fp/def456-p_e.jpg"
],
"latitude": 34.0522,
"longitude": -118.2437,
"listingAgent": "Jane Smith",
"broker": "Keller Williams Realty",
"brokerPhone": "(310) 555-0123",
"mlsId": "SR26012345",
"taxAssessedValue": 720000,
"annualHomeownerInsurance": 1800,
"monthlyHoaFee": null,
"description": null,
"scrapedAt": "2026-03-01T12:00:00.000Z",
"source": "zillow",
"searchPage": 1
}

Extended output (with detail page scraping)

When scrapeDetails is enabled, listings also include:

{
"description": "Beautifully renovated 3-bedroom home in prime Los Angeles location. Features updated kitchen with granite countertops, hardwood floors throughout, spacious backyard...",
"priceHistory": [
{ "date": "2026-01-15", "price": 870000, "event": "Listed for sale" },
{ "date": "2026-02-01", "price": 850000, "event": "Price change" }
],
"taxHistory": [
{ "year": 2025, "taxPaid": 8640, "value": 720000 },
{ "year": 2024, "taxPaid": 8200, "value": 685000 }
],
"schools": [
{ "name": "Lincoln Elementary", "rating": 7, "distance": "0.3 mi", "type": "public", "grades": "K-5" },
{ "name": "Roosevelt Middle", "rating": 6, "distance": "0.8 mi", "type": "public", "grades": "6-8" }
],
"detailPageScraped": true
}

Performance Tips

  1. Always use residential proxies -- Zillow is one of the most aggressive anti-bot sites. Datacenter IPs are almost always blocked. Use RESIDENTIAL proxy group.
  2. Start with a small test -- run with maxResults: 5 first to verify your location and proxy setup work before scaling.
  3. Keep concurrency low -- maxConcurrency: 1-2 is safest. Zillow rate-limits aggressively.
  4. Disable details for speed -- set scrapeDetails: false for 5-10x faster scraping when you only need basic listing data.
  5. Use location filters -- narrow by price and bedrooms to reduce the number of pages scraped.
  6. Custom URLs for complex searches -- for advanced Zillow filters (pool, garage, year built range), perform the search in your browser and paste the full URL into searchUrl.

Anti-Bot Protection

Zillow uses sophisticated anti-bot measures including:

  • IP fingerprinting and datacenter IP blocking
  • Browser fingerprint detection
  • Rate limiting with progressive blocking
  • CAPTCHA challenges (reCAPTCHA)
  • JavaScript challenge pages

This actor handles these by:

  • Rotating 8 realistic User-Agent strings per request
  • Sending full browser-like headers (Sec-Ch-Ua, Sec-Fetch-*, etc.)
  • Limiting to 15 requests/minute by default
  • Detecting CAPTCHA/block pages and stopping gracefully to preserve collected data
  • Supporting Apify residential proxy rotation

If you see "CAPTCHA or anti-bot block detected" in logs, all data collected before the block is saved. Switch to residential proxies for reliable results.

Pricing (Pay Per Event)

This actor uses Apify's pay-per-event model. You are charged for each listing successfully scraped and saved to the dataset. Detail page scraping counts as one charge per listing (not two).

This actor is provided as a technical tool for data collection. Users are responsible for ensuring their use complies with Zillow's Terms of Use and all applicable laws, including the Computer Fraud and Abuse Act. This tool is intended for personal research, market analysis, and educational purposes. Do not use scraped data for purposes that violate Zillow's terms or applicable law.

Integration — Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("sovereigntaylor/zillow-scraper").call(run_input={
"location": "austin-tx",
"listingType": "for_sale",
"maxResults": 100,
"maxPrice": 500000,
"minBeds": 3,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"]
}
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['address']}: {item['priceFormatted']} | {item['bedrooms']}bd/{item['bathrooms']}ba | {item['sqft']} sqft")

Integration — JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('sovereigntaylor/zillow-scraper').call({
location: 'austin-tx',
listingType: 'for_sale',
maxResults: 100,
maxPrice: 500000,
minBeds: 3,
proxyConfiguration: {
useApifyProxy: true,
apifyProxyGroups: ['RESIDENTIAL']
}
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(p => {
console.log(`${p.address}: ${p.priceFormatted} | ${p.bedrooms}bd/${p.bathrooms}ba`);
});