{"id":1321,"date":"2026-10-06T08:12:32","date_gmt":"2026-10-06T01:12:32","guid":{"rendered":"http:\/\/www.solidres.com\/blog\/?p=1321"},"modified":"2026-10-06T08:12:32","modified_gmt":"2026-10-06T01:12:32","slug":"city-tax-for-a-small-hotel-how-to-charge-it-show-it-and-report-it","status":"publish","type":"post","link":"https:\/\/www.solidres.com\/blog\/2026\/10\/06\/city-tax-for-a-small-hotel-how-to-charge-it-show-it-and-report-it\/","title":{"rendered":"City tax for a small hotel: how to charge it, show it and report it"},"content":{"rendered":"\n<p>City tax, tourist tax, occupancy tax, visitor levy, <i lang=\"fr\">taxe de s\u00e9jour<\/i>, <i lang=\"it\">imposta di soggiorno<\/i>: the name and the rules change from town to town. In some places the guest owes the tax and you collect it; in others the tax is yours and you may pass it on. Either way, the authority looks to you for the right amount. Charge too little and the difference comes out of your pocket; charge too much and you owe a guest a refund.<\/p>\n\n<p>Every rule answers the same five questions: what is charged, who pays it, for how many nights, at which rate on which night, and whether VAT is added. Set up each tax so it gives those answers, show it on its own line before the guest pays, and keep the night-by-night figures your return asks for.<\/p>\n\n<!--more-->\n\n<h2>Read the rule as five answers<\/h2>\n\n<p>Start with your authority&#8217;s own text: its web page, the regulation, or its leaflet for accommodation providers. Then count the levies. Some places charge one tax; others put two or more on the same stay, such as a flat fee beside a percentage. Answer the questions for each levy separately, and keep each under the name the authority gives it.<\/p>\n\n<h3>What is charged<\/h3>\n\n<p>The tax is counted on each guest per night, on each room per night, or once per stay or booking, and it is either a fixed amount or a percentage of the room price. For a percentage, ask &#8220;of which price&#8221;: before or after VAT, before or after any discount. <a href=\"https:\/\/www.hamburg.de\/politik-und-verwaltung\/behoerden\/finanzbehoerde\/kttg-207818\" target=\"_blank\" rel=\"noopener noreferrer\">Hamburg&#8217;s guidance on its <i lang=\"de\">Kultur- und Tourismustaxe<\/i><\/a>, for example, works from the price of the night before VAT. Some authorities also cap a percentage tax: in France, the tax on accommodation without a star rating is a percentage of the price per person per night, up to a ceiling set locally, as <a href=\"https:\/\/entreprendre.service-public.gouv.fr\/vosdroits\/F31635\" target=\"_blank\" rel=\"noopener noreferrer\">the French government&#8217;s page on <i lang=\"fr\">taxe de s\u00e9jour<\/i> rates<\/a> explains.<\/p>\n\n<h3>Who pays it<\/h3>\n\n<p>Many rules sort guests by age: children below one age pay nothing, and some rules charge a reduced share to a second band, such as teenagers. Other exemptions depend on who the guest is or why they are staying: someone whose home it is, a guest who receives certain disability benefits, a patient&#8217;s companion. Those need proof, which comes up below.<\/p>\n\n<h3>For how many nights<\/h3>\n\n<p>Some rules stop counting after a number of nights. <a href=\"https:\/\/www.edinburgh.gov.uk\/business\/scheme-edinburgh-visitor-levy\/2\" target=\"_blank\" rel=\"noopener noreferrer\">The scheme for Edinburgh&#8217;s visitor levy<\/a>, for one, charges no more than a set number of consecutive nights. Read the wording closely: &#8220;each day begun, excluding the day of arrival&#8221; is simply the number of nights. And check whether a cap counts per stay or per year; the second needs to recognise the same guest across bookings.<\/p>\n\n<h3>At which rate, on which night<\/h3>\n\n<p>Rates change, and not always on 1 January, so check which date decides the rate. Often it is the night itself, and a stay across a change pays both rates; some authorities use the arrival date instead. Some protect guests who booked before an increase. Hamburg kept bookings made before its 2025 increase on the old rates, and Edinburgh&#8217;s levy does not apply to stays booked and paid for before a cut-off date. A season is just a rate with an end date.<\/p>\n\n<h3>Whether VAT is added to the tax<\/h3>\n\n<p>In Hamburg, a tax the property passes on to the guest becomes part of the price VAT is charged on. Where that applies, the guest pays VAT on the tax too, and the invoice should show it.<\/p>\n\n<table class=\"table table-striped uk-table uk-table-striped\">\n\t<caption>The questions a city tax rule answers, and where to find the answers<\/caption>\n\t<thead>\n\t\t<tr>\n\t\t\t<th scope=\"col\">Question<\/th>\n\t\t\t<th scope=\"col\">What to look for in your authority&#8217;s text<\/th>\n\t\t\t<th scope=\"col\">Common answers<\/th>\n\t\t<\/tr>\n\t<\/thead>\n\t<tbody>\n\t\t<tr>\n\t\t\t<th scope=\"row\">How many levies?<\/th>\n\t\t\t<td>Every tax, fee or surcharge on an overnight stay, each with its own name<\/td>\n\t\t\t<td>One, or two or more on the same stay<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">What is charged?<\/th>\n\t\t\t<td>What the tax is counted on, and whether it is an amount or a percentage<\/td>\n\t\t\t<td>A fixed amount per person per night, per room per night, or per stay; a percentage of the room price<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">Of which price?<\/th>\n\t\t\t<td>For a percentage: whether VAT and discounts are in the price<\/td>\n\t\t\t<td>Before VAT or including it; after discounts<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">Who pays?<\/th>\n\t\t\t<td>Age limits, reduced rates and exemptions<\/td>\n\t\t\t<td>Children exempt below an age; a reduced share for a second band; exemptions with proof<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">For how many nights?<\/th>\n\t\t\t<td>A maximum number of nights, and what it is counted over<\/td>\n\t\t\t<td>Every night, or only the first nights of a stay<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">At which rate?<\/th>\n\t\t\t<td>The date each rate starts, which date of the stay decides it, and any rule for earlier bookings<\/td>\n\t\t\t<td>The rate in force on each night, or on the arrival date; the old rate kept for bookings made before a change<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">VAT on the tax?<\/th>\n\t\t\t<td>Whether the tax is part of the price VAT is charged on<\/td>\n\t\t\t<td>No VAT, or VAT at the rate for accommodation<\/td>\n\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n\n<h3>City tax in Solidres<\/h3>\n\n<p><strong>With Solidres:<\/strong> the feature is called tourist tax, and the <i>Set up tourist taxes<\/i> button on a property&#8217;s edit screen opens its list. Each levy is an entry of its own, and each answer has a field: <i>Charged<\/i> and <i>Rate type<\/i>, <i>Percentage of<\/i> (before or including VAT, always after discounts), <i>Rate applied<\/i> and <i>VAT on this tax (%)<\/i>. Each rate carries its own <i>First night<\/i>, <i>Last night<\/i> and <i>Booked from<\/i> dates, its age bands, and <i>Nights taxed<\/i> for a cap counted from the start of the stay. <i>Add next year&#8217;s rate<\/i> copies the latest rate forward for the new amount, and the list warns you when no rate covers the nights ahead. <a href=\"https:\/\/www.solidres.com\/documentation\/joomla-documentation\/13-configuration\/103-how-to-configure-tourist-tax\">The guide to configuring tourist tax in Solidres<\/a> explains every field, with set-ups for three cities.<\/p>\n\n<h2>Showing it to the guest<\/h2>\n\n<p>A guest should see the tax before they pay, not at check-out: each levy on its own line, under the authority&#8217;s name, and the same lines again on the confirmation, the email and the invoice. Whether an advertised room price must already include the tax depends on your country&#8217;s consumer rules, so check yours.<\/p>\n\n<p>Then decide where the tax is paid. Paid online, it is part of what the payment gateway charges. Paid at the property, it must be left out of the online payment, and the booking has to say it is still to pay.<\/p>\n\n<h3>The tax on a Solidres booking<\/h3>\n\n<p><strong>With Solidres:<\/strong> each tax has its own line, under its own name, in the price breakdown while the guest chooses a room, on the confirmation step before payment, in the booking emails, on the booking&#8217;s details page, and on the invoice with the Invoice add-on. Tick <i>Paid at the property<\/i> and the tax stays in the booking total, reads &#8220;(payable at the property)&#8221;, and is left out of everything charged online: a full payment, a deposit, and the amount still due on an invoice.<\/p>\n\n<p>A booking that comes in from a booking site through the Solidres Channel Manager, or as a blocked period from an iCal feed, keeps the price the channel charged and has no tourist tax line, because Solidres did not price it. For those stays, check what the channel charged, collect what is still owed, and make sure each listing describes the tax the way your own website does.<\/p>\n\n<h2>Exemptions someone has to check<\/h2>\n\n<p>An exemption that depends on a document cannot be a box guests tick. Someone at the desk checks the proof and records the decision. Keep the evidence for as long as your authority requires.<\/p>\n\n<p><strong>With Solidres:<\/strong> guests cannot claim an exemption; your staff can. When amending a booking, tick <i>Override the tourist tax<\/i>, enter each tax&#8217;s amount (0 exempts the booking from it) and give a <i>Reason<\/i>, which stays with the booking and appears on the tourist tax report. The amount survives later amendments, and unticking the box brings back the calculated tax. The documentation covers <a href=\"https:\/\/www.solidres.com\/documentation\/joomla-documentation\/13-configuration\/103-how-to-configure-tourist-tax#override\">changing the tax on one booking<\/a> step by step.<\/p>\n\n<h2>The figures your return asks for<\/h2>\n\n<p>A return covers a month, a quarter or a year, and asks for some of these: nights, guests at the full rate, at a reduced rate and exempt, the tax collected, and for a percentage tax, the price it was taken from.<\/p>\n\n<p>Count each night in the period it falls in. A stay from 30 September to 3 October has one night in September and two in October, whenever it was booked or paid. Totalling bookings by arrival date gets every stay across a month end wrong.<\/p>\n\n<p><strong>With Solidres:<\/strong> the <i>Tourist tax report<\/i> gives these figures per tax, by month, quarter or year: taxed nights, full-rate, reduced-rate and exempt guests per taxed night, the taxable base, the tax, its VAT, and what was paid online and at the property. Each night is filed in its own period, staff amounts are listed with their reasons, figures stay in each booking&#8217;s currency, and the report exports to CSV. It does not contain bookings imported from channels or iCal feeds, which carry no tourist tax in Solidres: count those guests separately and add them to your return.<\/p>\n\n<h2>A worked example<\/h2>\n\n<p>Take an invented town, with invented figures, that charges a fixed amount per person per night: \u20ac2.00 until 31 December and \u20ac2.50 from 1 January, at the rate in force on each night. Children under 12 pay nothing, guests aged 12 to 17 pay half, and only the first seven nights of a stay are taxed.<\/p>\n\n<p>A family books one room at a guesthouse there for nine nights from 28 December: two adults, a 15-year-old and an 8-year-old. The adults pay in full, the teenager counts as half and the younger child is exempt, so each taxed night is charged for two and a half guests.<\/p>\n\n<table class=\"table table-striped uk-table uk-table-striped\">\n\t<caption>The family&#8217;s city tax in the worked example, night by night<\/caption>\n\t<thead>\n\t\t<tr>\n\t\t\t<th scope=\"col\">Nights<\/th>\n\t\t\t<th scope=\"col\">Rate per guest<\/th>\n\t\t\t<th scope=\"col\">Guests charged<\/th>\n\t\t\t<th scope=\"col\">Tax<\/th>\n\t\t<\/tr>\n\t<\/thead>\n\t<tbody>\n\t\t<tr>\n\t\t\t<th scope=\"row\">28 to 31 December (4 nights)<\/th>\n\t\t\t<td>\u20ac2.00<\/td>\n\t\t\t<td>2.5<\/td>\n\t\t\t<td>\u20ac20.00<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">1 to 3 January (3 nights)<\/th>\n\t\t\t<td>\u20ac2.50<\/td>\n\t\t\t<td>2.5<\/td>\n\t\t\t<td>\u20ac18.75<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">4 and 5 January (2 nights)<\/th>\n\t\t\t<td>Not taxed: after the seventh night<\/td>\n\t\t\t<td>None<\/td>\n\t\t\t<td>\u20ac0.00<\/td>\n\t\t<\/tr>\n\t\t<tr>\n\t\t\t<th scope=\"row\">Whole stay (9 nights, 7 taxed)<\/th>\n\t\t\t<td><\/td>\n\t\t\t<td><\/td>\n\t\t\t<td>\u20ac38.75<\/td>\n\t\t<\/tr>\n\t<\/tbody>\n<\/table>\n\n<p>Had the town fixed the rate on the arrival date, all seven taxed nights would be charged at \u20ac2.00, for \u20ac35.00. That one answer is worth \u20ac3.75 on this booking alone.<\/p>\n\n<p>The same rule in Solidres:<\/p>\n\n<ol>\n\t<li>Click <i>Set up tourist taxes<\/i> on the property and add a tax: the town&#8217;s name for it in <i>Name on the booking<\/i>, <i>Per person per night<\/i> in <i>Charged<\/i>, <i>Fixed amount<\/i> in <i>Rate type<\/i>, and <i>The rate in force on each night<\/i> in <i>Rate applied<\/i>.<\/li>\n\t<li>Add the current rate: <i>Rate<\/i> 2.00, <i>Exempt under age<\/i> 12, <i>Reduced under age<\/i> 18, <i>Reduced share (%)<\/i> 50, <i>Nights taxed<\/i> 7, and <i>First night<\/i> the date it took effect, with <i>Last night<\/i> empty.<\/li>\n\t<li>When the new rate is announced, click <i>Add next year&#8217;s rate<\/i>, which copies the age bands and the night cap. Make sure <i>First night<\/i> reads 1 January, and enter 2.50.<\/li>\n\t<li>Tick <i>Paid at the property<\/i> if your guests pay the tax at the desk.<\/li>\n\t<li>Check the property&#8217;s <i>Child max age<\/i>. Only guests booked as children have an age, and anyone older is booked as an adult at the full rate, so the 15-year-old must be bookable as a child.<\/li>\n<\/ol>\n\n<p>A test booking for those dates should then show \u20ac38.75 on its own line before payment.<\/p>\n\n<h2>What a booking engine cannot do for you<\/h2>\n\n<p>Software applies the rule you give it. It cannot:<\/p>\n\n<ul>\n\t<li><strong>Know your town&#8217;s rate.<\/strong> Solidres has no built-in list of rates, because rates change too often for one to stay right. Enter what your authority publishes.<\/li>\n\t<li><strong>Know facts a booking does not hold.<\/strong> Where a guest lives, nights they already spent in town this year, a refund after a very long stay, a rate tied to the payment date. Those are settled at the desk, with the override.<\/li>\n\t<li><strong>Handle taxes the guest never sees.<\/strong> A fixed yearly sum, or a levy your property pays itself, needs no set-up. Build it into your room rates.<\/li>\n\t<li><strong>File the return.<\/strong> Solidres prepares the figures; filing and paying stay with you.<\/li>\n\t<li><strong>Tax bookings it did not price.<\/strong> Channel and iCal bookings carry no tourist tax line, as described above.<\/li>\n<\/ul>\n\n<p>This article is practical guidance, not legal or tax advice. Your municipality or tax office has the final word on what your property owes.<\/p>\n\n<h2>Where to start<\/h2>\n\n<p>Find your authority&#8217;s own text, answer the five questions for each levy, and write the answers down before you open a settings screen. Then set up the tax, following <a href=\"https:\/\/www.solidres.com\/documentation\/joomla-documentation\/13-configuration\/103-how-to-configure-tourist-tax\">how to configure tourist tax in Solidres<\/a>, and make one test booking across the next rate change. A guest who books on <a href=\"https:\/\/www.solidres.com\/blog\/2026\/09\/21\/your-own-booking-channel-why-a-small-property-cannot-live-on-otas-alone\/\">your own booking channel<\/a> sees every tax, under your authority&#8217;s name, before they pay, which makes for one less surprise at the desk.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>City tax, tourist tax, occupancy tax, visitor levy, taxe de s\u00e9jour, imposta di soggiorno: the name and the rules change from town to town. In some places the guest owes the tax and you collect it; in others the tax is yours and you may pass it on. Either way, the authority looks to you [&#8230;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,1],"tags":[34,15],"_links":{"self":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts\/1321"}],"collection":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/comments?post=1321"}],"version-history":[{"count":2,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts\/1321\/revisions"}],"predecessor-version":[{"id":1323,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/posts\/1321\/revisions\/1323"}],"wp:attachment":[{"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/media?parent=1321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/categories?post=1321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.solidres.com\/blog\/wp-json\/wp\/v2\/tags?post=1321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}