Zillow Scraper · For Sale, Rent & Sold

The NanoScrape Zillow Scraper is an Apify actor that extracts real estate listings from zillow.com. It returns 64 fields per result including address, description, addressStreet, addressCity, addressState, priced at $1.5/1k enrichment, with no API key or monthly subscription required.

Scrape Zillow property listings for sale, rent, or recently sold (source platform). Returns address, price, Zestimate, beds/baths, agent contacts (email + phone), price history, schools, and 60+ fields. Pay-per-result.

Open on Apify →
Pricing
$1.50 / 1,000 detail enrichment
Runtime
Cloud (Apify)
Proxy
Datacenter

What you can scrape — 64 fields per result

FieldTypeExampleGroupFill %
addressstring4523 Katherine Ave Sherman Oaks, CA 91423Location100%
addressStreetstring(populated when data available)Location
addressCitystring(populated when data available)Location
addressStatestring(populated when data available)Location
addressZipcodestring(populated when data available)Location
latitudenumber | null34.153717Location100%
longitudenumber | null-118.44356Location100%
descriptionstring | null(populated when data available)Description
scrapedAtstring(populated when data available)Metadata
zpidstring19984246Other100%
pricenumber | null3350000Other100%
priceLabelstring | null(populated when data available)Other
zestimatenumber | null3278700Other85%
rentZestimatenumber | null(populated when data available)Other
bedroomsinteger | null4Other100%
bathroomsnumber | null6Other100%
livingAreanumber | null(populated when data available)Other
lotAreaValuenumber | null(populated when data available)Other
lotAreaUnitstring | null(populated when data available)Other
homeTypestring | null(populated when data available)Other
homeStatusstring | null(populated when data available)Other
statusTextstring | null(populated when data available)Other
listingTypestring | null(populated when data available)Other
daysOnZillowinteger | null(populated when data available)Other
yearBuiltinteger | null(populated when data available)Other
hdpUrlstring(populated when data available)Other
imgSrcstring | null(populated when data available)Other
hasVideoboolean | null(populated when data available)Other
has3DModelboolean | null(populated when data available)Other
isFeaturedListingboolean | null(populated when data available)Other
isZillowOwnedboolean | null(populated when data available)Other
openHouseSchedulearray(populated when data available)Other
agentNamestring | null(populated when data available)Other
agentEmailstring | null(populated when data available)Other
agentPhonestring | null(populated when data available)Other
agentLicenseNumberstring | null(populated when data available)Other
coAgentNamestring | null(populated when data available)Other
coAgentPhonestring | null(populated when data available)Other
brokerNamestring | null(populated when data available)Other
brokerPhonestring | null(populated when data available)Other
mlsIdstring | null(populated when data available)Other
mlsNamestring | null(populated when data available)Other
lastSoldPricenumber | null(populated when data available)Other
lastSoldDatestring | null(populated when data available)Other
priceHistoryarray(populated when data available)Other
taxHistoryarray(populated when data available)Other
schoolsarray(populated when data available)Other
walkScoreinteger | null(populated when data available)Other
transitScoreinteger | null(populated when data available)Other
bikeScoreinteger | null(populated when data available)Other
hoaFeenumber | null(populated when data available)Other
propertyTaxRatenumber | null(populated when data available)Other
pageViewCountinteger | null(populated when data available)Other
favoriteCountinteger | null(populated when data available)Other
nearbyHomesarray(populated when data available)Other
hasBasementboolean | null(populated when data available)Other
hasGarageboolean | null(populated when data available)Other
hasPoolboolean | null(populated when data available)Other
garageParkingCapacityinteger | null(populated when data available)Other
coolingstring | null(populated when data available)Other
heatingstring | null(populated when data available)Other
appliancesarray(populated when data available)Other
parkingFeaturesarray(populated when data available)Other
resoFactsobject | null(populated when data available)Other

Input example — showcase (full detail)

{
  "locations": [
    "New York, NY"
  ],
  "listingType": "for_sale",
  "maxItems": 10,
  "fetchDetails": false
}

Input example — using search URLs (higher volume)

{
  "locations": [
    "New York, NY"
  ],
  "listingType": "for_sale",
  "maxItems": 10,
  "fetchDetails": false,
  "searchUrls": [
    {
      "url": "https://www.zillow.com/homes/for_sale/New-York,-NY_rb/"
    }
  ]
}

Output example — real dataset item (PII scrubbed)

{
  "property_image_url": "https://photos.zillowstatic.com/fp/f2e680c3518d60569d7a7500a1f83940-p_e.jpg",
  "zpid": "19984246",
  "url": "https://www.zillow.com/homedetails/4523-Katherine-Ave-Sherman-Oaks-CA-91423/19984246_zpid/",
  "status": "FOR_SALE",
  "listing_type": "for_sale",
  "price": 3350000,
  "zestimate": 3278700,
  "address": "4523 Katherine Ave Sherman Oaks, CA 91423",
  "address_street": "4523 Katherine Ave",
  "city": "Sherman Oaks",
  "state": "CA",
  "zip_code": "91423",
  "latitude": 34.153717,
  "longitude": -118.44356,
  "property_type": "Single Family",
  "bedrooms": 4,
  "bathrooms": 6,
  "living_area_sqft": 3519,
  "lot_size_sqft": 6750,
  "year_built": null,
  "days_on_market": 9,
  "tax_assessed_value": 1463700,
  "rent_zestimate": null,
  "broker_name": "The Agency",
  "price_change": null,
  "price_reduction": null,
  "price_changed_at": null,
  "has_3d_tour": true,
  "has_video": null,
  "photos": [
    "https://photos.zillowstatic.com/fp/f2e680c3518d60569d7a7500a1f83940-p_e.jpg"
  ],
  "photo_count": null,
  "date_sold": null,
  "listing_sold_price": null,
  "open_house": null,
  "description": null,
  "hoa_monthly_fee": null,
  "mls_id": null,
  "schools_count": null,
  "source_url": "https://www.zillow.com/homes/Los-Angeles,-CA_rb/",
  "source_platform": "zillow.com",
  "scraped_at": "2026-09-01T15:16:21Z"
}

