How to configure tourist tax

Most cities that live on tourism charge a tax on overnight stays: taxe de séjour in France, Kurtaxe in Germany and Austria, imposta di soggiorno in Italy, occupancy tax across the United States. The rules differ everywhere — per person or per room, a fixed amount or a percentage, children exempt or half price, capped after a week or not capped at all — and the rates change more often than anything else in your pricing.

Solidres handles this with two ideas, and understanding them is most of the work:

  • A property has any number of tourist taxes, each a separately named line on the booking. A New York hotel has two; a Barcelona hotel has one with VAT on it; a German spa town has one that changes with the season.
  • Each tax has any number of rates, each valid from a date. You enter next year's rate the day it is announced, and Solidres charges each night of a stay at the rate in force that night.

PREREQUISITES:

  • Solidres 4.4.0 or later
  • Access to your Joomla administrator (a Solidres manager account is enough; you do not need to be a Super User)
  • The rate your authority publishes, and the rules that go with it — the age at which children stop paying, whether there is a night cap, whether VAT is charged on the tax itself

UPGRADING FROM AN EARLIER VERSION? Read Upgrading from Solidres 4.3 and earlier first. Your existing setting was migrated for you, and for one configuration the amount guests are charged changes.

Where tourist tax lives

Tourist taxes are no longer a setting inside the property. They are their own screen, because one property can have several of them and each carries its own history of rates.

In the Joomla administrator, go to Components → Solidres, then in the sidebar open System Info → Tourist taxes. The property edit screen has a Set up tourist taxes button that takes you to the same list, already filtered to that property.

If you run a Solidres Hub site, your partners manage their own properties' tourist taxes from the partner dashboard: the Tourist taxes entry in the property menu, after Extras. Everything in this article applies there too — it is the same form, scoped to the partner's own properties.

The Solidres Tourist taxes list showing two taxes belonging to one property, each with the rate in force today

Creating a tourist tax

Press New. The Details section at the top describes what kind of levy it is — the things that do not change when the rate changes.

Field What to enter
Name on the booking The name guests see on their booking, e-mail and invoice. Use your authority's own wording — City tax, Taxe de séjour, Imposta di soggiorno, Tourism Dirham fee. Several authorities require their legal name on the invoice, and it is the word your return is filed against.
Property The property that charges the tax. One tax belongs to one property; to charge the same tax at several properties, see Several properties in the same city.
Charged What one charge is levied on: Per person per night (Italy, France, Spain, Portugal, Croatia, most of Germany and Austria), Per room per night (Greece, Belgium, Iceland, and every US percentage tax), Per person per stay, or Per booking.
Rate type Fixed amount or Percentage of the room price. Extras are never part of the room price.
Percentage of Percentage taxes only. Whether the percentage is taken of the room price before VAT (Berlin, Vienna, Amsterdam) or including VAT (Cologne, Dresden). Discounts are deducted before the tax either way.
Rate applied Which date decides the rate. Leave it on The rate in force on each night unless your authority says otherwise — that is the normal rule, and it is what makes a stay across New Year charge two rates. Catalonia is the well-known exception for prepaid bookings; choose The rate in force on the check-in date there.
VAT on this tax (%) If the tourist tax is itself subject to VAT — Catalonia and the Balearics 10 %, Germany 7 % — enter that rate. Solidres then shows a separate VAT on… line, which is what those authorities require. Leave it 0 where the tax is outside VAT, as in France.
Paid at the property Set this to Yes where guests hand the tax over at the desk rather than paying it online — the usual practice in Italy, Greece and Portugal. See Taxes collected at the desk.
Status Leave a tax Unpublished while you set it up. Nothing is charged until it is published.
The Solidres tourist tax edit screen with name, property, charging unit, rate type and VAT filled in

Rates: entering a change before it happens

The Rates section below it is the list of rates. Each row is the tax as it stands over a range of dates, and the numbers that change on 1 January live here — not on the tax itself.

The rule is simple: for each night of the stay, Solidres uses the rate whose First night is the latest one that has already started. A rate with no Last night runs until the next rate takes over. So the normal way to raise a rate is to add a row, not to edit the old one — which keeps last year's bookings charged at last year's rate, and keeps your report honest.

