Data provenance
Methodology
Every rate on this site comes from a public order book that anyone can check. This page explains where each number originates, when it was captured, and what it does not tell you. If a number here disagrees with what you see on an exchange, the exchange is right and this page is stale — use the live terminal for anything time-sensitive.
Where the numbers come from
We read the public P2P order-book endpoints of six venues: Binance, Bybit, OKX, KuCoin, MEXC and Bitget. Only endpoints reachable without an account are used. We do not scrape logged-in pages, we do not hold exchange accounts on your behalf, and we never ask for a login.
For each fiat corridor we record the best bid, the best ask, the spread between them, and the number of merchant advertisements visible at capture. Nothing is modelled, averaged or estimated.
When we capture
Corridor pages are rebuilt once a day at approximately 02:00 UTC, before the US, European and African trading sessions overlap. The timestamp on each page is the moment of capture, not the moment you loaded it. A page rebuilt fourteen hours ago shows fourteen-hour-old rates, and says so.
The live terminal fetches directly from the exchanges on each request, so it is fresher. That is the whole reason it exists. We rebuild daily rather than continuously because exchange P2P APIs rate-limit aggressively, and because a stable, reproducible daily snapshot is more useful for comparing corridors than a number that changes while you read it.
What an empty cell means
If a venue shows no price, it returned no advertisements for that corridor at capture time. It does not mean the rate is zero, that the venue is broken, or that we failed to check.
Empty cells are common on smaller corridors and on venues that restrict specific regions. We publish them rather than filling the gap with another venue's price, because a plausible-looking number from the wrong source is worse than a blank.
What we do not measure
Being specific about limits is more useful than claiming completeness:
- Fees. We show the headline merchant rate. Maker/taker fees, payment-method fees and bank transfer costs are not modelled; they vary by venue, tier and region.
- KYC requirements. Not captured. Some merchants require identity verification before a trade; we do not track which.
- Settlement time. Not captured. A rate you cannot actually transact at is not a rate.
- Liquidity depth. We show the number of visible ads, not how much volume each merchant will actually fill.
- Counterparty risk. We do not score merchants. Where an exchange publishes its own reputation data we repeat it; nothing more.
How we handle failures
If a venue times out or returns an error during a rebuild, that corridor shows no data for that venue. We do not retry with a different currency, substitute a cached value from another corridor, or carry forward yesterday's number as though it were today's. When a build partially fails we would rather publish a gap than a guess.
Corrections
If you find a number that is wrong, email support@p2pcompanion.com with the corridor, the venue and the timestamp. We will check it against the exchange and correct the page.
Who runs this
P2P Companion is built and maintained by one person, not a company.
Dr. Nitz — Cebu City, Philippines. Physician (MD) and four years of independent research into P2P cryptocurrency markets.
I built this because comparing P2P rates across six exchanges for a single currency meant six tabs, six spreadsheets and a lot of arithmetic, and no tool did it honestly. The site is free, it has no ads, and it does not require an account.