Zillow to Airbnb Investment Calculator & STR Analysis
Under maintenancePricing
from $150.00 / 1,000 analysis completes
Zillow to Airbnb Investment Calculator & STR Analysis
Under maintenanceAnalyze 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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
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
nullwhen 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
nullwith 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)
| Field | Required | Description |
|---|---|---|
zillowListingUrl | One property input | A single zillow.com/homedetails/... URL. The primary, serious-investment workflow β always takes precedence and skips property selection entirely. |
location | One property input | City, state, or ZIP. Resolves one currently active listing in that market β see property selection. |
Financing
| Field | Default | Description |
|---|---|---|
downPaymentPercent | 20 | Percent of price paid as down payment. |
interestRatePercent | 7.0 | Illustrative default β check current rates and adjust. |
loanTermYears | 30 | Amortization period. |
closingCostsPercent | 2.5 | Percent of price added to total cash invested. |
furnishingBudget | 0 | One-time STR setup cost, added to total cash invested. |
Operating expenses (no hidden defaults)
| Field | Default | Description |
|---|---|---|
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. |
managementFeePercent | 15 | Illustrative default for full-service management; set to 0 if self-managing. |
maintenanceReservePercent | 8 | Illustrative reserve for repairs/upkeep. |
platformFeePercent | 3 | Booking platform fee β adjustable, not a universal constant. |
utilitiesAnnual | 0 | STR hosts typically cover utilities, unlike long-term rentals. |
Occupancy scenarios (explicit assumptions, never a market prediction)
| Field | Default | Paired with |
|---|---|---|
conservativeOccupancyPercent | 40 | Airbnb comparable set's 25th-percentile nightly rate |
baseOccupancyPercent | 60 | Median nightly rate |
optimisticOccupancyPercent | 80 | 75th-percentile nightly rate |
Comparable set
| Field | Default | Description |
|---|---|---|
maxComparables | 20 | Airbnb 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) orrepresentative_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 exceptpriceVsZestimatePercent, 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 aSourcefield (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 withbreakEvenAchievable: falseso 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
insuranceAnnualfor a complete cost basis, or the NOI-family metrics staynull. - 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
zillowListingUrlwith 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.

