15% off your first purchase with code WELCOME15, up to 25 GB.

See pricing

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

Illustration. The URLs and values are fictional; the connection string is the real grammar.
€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

  1. 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.

  2. 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 details
    from 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()
  3. 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.

  4. 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.

  5. 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.

PlanRoleSessionTargetingPrice
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 stayCountry (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 stayCountry + 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.
RotatingCountry
€0.75 / GB
€0.59 at 1 TB (−21%)
ARC Fast — default for fee trails
http://USERNAME_pool-arcfast_country-us_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000

Prices 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.

sticky · Germany · 10 min
http://USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000

Swap _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

MarketRule and dateWhat it says about hotel fees
United StatesFTC Rule on Unfair or Deceptive Fees, in effect since 12 May 2025Covers 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
CaliforniaSB 478, in effect since 1 July 2024The price shown must include all mandatory charges, except government taxes and fees and reasonable shipping; applies to hotels and short-term rentals
United KingdomDMCC Act unfair commercial practices provisions, from 6 April 2025; CMA guidance CMA209Local 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. [1]US Federal Trade Commission: Rule on Unfair or Deceptive Fees: Frequently Asked Questions
  2. [2]California Department of Justice, Office of the Attorney General: SB 478: Hidden Fees
  3. [3]UK Competition and Markets Authority: Unfair commercial practices (CMA207)
  4. [4]UK Competition and Markets Authority: Unfair commercial practices: price transparency (CMA209), 18 November 2025

Travel fares

More on travel fares

OverviewProxies for travel fare aggregationAirline, hotel and rail fares change with the point of sale. Query each market from an IP inside it so the fare you store is the fare a traveller is quoted.Deep diveAirline faresCollect airline fares per point of sale: the same flight priced from each market, taxes itemised, one sticky session per search, billed per GB.Deep diveLow-cost carrier faresMonitor low-cost carrier fares where they are sold: on the airline's own site, priced per leg and per seat bucket, with mandatory fees split out. Per GB.Deep diveAirline ancillary pricesTrack airline ancillary prices (checked bags, seats, priority and fare bundles) per route, date and market, so a trip's true cost can be compared.Deep diveRail and bus faresCollect European rail and intercity coach fares per operator, departure and fare family, including yield-managed long-distance tickets. Billed per GB.Deep diveFerry faresMonitor ferry fares by route, sailing, season and vehicle (foot passengers, cars, cabins) from each operator's own public booking site. Per GB.Deep diveFare alertsBuild fare alerts and deal newsletters on verified prices: cheap watch-list polling, live confirmation from the right market before sending, per-GB costs.Deep diveCorporate travel benchmarkingBenchmark booked and negotiated corporate fares against public fares on the same flights, lead times and markets, for TMCs, travel managers and audits.Deep diveTravel metasearchHow to build a travel metasearch engine: partner feeds, cached prices, live re-pricing and look-to-book. Where proxies fit, and what it costs per GB.Deep diveHotel rate shoppingCollect competitor hotel rates per stay date, length of stay and market from local residential IPs. Sticky sessions per shop, billed per GB.GuideWhy flight prices differ by countryThe same flight costs different amounts in different countries because fares are filed and sold per point of sale, and taxes follow the departure airport.GuideDo airlines raise prices when you search?What regulators and researchers found about cookie and IP tracking in airline pricing, and what actually makes a fare change between two searches.GuideHow often flight prices changeFlight prices can change many times a day: filed fares update constantly and seat availability moves with every booking. What that means for collection.

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.