Field What to enter
First night The first night this rate applies to. Required.
Last night Optional, and normally left empty — an empty Last night means "until further notice", and the next rate supersedes it. Fill it in for a season that ends, or for a rate that is being withdrawn without a replacement.
Booked from Optional. The rate applies only to bookings made on or after this date; bookings made earlier keep the previous rate. This is what Hamburg, Edinburgh and Berlin used when they grandfathered existing reservations.
Rate The amount, or the percentage for a percentage tax.
Exempt under age Guests younger than this pay nothing. 0 means nobody is exempt. See the warning about children's ages below.
Reduced under age and Reduced share (%) The middle band: guests from the exemption age up to (but not including) this age pay that share of the rate. Venice charges 10–16 at 50 %, Croatia 12–18 at 50 %.
Cap per person per night Percentage taxes only: the most one guest can be charged for one night. This is the French ceiling; almost nowhere else needs it.
Nights taxed Only the first N nights of a stay are taxed. 0 means every night. Venice and Edinburgh cap at 5, Lisbon, Barcelona and Florence at 7, Rome at 10, Milan at 14.

Two helpers sit beside the list. Add next year's rate copies the latest rate forward to the next 1 January, so you only have to type the new amount. And if no rate covers the nights ahead, the edit screen and the list both warn you — No rate from… — so you find out before a guest is charged nothing.

The Rates section of a Solidres tourist tax showing two dated rate rows and the Add next year's rate button

ABOUT CHILDREN'S AGES: Solidres only knows a guest's age when they are booked as a child. Anyone booked as an adult pays the full rate whatever you enter here. So "exempt under 18" only works if the property's maximum child age reaches 17 — check Maximum child age on the property. The rate screen tells you when the age you entered is above what the property allows.

Seasons

A season is just a rate with both dates filled in. Keep the low-season rate open-ended and add a closed row for each high season:

First night Last night Rate
2020-01-01 (empty) 1.00 Low season, the standing rate
2026-05-01 2026-10-31 4.00 High season 2026
2027-05-01 2027-10-31 4.00 High season 2027

A stay from 29 October to 2 November is charged 4.00 for three nights and 1.00 for the last two, without you doing anything.

Several taxes on one property

Where an authority stacks levies, create one tax per line rather than adding the amounts together. Guests see each by name, your report totals each separately, and when one of them changes you change one rate.

This is how a US city is configured — a percentage tax and a flat per-room fee, side by side — and how Barcelona's municipal surcharge is separated from the regional tax if you want it shown separately. See the recipes below.

Several properties in the same city

A tourist tax belongs to one property, so that ownership is never ambiguous — particularly on a Hub site. If you run several properties under the same municipality, set the tax up once, then select it in the list and use Actions → Copy to property.

The copy carries all its rates, and lands unpublished so you can check it before guests are charged. Copying is the only batch operation offered: a tax cannot be moved to another property, because bookings that were already charged point at it.

What guests see

The tax appears by name, with its own row, everywhere a booking's money is shown: the room price preview, the confirmation step before the guest commits to pay, the confirmation e-mail, the invoice PDF and the registration card. Where the tax carries VAT, a second row shows VAT on <tax name> (10 %).

The tax is always visible before payment. That is not just good manners — the US FTC fee rule and California SB 478 require the full price up front, and European price-transparency practice expects the same.

Taxes collected at the desk

In much of southern Europe the tourist tax is handed over at check-out rather than paid with the booking. Set Paid at the property to Yes and Solidres splits the difference for you:

  • The tax stays in the booking total, and the guest's row reads <tax name> (payable at the property), so nobody is surprised at the desk.
  • It is left out of what the payment gateway charges — full payment, a percentage deposit, an invoice's amount due, a balance reminder. Money taken at the desk never passes through the gateway, so it can never count as paid online.

A booking that has been paid in full online is still treated as settled, even though the desk portion is outstanding: it is not a payment the gateway is ever going to see.

Changing the tax on one booking

Diplomats, government travellers, disability exemptions, a business stay in a city that exempts them — every exemption worth having needs proof that somebody looks at, so Solidres does not let guests claim one. Staff do it on the booking.

Open the reservation in the administrator and edit it. Under the price overrides you will find Override the tourist tax: one amount per tax on the booking. Enter what should be charged — 0 exempts the booking — and give a Reason, which is required.

  • The amount you type survives later amendments to the booking. It is not quietly recalculated behind you.
  • To go back to the calculated tax, clear the override box. The screen shows you the calculated figure while you work.
  • VAT is charged on the amount you enter, at the tax's own rate, so the invoice still separates tax from VAT.
  • An exempted booking keeps the taxes it was liable to, so your return can report an exemption rather than lose the stay.
  • The reason is stored with the booking and listed on the tourist tax report.
The Solidres reservation amend screen showing the tourist tax override amounts and the mandatory reason field

The tourist tax report

System Info → Tourist tax report is what you file your return from. Pick the property, a date range and whether to group by month, quarter or year; Hub partners get the same report over their own properties.

