On-rampsLive

Fiat on-ramp all-in cost, EUR to BTC premium over exchange mid

What a French retail buyer actually pays per bitcoin, in basis points over the Kraken EUR mid, once the declared fee, the network fee and the spread hidden in the provider's rate are folded into one number. 500 EUR by card, quoted every 5 minutes. Lower is better.

TL;DR. As of , Transak posts the lowest all-in premium over spot at 4.10% (24h avg) on Fiat on-ramp all-in cost, EUR to BTC premium over exchange mid. Source: OpenChainBench, https://openchainbench.com/benchmarks/fiat-onramp-cost.

Read this carefully

Quotes, not executions. The harness asks each provider's quote API what a 500 EUR card purchase would return and compares that to an exchange mid sampled in the same cycle. A real purchase can differ by KYC tier, first-order promotions, card issuer surcharges and settlement timing. No card is charged and no bank transfer is sent.

Every on-ramp advertises a fee. Almost none of them tells you the rate they apply that fee to. This benchmark folds both into one number: the all-in premium, in basis points, between the effective price you pay per unit of crypto and the Kraken EUR mid at the same moment. A provider quoting a 1 percent fee on a rate that already sits 1.5 percent above the market costs 250 bps, not 100. The bench publishes the all-in number, the declared fee and the difference between the two (the hidden spread) for every quote, so a reader can see where the cost actually lives. One persona: a retail buyer in France paying EUR, 500 EUR by card into bitcoin, quoted every five minutes from an EU vantage; SEPA, USDC and ETH cells are measured on the same grid and published as their own series. MoonPay and Transak are quoted today; Ramp, and the aggregators Onramper and Meld, join the table as their API keys are granted. Direct providers and aggregators are two cohorts and are never ranked against each other: an aggregator's row is the best member ramp it returned, which is a different product from a single provider's own price. Lower is better.

Methodology

The harness quotes each provider on a fixed grid every five minutes: three assets (BTC on Bitcoin, USDC on Base with Arbitrum as fallback, ETH on Ethereum), two notionals (100 and 500 EUR), two payment methods (card and SEPA). Each answer is normalized into fiat_in (what the buyer pays), crypto_out (what lands in the wallet) and the fees the provider declares. The headline value is the 24 hour median of all_in_premium_bps = (fiat_in / crypto_out minus spot) / spot times 10 000 on the BTC, card, 500 EUR cell, with spot the Kraken EUR mid (best bid plus best ask over two) fetched in the same cycle. A Pyth Hermes cross-reference (USD feeds divided by EUR/USD) is recorded on every quote under a separate label and the divergence between the two references is published so the reader can judge how much the choice of reference moves the result. The declared fee (provider fee plus network fee plus partner fee, over fiat_in) and the hidden spread (all-in minus declared) are emitted alongside. Aggregators are scored on the best member ramp they return and tagged as a separate cohort.

Results: 2 providers ranked by All-in premium over spot (p50, 24h)

Fiat on-ramp all-in cost, EUR to BTC premium over exchange mid: All-in premium over spot per provider, last 24 hours.
Providerp50Success
1Transak4.10%100.00%
2MoonPay8.12%100.00%

Frequently asked

What is the all-in premium?

The gap, in basis points, between the effective price you pay per unit of crypto (fiat paid divided by crypto received) and the exchange mid at the same moment. It folds the declared fee, the network fee and whatever margin sits in the provider's rate into one number. 100 bps means you paid 1 percent above the mid.

Why compare against Kraken and not the provider's own market rate?

The provider's market rate is the thing being tested. Some on-ramps quote a fair mid and charge a visible fee; others quote a rate already above the market and charge a small fee. Only an external reference sampled at the same time shows the total. Kraken's EUR pairs are keyless, deep and have no FX leg. Pyth is recorded as a second reference so the reader can check the choice does not drive the result.

Why is the headline card and BTC, not SEPA and USDC?

Card is the one payment method every on-ramp in the cohort quotes, and BTC the one asset every one of them lists, so the headline scores every row on the same cell. SEPA is cheaper where it exists (MoonPay quotes it, Transak's quote endpoint does not) and USDC on Base is not quotable on every key. Both are measured on the same grid, emitted with their own labels, and will get a tab once the site renders them; for now they are readable directly in the Prometheus series.

Why are aggregators a separate cohort?

An aggregator's answer is the best of several member ramps, sometimes including the direct providers in the other cohort at a different partner fee. Ranking the best member of five against a single provider's own price would compare two different products. The aggregator row shows what the aggregator would route you to; the direct rows show what each provider quotes on its own.

Is this a real purchase?

No. The harness calls each provider's quote endpoint with a fixed notional and reads the answer. No payment is made. Real orders can differ by KYC tier, promotions, issuer surcharges and settlement timing, which is why the disclaimer sits above the table.

Why does a provider show no data?

Three reasons. The provider's key is not configured on the harness, so it is skipped. The provider does not list the headline cell. Or the provider answered without a usable quote, in which case its success rate drops and the cell is purged rather than left at a stale value.

Source code github.com/ChainBench/OpenChainBench/tree/main/harnesses/fiat-onramp-cost