How every number on Bali Villa Truth is calculated
Every listing on Bali Villa Truth is sourced from Bali Home Immo (BHI), one of the largest real estate aggregators in Bali. We scrape their public listings to capture asking prices, locations, bedroom counts, land size, lease terms, and property details.
Nightly rental rates are derived from a 50/50 blend of Booking.com and Airbnb market data. We scrape actual villa listings across 12 areas and 5 bedroom tiers on both platforms to build our rate model — Booking.com gave us 2,499 data points and Airbnb added 415 more. Blending both platforms gives us a more honest market rate: Booking.com skews toward established properties, Airbnb toward newer and boutique stays. Neither alone tells the full story. A 15% "reality discount" is applied to the platform medians to account for the fact that asking rates are not the same as realized rates. We also use Booking.com review density data to estimate area-specific occupancy — more details in the occupancy section below.
Exchange rates are fetched from ExchangeRate-API at the start of each pipeline run and used consistently throughout processing. The frontend also fetches live rates for display-time currency conversion.
Every listing gets an estimated nightly rental rate based on its area and bedroom count. Here's how we arrive at it:
Area + bedroom rate lookup
Every listing gets a nightly rate based purely on its area and bedroom count. We maintain a rate model blending real Booking.com and Airbnb data for 12 Bali areas across 5 bedroom tiers. For example, a 2-bedroom villa in Canggu is estimated at $143/night, while a 2-bedroom in Ungasan is $96/night. These are medians from actual listings on both platforms, not assumptions. Every villa in the same area and bedroom tier gets the same base rate — the rental market sets prices by location and size, not by what sellers are asking.
Budget property discount
If a villa's asking price falls below the 25th percentile for its area and bedroom tier, we apply a flat 30% discount to the nightly rate. A $107K villa in Nusa Dua almost certainly can't command the same $170/night as a $500K property with an infinity pool and ocean view — even though they're in the same area with the same bedroom count. The discount acknowledges this reality without reintroducing circular math: it's a binary trigger (below threshold → yes/no), not a continuous function of price. You'll see "Budget Villa" flagged on these listings with the discounted rate shown transparently — e.g. "$119/nt (discounted from $170 area median)".
No other adjustments
Beyond the budget discount, the rate goes straight into the yield formula. We don't cap it, inflate it, or apply continuous price-based scaling. If a mid-range villa shows a high yield, that's real information — the rental market rate for that area is high relative to the purchase price. We flag unusually high yields so you can investigate, but we never hide the number.
We estimate area-specific occupancy rates ranging from 40% to 80% based on Booking.com review density. Areas with more reviews per property indicate higher demand, which we use as a proxy for occupancy. This replaced our earlier flat 65% assumption.
Review density as a demand proxy
We sample villa listings on Booking.com across 12 Bali areas, collecting review counts and scores per property. More reviews generally means more bookings — a property with 400 reviews has almost certainly hosted more guests than one with 15. We use a blended median/mean of review counts per area to reduce the skew from outlier mega-resorts.
Relative ranking, not absolute conversion
We don't try to convert review counts directly into occupancy numbers — that would require knowing average stay length, review-to-booking ratios, and listing ages, which we don't have. Instead, we rank areas by review density and map them onto a 40%–80% range. The busiest area gets the highest occupancy, the quietest gets the lowest, and everything else is interpolated. This relative approach avoids brittle assumptions while still differentiating between areas.
Confidence levels
Not all estimates are equally reliable. We show you how confident we are based on how many properties we sampled per area:
Large sample size. Reliable estimate for the area.
Moderate sample. Reasonable estimate, but more data would help.
Small sample. Treat as a rough estimate — the area may not be well-represented.
What this is not
This is not actual occupancy data. It's an estimate derived from a proxy (review density) for a proxy (demand). It's better than a flat guess — it captures the real difference between a bustling Seminyak and a quiet Tabanan — but it's still an approximation. For areas where we couldn't gather enough data, we fall back to a flat 65% and label it clearly as “assumed.”
In the compare panel, you can adjust occupancy from 20% to 95% to stress-test how different scenarios affect your returns. If you have on-the-ground knowledge that Canggu villas book at 80%, plug that in — your local insight will always beat our model.
The green, amber, or red badge on every listing shows the estimated net yield — what percentage of the purchase price you'd earn annually after all operating costs. Here's the formula:
The crossed-out “Gross” percentage you see above the badge is the number many agents quote — it ignores all operating costs and lease depreciation. We show it struck through so you can see exactly how much those costs eat into your returns.
We deduct 40% of gross rental revenue for operating expenses. This breaks down as:
On-ground manager, cleaning, laundry, guest communication
Airbnb, Booking.com, and other platform commissions
Pool care, garden, AC servicing, wifi, repairs
Is 40% exact? No — some well-managed villas run at 35%, others at 50%. It's a reasonable industry midpoint. In the compare panel, you can adjust this between 20% and 60% to match your own operating model.
Most Bali properties available to foreign buyers are leaseholds — you're buying the right to use the land for a fixed number of years. When that lease expires, the asset reverts to the landowner.
We deduct an annual lease cost from net revenue for all leasehold properties, calculated as:
This means a $300,000 villa with 20 years left on the lease has $15,000/year deducted from net revenue before calculating the yield. A villa with 10 years has $30,000/year deducted. Shorter leases take a larger hit — as they should.
Freehold properties (rare for foreign buyers in Bali) don't have this deduction. Properties with fewer than 15 years remaining are additionally flagged with aSHORT LEASEwarning badge.
We automatically flag listings that warrant extra scrutiny. These aren't deal-breakers — they're signals to investigate further.
Less than 15 years remaining on the lease. Lease depreciation significantly impacts returns.
Asking price is below the 25th percentile for its area and bedroom tier. Nightly rate is discounted 30% from the area median to reflect that budget properties typically can't command median rates. Tooltip shows the exact discount.
Gross yield exceeds 20%. This could mean it's genuinely underpriced, or that the asking price doesn't reflect reality. Investigate the property directly.
Gross yield is 15-20%. The gap between gross and net yield (after expenses and depreciation) is where investors lose money.
The badge shows our best estimate using the assumptions above. But those are our assumptions — they might not match your reality.
The compare panel lets you select up to 5 villas and adjust three variables with sliders:
Nightly rate multiplier
Think rates are higher or lower? Adjust here.
Occupancy
Plug in your own occupancy estimate for the area.
Operating costs
Self-managed villa? Lower the costs. Full-service management? Raise them.
The yields in the compare panel update in real-time as you move the sliders. This is explicitly a different number from the badge — the badge is our pipeline estimate, the compare panel is your personal stress-test.
We believe in being upfront about the limits of our analysis:
Actual occupancy rates
Our occupancy estimates are derived from Booking.com review density — a proxy for demand, not a direct measure of bookings. Review counts don't account for seasonality, direct bookings (which skip OTAs entirely), or how long a property has been listed. We show confidence levels so you can judge how much weight to give each estimate.
True operating costs
Our 40% estimate is a reasonable industry midpoint, but your actual costs depend on management style, property age, staff arrangements, and platform mix.
Booking.com vs. actual rental performance
Our rate model is based on listed rates on Booking.com, not actual bookings. Actual rates may be lower (discounts, last-minute deals) or higher (direct bookings, premium guests).
Property condition and build quality
A listing's price doesn't tell us if the roof leaks or if the pool pump needs replacing. On-the-ground due diligence is irreplaceable.
Regulatory changes
Indonesian property law, tax rules, and visa regulations change. Our analysis reflects current conditions.
Our pipeline runs periodically to capture new listings and price changes. Booking.com rate data is refreshed approximately monthly. Occupancy estimates are refreshed quarterly — review counts change slowly, so more frequent updates would add noise without signal. When prices change by more than 1%, we log the event and snapshot the ROI at that point.
This methodology page is a living document. When we change how we calculate something, we update it here. The most recent updates: area-specific occupancy estimation with confidence indicators (replacing the flat 65% assumption), graduated budget discounts for cheap properties, and transparent rate sourcing showing where every nightly rate comes from.