Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

Zillow Scraper

Extract structured data from US real estate from zillow.com — US real estate from zillow.com — for-sale, for-rent & recently-sold listings with Zestimate / Rent Zestimate valuations, assessed tax value, full description, year built, HOA fee, agent contacts, photos, GPS, radius search, and incremental NEW/UPDATED/EXPIRED tracking.

Zillow Scraper on Apify →


🚀 How to use this actor

💚 $5 free Apify credits — every month

No credit card required. No commitment. Cancel anytime.

  1. Click sign up — pick GitHub, Google, or email; takes ~30 seconds
  2. Open this actor — input is pre-filled with a working example
  3. Click Start — export results as JSON, CSV, or Excel

Your $5 monthly platform credit is enough to run this actor right away — and again every month — scraping typically several hundred to several thousand results per run, depending on your input.

Key features

Detail enrichment — Fetch full descriptions, structured metadata for each listing.

Incremental mode — Only get new or changed listings since your last run. Content hash per listing — no duplicates, no re-processing.

Change classification — Track unchanged, expired, cross-run repost detection across runs. Build audit trails of how listings evolve over time.

Compact output — Emit core fields only (AI-agent / MCP-friendly). Keeps response size small for LLM workflows.

Description truncation — Cap description length per listing to control output size and cost.

Result cap — Stop after N listings. Set to 0 for the full catalog.

Export anywhere — Download as JSON, CSV, or Excel. Stream via Apify API, webhooks, or integrations with Make, Zapier, Airbyte, Keboola.

Structured data — Every listing returns the same schema with consistent field naming. All fields always present — null when unavailable, never omitted.


Use cases

Data pipeline automation Integrate with your ETL pipeline to collect structured listings from US real estate from zillow.com on a schedule. Export to CSV, JSON, or directly to your database. Use compact mode to control output size.

Market research Monitor listings, track trends, and analyze market dynamics with structured, deduplicated data from US real estate from zillow.com.

Change monitoring Run daily or hourly in incremental mode to capture only new, updated, or expired listings. Perfect for price-tracking, churn analysis, and alerting pipelines.

AI / LLM training data Structured JSON per listing is ready for RAG pipelines, embeddings, and agent workflows. Compact mode trims tokens for LLM context windows.


Quick start

{
  "searchMode": "for_sale",
  "searchLocations": [
    "Austin, TX"
  ],
  "includeDetails": false,
  "maxResults": 5
}

Input parameters

