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
- €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
- 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.
- 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 reference16 linesdef 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) - 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.
- 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.
| Plan | Role | Session | Targeting | Price |
|---|---|---|---|---|
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 offer | Country 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 offer | Country | €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.
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 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
| Layer | Where it appears | Observable automatically? | What to record |
|---|---|---|---|
| Display conversion | Currency selector on results and product pages | Yes, logged out | Both prices, implied rate, whether display only |
| Charge in shopper currency | Price summary before payment | Usually yes | Charge currency wording and amount |
| Dynamic currency conversion (DCC) | Payment step, often after card entry | No; needs a real card | Documented 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]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]EUR-Lex (Official Journal of the European Union): Regulation (EU) 2021/1230 on cross-border payments in the Union (codification)
- [3]European Central Bank: Euro foreign exchange reference rates
- [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
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.