Mid-Market Rate vs. the Rate You Actually Get
Why the exchange rate your bank or app gives you is worse than the one on Google — what the mid-market rate is, how spreads and markups work, and how to build on a fair reference rate.
You check Google: 1 USD = 0.92 EUR. You make the transfer, and somehow you get 0.89. Nobody charged a visible “fee,” yet €30 quietly vanished. Where did it go?
The answer is the difference between the mid-market rate and the rate you were actually offered — and once you see it, you can’t un-see it.
What is the mid-market rate?
Every currency has two prices at any moment: the bid (what buyers will pay) and the ask (what sellers will accept). The mid-market rate is the midpoint between them. It’s the “real” exchange rate — the one quoted on Google, Reuters, and XE, and the reference price the whole market is organized around.
It is also the rate that has no markup baked in. That makes it the only fair starting point for any conversion you build or display.
So why is your rate worse?
Because the company doing your conversion adds a spread — a margin between the mid-market rate and the rate they quote you. It’s revenue for them, and because it’s expressed as a “rate” rather than a “fee,” it’s easy to miss.
A typical retail conversion looks like this:
Mid-market: 1 USD = 0.9200 EUR
You're quoted: 1 USD = 0.8900 EUR
Hidden spread: ~3.3%
On a $1,000 transfer, that 3.3% spread is $33 — often more than any flat fee shown on the receipt. Banks and card networks commonly add 2–4%; some “no-fee” apps simply move the fee into the spread.
Rule of thumb: if a provider won’t show you the mid-market rate next to their rate, the difference is the fee.
Mid-market rate vs. interbank vs. retail
These terms get muddled, so:
- Interbank rate — the wholesale rate large banks trade with each other, in huge volumes. You can’t get this as an individual.
- Mid-market rate — the midpoint of the interbank bid/ask. The fair reference rate, and what good data providers publish.
- Retail rate — what you’re actually offered, = mid-market ± the provider’s spread.
When you build a product, you want to calculate on the mid-market rate and make any markup you charge explicit and intentional — not hidden in a worse rate.
How to build on a fair rate
If you’re displaying prices, converting carts, or reporting in multiple currencies, start from the mid-market rate and apply your own logic on top:
curl "https://api.currency-core.com/v1/convert?from=USD&to=EUR&amount=1000" \
-H "Authorization: Bearer cc_live_your_key"
The CurrencyCore /convert endpoint returns the mid-market rate and the converted amount — no hidden spread. From there you can:
- Show it as-is for transparent, trust-building pricing.
- Add an explicit margin if you need to cover FX risk, and label it clearly.
- Round to a clean local number so €912.34 becomes €912 (or €899 if you prefer charm pricing).
Frequently asked questions
Is the mid-market rate the rate I’ll actually pay? Usually not — most providers add a spread. But it’s the right number to build and compare against, and the most transparent rate to show customers.
Why does my rate change between quote and settlement? Rates move continuously. The longer the gap between quoting and settling, the more the rate can drift — which is why some providers add an extra buffer to the spread.
How often should I refresh rates? For display and pricing, once a day is usually fine and cheap to cache. For anything trading-sensitive, you’ll want fresher data.
Want mid-market rates with no hidden markup, plus historical data and PPP? See the /convert endpoint docs or brush up on the currency conversion glossary. Start free →