The important detail is that every night counts in the period it falls in. A stay from 29 September to 2 October is split between September and October, because that is how the period is defined on every return that asks for one — not by the date the booking was made or paid.

Each row gives you, per tax and per period: bookings, taxed nights, guests at the full rate, at the reduced rate and exempt, nights left untaxed by a cap, the taxable base, the tax, VAT on it, and how much was paid online versus at the property. Bookings whose figure was typed by staff are listed separately with their reasons. Export CSV gives you the same rows with six decimals and the raw period key, ready for a spreadsheet.

Two things to know about the numbers. Nothing is converted between currencies — every figure is grouped by the currency the booking was taken in, because a return is filed in the money that was actually collected. And a period total can differ from the sum of the bookings' own totals by a rounding step, because each booking is rounded once while the report adds up the night-by-night allocation, which is the figure an authority asks for.

The Solidres tourist tax report grouped by month, with bookings, taxed nights, guests, tax charged, VAT and a separate total for each currency

Configuration recipes

Several regimes look like they need a feature of their own and turn out to be a way of filling in the form. Here are the three most often asked about, then a short list of the rest.

THE RATES BELOW ARE ILLUSTRATIONS. They show the shape of each regime, using rates that were published when this article was written. Tourist tax rates change most years. Always enter the figures your own authority publishes.

Paris — a percentage with a cap, and the surcharges folded in

French communes charge a fixed amount per person per night for classified accommodation, and unclassified accommodation pays a percentage of the nightly price per occupant, capped. On top of the communal figure come additive surcharges — departmental +10 %, Île-de-France +15 % and +200 %. Paris therefore multiplies the base by 3.25.

Do not try to model the surcharges. Enter the commune's published total, which is the figure the guest actually pays — for a percentage tax, multiply both the rate and the cap, because min(16.25 % × s, 15.93) = 3.25 × min(5 % × s, 4.90).

Field Unclassified accommodation A classified 3★ hotel
Name on the bookingTaxe de séjour
ChargedPer person per night
Rate typePercentage of the room priceFixed amount
Percentage ofThe room price before VAT—
Rate appliedThe rate in force on each night
VAT on this tax0 — the French tax is outside the VAT base
Rate16.255.53
Cap per person per night15.93—
Exempt under age18
Nights taxed0 — France does not cap the nights

The percentage form divides the night's price over all occupants, children included, and then charges only the guests who are liable — which is exactly what the French guide specifies, and the reason the per-person and per-room percentage units are separate choices.

New York City — a percentage and a flat fee, as two lines

US cities stack three to seven levies, and several of them are flat fees rather than percentages. Rather than a feature for "percentage plus fee", create two taxes on the same property. In practice a New York City hotel room carries about 14.75 % plus $3.50 per room per night:

Field Tax 1 Tax 2
Name on the bookingHotel occupancy taxHotel unit fee
ChargedPer room per nightPer room per night
Rate typePercentage of the room priceFixed amount
Rate14.753.50
Exempt under age00
Nights taxed00

The same recipe covers Nashville and New Orleans. Where levies compound — Chicago taxes some of its levies on a base that already includes another — enter the published effective rates rather than the nominal ones; the authority publishes both.

Barcelona — a night cap, an age exemption, and VAT on the tax

Catalonia's IEET is charged per person per night by accommodation category, capped at seven nights per stay, with under-17s exempt and 10 % VAT on the tax itself, shown as its own invoice line. Barcelona adds a municipal surcharge that steps up by €1 a year.

Field Value for a 4★ hotel in Barcelona
Name on the bookingImpost sobre estades en establiments turístics
ChargedPer person per night
Rate typeFixed amount
Rate appliedThe rate in force on the check-in date — Catalonia locks the rate for a booking paid at the time it is made
VAT on this tax (%)10
Rate8.40 — the regional 3.40 plus the €5 municipal surcharge
Exempt under age17
Nights taxed7

The surcharge is folded into one amount here. If your accountant would rather see the two separately on the invoice, make them two taxes, exactly as in the New York recipe — the totals are identical.

Because the surcharge rises every year, this is the case Add next year's rate exists for: the day the increase is announced, add a row starting 1 April with the new amount, and stays before that date keep the old one.

The rest, briefly