Parameter Type Default Description
searchMode enum "for_sale" Which listings to scrape.
searchLocations array One or more locations: "City, ST" (e.g. "Austin, TX"), a ZIP code (e.g. "78704"), or a neighborhood. Each is searched independently. Leave empty if you only use Start URLs.
propertyTypes array [] Restrict to one or more property types. Leave empty for all types.
searchStatuses array Include additional statuses alongside active for-sale listings.
keyword string Optional text that must appear in the listing (e.g. "pool", "waterfront").
startUrls array Paste zillow.com search-result URLs (e.g. https://www.zillow.com/austin-tx/) or individual property URLs (e.g. https://www.zillow.com/homedetails/2600-Willow-St-Austin-TX-78702/29406653_zpid/). Search URLs read their location from the URL; the 🔁 Search Mode and filters below still apply.
maxResults integer 100 Maximum listings to return (0 = full coverage). Full coverage works even for very large markets.
listingCategories array Restrict for-sale results to specific listing types (agent-listed, for-sale-by-owner, foreclosure, auction, new construction). Leave empty for all. For-sale searches only. Note: the derived listingCategory output field is best-effort — agent/foreclosure/new-construction are reliably labeled, but selecting FSBO or auction narrows the results returned without always individually labeling that category on the record.
priceMin integer Minimum listing price.
priceMax integer Maximum listing price.
bedsMin integer Minimum number of bedrooms.
bedsMax integer Maximum number of bedrooms.
bathsMin integer Minimum number of bathrooms.
sqftMin integer Minimum interior square footage.
sqftMax integer Maximum interior square footage.
centerLat string Optional radius filter — center latitude (decimal, e.g. 30.2672). Combine with Center Longitude + Radius to keep only listings within the radius.
centerLng string Radius filter — center longitude (decimal, e.g. -97.7431).
radiusKm integer Keep only listings within this many kilometres of the center point.
includeDetails boolean true Fetch each listing's detail page: full description, year built, HOA fee, and additional structured specs beyond the search-card summary. On by default. Turn off for faster, cheaper search-only records.
enrichEmails boolean false Best-effort agent/advertiser email discovery (billed per listing with a match).
descriptionMaxLength integer 0 Truncate description to this many characters. 0 = no truncation.
descriptionFormat enum "text" Keep one description representation and drop the others to shrink payload.
excludeEmptyFields boolean false Drop null / empty-string / empty-array fields from each record.
compact boolean false Output only core comparison fields (for AI-agent / MCP workflows).
incrementalMode boolean false Track new/changed/expired listings across runs. Requires a State Key.
stateKey string Stable identifier for this tracking universe (e.g. "austin-tx-for-sale").
emitUnchanged boolean false When incremental, also emit listings that have not changed.
emitExpired boolean false When incremental, also emit listings no longer found (now off-market). These off-market markers are always included so change tracking stays complete — they are not subject to Max Results.
skipReposts boolean false When incremental, skip listings that are reposts of previously seen (now expired) listings.
priceDropsOnly boolean false When incremental tracking is on, emit only listings whose price dropped since the last run — turn a scheduled run into a price-cut monitor. Requires Incremental Mode + a prior run to compare against.
telegramToken string Telegram bot token (from @BotFather). Required for Telegram notifications.
telegramChatId string Telegram chat or channel ID where alerts are sent.
discordWebhookUrl string Discord incoming webhook URL.
slackWebhookUrl string Slack incoming webhook URL.
whatsappPhoneNumberId string WhatsApp Business phone number ID from Meta Business Manager.
whatsappAccessToken string Meta Cloud API access token with whatsapp_business_messaging scope.
whatsappTo string Recipient phone number in E.164 format (e.g. +14155551234).
webhookUrl string Universal escape hatch for n8n / Make / Zapier / custom HTTP backends. Receives a JSON POST per run.
webhookHeaders object Additional HTTP headers sent with the generic webhook POST.
notificationLimit integer 5 Maximum number of listings included in each notification message (1–20).
notifyOnlyChanges boolean false When Incremental Mode is on, only notify for NEW and UPDATED listings.
appConnector string Optional. Pick a connected app under Settings → API & Integrations to receive your results (including contact details where available). A run-summary is written to the connected app; support is best-effort as Apify expands its connector catalog.
mcpIssueTeam string Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one.

Output fields

Every listing returns the same 75-field schema. Missing values are null — never omitted.

  • zpid
  • listingId
  • title
  • url
  • status
  • statusDisplay
  • addressStreet
  • addressFull
  • city
  • state
  • postalCode
  • latitude
  • longitude
  • propertyType
  • beds
  • bathsTotal
  • sqft
  • lotSize
  • lotSizeUnit
  • yearBuilt
  • garageSpaces
  • hasPool
  • heating
  • cooling
  • stories
  • price
  • priceFormatted
  • priceCurrency
  • pricePerSqft
  • zestimate
  • rentZestimate
  • taxAssessedValue
  • hoaFee
  • daysOnZillow
  • isForeclosure
  • isOpenHouse
  • isFsba
  • listingCategory
  • isFeatured
  • isShowcase
  • has3DModel
  • hasVideo
  • description
  • descriptionHtml
  • descriptionMarkdown
  • descriptionLength
  • thumbnail
  • photoCount
  • photos
  • brokerName
  • agentInfo
  • propertyHistory
  • taxHistory
  • schools
  • extractedEmails
  • extractedPhones
  • extractedUrls
  • socialProfiles
  • distanceFromCenterKm
  • sourceDomain
  • searchLocation
  • scrapedAt
  • contentQuality
  • contentHash
  • changeType
  • trackedHash
  • firstSeenAt
  • lastSeenAt
  • previousSeenAt
  • expiredAt
  • stateKey
  • isRepost
  • repostOfId
  • repostDetectedAt
  • priceChange

Sample output

One object per listing. Here is a real example from a production run:

{
  "zpid": "15086376",
  "listingId": "f9b84a01bcb9802e9f83511ffe753bb339d1ae4070f1ebec93ef6581529e3c9d",
  "title": "1030 Oak St, San Francisco, CA 94117",
  "url": "https://www.zillow.com/homedetails/1030-Oak-St-San-Francisco-CA-94117/15086376_zpid/",
  "status": "FOR_SALE",
  "statusDisplay": "Condo for sale",
  "addressStreet": "1030 Oak St",
  "addressFull": "1030 Oak St, San Francisco, CA 94117",
  "city": "San Francisco",
  "state": "CA",
  "postalCode": "94117",
  "latitude": 37.773426
}

Truncated — full records contain 75 fields. See Output fields for the complete schema.

Try Zillow Scraper now — $5 free credit, no credit card →


Pricing

Pay only for what you extract. No subscription required — Apify's free $5 credit covers thousands of results.

Event Price (USD)
Actor Start $0.003
Result $0.0012
Detail enrichment $0.0008
Email match $0.002

See the actor on Apify for current pricing.


FAQ

How do I scrape US real estate from zillow.com? Use this actor on Apify to extract structured data from zillow.com. Configure your search query and filters in the input, then click Start — no coding required.

How do I get US real estate from zillow.com data as JSON, CSV, or Excel? The actor writes each listing to Apify's dataset. Download as JSON, CSV, or Excel from the Console, stream via the API, or push to Make, Zapier, Airbyte, or Keboola.

Is it legal to scrape US real estate from zillow.com? Web scraping of publicly available data is generally legal. This actor only accesses publicly visible information. Always check US real estate from zillow.com's terms of service for your specific use case.

How much does it cost? Pay-per-event pricing — you only pay for listings extracted. Apify's free $5 credit is enough to run thousands of results before you pay anything.

How does incremental mode work? Each listing gets a content hash. On subsequent runs, only new or changed listings are emitted — saving time, compute, and storage. Expired listings can be tracked separately.

Do I need an API key or credentials? No. Just sign up for Apify, paste your input, and click Start. No credit card required.


Related products by Black Falcon Data

Browse all Black Falcon Data actors →


Getting started with Apify

New to Apify? Create a free account with $5 credit — no credit card required.

  1. Sign up — $5 platform credit included
  2. Open Zillow Scraper and configure your input
  3. Click Start — export results as JSON, CSV, or Excel

Need more later? See Apify pricing.


About Black Falcon Data

Black Falcon Data builds production-grade web scrapers for job boards and marketplace data. Browse our full actor catalog at www.blackfalcondata.com.


Last updated: 2026 07

About

Scrape US real estate from zillow.com — for-sale, for-rent & recently-sold listings with Zestimate / Rent Zestimate valuations, assessed tax value, full description, year built, HOA fee, agent contacts, photos, GPS, radius search, and incremental NEW/UPDATED/EXPIRED tracking.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors