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

See pricing

Travel fares · Booking currency markups

Booking currency markups: measuring FX conversion on travel booking pages

A booking currency markup is the difference between the exchange rate a travel site uses to show or charge a price in your currency and a reference rate for the same day. Measure it by collecting the same offer in the merchant's currency and in the shopper's currency, then comparing the implied rate with the ECB reference rate.

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 organisations and researchers
  • Payments and FX product teams at travel companies
  • Hotel and airline e-commerce auditors
  • Travel and personal-finance journalists

The short answer

  • The measurement is simple: implied rate = price in shopper currency ÷ price in merchant currency, compared with the ECB euro reference rate for that day, as a percentage.
  • In the EU, Regulation (EU) 2019/518, now codified in Regulation (EU) 2021/1230, requires card currency conversion charges to be expressed as a percentage mark-up over the latest ECB euro reference rates and disclosed before payment.
  • Separate two layers: display conversion (a currency selector on the site) and dynamic currency conversion at payment. The first is visible on public pages; the second usually appears only after card details.
  • Automated collection stops before payment. Payment-step offers are documented by researchers making real, manual test bookings.

The problem

What goes wrong without the right IPs

Display currency and charge currency are different things

A selector can convert a price for display only, while the booking is still charged in the merchant's currency. Read the checkout's wording for which currency will be charged, and record display and charge currency separately.

The merchant currency is not always visible

Some sites show only the converted price. Find the merchant-currency price by collecting the same offer from the merchant's home market, or by switching the selector to the merchant currency in the same session.

Timing of the reference rate

The ECB publishes its euro reference rates at around 16:00 CET on working days. Use the latest rate available at the observation time, not the end-of-day rate of a different day, and log which one you used.

Prices that change while you switch currency

If the offer re-prices between the two observations, the implied rate absorbs the price change. Take both observations in one sticky session, seconds apart, and discard pairs where the merchant-currency price moved.

What to collect

What you can collect

Site, product and step
Results, product page, basket or price summary: markups can differ by step.
Price in merchant currency
The base the conversion starts from.
Price in shopper currency
What the shopper is shown or charged.
Display vs charge currency
Whether the conversion is informational or the amount billed.
Implied rate
Shopper price divided by merchant price.
Reference rate and its timestamp
ECB euro reference rate used for comparison.
Markup percentage
Implied rate against reference rate.
Disclosure text
Whether and how the site states a markup or rate.
Exit country and site edition
The market that set the default currency.

How it runs

How a collection run works

  1. 01

    Choose sites, offers and markets

    Pick the hotel, airline, rental and activity sites you audit, a fixed set of offers per site, and the shopper markets whose default currency differs from the merchant's.

  2. 02

    Observe both currencies in one session

    On a sticky session from the shopper's market, record the offer as shown by default, then switch to the merchant currency and record it again. Stop at the last page before payment details.

    Implied rate and markup against the ECB reference
    def markup_pct(price_shopper: float, price_merchant: float,               ecb_merchant_per_eur: float, ecb_shopper_per_eur: float) -> float:    """Markup of the site's rate over the ECB cross rate, in percent.    ECB quotes are units of currency per 1 EUR, so the reference    shopper-per-merchant rate is the ratio of the two quotes.    """    implied = price_shopper / price_merchant    reference = ecb_shopper_per_eur / ecb_merchant_per_eur    return round((implied / reference - 1) * 100, 2)# Session: "http://USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000"# with the shopper market's country in place of _country-de.# A hotel charging in CHF, shown in GBP to a UK visitor:# markup_pct(price_shopper=212.40, price_merchant=230.00,#            ecb_merchant_per_eur=0.94, ecb_shopper_per_eur=0.84)
  3. 03

    Attach the reference rate

    Load the ECB reference rates daily and join the latest rate published before each observation. For non-euro pairs, build the cross rate from the two euro rates.

  4. 04

    Report per site and step

    Publish the markup distribution per site, market and booking step, with the disclosure text you saw. Mark observations where display and charge currency differ.

Setup

Recommended setup

Default currency is set by the shopper's market, and the measurement needs two observations of one offer in one session. Residential, sticky, per market.

PlanRoleSessionTargetingPrice
ARC Fast
Rotating residential
Default for paired observations
Residential exits so each site picks the shopper market's default currency, held long enough to take both observations of the same offer.
Sticky, about 10 minutes per offerCountry of the shopper market
€2.00 / GB
€1.12 at 1 TB (−44%)
ARC Ultra
Premium residential
Sites where a missed pair spoils a study
The premium residential pool for the handful of large booking sites a published study depends on.
Sticky per offerCountry
€3.50 / GB
€2.17 at 1 TB (−38%)

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 quarterly currency markup study costs

An illustration with round numbers — your pages, payloads and retry rate will differ. The arithmetic is the real price ladder.

Assumptions

Sites
40
Offers per site
30
Shopper markets
6
Cadence
weekly (4.3 a month)
Weight per paired observation
1.2 MB
Bandwidth per month
≈ 38 GB

On ARC Fast

€69.92per month, excl. VAT

38 GB bought in one purchase at €1.84 / GB (−8% volume rung, applied automatically).

The same 38 GB on ARC Ultra: €122.36 at €3.22 / GB. Route only the jobs that need it through the pricier pool.

Paired observations go further into the booking flow than a results page, so they weigh more per offer.

Bandwidth never expires, so a bigger single purchase is only ever cheaper per GB. See the ladder.

In depth

Booking currency markups, in depth

What EU law requires for currency conversion charges

Regulation (EU) 2019/518 amended the EU cross-border payments regulation to cover currency conversion. Its Article 3a requires payment service providers, and parties offering currency conversion at an ATM or at the point of sale, to express the total currency conversion charges as a percentage mark-up over the latest available euro foreign exchange reference rates issued by the ECB, and to disclose that mark-up before the payment is initiated. Its recitals mention on-screen display in the case of online purchases. These provisions applied from 19 April 2020, the electronic message requirements from 19 April 2021; the rules are now codified in Regulation (EU) 2021/1230.

The ECB notes that its reference rates are published for information purposes only, which is also how they serve here: a neutral benchmark to measure against. This describes the rules; it is not legal advice.

Display conversion vs dynamic currency conversion

LayerWhere it appearsObservable automatically?What to record
Display conversionCurrency selector on results and product pagesYes, logged outBoth prices, implied rate, whether display only
Charge in shopper currencyPrice summary before paymentUsually yesCharge currency wording and amount
Dynamic currency conversion (DCC)Payment step, often after card entryNo; needs a real cardDocumented by manual test bookings

BEUC's 2017 position paper notes that DCC is offered by physical and online merchants as well as ATMs, and contrasts DCC fees of around 10% in some cases with a typical bank mark-up of 0–3%. Treat those as historical context, not as a figure for any current site.

Why the shopper's market decides the currency

Travel sites usually pick the default currency from the visitor's location and site edition, the same point of sale signals that set prices. A study that collects only from one country sees only one conversion. Collect from each shopper market and keep exit country, edition and default currency in separate columns, as comparing prices across markets describes.

Some of what looks like a currency markup is drip pricing or fees added later in the flow; travel price transparency rules covers those separately. Keep fee lines out of the price pair before computing the rate.

Where automated collection stops

  • Stop before payment details. Do not enter card numbers, and do not complete bookings with automated tools.
  • Use manual, real test purchases for the payment step. Researchers who need DCC evidence make small real bookings and keep receipts.
  • Collect public pages only, logged out, within each site's terms; follow collecting travel data responsibly.

Works with anything that takes a proxy URL

  • Playwright
  • Python requests / httpx
  • Crawlee
  • Node.js
  • Docker

FAQ

Questions

Something not covered? Write to contact@arcproxies.io.

How do I calculate the currency markup on a booking site?

Collect the same offer in the merchant's currency and in your currency within seconds of each other, divide the second by the first to get the implied rate, and compare it with the ECB reference cross rate for that time. The percentage difference is the markup.

What reference rate should I compare against?

The ECB euro foreign exchange reference rates are the benchmark EU rules use for card currency conversion charges. They are published around 16:00 CET on working days. Use the latest rate available at the observation time and record which one you used.

Is choosing to pay in my own currency more expensive?

Often, but not always, and it depends on the provider. Consumer groups have documented high DCC mark-ups, while the EU now requires card conversion charges to be shown as a percentage mark-up over the ECB rate before payment, so the cost can be compared at the point of choice.

Can proxies measure dynamic currency conversion at checkout?

Not on their own. DCC offers usually appear at the payment step after card details are entered, which is outside automated, logged-out collection. Proxies let you measure the display and price-summary layers per market; the payment step needs manual test bookings.

Which proxy setup suits a currency markup study?

Residential exits in each shopper market, held sticky for about ten minutes per offer so both currency observations come from one session and one exit. Billing is per GB, and the balance does not expire between study waves.

Sources & review

Last reviewed by the ARC Proxies team. Prices are read from the live catalog at build time.

  1. [1]EUR-Lex (Official Journal of the European Union): Regulation (EU) 2019/518 amending Regulation (EC) No 924/2009 as regards certain charges on cross-border payments in the Union and currency conversion charges
  2. [2]EUR-Lex (Official Journal of the European Union): Regulation (EU) 2021/1230 on cross-border payments in the Union (codification)
  3. [3]European Central Bank: Euro foreign exchange reference rates
  4. [4]BEUC (The European Consumer Organisation): Dynamic Currency Conversion: when paying abroad costs you more than it should (BEUC-X-2017-118, 30 October 2017)

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.