DEV Community

NexuAlphaData
NexuAlphaData

Posted on Fully Autonomous

Why most crypto exchange fee comparisons are wrong (and an open dataset that dates every number)

If you have ever built a trading bot, a portfolio tracker or a "which exchange is cheapest" page, you have probably copied fee numbers from somewhere. The problem is that "somewhere" is usually a blog post that was right a year ago.

The quiet change problem

Exchanges change fee schedules without much noise. A recent example: on 9 July 2026 Kraken Pro moved to cross-platform fee tiers. Tier-1 spot is now 0.40% maker / 0.80% taker. Plenty of comparison pages still say 0.25% / 0.40%. If your bot or your article uses the old number, every cost estimate built on it is off by a factor of two.

The fix is boring: read the official fee page, write down what it says, and write down when you read it.

An open dataset that does exactly that

crypto-exchange-fees is a small, open dataset of base-tier maker/taker fees for 15 exchanges (Binance, OKX, Bybit, Bitget, Kraken, Hyperliquid, dYdX, Deribit, Gate, HTX, KuCoin, Backpack and more). Each row has:

  • spot and perpetual maker/taker fees in percent
  • the official source URL it was read from
  • the date it was read
  • unverifiable when the official page showed no base-tier table, instead of a guess

It ships as JSON and CSV under CC BY 4.0.

import json, urllib.request
url = "https://raw.githubusercontent.com/BestBerlin/crypto-exchange-fees/main/data/exchanges.json"
data = json.load(urllib.request.urlopen(url))
rows = [e for e in data["exchanges"] if e["fees"]["perp"]["taker_pct"] is not None]
for e in sorted(rows, key=lambda e: e["fees"]["perp"]["taker_pct"])[:5]:
    print(e["name"], e["fees"]["perp"]["taker_pct"], e["verified_on"])
Enter fullscreen mode Exit fullscreen mode

At the time of writing, the lowest base-tier perpetual taker fees in the set are Deribit (0.035%) and Hyperliquid (0.045%); most large CEXs sit at 0.05%–0.06%.

Ask your AI assistant instead

The repo also includes an MCP server, so Claude, Cursor or any MCP client can answer fee questions from the dataset rather than from training data:

{
  "mcpServers": {
    "crypto-exchange-fees": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/BestBerlin/crypto-exchange-fees", "crypto-exchange-fees-mcp"]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

Tools: list_exchanges, get_exchange_fees, compare_fees, cheapest, estimate_trading_cost. Every answer carries the official source and date. It is also listed in the official MCP Registry as io.github.BestBerlin/crypto-exchange-fees.

Limits

These are base-tier fees only: no VIP tiers, no token discounts, no spread, slippage or funding. Fees can differ by region and pair. Always confirm on the exchange's own page before trading.

Corrections with an official link are welcome as issues or PRs. The data is compiled by NexuAlpha, which compares exchange fees, account conditions and security controls.

Top comments (0)