What Happens to Your Invoice When a Guest Cancels
The invoice nobody cancelled
A guest cancels. You update the booking, send the apologetic email, reopen the dates, and move on.
Somewhere in your accounting software, an invoice for that stay is still sitting there. It is still on your debtors list. It will still appear in your revenue for the month. And at some point — probably during your VAT return, or when your accountant asks why a guest who never arrived owes you money — you will have to work out what to do about it.
This is one of the most common bookkeeping messes in a booking business, and almost nobody writes about it. So here is the whole thing: what should happen, why it depends entirely on the invoice’s status, and the trap that catches people who try to automate it.
The short answer: it depends on the invoice’s status
There are three cases, and accounting software will only let you do one thing in each.
| Invoice status | What should happen | Why |
|---|---|---|
| Draft | Delete it | It was never issued. Nobody has seen it. Nothing to preserve. |
| Approved, unpaid | Void it | It was issued, so the number must survive as a voided record. |
| Paid | Leave it alone, raise a credit note | Money moved. You cannot un-issue a paid invoice. |
That last row is the one people get wrong, and it’s the most expensive one. A paid invoice must never be voided. Xero will refuse the request outright, and it should — there is a payment attached to it. The correct instrument is a credit note, which records that you are reversing a sale that genuinely happened, rather than pretending it never did.
If you’re doing this by hand: find the invoice, check its actual status in your accounting software, then delete, void or credit-note accordingly. If you’re expecting software to do it for you, read the next section first, because there’s a trap.
The trap: your software’s idea of the status is probably stale
Here’s a failure we built, found and fixed, and it’s worth understanding because any tool that syncs invoices can have it.
When a system raises an invoice, it records the status it created it with — usually DRAFT. Later you go into your accounting software and approve it. Your accounting software knows. The system that created it does not, unless something refreshes that field.
On one real account we checked, 22 of 24 invoiced bookings still read DRAFT in the local record while being approved in Xero. Any automation trusting that stored value would have tried to delete approved invoices and send void requests at drafts — and been rejected every time, on every booking.
So the rule we now hold to, and the one to ask about before you trust any integration with your ledger:
Read the live status immediately before you act. Never decide from a stored copy.
There’s a narrower version of the same problem. If you approve an invoice in Xero and something updates the booking in the next hour, a system syncing on an hourly schedule will still believe it’s a draft. Checking the live status at the moment of the change closes that window. Checking it hourly does not.
What “cancel” used to leave behind
Worth being honest about our own history here, because it’s the same shape as the problem in most tools.
Deleting a booking in Airflow handled its invoice properly. Cancelling one did not. The cancel action set the status and sent the guest an email, and the invoice stayed in Xero untouched — and the job that looks for bookings needing accounting attention excludes cancelled bookings, so it would never be picked up again either. Silently orphaned, forever.
That actually happened. One invoice was voided by hand after the fact, and a second was days away from the same fate when we found it.
Since 21 September, cancel gets exactly the same invoice handling as delete:
- Draft — removed automatically. No decision to make, nothing was ever issued.
- Approved and unpaid — you choose: void it, or keep it. The default is void.
- Paid — kept, untouched, and flagged for a credit note, because that’s the only correct move.
And every one of those outcomes now reaches you as a notification — invoice removed, invoice kept, or invoice needs attention — rather than as an alert box that only the person who clicked cancel ever saw.
The other half: a cancelled booking you didn’t cancel
There’s a second, nastier version of this. Not “the guest cancelled”, but “something told us the guest cancelled”.
Cancellation emails are classified by their wording. A guest writing “I may have to cancel” contains the word cancel. So does a channel’s genuine cancellation notice. Treat them the same and you have a stay cancelled, a calendar reopened, and an invoice voided — on the strength of a guest thinking out loud.
Our rule since 22 September: only a cancellation email sent by the platform itself, for a channel booking, actually cancels anything. Everything else — a guest’s email, a message about a direct booking, a WhatsApp — becomes a cancellation request that sits on the booking as a banner saying “nothing has been cancelled yet”, which you confirm or dismiss.
It is slightly more work on the rare real cancellation, and it makes the catastrophic case impossible. That’s a trade worth making every time, because the cost is asymmetric: confirming a request takes five seconds, and un-voiding an invoice and re-taking a booking takes an afternoon.
A four-step routine you can run today
Whatever software you use:
- List cancelled bookings that still have an invoice reference. If your system can’t tell you this, it’s the first thing to fix — a cancelled booking with a live invoice is invisible by default.
- Check each invoice’s real status in your accounting software, not in the booking tool.
- Apply the rule: draft → delete, approved unpaid → void, paid → credit note.
- Check for orphans afterwards — invoices with no booking pointing at them at all. These accumulate from deletions and are the ones your accountant finds.
On the last point, one principle that saved us from making the problem worse: if an invoice can’t be removed, don’t delete the booking either. Deleting it strands the invoice with nothing pointing at it — which is the exact mess you were trying to clear. Keep the booking, fix the invoice, then remove both.
Why this matters more than it sounds
A cancelled stay with a live invoice overstates your revenue, inflates your debtors, and can push you over a VAT threshold you haven’t actually crossed. It’s not a tidiness problem. It’s a numbers problem that compounds quietly across a season until someone does a reconciliation and finds a gap they can’t explain.
The fix isn’t discipline. It’s making the cancellation itself do the accounting work, from the invoice’s real status, and telling you what it did.
Related: Why None of Your OTA Payouts Match Your Invoices, Bank Reconciliation for Short-Term Rentals, and Automated Accounting: From Booking Email to Draft Invoice. Setting the policy that governs all this is covered in Setting a Cancellation Policy for Direct Bookings.