Methodology
Every number on this site comes from a script anyone can run. Here's exactly how each benchmark works, so you can reproduce it or tell us we're wrong.
B1: Exchange REST API latency
We open a single persistent HTTPS connection (keep-alive) to each exchange's public market-data endpoint and issue a fixed number of back-to-back GET requests, timing each with a monotonic clock around send-plus-full-response-read. This mirrors what a running bot experiences after its first connection.
- Handshake excluded from samples. DNS + TCP + TLS setup is done once during warm-up and reported separately as
connect_ms, because a live bot pays it once. - Warm-up requests are discarded. The first few calls prime the connection and any server-side cache.
- Stats. We report min, p50, p95, p99, max, and mean over successful samples. Non-200 responses and errors are excluded from the stats and counted separately.
- Public data only. No API keys, no authentication, no order placement. Only ticker and orderbook reads.
- Politeness. Requests are spaced to avoid tripping rate limits, so absolute throughput is not what's being measured. Per-request latency is.
Latency depends heavily on where the test runs. Each report states its region and date. A single-region snapshot is directional, not gospel; we publish multiple regions where it matters (e.g. the VPS matrix).
What we don't do
- We don't accept payment to change a ranking. Affiliate links never move a row.
- We don't publish a number we can't reproduce on demand.
- We don't present a single run as a universal truth. Dates and sample sizes are always shown.
Reproduce it yourself
The raw JSON behind each report is published with the report, and the benchmark scripts are open. If your numbers differ from ours, that's useful signal. Tell us the region and time and we'll dig in.