Travel fares · Resort fees and drip pricing
Hotel resort fee tracking: mandatory fees and drip pricing on public pages
Hotel resort fee tracking records the mandatory fees a property or booking site adds to the room rate, and the step at which they appear. Collect each step from an IP in the market whose rules you are checking, and keep the evidence.
Pay per GB · No subscription · Prices in EUR, excl. VAT
- €2.00
- per GB on ARC Fast, excl. VAT
- −44%
- at 1 TB (€1.12 / GB)
- 185+
- countries, city targeting
- Never
- expires — no subscription
Written for
- Consumer-protection researchers
- Hotel and OTA compliance teams
- Consumer organisations
- Journalists covering hidden fees
The short answer
- The US FTC Rule on Unfair or Deceptive Fees has applied to hotels and short-term rentals since 12 May 2025; required resort and cleaning fees belong in the total price.
- In the UK, the DMCC Act's unfair commercial practices provisions apply from 6 April 2025, and CMA guidance treats resort fees and local taxes payable on arrival as mandatory charges.
- What you audit is a sequence: headline price, property page, price summary. A fee that is right at the end and missing at the start is the finding.
- Collection stops before any guest or payment details are entered. Everything you need for a fee audit is visible earlier.
The problem
What goes wrong without the right IPs
Fees are named differently everywhere
Resort fee, destination fee, facility fee, amenity fee, urban fee, service charge, cleaning fee. Without a mapping table, the same practice looks like five different ones in your data.
The basis changes the total
Some fees are per room per night, others per person per night, others once per stay. A seven-night stay for two at a per-person fee costs fourteen times the headline fee, which is why the basis must be captured, not inferred.
Taxes are allowed outside the US total, fees are not
Under the FTC rule, government taxes may be excluded from the advertised total if disclosed before payment; mandatory resort fees may not. A collector that lumps both into "taxes and fees" cannot tell a compliant page from a non-compliant one.
The same hotel, a different market
A property may show an all-in price to UK visitors and a rate-plus-fees layout to others. Check from the market whose rules apply, and record the exit country with every observation.
Screenshots without context prove little
An image of a price without the URL, timestamp, dates searched and exit country is hard to use later. Store the structured values and the evidence together.
What to collect
What you can collect
- Step
- Search result, property page, room selection or price summary. The audit compares the same stay across these steps.
- Headline price
- The first price shown, and whether it is per night or per stay.
- Fee name, raw
- Exactly as displayed, plus your mapped category (resort, destination, cleaning, service, other).
- Fee basis and amount
- Per room per night, per person per night or per stay, and the currency it is charged in.
- Pay now or at the property
- Fees collected on arrival or departure are still mandatory charges under the UK guidance; flag where they are paid.
- Taxes, separately
- Government taxes and levies in their own column, since US rules treat them differently from fees.
- Total shown and where
- The all-in total, the step where it first appeared, and whether it is more prominent than the base rate.
- Evidence
- URL, timestamp, exit country, stay parameters and a hash of the stored page or screenshot.
How it runs
How a collection run works
- 01
Fix the stay definition
One fixed search per property: dates, nights, adults, rooms. Fees that scale per person only show up when occupancy is stated, so use two adults unless you are testing occupancy on purpose.
- 02
Walk the steps on one exit
Hold a sticky session for the whole sequence, so every step is the same visitor from the same market. Stop at the price summary that precedes the guest-details form.
Record each step of one stay, stop before guest details23 linesfrom playwright.sync_api import sync_playwrightimport hashlib, json, timePROXY = {"server": "http://proxy.arcproxies.io:8000", "username": "USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10", "password": "PASSWORD"}def capture(page, step: str) -> dict: html = page.content() return {"step": step, "url": page.url, "ts": time.time(), "sha256": hashlib.sha256(html.encode()).hexdigest()}with sync_playwright() as p: browser = p.chromium.launch(proxy=PROXY) page = browser.new_page() trail = [] page.goto("https://hotel.example/search?checkin=2026-12-04&nights=2&adults=2") trail.append(capture(page, "search")) page.click("a.property-link >> nth=0") trail.append(capture(page, "property")) page.click("button.select-room >> nth=0") trail.append(capture(page, "price_summary")) # stop here: no guest details page.screenshot(path="price_summary.png", full_page=True) print(json.dumps(trail, indent=2)) browser.close() - 03
Extract fees into a fixed schema
Parse each step into headline price, fee lines, tax lines and total. Map fee names to your categories and keep the raw label beside the mapping.
- 04
Score the trail
For each stay, compare the headline price with the final pre-payment total. Flag any mandatory fee that was absent from an earlier step, and any total shown less prominently than the base rate.
- 05
Re-check and archive
Re-run flagged stays from a fresh session a few days later. Persistent findings with full evidence are what a compliance team or an editor can act on.
Setup
Recommended setup
A fee audit is a short, stateful journey per property, judged against the rules of one market. Residential exits in that market, held for the journey, are the default.
| Plan | Role | Session | Targeting | Price |
|---|---|---|---|---|
ARC Fast Rotating residential | Default for fee trails A residential visitor from the market whose rules you are testing, held from search to price summary. | Sticky, 10 minutes per stay | Country (US or GB), city where pricing differs | €2.00 / GB €1.12 at 1 TB (−44%) |
ARC Ultra Premium residential | Evidence for disputes Premium residential for the re-checks that end up in a report or a complaint, where a failed capture is costly. | Sticky per stay | Country + city | €3.50 / GB €2.17 at 1 TB (−38%) |
ARC Basic Rotating ISP | Property discovery Building the property list from search pages and sitemaps does not need residential exits. | Rotating | Country | €0.75 / GB €0.59 at 1 TB (−21%) |
http://USERNAME _pool-arcfast _country-us _session-k3f9a1x2 _sesstime-10:PASSWORD@ proxy.arcproxies.io:8000Prices are list prices in EUR, excl. VAT. Volume discounts apply automatically at checkout — full ladder on the pricing page.
Connect
One connection string per market
The country, city and sticky session are tokens in the username. Change the token, change the market; keep the session handle, keep the IP.
http://USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000Swap _country-de for any market you quote. The full grammar is on the residential proxies page.
Illustration
What a monthly fee audit of 3,000 properties costs
An illustration with round numbers — your pages, payloads and retry rate will differ. The arithmetic is the real price ladder.
Assumptions
- Properties
- 3,000
- Markets checked
- 2 (US and UK)
- Checks per property
- 4 per month
- Steps per check
- 3
- Weight per step (images blocked)
- 500 KB
- Bandwidth per month
- ≈ 36 GB
On ARC Fast
€66.24per month, excl. VAT
36 GB bought in one purchase at €1.84 / GB (−8% volume rung, applied automatically).
The same 36 GB on ARC Ultra: €115.92 at €3.22 / GB. Route only the jobs that need it through the pricier pool.
Full screenshots add weight only on your side, not on the proxy, since the page is already loaded. Blocking images, fonts and video on the property page is the largest saving.
Bandwidth never expires, so a bigger single purchase is only ever cheaper per GB. See the ladder.
In depth
Resort fees and drip pricing, in depth
What counts as a mandatory fee under the current rules
| Market | Rule and date | What it says about hotel fees |
|---|---|---|
| United States | FTC Rule on Unfair or Deceptive Fees, in effect since 12 May 2025 | Covers hotels, motels, short-term and vacation rentals and the platforms and agents that advertise them. Required resort and cleaning fees belong in the total; government taxes may be shown separately if disclosed before payment; the total must be more prominent than other pricing |
| California | SB 478, in effect since 1 July 2024 | The price shown must include all mandatory charges, except government taxes and fees and reasonable shipping; applies to hotels and short-term rentals |
| United Kingdom | DMCC Act unfair commercial practices provisions, from 6 April 2025; CMA guidance CMA209 | Local taxes, resort fees and other unavoidable charges payable on arrival or departure are mandatory charges to include in the total price |
This is a summary for data design, not legal advice. The drip pricing glossary entry and the guide to travel price transparency rules cover the background.
Per-person fees: the calculation most collectors get wrong
CMA209 works through an example that is a good test case for any parser: a seven-night stay for two at a room price per night plus a resort fee charged per person per night. The guidance says the advertised total for two people has to include the room for seven nights and the fee for both guests on all seven nights, and that a per-night figure may be shown as well if it is based on two people sharing.
If your extractor reads the fee once, or per room rather than per person, the computed total is wrong by a factor of up to fourteen. Store the basis as a field and compute totals from it; never parse a total you could compute.
From fee data to a compliance view
- Per property and market: is the first displayed price an all-in price, a base rate with a visible fee note, or a base rate alone?
- Per step: at which step does each mandatory fee first appear?
- Per platform: does the same property show fees differently on its own site and on an OTA?
- Over time: did the layout change after a rule took effect, and did it stay changed?
Rate parity teams use similar multi-channel evidence for a different question; see hotel rate parity.
Limits of a public fee audit
- Stop at the last step before guest or payment details. Do not create bookings, accounts or holds.
- Fees disclosed only in confirmation emails or at the front desk are outside what a web audit can see; say so in your method.
- Read each site's terms and robots.txt, and keep request rates low; an audit of 3,000 properties does not need to finish in an hour.
Works with anything that takes a proxy URL
Playwright
- Python requests / httpx
- Puppeteer
- changedetection.io
- Docker
FAQ
Questions
Something not covered? Write to contact@arcproxies.io.
What is a hotel resort fee?
A resort fee is a mandatory charge a hotel adds to the room rate, often per night, for facilities such as Wi-Fi, a pool or a gym. Similar charges are called destination, facility, amenity or urban fees. If a guest must pay it to stay, regulators in the US and UK treat it as part of the price.
Do US hotels have to include resort fees in the advertised price?
Yes. Under the FTC Rule on Unfair or Deceptive Fees, in effect since 12 May 2025, required resort and cleaning fees must be included in the total price. Government taxes may be shown separately if they are disclosed before payment is requested.
Are local taxes paid at the hotel part of the UK total price?
According to the CMA's price transparency guidance, local taxes, resort fees and other unavoidable charges that become payable on arrival or departure are mandatory charges and belong in the total price shown.
Why use proxies for a fee audit?
Because fee display can differ by the visitor's country, and the rules you are checking apply to one market. An exit in that market shows what its consumers see. A sticky session keeps the whole journey on one visitor.
Does the audit need to go through checkout?
No. Stop at the price summary before guest details. Everything a fee audit needs, headline price, fee lines and total, is visible before that point, and going further would mean entering personal data.
Sources & review
Last reviewed by the ARC Proxies team. Prices are read from the live catalog at build time.
- [1]US Federal Trade Commission: Rule on Unfair or Deceptive Fees: Frequently Asked Questions
- [2]California Department of Justice, Office of the Attorney General: SB 478: Hidden Fees
- [3]UK Competition and Markets Authority: Unfair commercial practices (CMA207)
- [4]UK Competition and Markets Authority: Unfair commercial practices: price transparency (CMA209), 18 November 2025
Travel fares
More on travel fares
Get started
Buy a gigabyte and try it on your own targets.
No subscription, no sales call. Code WELCOME15 takes 15% off your first purchase, and whatever you do not use is still there next quarter.