Zillow to Airbnb Investment Calculator & STR Analysis avatar

Zillow to Airbnb Investment Calculator & STR Analysis

Under maintenance

Pricing

from $150.00 / 1,000 analysis completes

Go to Apify Store
Zillow to Airbnb Investment Calculator & STR Analysis

Zillow to Airbnb Investment Calculator & STR Analysis

Under maintenance

Analyze a Zillow listing as a short-term rental: comparable Airbnb rates, financing, and expenses projected into cap rate, cash flow, and break-even occupancy.

Pricing

from $150.00 / 1,000 analysis completes

Rating

0.0

(0)

Developer

Zapticx

Zapticx

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share

🏑 Found a Zillow property. Could it actually work as an Airbnb?

Normally that means opening a spreadsheet, hunting down Airbnb comps by hand, guessing at a mortgage payment, and building your own cap-rate formula before you even know if the property is worth a second look. This Actor answers the question in one run.

Zillow property β†’ Airbnb comparables β†’ STR investment analysis

Give it a Zillow listing URL (or just a city/ZIP if you haven't found one yet) and get back:

  • Purchase price β†’ observed from Zillow
  • Airbnb nightly rates β†’ observed from comparable listings nearby
  • Financing + expenses β†’ your explicit, adjustable assumptions
  • Cap rate Β· cash flow Β· cash-on-cash Β· DSCR β†’ calculated
  • Break-even occupancy β†’ calculated
  • Conservative / Base / Optimistic β†’ three scenarios, side by side

No spreadsheets, no manually cross-referencing Airbnb listings, no guessing at a mortgage payment β€” just the numbers, each one clearly labeled by where it actually came from.

Worth 30 seconds: fill in Annual insurance. Zillow never publishes it, and rather than invent a number this Actor returns cap rate, cash flow, and break-even occupancy as null when the cost basis is incomplete. Provide it and you get the full analysis. See When the evidence isn't strong enough.

Independent tool β€” not affiliated with, endorsed by, or sponsored by Zillow Group, Inc. or Airbnb, Inc. "Zillow" and "Zestimate" are trademarks of Zillow, Inc.; "Airbnb" is a trademark of Airbnb, Inc.

Observed data, your assumptions, and calculated projections β€” kept strictly separate

This is the part that makes the numbers trustworthy: this Actor never blurs observed fact into a projection. Every output record is four separated blocks β€” what Zillow actually reported about the property, what Airbnb actually reported about comparable nightly rates nearby, exactly which assumptions drove the math (and where each one came from β€” Zillow's own data, you, or genuinely unknown), and the calculated projections built on top of them. The projections are always clearly labeled as estimates derived from your assumptions β€” never presented as facts, market predictions, or guarantees of future occupancy, revenue, or returns.

This Actor orchestrates this account's own zillow-market-intelligence and airbnb-market-intelligence Actors rather than re-scraping either site.

What this Actor does

Give it a single Zillow listing URL, and it fetches that exact property, searches for comparable Airbnb nightly rates in the same market (bedroom-matched when possible), and runs the numbers: loan amount, monthly mortgage payment, gross revenue, operating expenses, NOI, cash flow, cap rate, cash-on-cash return, DSCR, and break-even occupancy β€” for a conservative (P25 nightly rate), base (median), and optimistic (P75) scenario.

No listing URL yet? Give it a location instead (city, state, or ZIP) and it deterministically selects one representative active listing from that market β€” never an arbitrary first result, and never chosen based on projected return (see How the representative property is selected).

Why use it?

Most STR calculators either require you to manually gather comps, or quietly bake in national default assumptions for property tax and insurance that don't apply to your market. This Actor does neither:

  • Property tax uses Zillow's own reported rate for that property when available β€” never a national or state average.
  • Insurance has no default anywhere. Zillow doesn't publish it, so it's either what you enter or explicitly unknown β€” never a guessed number disguised as a real one.
  • Occupancy is always labeled as your own adjustable assumption, never presented as a market estimate.
  • When the Airbnb comparable evidence is too thin to support a credible nightly-rate estimate, revenue-driven numbers come back null with a reason β€” not a number that merely looks precise.

Who is it for?

Individual STR buyers evaluating a specific property, real estate agents building investor-ready numbers for a listing, and analysts who want a defensible, source-separated model they can audit line by line rather than a black-box "cash flow" figure.

Input

Property (choose exactly one)

FieldRequiredDescription
zillowListingUrlOne property inputA single zillow.com/homedetails/... URL. The primary, serious-investment workflow β€” always takes precedence and skips property selection entirely.
locationOne property inputCity, state, or ZIP. Resolves one currently active listing in that market β€” see property selection.

Financing

FieldDefaultDescription
downPaymentPercent20Percent of price paid as down payment.
interestRatePercent7.0Illustrative default β€” check current rates and adjust.
loanTermYears30Amortization period.
closingCostsPercent2.5Percent of price added to total cash invested.
furnishingBudget0One-time STR setup cost, added to total cash invested.

Operating expenses (no hidden defaults)

FieldDefaultDescription
propertyTaxAnnual(none)Leave blank to use Zillow's own reported rate for this listing when available. Otherwise marked unknown, never guessed.
insuranceAnnual(none)No default anywhere β€” Zillow doesn't publish this. Leave blank to mark unknown.
hoaMonthlyOverride(none)Leave blank to use Zillow's own reported HOA fee when available. On a condo, townhouse, or apartment an unknown HOA is treated as missing data (see below), so set it here if Zillow doesn't report one.
managementFeePercent15Illustrative default for full-service management; set to 0 if self-managing.
maintenanceReservePercent8Illustrative reserve for repairs/upkeep.
platformFeePercent3Booking platform fee β€” adjustable, not a universal constant.
utilitiesAnnual0STR hosts typically cover utilities, unlike long-term rentals.

Occupancy scenarios (explicit assumptions, never a market prediction)

FieldDefaultPaired with
conservativeOccupancyPercent40Airbnb comparable set's 25th-percentile nightly rate
baseOccupancyPercent60Median nightly rate
optimisticOccupancyPercent8075th-percentile nightly rate

Comparable set

FieldDefaultDescription
maxComparables20Airbnb comparables to collect, 8–100. Larger samples cost more (each is billed by the Airbnb Actor) but improve confidence.

Example inputs

A specific property (the primary workflow)

{
"zillowListingUrl": "https://www.zillow.com/homedetails/247652439_zpid/",
"insuranceAnnual": 12000
}

No listing yet β€” analyze a representative property in a market

{
"location": "Miami Beach, FL"
}

Adjusting the financing and occupancy assumptions

{
"zillowListingUrl": "https://www.zillow.com/homedetails/46291510_zpid/",
"insuranceAnnual": 2200,
"downPaymentPercent": 40,
"baseOccupancyPercent": 55
}

Output

One str_analysis record per run in the default dataset, always these five top-level parts:

  • propertySelection β€” how the analyzed listing was chosen: user_provided_url (you gave the exact listing) or representative_location_listing (deterministically picked from a location search), plus a plain-English explanation and the market Zillow actually searched.
  • observedZillow β€” straight from the property: price, size, beds/baths, Zestimate, Zillow's own reported property-tax rate and HOA fee when published. Nothing computed except priceVsZestimatePercent, a direct comparison of two observed values.
  • observedAirbnbComparables β€” straight from the Airbnb comparable search: sample size, confidence, and P25/median/P75 nightly rates. Returned in full even when the sample is too weak to drive a projection.
  • assumptions β€” every financing/expense input actually used, with a Source field (user_provided / observed_from_zillow / unknown) for property tax, insurance, and HOA.
  • projections β€” the calculated three-scenario output, with a standing disclaimer and explicit completeness signals (see below). Never presented as fact.

Complete example (real run, abbreviated)

{
"recordType": "str_analysis",
"propertySelection": {
"mode": "user_provided_url",
"explanation": "Analyzing the exact listing URL provided. No property selection was performed."
},
"observedZillow": {
"zpid": "46291510",
"addressCity": "Kissimmee",
"addressState": "FL",
"price": 350000,
"bedrooms": 3,
"propertyTaxRatePercent": 0.85,
"monthlyHoaFee": 210
},
"observedAirbnbComparables": {
"comparableSampleSize": 26,
"confidence": "medium",
"medianNightlyPrice": 145.75,
"priceP25": 118.5,
"priceP75": 187.25
},
"assumptions": {
"downPaymentPercent": 20,
"propertyTaxSource": "observed_from_zillow",
"insuranceAnnual": 2200,
"insuranceSource": "user_provided",
"hoaSource": "observed_from_zillow"
},
"projections": {
"projectionCompleteness": "complete",
"scenarios": [
{
"scenario": "base",
"nightlyRate": 145.75,
"occupancyPercent": 60,
"grossAnnualRevenue": 31919.25,
"noiAnnual": 16205.25,
"annualCashFlow": 5028.16,
"capRatePercent": 4.63,
"cashOnCashReturnPercent": 2.3,
"dscr": 1.45,
"breakEvenOccupancyPercent": 47.23,
"breakEvenAchievable": true,
"suppressedReasons": []
}
],
"disclaimer": "All figures in this block are calculated estimates derived from the assumptions above, not observed facts, market predictions, or guarantees of future performance. Occupancy, revenue, cash flow, cap rate, cash-on-cash return, and break-even occupancy are all projections, not promises."
}
}

When the evidence isn't strong enough

If the Airbnb comparable sample's confidence is low or insufficient, every revenue-dependent field comes back null with a reason β€” observedZillow, observedAirbnbComparables (including the real sample size and confidence), and assumptions are still returned in full:

{
"scenario": "base",
"nightlyRate": null,
"grossAnnualRevenue": null,
"noiAnnual": null,
"capRatePercent": null,
"breakEvenOccupancyPercent": null,
"breakEvenAchievable": null,
"suppressedReasons": ["insufficient_airbnb_comparables"]
}

HOA is judged by property type. On a condo, townhouse, or apartment β€” where a monthly fee is effectively universal β€” an unknown HOA counts as genuinely missing data and suppresses the NOI family, because silently omitting a few hundred dollars a month would overstate returns. On a detached single-family home, no reported HOA usually means no HOA, so the projection still completes and simply lists hoa under excludedExpenseCategories. Supplying hoaMonthlyOverride (including an explicit 0) always resolves it.

The same applies, independently, when property tax or insurance is unknown: revenue stays visible (it doesn't depend on expenses) but every field that combines revenue with an incomplete cost basis β€” NOI, cash flow, cap rate, cash-on-cash, DSCR, break-even β€” is suppressed rather than silently computed on known costs only. projections.missingAssumptions and projections.projectionCompleteness (complete / partial_expenses / revenue_unavailable) summarize this at a glance; scenario.suppressedReasons explains each one.

Understanding the numbers

  • Break-even occupancy is never clamped to 100% β€” a deal that can't work even at full occupancy still shows its real value (e.g. 354%), paired with breakEvenAchievable: false so it's machine-readable without misreading an oversized percentage as a typo.
  • Cash flow, cash-on-cash return, and cap rate are never floored at zero β€” a losing deal shows a real negative number.
  • Cap rate excludes debt service (NOI Γ· price); it can stay positive even when cash flow (which includes the mortgage payment) is negative.
  • DSCR (debt service coverage ratio) is NOI Γ· annual debt service β€” below 1.0 means the property's own operations don't cover the mortgage payment.

How the representative property is selected

When you provide location instead of a specific listing, the Actor fetches a sample of ~20 active Zillow listings for that market, filters to ones with enough data to analyze (a real price, bedroom count, and listing URL), then picks the one closest to the sample's median price among listings sharing the sample's most common bedroom count β€” ties broken deterministically. It never considers projected revenue, occupancy, or any other return signal, and it is never presented as a recommendation.

Before doing any of this, the Actor cross-checks the requested location against the addresses Zillow's search actually returned. If they don't plausibly match β€” which can happen because Zillow doesn't error on an unrecognized location; it can silently substitute a nearby fallback region and still return real-looking listings from there β€” the run fails with a clear message rather than silently analyzing the wrong market.

Data quality and limitations

  • V1 is single-property analysis only. No batch mode or cross-location ranking yet.
  • Insurance has no default and is never inferred β€” Zillow does not publish it for any listing. Provide insuranceAnnual for a complete cost basis, or the NOI-family metrics stay null.
  • Occupancy percentages are your own assumption, not a market forecast, regardless of how they're labeled elsewhere in this description.
  • The Airbnb comparable set is a live sample, not a certified market report β€” its size and confidence are always disclosed alongside the rates.
  • A representative-location analysis is a reference point, not a recommendation β€” for a real purchase decision, use zillowListingUrl with the exact property.
  • This Actor performs no new scraping of its own β€” it orchestrates this account's Zillow and Airbnb Actors and does the financial math; data quality limitations of those Actors (documented in their own READMEs) apply here too.

Integrations

Standard Apify dataset output β€” export to JSON/CSV/Excel, or feed it into Make, n8n, Zapier, Google Sheets, Airtable, webhooks, or a custom workflow.

Performance

Measured directly on the Apify platform (256MB, default settings):

  • Location-only run: ~35–40 seconds end to end (one Zillow search call, one Zillow target-listing call, one Airbnb comparable search), ~45–65MB peak memory.
  • Direct-URL run: ~25–30 seconds (skips the Zillow search call), similar memory.
  • A target listing with no usable price (off-market/unpriced) fails in ~16 seconds, before any Airbnb comparable search is spent on it.
  • Zero retries and no proxy traffic across every run measured in production testing.

Pricing

Complete analyses cost $0.15 (analysis_complete) and insufficient-evidence analyses cost $0.05 (analysis_insufficient), plus the underlying Zillow and Airbnb Actor charges used to retrieve property and comparable data. Failed runs are not charged by this Actor β€” this only fires once a full analysis record has actually been produced.

Those child-Actor charges run under and bill to your account directly, at their own published per-event prices β€” this Actor calls this account's zillow-market-intelligence and airbnb-market-intelligence Actors internally, and Apify's platform model bills nested Actor calls to whoever's account is running the calling Actor, not to us. A typical direct-URL analysis with 25 Airbnb comparables is approximately $0.20 total at current child-Actor pricing. Larger maxComparables values increase the Airbnb-side portion of that total.

Troubleshooting

Run fails with "does not appear to match the market Zillow actually searched." Your location wasn't recognized by Zillow and it silently substituted a nearby region β€” try a more specific city/state, or a ZIP code.

Run fails with "no usable price." The target listing is off-market, an unpriced lot/auction listing, or otherwise lacks a price Zillow can report β€” this fails fast, before spending an Airbnb comparable search on it.

Every scenario's revenue fields are null. Check observedAirbnbComparables.confidence β€” if it's low or insufficient, the comparable sample wasn't strong enough to support a defensible nightly-rate estimate. Try a larger maxComparables, or expect this for very unusual properties (extreme bedroom counts, remote markets) where comparable Airbnb listings are genuinely scarce.

NOI, cash flow, and cap rate are null even though revenue shows a number. Check projections.missingAssumptions β€” property tax or insurance is unknown. Provide insuranceAnnual (always required β€” Zillow never reports it) and/or propertyTaxAnnual if Zillow doesn't publish a rate for this listing.

FAQ

Does this recommend properties or predict returns?

No. Property selection (when using location) is deterministic and based only on price and bedroom count β€” never on projected return. Projections are clearly labeled estimates based on your stated assumptions, never facts, market predictions, or guarantees.

Why is insurance never filled in automatically?

Zillow doesn't publish insurance costs for any listing, and insurance varies enormously by location, coverage, and whether a policy allows short-term rental use. A national or regional average would materially mislead a specific property's numbers, so this Actor never guesses it.

Can I run this for multiple properties or rank locations?

Not in V1 β€” that's planned as a separate batch/ranking mode. This version is single-property analysis only.

What happens if I give both a URL and a location?

The input schema requires exactly one β€” the run is rejected with a clear validation error before either Actor is called.