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.
| Field | Type | Example | Group | Fill % |
|---|---|---|---|---|
address | string | 4523 Katherine Ave Sherman Oaks, CA 91423 | Location | 100% |
addressStreet | string | (populated when data available) | Location | — |
addressCity | string | (populated when data available) | Location | — |
addressState | string | (populated when data available) | Location | — |
addressZipcode | string | (populated when data available) | Location | — |
latitude | number | null | 34.153717 | Location | 100% |
longitude | number | null | -118.44356 | Location | 100% |
description | string | null | (populated when data available) | Description | — |
scrapedAt | string | (populated when data available) | Metadata | — |
zpid | string | 19984246 | Other | 100% |
price | number | null | 3350000 | Other | 100% |
priceLabel | string | null | (populated when data available) | Other | — |
zestimate | number | null | 3278700 | Other | 85% |
rentZestimate | number | null | (populated when data available) | Other | — |
bedrooms | integer | null | 4 | Other | 100% |
bathrooms | number | null | 6 | Other | 100% |
livingArea | number | null | (populated when data available) | Other | — |
lotAreaValue | number | null | (populated when data available) | Other | — |
lotAreaUnit | string | null | (populated when data available) | Other | — |
homeType | string | null | (populated when data available) | Other | — |
homeStatus | string | null | (populated when data available) | Other | — |
statusText | string | null | (populated when data available) | Other | — |
listingType | string | null | (populated when data available) | Other | — |
daysOnZillow | integer | null | (populated when data available) | Other | — |
yearBuilt | integer | null | (populated when data available) | Other | — |
hdpUrl | string | (populated when data available) | Other | — |
imgSrc | string | null | (populated when data available) | Other | — |
hasVideo | boolean | null | (populated when data available) | Other | — |
has3DModel | boolean | null | (populated when data available) | Other | — |
isFeaturedListing | boolean | null | (populated when data available) | Other | — |
isZillowOwned | boolean | null | (populated when data available) | Other | — |
openHouseSchedule | array | (populated when data available) | Other | — |
agentName | string | null | (populated when data available) | Other | — |
agentEmail | string | null | (populated when data available) | Other | — |
agentPhone | string | null | (populated when data available) | Other | — |
agentLicenseNumber | string | null | (populated when data available) | Other | — |
coAgentName | string | null | (populated when data available) | Other | — |
coAgentPhone | string | null | (populated when data available) | Other | — |
brokerName | string | null | (populated when data available) | Other | — |
brokerPhone | string | null | (populated when data available) | Other | — |
mlsId | string | null | (populated when data available) | Other | — |
mlsName | string | null | (populated when data available) | Other | — |
lastSoldPrice | number | null | (populated when data available) | Other | — |
lastSoldDate | string | null | (populated when data available) | Other | — |
priceHistory | array | (populated when data available) | Other | — |
taxHistory | array | (populated when data available) | Other | — |
schools | array | (populated when data available) | Other | — |
walkScore | integer | null | (populated when data available) | Other | — |
transitScore | integer | null | (populated when data available) | Other | — |
bikeScore | integer | null | (populated when data available) | Other | — |
hoaFee | number | null | (populated when data available) | Other | — |
propertyTaxRate | number | null | (populated when data available) | Other | — |
pageViewCount | integer | null | (populated when data available) | Other | — |
favoriteCount | integer | null | (populated when data available) | Other | — |
nearbyHomes | array | (populated when data available) | Other | — |
hasBasement | boolean | null | (populated when data available) | Other | — |
hasGarage | boolean | null | (populated when data available) | Other | — |
hasPool | boolean | null | (populated when data available) | Other | — |
garageParkingCapacity | integer | null | (populated when data available) | Other | — |
cooling | string | null | (populated when data available) | Other | — |
heating | string | null | (populated when data available) | Other | — |
appliances | array | (populated when data available) | Other | — |
parkingFeatures | array | (populated when data available) | Other | — |
resoFacts | object | null | (populated when data available) | Other | — |
{
"locations": [
"New York, NY"
],
"listingType": "for_sale",
"maxItems": 10,
"fetchDetails": false
}{
"locations": [
"New York, NY"
],
"listingType": "for_sale",
"maxItems": 10,
"fetchDetails": false,
"searchUrls": [
{
"url": "https://www.zillow.com/homes/for_sale/New-York,-NY_rb/"
}
]
}{
"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"
}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.
Click Open on Apify above to run zillow-scraper in your browser - no code, no install. In the Apify console you get:
To run this actor from your own code you need an Apify API token. Get one in about a minute:
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.
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();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-scraperExample 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.
Trigger this actor from your favorite automation tool. Every platform below can call the Apify API in a few clicks - no code required.
@apify/n8n-nodes-apify).santamaria-automations/zillow-scraper.https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.application/json.https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, method POST, body raw JSON.https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN.steps.http.$return_value in subsequent steps.https://api.apify.com/v2/acts/santamaria-automations~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN, body type JSON.$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.
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.
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.
No. This actor reads public pages over HTTP with datacenter proxies. No API key, no OAuth, no rate-limit management on your side.
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.