Zillow Scraper API - Listings, Zestimate, Agents & Cash Flow avatar

Zillow Scraper API - Listings, Zestimate, Agents & Cash Flow

Pricing

from $2.00 / 1,000 zillow listings

Go to Apify Store
Zillow Scraper API - Listings, Zestimate, Agents & Cash Flow

Zillow Scraper API - Listings, Zestimate, Agents & Cash Flow

Extract Zillow listings, full property details, agent contacts, photos and price history. Compare Zestimate ranges, model rental cash flow and test lower-rent or higher-rate scenarios. Search by location or collect known properties by URL, ZPID or dataset.

Pricing

from $2.00 / 1,000 zillow listings

Rating

5.0

(2)

Developer

Kelopr_bk

Kelopr_bk

Maintained by Community

Actor stats

4

Bookmarked

175

Total users

23

Monthly active users

4 days ago

Last modified

Share

Zillow Scraper

Listings, Zestimate, agent contacts, comparables and rental cash flow โ€” in one run

Turn any Zillow search or property page into clean, structured data: prices, photos, agent and broker contacts, valuations, price and tax history, schools, nearby homes and more. Switch on Deals and every property also gets rental cash flow, cap rate, comparable nearby homes and seller-motivation signals โ€” all computed from data already on the page, so they cost no extra requests.

  • ๐Ÿ  Four workflows โ€” fast search cards, full property records, investment analysis, or known-property lookups.
  • ๐Ÿ’ธ Underwriting built in โ€” cap rate, cash-on-cash, break-even rent and a four-way stress test with assumptions you control.
  • ๐Ÿงพ Export anywhere โ€” JSON, CSV or Excel, through the UI or the API, with flat spreadsheet-friendly aliases next to native Zillow fields.
  • ๐Ÿงญ Honest by design โ€” a field appears only when Zillow actually publishes it; errors go to a separate dataset and are never billed as results.

โ–ถ๏ธ Your first run

  1. Open the Input tab and pick a workflow (Search, Search + details, Deals or Detail).
  2. For a search, type a city, ZIP, neighborhood, region slug or full Zillow search URL. For Detail, paste property URLs or ZPIDs.
  3. Choose a listing status (For sale, Recently sold, For rent or Any).
  4. Set Maximum saved results โ€” start small, inspect the output, then scale up.
  5. Click Start, open Output, and export as JSON, CSV or Excel.
{
"mode": "SEARCH_DETAILS",
"searchQueries": ["Sonoma, CA"],
"propertyStatus": "FOR_SALE",
"maxResults": 20
}

Everything below is optional. The defaults return useful data on the first run.


๐Ÿš€ Pick your goal

Choose one workflow. Search modes take a location; Detail takes properties you already know.

ModeBest forWhat you get
โšก SEARCHScanning a market fast and cheapListing cards: price, address, beds/baths, basic features, images, coordinates and source coverage
โœจ SEARCH_DETAILSComplete records for a searchEvery search card enriched with the full property page โ€” history, schools, agents, photos, nearby homes
๐Ÿ’Ž DEALSFinding and underwriting investmentsFull properties plus cash flow, cap rate, comparable nearby homes, valuation gaps, seller signals and a stress test
๐Ÿ  DETAILProperties you already haveFull records from Zillow URLs, ZPIDs, or a dataset from an earlier run

Search covers for-sale, sold and rental results. Rental search can return building-summary cards; full-detail modes skip those containers and collect individual listings instead of silently expanding an apartment building into every unit.

{
"mode": "DETAIL",
"zpids": ["15800416"],
"analyzeDeals": true,
"maxResults": 1
}

โœจ What makes the output easy to use

  • ๐Ÿงฑ Native + flat aliases. Zillow's original structure is preserved, and spreadsheet-friendly keys such as listingPrice, listingAddress, agent, broker, mls, listingPhotos, listingPriceHistory and listingTaxHistory sit next to it.
  • ๐Ÿ”ข Zeros and false are kept. A real 0 favorite count or false garage flag is preserved, not dropped.
  • ๐Ÿšซ No invented data. A field is returned only when Zillow publishes a value; otherwise it is absent and the reason is noted.
  • ๐Ÿ—‚๏ธ Grouped views. Listings, property details, agents, photos, price history, tax history, schools, deals, stress tests, excluded and errors each get their own table view.
  • ๐Ÿงฎ Transparent math. Every derived number travels with its assumptions, so a cap rate or stress scenario can be audited, not just trusted.
  • ๐Ÿงฏ Separated errors. Source failures and diagnostics land in a dedicated errors dataset and never consume a result charge.