Cost math

Priced at $0.0015 per detail enrichment. 10 detail enrichments ≈ $0.01, 100 ≈ $0.15, 1,000 ≈ $1.50. The first runs land inside Apify's $5/mo free-tier credit — pay only for what you extract, no monthly subscription.

Integrations

Run this actor directly on Apify (no code)

Click Open on Apify above to run zillow-scraper in your browser - no code, no install. In the Apify console you get:

Get your Apify API token

To run this actor from your own code you need an Apify API token. Get one in about a minute:

  1. Sign up for a free Apify account (Google, GitHub, or email).
  2. Go to Settings → Integrations → API tokens.
  3. Click Create a new API token. Copy it and keep it secret.

Free tier: Apify credits your account with $5 of platform usage every month, no credit card required. Enough to test any actor meaningfully - at $0.001 per result on typical scrapers, that is roughly 5,000 results for free every month.

Call from code

Run this actor from any language via the Apify REST API. Replace YOUR_TOKEN with your API token and adapt the input JSON to your needs.

curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'
// npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('santamaria-automations/zillow-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
# pip install apify-client
from apify_client import ApifyClient

client = ApifyClient('YOUR_TOKEN')
run = client.actor('santamaria-automations/zillow-scraper').call(run_input={})
items = list(client.dataset(run['defaultDatasetId']).iterate_items())
print(items)
// dotnet add package Apify.Client
using Apify.Client;

var client = new ApifyClient("YOUR_TOKEN");
var run = await client.Actor("santamaria-automations/zillow-scraper").CallAsync(new { });
var items = await client.Dataset(run.DefaultDatasetId).ListItemsAsync();
// Maven: com.apify:apify-client
import com.apify.client.ApifyClient;

ApifyClient client = new ApifyClient("YOUR_TOKEN");
ActorRun run = client.actor("santamaria-automations/zillow-scraper").call(Map.of());
List<Map<String,Object>> items = client.dataset(run.getDefaultDatasetId()).listItems();

Use with AI agents (MCP)

This actor is available on the Apify MCP server, so you can drive it from any MCP-compatible AI client - Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or a custom agent - without writing any code.

https://mcp.apify.com?tools=santamaria-automations/zillow-scraper

Example prompt once connected:

"Use <code>zillow-scraper</code> to run a scrape on my target list and give me the results as a table."

Clients that support dynamic tool discovery (Claude.ai, VS Code) receive the full input schema automatically via add-actor.

Use with no-code platforms

Trigger this actor from your favorite automation tool. Every platform below can call the Apify API in a few clicks - no code required.

  1. Add the n8n Apify node (installed by default on n8n Cloud; on self-hosted install @apify/n8n-nodes-apify).
  2. Set Actor to santamaria-automations/zillow-scraper.
  3. Choose operation Run Actor and get dataset, paste your input JSON, and connect a downstream node (Google Sheets, Postgres, webhook, ...).
  1. Create a new Zap with any trigger.
  2. Add a Webhooks by Zapier POST action to https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.
  3. Body: your input JSON. Content-Type: application/json.
  1. Create a new scenario.
  2. Add an HTTP module: URL https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, method POST, body raw JSON.
  3. Parse the response with a JSON module to iterate items downstream.
  1. Create a new workflow.
  2. Add an HTTP Request step: POST to https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.
  3. Access steps.http.$return_value in subsequent steps.
  1. Install the API Connector plugin.
  2. Add a new API: POST https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, body type JSON.
  3. Initialize the call with your input, then reference the response array in workflow actions.

FAQ

How much does the zillow-scraper cost?

$1.50 / 1,000 detail enrichment, billed per result on Apify. Apify's $5/month free tier covers the first runs. No monthly subscription — you only pay for what you extract.

What fields does it return?

64 fields per result. Full field catalog is listed in the 'What you can scrape' table above — includes core identifiers, descriptive text, dates, and any category-specific data.

Is scraping this site legal?

Scraping publicly available data is generally permitted in most jurisdictions, but GDPR applies to any personal data you collect. Review your local rules and consult a lawyer for commercial use.

Do I need an API key from the source platform?

No. This actor reads public pages over HTTP with datacenter proxies. No API key, no OAuth, no rate-limit management on your side.

How fresh is the data?

Every run pulls live data at execution time. Set up a schedule (daily/hourly/weekly cron) in the Apify console to keep your dataset current automatically.

Related actors in this category

Open on Apify →