Tourist tax: the rules that make it harder than a multiplication

Everyone models tourist tax as guests × nights × rate. Then a child arrives, or a stay runs long, and the number quietly stops matching what the municipality expects.

Updated

The four modifiers that break the simple formula

Tourist tax is set locally, so the specifics vary by municipality and change over time — treat what follows as the shape of the problem, not as the rate for your town, and confirm your own rules with the authority that publishes them.

Almost everywhere, though, the same four modifiers appear:

  • A minimum age. Guests under a threshold are not liable. This is why guest ages are not optional data: without a date of birth you cannot compute the tax, only guess it.
  • A cap on nights. Many municipalities charge only the first few nights of a stay. A fourteen-night stay is not fourteen taxable nights, and a system that multiplies will over-collect from the guest — which is worse than under-collecting, because you took money you had no right to.
  • Exemptions with codes. Not "this guest is exempt" but "this guest is exempt for reason X". The authority wants the reason, and your own reporting needs it to explain a gap between guests hosted and tax collected.
  • The basis of calculation. Usually a fixed amount per person per night, sometimes a percentage of the accommodation price. These are different formulas, not different constants, and a system that only supports one will eventually meet a place that uses the other.

Count guest-nights, and count them twice

The unit that makes tourist tax tractable is the guest-night: one person, one night. A booking is not a single taxable thing — it decomposes into guest-nights, each of which is either taxable or exempt for a specific reason.

Boris stores both totals separately: taxable guest-nights and exempt guest-nights. Keeping them apart is what lets a report reconcile. "We hosted 340 guest-nights, 62 were exempt, we owe on 278" is a statement an inspector can follow. A single net figure is not, and you will not be able to reconstruct it a year later.

The Boris bookings list, showing the payment status of each reservation
Tax owed and tax collected are tracked per booking, not reconstructed from a report at the end of the month.

When you collect changes what can go wrong

Collection at check-in and collection at check-out are not interchangeable.

Charging at check-in means the amount is computed from the booked stay. If the guest leaves early, you have collected too much and owe a refund. Charging at check-out means the amount is computed from the actual stay, which is more accurate and much harder to collect from someone already in a taxi.

Neither is wrong. But the system has to know which one applies, because it determines whether an unpaid tax at the end of a stay is an error or a normal state.

Who owes it is a separate question from who pays it

The liability may sit with the property or with the guest depending on the arrangement, and on bookings that arrive through a channel it may already have been collected upstream. A booking therefore needs to record responsibility as its own field, not infer it.

Get this wrong and the failure is expensive in both directions: charge a guest for tax the platform already took, or omit tax you were liable to remit and did not.

Cash is not an edge case

A meaningful share of tourist tax is still paid in cash at a desk, and any design that assumes card payment through the portal will strand those stays in a permanently unpaid state.

That path needs to be first class: a member of staff records the cash payment, the tax status settles, and the stay completes even when a payment provider was never involved. In Boris this is one of the jobs the reconciliation cron performs — completing check-ins whose tax was paid in cash while an external provider was unreachable.

Treat it as a required step, not a report

Tourist tax is one of the four execution areas Boris marks as required, alongside legal registration, invoicing and payment. The reason is the same in each case: nobody complains. A guest never chases you about tax you failed to collect from them. The gap appears months later, in a reconciliation you do against a municipality that has its own arrival numbers.

Which means the useful question about any tourist tax feature is not "can it calculate the amount" — most can. It is "does it tell me, today, which stays owe tax that was never collected".