๐Ÿ“Š Listing & valuation fields

Each property carries identity, pricing, valuation, interest and media fields when Zillow publishes them.

๐Ÿชช Identity & location

zpid ยท propertyUrl ยท displayAddress ยท city ยท state ยท zipcode ยท coordinates (latitude/longitude) ยท homeStatus ยท homeType

๐Ÿ’ฐ Price & property

unformattedPrice ยท price ยท currency ยท bedrooms ยท bathrooms ยท livingArea ยท lotArea ยท yearBuilt ยท parking ยท published amenities and resoFacts

๐Ÿ“ Valuation

zestimate ยท rentZestimate ยท zestimateRangeLow / zestimateRangeHigh ยท rentEstimateRangeLow / rentEstimateRangeHigh ยท source range percentages

๐Ÿ‘€ Interest

pageViewCount ยท favoriteCount ยท calculated saveToViewRatioPct

๐Ÿ–ผ๏ธ Media & history

listingPhotos ยท mainImage ยท tours and floor plans ยท listingPriceHistory ยท listingTaxHistory ยท lastSoldPrice ยท open-house info ยท nearbySchools

{
"zpid": "15800416",
"displayAddress": "17199 Park Ave, Sonoma, CA 95476",
"unformattedPrice": 1250000,
"bedrooms": 3,
"bathrooms": 2,
"livingArea": 1894,
"zestimate": 1310000,
"rentZestimate": 4600,
"saveToViewRatioPct": 3.1
}

Illustrative shape โ€” real values come from Zillow at run time.


๐Ÿ‘ค Agent & contact fields

When a listing publishes them, you receive normalized contact objects:

  • agent โ€” name, phoneNumber, email, licenseNumber, coAgentName
  • broker โ€” name, phoneNumber
  • mls โ€” id, name, lastChecked, lastUpdated

Only contacts actually published for a listing are returned. Zillow's promoted contact forms are not treated as verified listing-agent details, so a phone or email can legitimately be missing on some records. Use the flat agent / broker / mls aliases for a clean CSV export.


๐Ÿ’ธ Cash flow & stress test

Enable Deals (or analyzeDeals) and every purchasable listing with an asking price and a Rent Zestimate receives four scenarios โ€” no separate analysis service required.

ScenarioRentMortgage rate
BaseZillow Rent ZestimateYour input, the Zillow rate, or the documented fallback
Lower rent10% below estimateBase rate
Higher rateBase estimateBase rate + 2 pts
Combined stress10% below estimateBase rate + 2 pts

Key fields: analysis.capRatePct, analysis.monthlyCashFlowUsd, analysis.cashOnCashPct, analysis.grossYieldPct, analysis.breakEvenRentUsd, analysis.scenarios, stressMonthlyCashFlowUsd, stressCashFlowPositive, debtServiceCoverageRatio, rentBufferPct.

{
"mode": "DEALS",
"searchQueries": ["Sonoma, CA"],
"maxResults": 10,
"dealSettings": {
"downPaymentPct": 25,
"interestRatePct": "7",
"vacancyPct": 5,
"maintenancePct": 5
}
}

The model also uses the loan term, insurance rate and closing-cost assumptions. Tax uses a published annual amount when available, otherwise price ร— the source tax rate; it does not predict reassessment after purchase. Missing taxes or HOA are flagged in notes and modelInputsComplete.

Rental listing prices are monthly rent, so they are never used as acquisition prices. sellerEquityUsd stays null because outstanding debt is unknown. Zestimate and Rent Zestimate are estimates, not guaranteed sale prices or achievable rents, and seller and demand scores are rules-based research signals, not predictions of intent.


๐Ÿ˜๏ธ Comparable nearby homes

When Zillow's property page carries nearby homes, Deals adds an analysis.comparables block built from that same payload โ€” no extra request.

FieldMeaning
count, statusCountsHow many comparables, split by sold / for-sale / other
medianPriceUsd, medianPricePerSqftThe block's median price and $/sqft
subjectPricePerSqftThis property's own $/sqft
subjectVsComparablesPctHow far above (+) or below (โˆ’) the block this property is priced per sqft
comparables[]Each nearby home: address, status, price, beds, baths, living area, $/sqft

