Occupancy has averaged 87% since March and the reviews are excellent — the hard part is done. What a demand-following pricing engine reads as "priced correctly," though, a full calendar at this cost structure suggests is "priced too low." This is a proposal for where to take the rate, and the evidence behind it.
Where we are · Mar–Jul 2026
Where this could go · if the plan is followed
Fewer nights sold, at nearly double the rate. The conservative case — occupancy landing eight points below target in every season — still returns 6.6%. Figures are set out in full further down.
Summary
Desa took over a badly run property and turned it around. Occupancy went from unstable to consistently high, the listing now holds 4.86 stars across 14 reviews and Guest Favourite status, and gross ADR climbed from €70 in March to €85 in July. None of what follows is a criticism of the operation.
The issue is on the revenue-management side. At 87% occupancy with a €6/night marginal cost, the villa is leaving money on the table in a way that a demand-following pricing algorithm will never surface on its own — because from the algorithm's point of view, a full calendar is a success.
Annualised on the March–July run rate, and after the monthly common-area invoice, the owner nets roughly €11,240 per year on a €300,000 investment. That is a 3.7% yield. The rest of this document shows where the gap is and what it would take to close it.
RevPAR · the metric that matters
Occupancy alone doesn't tell you whether a month went well. RevPAR — net revenue divided by every night in the calendar, sold or not — does, because it prices the empty nights in.
| Month | Nights | Occ. | Gross ADR | Net ADR | RevPAR | Owner, net |
|---|---|---|---|---|---|---|
| March | 25 / 31 | 81% | €70 | €57 | €46 | €797 |
| April | 26 / 30 | 87% | €69 | €53 | €46 | €745 |
| May | 29 / 31 | 94% | €76 | €63 | €59 | €1,106 |
| June | 27 / 30 | 90% | €77 | €70 | €63 | €1,044 |
| July | 26 / 31 | 84% | €85 | €68 | €57 | €632 |
| Average | 26.6 | 87% | €76 | €64 | €54 | €865 |
Owner figures are the 80% distribution less the €55 monthly common-area invoice. July is shown as reported; the Rp 10.3m bedding replacement is treated separately below.
The night ledger
This is the whole period at the resolution the decisions are actually made at — one square per night, coloured by the channel that sold it.
Short gaps are not blocked here. Four two-night stays were sold through Airbnb over these five months, and two of them slotted exactly between existing bookings — Ronny Sutanto on 4–6 March and Yassine Outgharmine on 22–24 June, each with a guest checking out the morning they arrived and another checking in the morning they left. Whatever the nominal minimum stay is, the calendar is letting these through.
So these nights were sellable. They simply didn't sell:
| Short gap | Length | Outcome |
|---|---|---|
| 4–6 March | 2 nights | Sold — Airbnb, exact fill |
| 22–24 June | 2 nights | Sold — Airbnb, exact fill |
| 23 April | 1 night | Unsold |
| 10 May | 2 nights | Unsold |
| 9 June | 2 nights | Unsold |
| 26 June | 1 night | Unsold |
| 1 July | 2 nights | Unsold |
| 8 July | 2 nights | Unsold |
| 26 July | 1 night | Unsold |
| Unsold | 11 nights | ≈ €1,215 / year in owner profit |
Selling all of them would move occupancy from 87% to 94%, with no extra guest turnover beyond what is already happening on either side of each gap. Two out of nine sold; the question is what to do about the other seven.
€6.01 per night
This is the number the whole strategy rests on, and it is much lower than it intuitively feels.
| Cost | Per month | Behaviour |
|---|---|---|
| Housekeeping salaries | €121 | Fixed |
| Electricity | €121 | Fixed |
| Common area invoice | €55 | Fixed |
| Pool service | €29 | Fixed |
| Dues, internet, insurance | €29 | Fixed |
| Laundry, cleaning & guest supplies | €67 | Variable — €2.47/night |
| Repairs & linen replacement (reserved) | €96 | Wear — €3.54/night |
| Fixed €356/mo · Variable + wear | €6.01/night |
Staff, pool, power, internet and the complex invoice all run whether a guest is in the villa or not. Only laundry, consumables and wear scale with occupancy — about six euros a night.
The practical consequence: occupancy is worth defending, and price increases are cheap to test. Every euro added to the nightly rate flows almost entirely to the bottom line, and it takes a large occupancy loss to cancel out even a modest increase.
The Rp 10.3m linen replacement is legitimate wear, but landing it in a single month made July's result look like an operational failure when it wasn't. Throughout this analysis it is spread across twelve months so that the underlying trend stays readable — the €3.54 per night in the table above is that figure, together with average repairs and maintenance.
Channel mix
Across 131 nights from March to July, Marriott returned €78 net per night against Airbnb's €62. That is not a fee advantage; the take rates are within 0.2 points of each other. Marriott's guests simply pay more — €94 gross versus €75 — and they book longer stays (6 and 7 nights).
One caveat before reading too much into this. Smart Pricing governs Airbnb only; Marriott's rates run on a separate plan and were never discounted the same way. On adjacent dates in May, Marriott sold at €89 gross while Airbnb sold at €72 — which may say more about where the discounting was applied than about the guests. The honest conclusion is that Airbnb looks underpriced relative to what this villa can achieve, and Marriott is the evidence for it. Whether Marriott also deserves a larger share of nights is a question to settle once both channels carry the same rates.
Four guests booked through Airbnb and then extended directly. Direct nights carry no channel fee, which is worth 17.2% — but the direct rate has been set so far below the Airbnb rate that most of that saving is handed straight back to the guest:
| Guest | Airbnb rate | Net to villa | Direct rate | Result |
|---|---|---|---|---|
| Aren Fox (March) | €67 | €55 | €49 | −€6 / night |
| Ronny Sutanto (March) | €67 | €56 | €63 | +€7 / night |
| Üstün Dilek (June) | €73 | €61 | €71 | +€10 / night |
| Yusuf Mohamed (June) | — | — | €71 | Full rate, no fee |
Blended, direct nights returned €67 net against Airbnb's €62 — a 7% gain when the fee saving alone was worth 17%. The rule should be: a direct rebooking is priced at the Airbnb rate less 5%, not less 25%. The guest still saves, and the villa keeps the difference.
Booking.com is the weakest channel on both dimensions — 19.0% take and the lowest gross ADR. It is worth keeping for reach, but it should never receive the best rate.
The core argument
Because the marginal cost of a night is €6, a higher rate is protected by a very wide margin of error. This chart shows, for each list price, the occupancy at which the villa would earn exactly what it earns today.
| List price / night | Net after 17.2% fee | Break-even occupancy | Margin vs. today |
|---|---|---|---|
| €76 (today) | €63 | 87% | — |
| €90 | €75 | 74% | 13 points |
| €105 | €87 | 62% | 25 points |
| €120 | €99 | 54% | 33 points |
| €140 | €116 | 46% | 41 points |
| €185 | €153 | 34% | 53 points |
This is why the recommendation is to raise rates decisively rather than in 5% increments. The downside is bounded and the current occupancy provides an unusually large buffer to test into.
Proposal
Bali demand is strongly seasonal and the current pricing does not reflect that. July was sold at €85 gross — the same order as March, which is shoulder season. The proposal is four rate bands, set as floors, with the algorithm permitted to move up from them but not down.
| Band | Months | List price | Target occupancy | Break-even occ. |
|---|---|---|---|---|
| Peak | Jul, Aug, Dec | €185 | 85% | 34% |
| High | Jun, Sep, Jan | €135 | 82% | 47% |
| Shoulder | Mar, Apr, May | €110 | 78% | 59% |
| Low | Feb, Oct, Nov | €90 | 72% | 74% |
| Full year | avg €132 | 289 nights · 79% |
Even the conservative case — 71% occupancy across the year, well below anything the villa has achieved since March — nearly doubles the owner's return, from 3.7% to 6.6%. The plan does not depend on the villa staying full. It depends on it not being sold cheaply when it is.
Actions
Ordered by date. The two figures below are additional owner profit per month after the 20% management share, taken from the pricing model rather than added on top of it — the first two actions are what make that model achievable, not separate gains.
These are different nights and they need different floors. For ordinary open dates, raise the floor from €75 to €95 — at 87% occupancy a last-minute discount is buying nights that would have sold anyway. For a gap of two nights or fewer inside a fortnight of arrival, keep a lower clearing floor: those nights are perishable, they cost about €6 to fill, and a short stay is a worse deal for a guest at any given rate. One rule, two tiers, no contradiction between them.
Turn off Airbnb Smart Pricing's downward movement. Set a hard floor per season and let the algorithm only move up from it. On its own this changes nothing; without it, nothing below will hold, because the engine will discount straight back down whenever a date looks soft.
This is the main action, and almost all of the gain. Enter the four rate bands into the pricing system and apply them to the whole open calendar on every channel — Airbnb, Marriott, Booking.com and direct — out to March 2027, not just to the next few weeks. Guests booking six or nine months ahead are currently securing peak dates at shoulder-season prices, so the benefit of a higher July rate only arrives if July 2027 is repriced now. From then on, review booking pace at four and eight weeks out and adjust the whole band, not individual nights.
Because take rates differ slightly, the list price should differ slightly too: Booking.com deducts 19.0% against 17.2% on Airbnb, so it needs roughly 2% more on the gross rate to net the same. Direct has no channel fee at all and is covered below.
Offer every departing guest a direct rate for their next stay — at a 5% discount, not 25%. Four guests extended directly this period, so the demand is already there. The figure above assumes direct grows to roughly 30% of nights at the new seasonal rates; at today's volume it is worth about a fifth of that.
Marriott has been returning €78 net per night against Airbnb's €62, at an almost identical take rate. Three readings fit: Marriott's guests genuinely pay more; Marriott's rates sat outside Smart Pricing's reach and never got discounted; or the gap reflects terms rather than guests, since Marriott takes 50% at booking and refunds nothing inside 14 days. On adjacent May dates Marriott sold at €89 while Airbnb sold at €72. Two Marriott bookings aren't enough to tell.
So this isn't a volume decision yet. Apply the seasonal rates to every channel first, then compare net ADR by channel again after 60 days. What already holds either way: Marriott booked 6- and 7-night stays, longer than the Airbnb average, which means fewer turnovers and fewer short gaps.
Occupancy on its own rewards underpricing. RevPAR, ADR and net ADR per channel in the monthly pack would let us see the strategy working — or not — much sooner.
Open questions
The pattern in the data suggests demand-following pricing, but we're inferring. Knowing the actual configuration changes what needs adjusting.
Four two-night Airbnb stays sold over these five months, two of them exact fills between bookings — which suggests short stays are already being let through somewhere. Knowing exactly how that is configured would tell us whether the seven unsold gaps are a pricing problem or something else.
Rp 1.68m in March and Rp 1.47m in July, roughly 4% of revenue. Cancellations, refunds, or something else?
Two bedrooms, 2.5 bathrooms, private pool. A comp set with current rates by season would let us set the bands against the market instead of against the cost base.
If those channels sit outside the algorithm, that would explain much of the €16/night gap with Airbnb — and it would mean Airbnb is the channel being underpriced, not Marriott the one outperforming.
Marriott's 14-day no-refund policy is far tighter than Airbnb's, and it is the channel earning the most per night. Tightening Airbnb somewhat may support a higher rate — though it will also cost some bookings, so it is a trade to weigh rather than an obvious win.
Worth knowing the answer before the 60-day measurement, so we can act on it straight away. And is there anything on our side — photography, description, amenity list — that would help it convert better?
If Smart Pricing is capped, a listing at 87% occupancy is probably hitting that cap during peak weeks.