Zillow Scraper — Property Listings & Agent Leads avatar

Zillow Scraper — Property Listings & Agent Leads

Pricing

from $4.00 / 1,000 property scrapeds

Go to Apify Store
Zillow Scraper — Property Listings & Agent Leads

Zillow Scraper — Property Listings & Agent Leads

Scrape Zillow listings with 40+ fields: address, price, Zestimate, price history, agent contact info, school ratings, walk score & more MCP-ready. $4.00/1K.

Pricing

from $4.00 / 1,000 property scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

1

Bookmarked

19

Total users

2

Monthly active users

8 days ago

Last modified

Share

Zillow Scraper — Properties, Prices, Zestimate & Agent Leads

Zillow Scraper is an Apify Actor for real estate data collection through Apify MCP. It accepts a search query, direct Zillow listing URLs, Zillow Property IDs (ZPIDs), or ZIP codes, with optional filters for listing type, property type, price, and bedrooms. Each output record represents one Zillow property listing, and the dataset can include core market fields such as price, Zestimate, rent Zestimate, agent contact info, school ratings, walk score, price history, and location details. The result is CRM-ready JSON for lead generation, comps, and market research workflows.

Best fit and connected workflows

Use this Actor when your workflow starts with Zillow and ends with structured property records.

It fits well when you need to:

  • Discover listings from a city, neighborhood, keyword, or ZIP code and then enrich them with detail fields.
  • Enrich known Zillow listings by pasting direct URLs or ZPIDs.
  • Build real estate lead lists from agent contact fields.
  • Compare active, rented, or recently sold listings using status-based filtering.
  • Feed Zillow records into CRM, spreadsheet, enrichment, or analysis pipelines.

A connected workflow often starts with Zillow Search Scraper to discover Zillow records, then passes the verified public URL or ZPID into this Actor for full listing detail extraction.

Practical scenario

Maya, a real estate analyst, starts with a list of ZPIDs from her CRM. She runs this Actor with those IDs and a FOR_SALE filter. The returned dataset gives her the listing URL, current price, Zestimate, days on market, agent name, agent phone, and walk score for each property. She uses the ZPID as the stable key to match the new records to her existing pipeline, then sends the enriched rows to her outreach list for follow-up.

Input fields

Use one input mode at a time, or combine startUrls with searchQuery.

FieldTypePurpose
searchQuerystringSearch by location, neighborhood, or keyword, such as Austin, TX or 3BR homes in Austin TX.
startUrlsarrayDirect Zillow property listing URLs for full detail scraping.
zpidsarrayZillow Property IDs for CRM enrichment workflows.
zipCodesarrayZIP codes for geographic market sweeps.
listingTypestringFOR_SALE, FOR_RENT, or RECENTLY_SOLD.
propertyTypesarrayProperty type filters such as SINGLE_FAMILY, CONDO, or TOWNHOUSE.
minPriceintegerMinimum listing price in USD.
maxPriceintegerMaximum listing price in USD.
minBedsintegerMinimum bedroom count.
minBathsstringMinimum bathroom count, including partial baths.
maxResultsintegerMaximum number of property listings to scrape.
proxyConfigurationobjectProxy settings for the run.

Focused input example