Situation How to configure it
An authority changes the method, not just the rate — a flat amount becomes a percentage Set Last night on the old tax's final rate and create a new tax starting the next day. Both stay on the property, so the report can still show the old periods.
The rate depends on your zone, star class or property size (Venice, Dubai, San Diego) Not something the software has to know: your property has one zone and one class. Enter the rate that applies to you.
"Each commenced day excluding the day of arrival" (Prague and others) That is the number of nights. Nothing special to do.
An assessment the property pays out of its own pocket — a tourism improvement district levy, TOMSA Nothing is charged to the guest, so do not configure a tourist tax at all. Price it into your rates.
A lump-sum regime — the French forfait, Balearic modules, the Croatian paušal Same: the guest is charged nothing, so configure nothing.
Amounts indexed to a unit of account or a foreign currency (Cancún UMA, Buenos Aires USD) Add a new rate when the figure changes.
Arrival or departure fees not collected by the accommodation (Bali, the NZ IVL, VISITAX, the Venice day-tripper fee) Not a tourist tax on the stay. Leave them out.

What Solidres deliberately does not do

Some rules genuinely need information a booking engine does not have, and are handled at the desk with an override instead:

  • Liability that depends on nationality or residence (Malaysia, the Maldives, Buenos Aires) — a booking does not carry a guest's nationality.
  • Caps counted across separate stays, such as Rome's per-calendar-year night cap — that needs to identify the same guest across bookings.
  • Retroactive long-stay refunds (New York at day 90, Texas) — post-stay accounting rather than pricing.
  • Rates that key on the payment date rather than the stay (Hawaii, San Diego). Booked from is the closest approximation.
  • A built-in database of municipal rates. Rates change in hundreds of jurisdictions every year; the figures have to be the ones your authority publishes, not ones Solidres guessed.

Upgrading from Solidres 4.3 and earlier

Earlier versions had a single tourist tax setting on the property itself. Installing 4.4.0 migrates it for you: every property that had tourist tax switched on gets one tourist tax, with one open-ended rate carrying its amount, its age threshold and its night cap. The old setting is then switched off, and the nine fields it used are replaced on the property form by a Set up tourist taxes link.

PLEASE REVIEW WHAT WAS MIGRATED. Open System Info → Tourist taxes after upgrading and check each one. Two things need your attention in particular.

Amounts change on properties that used "Per person per room". That charge type had two defects: it ignored the number of nights, and its night cap did nothing. Those properties were under-collecting on every multi-night stay. After the upgrade the tax is multiplied by the taxed nights and the cap works — which is what the setting always claimed to do, and what your authority expects, but it does mean a quote changes.

"Per person per stay" setups were migrated as per person per night, nobody exempt — which is what they actually did, child exemption included. If children should be exempt at your property, set Exempt under age now.

A configuration that could not be expressed faithfully — an adult rate of 0 with a child rate, a child rate higher than the adult rate, or the old percentage form of "per person per stay", whose formula was not meaningful — is migrated unpublished with a notice naming the property, so it cannot charge anything until you have looked at it.

Past bookings keep the tourist tax they were charged, so your totals for earlier periods are intact. They have no night-by-night breakdown, though, since nothing recorded one at the time; the report counts them in a Without breakdown column rather than pretending they were per-booking charges.

If you use the Complex Tourist Tax plugin

Some sites run a third-party plg_solidres_complextouristtax plugin to get year-by-year rates. You no longer need it. The migration imports its yearly rates as dated rate rows — each year as a closed range, so a year it had no row for still falls back to the base rate, exactly as the plugin did.

The upgrade is safe with the plugin still enabled; the System page will warn you that it is. Once you have checked the imported rates, disable and uninstall it.

Troubleshooting

Symptom Cause and fix
No tourist tax on any booking The tax is unpublished, or it belongs to a different property. Copies made with Copy to property land unpublished on purpose.
Tourist tax stops for stays after a certain date No rate covers those nights. The list shows No rate from… against the tax — open it and add a rate, or use Add next year's rate.
Children are being charged the full rate They were booked as adults. Only guests booked as children have an age; check the property's Maximum child age reaches the age you exempted.
A stay across New Year is charged entirely at one rate Rate applied is set to the check-in date. Unless your authority locks the rate at booking, set it back to The rate in force on each night.
The gateway charged more than expected The tax is not flagged Paid at the property. It stays in the booking total either way; the flag is what keeps it out of the online payment.
A booking keeps its old tourist tax after you amended it Somebody entered an amount by hand. Open the booking, clear the override box and save to charge the calculated tax again.
The report total is a cent away from the sum of the bookings Expected. Each booking is rounded once, while the report adds the unrounded per-night figures, which is what a return asks for.

If you are building an integration, a booking's tourist tax breakdown is available read-only on the reservation resource of the Solidres API, line by line, together with the portion payable at the property.

All the things you need to make your work easier. Did you like Solidres?