The short version
- There is no single "swap fee". Every swap has up to five costs: the spread, the platform fee, the network fee on the leg you send, the network fee on the leg you receive, and the premium you pay for a fixed rate.
- The advertised fee is the least important one. On a cross-chain swap the spread and the network fees routinely dwarf the headline percentage.
- Only one number compares two services honestly: the amount received divided by the amount sent, quoted at the same instant. Everything else is marketing.
- Network fees are flat, so they punish small swaps. A $3 chain fee is 0.3% of $1,000 and 6% of $50. Below about $100, chain choice matters more than rate.
- 0.3%–0.8% all in is competitive on a major pair in a calm market. 3%+ on a major pair is a markup, not the market.
The five things you actually pay
Ask a swap service what it charges and you will get one number. Ask your wallet what the swap cost and you will get a different one. The gap between them is not dishonesty — it is that a cross-chain swap is four or five distinct economic events stapled together, and only some of them belong to the service. Here they are, separated.
1. The spread
The spread is the difference between the mid-market rate — the theoretical midpoint between the best bid and the best ask — and the rate you are actually offered. It exists because someone has to hold inventory on both sides of the trade, absorb the price risk while your deposit confirms, and still be solvent afterwards. It is the largest cost on most swaps and the one nobody advertises, because it is not a line item; it is baked into the rate.
Spread widens with three things: how thin the pair is, how volatile the market is, and how large your order is relative to available depth. A BTC → USDT swap crosses one of the deepest markets in crypto and prices accordingly. A swap between two mid-cap assets on different chains may have to route through two hops, each with its own spread, and the compounding is invisible in the final quote.
2. The platform fee
This is the service's own margin, and it is the only cost it fully controls. Some services show it as a separate line; most fold it into the quoted rate. Neither is dishonest as long as the number you are shown is the number you receive — what matters is whether a second deduction appears at settlement that was not in the quote. That is the practice to check for, and it is what "no hidden spread at execution" means when a service claims it.
On SwapNoKYC the platform fee is already inside the displayed quote. The receive figure in the widget is the figure that lands in your wallet.
3. The network fee on the leg you send
This is the cost everyone forgets, and on Bitcoin in a busy mempool it can be the single largest line. When you send the deposit, your own wallet pays your own chain's miners or validators to include the transaction. That fee never touches the swap service — it is not in the quote, cannot be in the quote, and is identical no matter which service you choose.
Two traps live here. First, some wallets deduct the fee from the amount you typed rather than adding it on top, so you send less than the quote expected and, on a fixed-rate order, trigger a re-price. Second, fee estimators are optimistic: a "low priority" Bitcoin fee that promises confirmation in an hour can sit unconfirmed long enough for a ten-minute rate lock to expire, converting a $1 saving into a re-priced order.
4. The network fee on the leg you receive
Someone must also pay to broadcast the payout transaction on the destination chain. On a well-built aggregator this is already priced into the receive amount you were quoted, which is why a Bitcoin payout quotes worse than a Monero payout of identical value — Monero's fee is around a cent, Bitcoin's is dollars. This is also why the destination chain is the biggest lever you have on stablecoin swaps: moving USDT to Tron or Solana instead of Ethereum can save more than the entire spread.
5. The rate-type premium
A float rate executes at whatever the market is when your deposit confirms. A fixed rate locks the number for a defined window — ten minutes on this site — which means the service is carrying your price risk for those ten minutes and prices that risk in. The premium is usually a few tenths of a percent. It is not a fee; it is an option, and like any option it is worth buying only when volatility justifies it.
Why your quote never matches the price on CoinGecko
The number on a price tracker is a volume-weighted average of recent trades across dozens of venues. It is a statistic about the past, not an offer you can execute against. Nobody will sell you Bitcoin at the CoinGecko price, including CoinGecko. The gap between that reference number and a real quote is made up of the spread, the platform fee, the payout chain fee, and the simple fact that a tracker's number is already a few seconds stale by the time you read it.
This matters because "the rate was worse than the market price" is the most common false alarm in swapping. A 0.5% gap against a tracker on a major pair is normal execution. A 4% gap is a service marking you up, and the difference is worth checking before you send rather than after.
A worked example, with the arithmetic
Take a $1,000-equivalent BTC → XMR swap on a calm market. Mid-market says your Bitcoin is worth 1,000 dollars of Monero. Here is where it goes:
- You send the Bitcoin. Your wallet pays roughly $2.10 in miner fees at normal priority. This is yours, not the service's.
- Spread plus platform fee takes about 0.6% on this pair in these conditions — roughly $6.00.
- Payout network fee on Monero is about $0.01, already inside the quoted receive amount.
- You receive approximately $991.89 of XMR.
Effective cost: 0.81%, of which the service's share is 0.6% and the chain's share is 0.21%. Now run the same swap at $100 instead of $1,000. The spread stays proportional at $0.60, but the Bitcoin fee is still $2.10 — so the effective cost jumps from 0.81% to 2.7%, and more than three quarters of that is the chain, not the service. Nothing about the pricing changed. Only the size did.
Run it a third time from Lightning instead of on-chain Bitcoin. The sending fee collapses to a fraction of a cent, and the $100 swap costs about 0.6% — cheaper, proportionally, than the $1,000 on-chain version. That is the whole argument for routing small amounts over cheap rails, made in three numbers.
The only formula that compares two services honestly
Advertised fees are not comparable across services, because each one draws the boundary of "fee" in a different place. One quotes 0.25% and takes 1% in spread. Another quotes 1% and takes nothing else. A third quotes zero and pays for itself in the payout chain fee it silently deducts. The only defence is to ignore all of it and measure the delivered amount:
- Effective rate = amount received ÷ amount sent. Every cost the service imposes is already inside this ratio — spread, platform fee, payout fee, referral markup, all of it.
- All-in cost % = (1 − effective rate ÷ mid-market rate) × 100. This is the honest headline number, and it is the one nobody publishes.
- Then add your own send-side network fee, which is identical across every service and therefore cancels out of the comparison — but not out of your wallet.
Two conditions make the comparison valid: both quotes taken within the same minute, and both for the same amount. Rates move, and many services quote a better rate at larger sizes. A screenshot from yesterday proves nothing.
Network fees: the part you control most
You cannot negotiate a spread. You can absolutely choose a chain, and on many swaps that choice is worth more than shopping the rate. Rough orders of magnitude, which move with congestion but keep their ranking:
- Bitcoin on-chain — dollars, occasionally tens of dollars. Size-independent, so it is brutal on small amounts.
- Bitcoin over Lightning — a fraction of a cent, settling in seconds. The cheapest sending leg that exists for BTC.
- Ethereum mainnet — the most expensive stablecoin rail by a wide margin, and the default that costs people the most money out of habit.
- Tron, Solana, BNB Chain, Polygon — cents. For stablecoin movement these are the sane defaults.
- Monero — about a cent, and the fee does not vary much with load.
The practical rule: pick the cheap chain for whichever leg is larger in fee terms, and remember that the destination network is a choice you make in the widget, not a property of the asset. USDT is USDT; USDT-ERC and USDT-TRC are not the same product to your wallet. The stablecoin chains comparison has the per-network detail.
Fixed or float: what the premium actually buys
Float gives you the market rate at the moment your deposit confirms. If the pair moves in your favour during the confirmation wait, you keep the gain; if it moves against you, you wear the loss. The spread is tighter because the service is not insuring anything.
Fixed locks the receive amount for ten minutes from deposit. You pay a slightly wider spread for the certainty. The decision is not a matter of taste — it is a comparison between the premium and the volatility you expect over your confirmation window:
- Choose float when the market is calm, the pair is a stablecoin migration, the sending chain confirms fast, or the amount is small enough that a swing does not matter.
- Choose fixed when the amount is large, the market is moving, the sending chain is slow (on-chain Bitcoin in a busy mempool), or you have committed to deliver an exact amount to someone else.
- Watch the window. A fixed rate that expires before your deposit confirms gives you the worst of both: the wider spread and a re-price. If you choose fixed, pay the higher network fee to confirm inside the lock.
Minimums, dust, and why tiny swaps are a bad deal
Every service has a per-pair minimum, typically around the equivalent of twenty dollars, and it exists because below that the payout network fee eats a meaningful share of the payout. That floor is a symptom of the real constraint, which is that flat costs do not scale down.
Two consequences worth internalising. First, splitting one swap into several small ones multiplies the flat costs — usually the opposite of the privacy-driven instinct that motivates the split, and worth doing only when the privacy gain is real and quantified. Second, dust — balances too small to move economically — is created, not received: it is what remains when you send an amount barely above a chain's fee. Consolidating dust costs more than the dust is worth on expensive chains, which is why the answer to dust is to avoid making it.
The costs that are not fees
The expensive mistakes in swapping are rarely a bad rate. They are operational, and none of them appear in any fee table:
- A missing memo or destination tag on a chain that requires one. Recoverable, sometimes, at the cost of a support round trip and days of waiting.
- The right asset on the wrong network. Sending USDT-ERC to a TRC deposit address is the single most expensive error in this space, and the most common.
- An expired fixed-rate quote because the deposit was sent with a fee too low to confirm in time.
- A re-swap. Landing on the wrong chain and swapping again to fix it means paying the whole cost stack twice.
- Underpaying a fixed-rate order because your wallet subtracted its fee from the amount instead of adding it.
Each of these costs more than any plausible difference in spread between two competent services. Optimising the rate while making one of these mistakes is losing dollars to save cents. If a swap has already gone sideways, the troubleshooting guide covers each case and how refunds work when there is no account to log into.
Eight ways to actually pay less
- Swap once, not three times. Each hop pays the full stack. One direct cross-chain swap beats a chain of manual conversions almost always.
- Choose the destination network deliberately. On stablecoins this is usually the largest single saving available to you.
- Use Lightning for the Bitcoin leg when you have the option. It removes the most expensive sending fee in crypto.
- Batch small swaps into one larger one where your threat model allows it — flat costs reward size.
- Send during quiet hours on fee-market chains. Bitcoin and Ethereum fees swing several-fold across a week.
- Take float on calm markets and reserve fixed for the trades where certainty is worth the premium.
- Quote the same pair on two services within the same minute and compare received-over-sent, not advertised fees.
- Set the send fee high enough to confirm inside your rate lock. Paying $2 more in miner fees to avoid a re-price on a $2,000 order is trivially correct.
What we charge, and where we lose
Our own model, stated plainly so you can hold it to the standard above: one platform fee, already folded into the rate the widget displays. No deposit fee, no withdrawal fee, no second spread applied at settlement, no referral code injected into your order, no rewritten destination address. The receive figure you are shown is the figure that arrives, and the only cost outside it is the network fee your own wallet pays to send the deposit.
Where we lose: we are a routing layer over aggregated liquidity, so on any given pair a service that runs its own deep book on that specific market can occasionally beat us on rate. On very large orders — the sort where half a percent of spread outweighs half an hour of setup — a peer-to-peer atomic swap is genuinely cheaper than any aggregator, ours included. And a centralised order-book exchange with a maker rebate will beat us on a single-chain trade if you already have an account there and do not mind the identity check. We think the trade is worth it. You should check, using the formula above, rather than taking our word for it.
Related reading
For the per-network fee detail behind the chain-choice advice, see stablecoin chains compared. For the cheapest sending leg in crypto, see the Lightning swap guide. For how the services stack up on rate and policy, see the best no-KYC swaps of 2026. For the case where an aggregator is not the cheapest option, see atomic swaps explained. If a swap has not arrived, start with the troubleshooting guide, and for definitions of spread, slippage and float, see the glossary.