{
"searchQuery": "Austin, TX",
"listingType": "FOR_SALE",
"propertyTypes": ["SINGLE_FAMILY"],
"minBeds": 3,
"maxPrice": 600000,
"maxResults": 10,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Output fields

Each dataset item is one Zillow property record.

FieldTypePurpose
zpidstringZillow property identifier and stable key.
urlstringFull Zillow listing URL.
addressobjectStructured address with street, city, state, ZIP, and neighborhood.
latitudenumberLatitude coordinate.
longitudenumberLongitude coordinate.
pricenumberCurrent listing price or monthly rent.
currencystringCurrency code, such as USD.
price_per_sqftnumberPrice per square foot.
zestimatenumberZillow automated estimate.
rent_zestimatenumberZillow rent estimate.
listing_statusstringCurrent Zillow status.
listing_typestringSearch or marketing listing type.
property_typestringProperty classification.
days_on_marketnumberDays active on Zillow.
listing_datestringISO 8601 listing date.
bedroomsnumberBedroom count.
bathroomsnumberBathroom count.
living_area_sqftnumberFinished living area.
lot_size_sqftnumberLot size in square feet.
year_builtnumberConstruction year.
floorsnumberStories when available.
garage_spacesnumberGarage parking spaces.
has_poolbooleanPool indicator.
descriptionstringListing description text.
featuresarrayProperty features and amenities.
photosarrayPhoto URLs.
virtual_tour_urlstringVirtual tour link if available.
open_house_datesarrayUpcoming open house date/time strings.
hoa_feenumberMonthly HOA fee.
annual_taxnumberEstimated annual property tax.
price_historyarrayHistorical price events.
tax_historyarrayAnnual tax records.
agent_namestringListing agent name.
agent_phonestringListing agent phone number.
agent_emailstringListing agent email address if displayed.
agent_licensestringAgent license number.
broker_namestringListing brokerage.
mls_idstringMLS identifier.
walk_scorenumberWalk score.
transit_scorenumberTransit score.
bike_scorenumberBike score.
nearby_schoolsarrayNearby schools with rating and distance.
scraped_atstringExtraction timestamp.
source_urlstringExact Zillow URL scraped.
data_sourcestringsearch_result or detail_page.

Illustrative output record

{
"zpid": "87802938",
"url": "https://www.zillow.com/homedetails/123-Main-St-Austin-TX-78701/87802938_zpid/",
"address": {
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"zip": "78701",
"neighborhood": "Downtown",
"subdivision": null
},
"latitude": 30.2672,
"longitude": -97.7431,
"price": 450000,
"currency": "USD",
"price_per_sqft": 281,
"zestimate": 448000,
"rent_zestimate": 2350,
"listing_status": "FOR_SALE",
"listing_type": "FOR_SALE",
"property_type": "SINGLE_FAMILY",
"days_on_market": 12,
"listing_date": "2026-03-28",
"bedrooms": 3,
"bathrooms": 2.5,
"living_area_sqft": 1600,
"lot_size_sqft": 6500,
"year_built": 2005,
"floors": 2,
"garage_spaces": 2,
"has_pool": false,
"description": "Beautiful 3/2.5 home in the heart of Austin...",
"features": ["Central Air", "Hardwood Floors", "Stainless Appliances"],
"photos": ["https://photos.zillowstatic.com/fp/abc123.jpg"],
"virtual_tour_url": "https://www.zillow.com/view-3d-home/abc123/",
"open_house_dates": ["2026-04-12T14:00:00"],
"hoa_fee": 125,
"annual_tax": 8200,
"price_history": [
{ "date": "2026-03-28", "price": 465000, "event": "Listed" },
{ "date": "2026-04-01", "price": 450000, "event": "Price Cut" }
],
"tax_history": [
{ "year": 2025, "amount": 8100 },
{ "year": 2024, "amount": 7800 }
],
"agent_name": "Jane Smith",
"agent_phone": "(512) 555-0123",
"agent_email": "jane.smith@realty.com",
"agent_license": "TX-12345678",
"broker_name": "Austin Premier Realty",
"mls_id": "1234567",
"walk_score": 72,
"transit_score": 45,
"bike_score": 58,
"nearby_schools": [
{
"name": "Austin Elementary",
"type": "Elementary",
"rating": 8,
"distance": 0.4
}
],
"scraped_at": "2026-04-09T14:32:00.000Z",
"source_url": "https://www.zillow.com/homedetails/123-Main-St-Austin-TX-78701/87802938_zpid/",
"data_source": "detail_page"
}

How it works

This Actor accepts one of four entry modes:

  • searchQuery for location and keyword searches.
  • startUrls for direct Zillow listing URLs.
  • zpids for numeric Zillow property IDs.
  • zipCodes for ZIP-based sweeps.

The live contract also supports combining startUrls with searchQuery. Results are written to the default dataset, with one primary event charged per fully extracted property listing. The output schema includes results, runOutput, and runSummary links for dataset access and automation.

Pricing

This Actor uses Pay per event pricing plus Apify platform usage. Each fully extracted property listing is charged as one property-scraped event, and the run also includes the standard Apify platform costs such as proxy usage when enabled.

For current pricing details, open the live Pricing tab on the Actor page.

Example: if your run scrapes ten properties, the event charge is based on ten property records, plus any Apify platform usage that applies to the run.

Use with AI agents (MCP)

This Actor is usable through Apify MCP and is designed to return structured Zillow listing records for agent-driven workflows.

Tool description: Search or enrich Zillow properties by query, URL, ZPID, or ZIP code, then read the resulting dataset for property details, valuation signals, location scores, and agent contacts.

Actor identity: khadinakbar/zillow-all-in-one-scraper

Search Zillow listings for Austin, TX. Return the dataset items and summarize the top matches using price, Zestimate, agent contact, and walk score. If a record includes data_source = detail_page, treat it as full property detail. Use zpid as the stable key, and read the dataset after the execution completes.

Output interpretation is straightforward:

  • zpid identifies the property record.
  • source_url shows the exact Zillow page used to generate the item.
  • data_source indicates whether the record came from a search result card or a full detail page.
  • price_history, tax_history, walk_score, transit_score, and nearby_schools provide structured context for analysis.
  • results links to the dataset items endpoint, and runSummary and runOutput support automation and agent routing.

Pagination and cost guidance are governed by the input you set. maxResults caps the number of listings scraped, and each property listing is one charge event.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/zillow-all-in-one-scraper').call({
searchQuery: 'Austin, TX',
listingType: 'FOR_SALE',
minBeds: 3,
maxResults: 5,
proxyConfiguration: {
useApifyProxy: true,
},
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log('Items:', dataset.items.length);
console.log(dataset.items[0]);

Best results and outcome guidance

Choose the input mode that matches the data you already have:

  • Use searchQuery for broad discovery by place or keyword.
  • Use startUrls when you already have Zillow listing pages.
  • Use zpids for CRM enrichment and deduplication.
  • Use zipCodes for market sweeps by geography.

Helpful filters include listingType, propertyTypes, minPrice, maxPrice, minBeds, and minBaths. maxResults is the main control for output volume. For downstream analysis, zpid and source_url are the most useful record keys.

Continue the workflow

Design note

I found that the live dataset contract exposes both results and runSummary, which makes it practical to separate record retrieval from run-status handling in automation.

FAQ

How should I choose between search queries and direct URLs?
Use searchQuery for discovery by city, neighborhood, or keyword. Use startUrls for known Zillow listing pages.

When is ZPID mode the right choice?
Use zpids when you already store Zillow IDs in a CRM or spreadsheet and want stable record matching.

What does ZIP code mode return?
It sweeps each ZIP code for active listings, which is useful for market analysis by geography.

How do I get just rentals or sold comps?
Set listingType to FOR_RENT or RECENTLY_SOLD.

Which field is suited to joining records across runs?
Use zpid as the stable key, and pair it with source_url when you need provenance.

Responsible use

Use this Actor for lawful data collection from publicly accessible Zillow pages and review your use case against applicable laws, Zillow terms, and data protection requirements. If you store or distribute agent contact details or other property data, make sure your handling, retention, and outreach practices follow the policies that apply to your workflow.