ChimeraMiND Data
Home / Tools / Zillow Scraper (Homes for Sale, Rent & Sold, Zestimates)
Real estate

Zillow Scraper (Homes for Sale, Rent & Sold, Zestimates)

Scrape Zillow search results for any city, ZIP or map search: price, address, coordinates, beds, baths, square feet, lot size, home type, days on Zillow, Zestimate and rent Zestimate, tax value, broker, photos, rental building units, sold dates.

Run Zillow Scraper (Homes for Sale, Rent & Sold, Zestimates) on Apify →

Read the step-by-step guide

Pricing

Apify planPer homePer 1,000
Free plan$0.001$1
Starter$0.0008$0.80
Scale$0.0007$0.70
Business$0.0006$0.60
Enterprise$0.0006$0.60
Enterprise+$0.0006$0.60

Primary event rates from a catalog snapshot; this is not the total price of a run. Additional charge events and Actor Start fees may apply; start fees can scale with memory. Check the Actor's Pricing tab on Apify for all events, conditions and current plan-specific rates, and set a maximum run budget before starting.

Sample output

Archived example · 19 days old. This is a snapshot, not current data.run ddClyjEm1t7D2e1vT · 2026-09-29
{
  "position": 24,
  "zpid": "48848917",
  "url": "https://www.zillow.com/homedetails/6008-Oberlin-Ave-NE-Seattle-WA-98115/48848917_zpid/",
  "status": "SOLD",
  "statusText": "Sold",
  "price": 2660000,
  "priceText": null,
  "soldPrice": 2660000,
  "dateSold": "2026-09-25",
  "address": "6008 Oberlin Avenue NE, Seattle, WA 98115",
  "street": "6008 Oberlin Avenue NE",
  "city": "Seattle",
  "state": "WA",
  "zipcode": "98115",
  "latitude": 47.672535,
  "longitude": -122.27842,
  "beds": 5,
  "baths": 4,
  "livingArea": 3580,
  "lotArea": 6033.06,
  "lotAreaUnit": "sqft",
  "homeType": "SINGLE_FAMILY",
  "daysOnZillow": null,
  "zestimate": 2387400,
  "rentZestimate": 6636,
  "taxAssessedValue": 2035000,
  "brokerName": null,
  "isBuilding": false,
  "buildingName": null,
  "units": [],
  "imageUrl": "https://photos.zillowstatic.com/fp/1be43f35367174578cfdc5d224aa18ef-p_e.jpg",
  "photos": [
    "https://photos.zillowstatic.com/fp/1be43f35367174578cfdc5d224aa18ef-p_e.jpg",
    "https://photos.zillowstatic.com/fp/cb23425a3f5c2b733dd7a0f07119d34f-p_e.jpg",
    "https://photos.zillowstatic.com/fp/0d4baa407e66c88336aaf19f0af3c410-p_e.jpg"
  ],
  "has3DModel": false,
  "hasVideo": false,
  "isFeatured": false,
  "listingLabel": "RecentChange",
  "searchLocation": "Seattle, WA",
  "searchUrl": null,
  "listingType": "sold",
  "region": "Seattle",
  "totalResults": 28793
}

Call from code

Use the existing catalog input below as a starting point. Review the tool's input form on Apify before running it.

import json
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("webdatatools/zillow-scraper").call(run_input=json.loads("{\n    \"locations\": \"Austin, TX\",\n    \"listingType\": \"sale\",\n    \"sortBy\": \"relevance\"\n}"))

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('webdatatools/zillow-scraper').call({
    "locations": "Austin, TX",
    "listingType": "sale",
    "sortBy": "relevance"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
curl -X POST "https://api.apify.com/v2/acts/webdatatools~zillow-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"locations":"Austin, TX","listingType":"sale","sortBy":"relevance"}'

Related tools

Workflows