The flat alias comparablePriceDeltaPct mirrors subjectVsComparablesPct for spreadsheets. Comparables are Zillow nearby homes for quick context, not a formal appraisal.


๐Ÿ“ˆ Market report

With analysis enabled, the run writes a self-contained HTML market report to the key-value store (market-report). Beyond the medians it shows:

  • ๐Ÿ’ต Price and $/sqft spread โ€” P25โ€“P75 quartiles, not just a midpoint.
  • ๐Ÿ“ Median price-vs-Zestimate across the run.
  • ๐Ÿท๏ธ The property-type mix of what you collected.
  • โณ A days-on-market breakdown (fresh / recent / aging / stale).
  • ๐Ÿ”ฅ A ranked table of the best yields or the most motivated sellers in the run.

It summarizes up to 2,000 saved properties and is an orientation tool, not an exhaustive market valuation.


๐Ÿ”Ž Filters & sorting

Narrow the search before you pay for detail:

  • ๐Ÿก Property: propertyType, minPrice/maxPrice, minBedrooms/maxBedrooms, minBathrooms/maxBathrooms.
  • ๐Ÿ“ Advanced: living area, lot size, build year, HOA status and fees, days on Zillow, photos, open houses, price reductions.
  • ๐Ÿ’Ž Deal filters: onlyDistressed, onlyNonOwnerOccupied, onlyPriceReducedDeals, onlyComingSoon, maxPriceVsZestimatePct, minCapRatePct, minMonthlyCashFlowUsd, minMotivatedSellerScore.
  • โ†•๏ธ Sort: relevance, price, bedrooms, bathrooms, living area, lot size, year built, newest listings or largest price reduction.

maxResults counts successfully saved matching rows; duplicates never consume a slot. Relevance streams rows as they complete. A custom sort ranks the loaded candidate set first, so a sorted partial search is not a ranking of the whole market.


๐Ÿ“ฅ Input reference

FieldTypeDefaultNotes
modestringSEARCHSEARCH, SEARCH_DETAILS, DEALS, DETAIL
propertyStatusstringFOR_SALEANY, FOR_SALE, SOLD, FOR_RENT
searchQueriesarray["Sonoma, CA"]Cities, ZIPs, slugs or Zillow search URLs (one search per row)
startUrlsarrayโ€”Detail mode: Zillow property page URLs
zpidsarray[]Detail mode: 5โ€“10 digit Zillow IDs
datasetIdstringโ€”Detail mode: dataset from an earlier run
maxPagesPerSearchinteger1Result pages per location (1โ€“20)
maxResultsinteger50Max paid rows saved (1โ€“10000)
propertyTypestringANYHouse, condo, townhouse, multi-family, manufactured, lot/land, apartment
minPrice / maxPricenumberโ€”Price band in USD
minBedrooms / maxBedroomsnumberโ€”Bedroom band
minBathrooms / maxBathroomsnumberโ€”Bathroom band (decimals allowed)
advancedFiltersobjectโ€”Living area, lot, year, HOA, days-on-Zillow, photos, open houses, price cuts
analyzeDealsbooleanfalseAdd the analysis block (always on in DEALS)
dealSettingsobjectsee belowUnderwriting assumptions and deal filters
sortBystringRELEVANCESorting of saved results
rawOutputbooleanfalseInclude the raw source payload under _raw

dealSettings: downPaymentPct (25), interestRatePct (source/fallback), loanTermYears (30), vacancyPct (5), maintenancePct (5), insuranceRatePct (~0.35%), closingCostPct (3), plus the deal filters listed above.

Flat API keys (for example downPaymentPct, minCapRatePct) remain accepted for saved tasks and existing integrations.


๐Ÿ“ฆ Outputs & table views

The run writes several datasets and one report:

DestinationContents
Results (default dataset)Compact overview and valuation view of every saved property
Property details & contactsFacts, agents, photos, price/tax history and schools
Deal analysisCap rate, cash flow, cash-on-cash, comparables delta and seller signals
Stress testBase vs stressed cash flow, DSCR and rent cushion
Excluded after analysisFully analyzed properties dropped by your filters (with billedEvent)
ErrorsUnavailable sources and diagnostics, separate from paid results
Market report (key-value store)The HTML summary described above
OUTPUT / Run summarySaved counts, effective options, source coverage and stop reasons

Grouped views are included copies of the same records; they do not add result charges.


๐Ÿ“ค Deal analysis example

{
"displayAddress": "17199 Park Ave, Sonoma, CA 95476",
"unformattedPrice": 1250000,
"analysis": {
"capRatePct": 4.1,
"monthlyCashFlowUsd": -320,
"cashOnCashPct": -1.2,
"pricePerSqft": 660,
"priceVsZestimatePct": -4.6,
"motivatedSellerScore": 38,
"comparables": {
"count": 6,
"medianPricePerSqft": 705,
"subjectVsComparablesPct": -6.4
},
"scenarios": [
{ "scenario": "base", "monthlyCashFlowUsd": -320 },
{ "scenario": "combined_stress", "monthlyCashFlowUsd": -980 }
]
},
"comparablePriceDeltaPct": -6.4
}

Illustrative โ€” values depend on the live listing and your assumptions.


๐Ÿ”Œ API examples

Run the Actor with your token and retrieve the dataset. Replace YOUR_TOKEN.

cURL โ€” start a run

curl -X POST "https://api.apify.com/v2/acts/trakk~zillow-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"SEARCH","searchQueries":["Austin, TX"],"maxResults":25}'

cURL โ€” run synchronously and get the dataset

curl -X POST "https://api.apify.com/v2/acts/trakk~zillow-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"DEALS","searchQueries":["Austin, TX"],"maxResults":10}'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("trakk/zillow-scraper").call(run_input={
"mode": "SEARCH_DETAILS",
"searchQueries": ["Austin, TX"],
"maxResults": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["displayAddress"], item.get("unformattedPrice"))

The same JSON input works from the Apify Console, the API, the JavaScript/Python clients and any MCP-compatible client.


โš™๏ธ Following a run

  • ๐Ÿ“Š Run summary (OUTPUT) reports saved counts, effective limits, source coverage and why collection stopped.
  • ๐Ÿงพ Errors dataset separates source failures from real results.
  • ๐Ÿงฎ Charge protection: set a maximum run charge in the Console; the Actor checks it before more work and stops when another result cannot be charged.
  • ๐Ÿ—บ๏ธ Coverage fields distinguish a full page sweep, your page limit, a source error and Zillow's own paging limit โ€” an empty run is explained, never guessed.

๐Ÿ’ฒ Pricing

The result-event rate is $0.003 per saved listing ($3 per 1,000). Stress scenarios, comparables and source-backed compatibility fields are included at no extra charge.

A previously scheduled change takes effect on September 18, 2026, 00:00 UTC: a property fetched in full, analyzed and then excluded by your filters is billed once at $0.003 through excluded-property-analysis and delivered in the separate excluded dataset (tagged with billedEvent). Properties excluded before full-detail work, source errors and diagnostics are not charged as this event. The active price in the Apify Console is always authoritative.


โ“ FAQ

Which mode should I start with?

Use Search to scan a market cheaply, Search + details for complete records, Deals for investment analysis, and Detail when you already have URLs or ZPIDs.

Do I need the Deals mode for cash flow?

Yes for the automatic always-on analysis. You can also set analyzeDeals: true in Search + details or Detail. The fast Search mode has no detail page to analyze.

Are agent phone numbers and emails always included?

No. Only contacts a listing actually publishes are returned. Zillow's promoted contact forms are not treated as verified agent details.

What are comparables based on?

The nearby homes Zillow already returns on the property page. They give quick $/sqft context versus the block; they are not a formal appraisal.

Can a successful run return no results?

Yes. Invalid input, unavailable properties or strict filters each have a separate explanation in the run summary. No placeholder listing is ever created.

How is rent handled for rental listings?

A rental price is monthly rent, so it is never used as a purchase price. Income metrics are unavailable for those records.

Why is a field missing on some properties?

Because Zillow did not publish that value for that listing. The Actor never fills a gap with an invented number.

Can I reuse a previous run as input?

Yes. In Detail mode, select the earlier dataset; records must contain a zpid, detailUrl, hdpUrl or url.

Will filtered-out properties cost me anything?

Only under the excluded-property-analysis event described in Pricing, and only for properties fully analyzed before exclusion. Everything excluded earlier, plus errors, is free.

Which locations are supported?

Any city, state, county, ZIP or neighborhood Zillow can resolve, plus full Zillow search URLs and region slugs. US residential access is preconfigured because Zillow data is region-sensitive.

What export formats are available?

JSON, CSV and Excel from the Output tab, or any format via the API.

Is this affiliated with Zillow?

No. This is an independent scraper for publicly available data. Zestimate and Rent Zestimate are Zillow estimates, not guaranteed values.