Methodology · observatory
How the observatory works
What a price, a rank, a story and a score mean on these pages, how often the data is collected, and what it cannot show. Nothing here is advice, a forecast or a recommendation.
Score version oddity-1.0.0. The exchange comparison method is a separate page: Methodology overview.
Where the numbers come from
Prices and volumes are consolidated by coins.place from the public APIs of Coinbase, Kraken and OKX. Those exchanges only; not global volume.
Next to a figure the page says how many exchanges it rests on, for example "Consolidated • 3 venues". When only one exchange answered, the figure is labelled "Single venue" with that exchange's name. It is never called consolidated, and nothing is borrowed from another source to fill a gap.
Consolidation and cadence
- Every 5 minutes the collector asks each listed exchange for its public ticker data. It reads the last-trade price and the 24-hour trading volume.
- For each coin it takes the median of the last-trade prices of the exchanges that answered. A median stops one exchange with a bad print from moving the price.
- A consolidated price needs at least two exchanges. With fewer, the figure is shown for the single exchange and is labelled that way.
- An exchange that returns an error, asks us to slow down or blocks our region is stopped for its waiting time and left out of the price. The count of exchanges behind the price drops, and the status page says why.
- A coin with no usable answer gets no value. The page shows a dash. A missing value is never shown as zero, carried forward or estimated between two samples.
Current state of each exchange: system status.
Fresh, delayed, stale
Every figure carries the time of the sample it came from, in UTC. The age is worked out from the server's clock, not from your device. The page moves from "Fresh" to "Delayed" to "Stale" when the newest sample gets old, and shows "Data unavailable" when there is nothing to show. In the "Stale" and "Data unavailable" states the motion on the page stops and no old figure is presented as current. The state changes without anything being written to the database.
Ranking by volume
The markets list ranks the tracked coins by consolidated 24-hour trading volume on the listed exchanges, highest first. It is a ranking by volume, not by market cap: no source for coin supply is used, so no market cap is shown, and none is estimated.
- The volume used for ranking is smoothed over recent samples, so one busy sample does not move a coin.
- The rank on the page is the last verified hourly snapshot. It is not live, and it can change near the end of the list from one snapshot to the next.
- The page names the list by its real size, for example "Markets – 12 largest by volume". It is never named after a larger list than it holds.
- Stablecoins, wrapped, staked and leveraged tokens are listed with a label and are never ranked.
- A coin that enters or leaves the ranked list is recorded as a change with the time of the snapshot.
- Changes over 1 hour, 24 hours and 7 days are worked out by us from our own samples; where a 24-hour or 7-day reference price is missing, the open price of the Kraken hourly candle that contains that time is used. A change is not shown until that history exists.
See it: Markets by volume.
The 100 coins with daily history
The charts, the DCA calculator and the performance compare use a list of 100 coins with a daily close history. Each coin's daily closes come from public Coinbase Exchange candles, with Kraken as the fallback when Coinbase has no market for it. Only dollar (USD) markets are used, never USDT-quoted ones. A coin whose market cannot be read is left out when the site is built, and the reason is named.
Stablecoins are not in the list. Their price is meant to stay at one dollar, so a return or a DCA on them would only measure how well they hold the peg. Each one that is left out, and why:
- Tether. Tether (USDT) is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
- USD Coin. USD Coin (USDC) is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
- Dai. Dai is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
- USDS. USDS is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
- Ethena USDe. Ethena USDe is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
- First Digital USD. First Digital USD is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
- PayPal USD. PayPal USD is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
- USD1. USD1 is a stablecoin pegged to the US dollar, so its daily return or a DCA on it would only measure the peg. It is not in the history list.
Wrapped and staked copies of another coin are left out too, because their history repeats the coin they copy.
Stories
A story is a measurement that was unusual against the coin's own history. Six detectors look for it: unusual returns and volatility bursts, volume above its usual range, a coin moving against the market (and market-wide breadth), momentum streaks and reversals, historical extremes, and moves in and out of the ranked list. A coin is only checked once it has enough collected history, enough volume and enough exchanges behind its price. Stablecoins and wrapped tokens are not checked for unusual moves.
The text of a story says what was measured, against which history and from which exchanges. It does not give a cause, a forecast or advice. A story can be revised as later samples arrive. Every revision is kept and can be read on the story page, and an archived story no longer changes.
See them: Market stories.
The oddity score
The oddity score is a number from 0 to 100 that orders stories by how unusual they are within Coins.place's own history. It is not a probability, not a percentile and not a forecast, and it cannot be compared across score versions.
It starts from three parts, each between 0 and 1: rarity (how far the measurement is outside the coin's own usual range, 40%), magnitude (how large the move is in absolute terms, 30%) and liquidity and relevance (larger, more traded and higher-ranked coins count for more, 30%). That result is then multiplied by confidence factors, each between 0 and 1: how fresh the newest sample is, how much of the expected history is present, whether the exchanges agree on the price, how large the comparison history is, whether the usual range was too narrow to measure well, and how certain the coin's class is.
Because of the exchange-agreement factor, a coin seen on only one or two exchanges cannot score above 80. A score of 100 needs three or more agreeing exchanges, a long history, complete coverage and a top-ranked, liquid coin.
The story page shows the parts, their inputs, the size and length of the comparison history and the thresholds, so the number can be checked. Stories are always stored; the general list shows those from 10 upwards and the featured list those from 40 upwards. These thresholds are first values that have not yet been calibrated.
Score version oddity-1.0.0. A change to any weight or threshold changes the version. Old stories are not re-scored in place.
What the data cannot show
- Prices are combined and sampled. A price is the median of the last-trade prices from the exchanges that answered, taken every 5 minutes. It is not a trade-by-trade price and not a candle: there is no high or low inside a 5-minute step, and a move that goes up and back down between two samples cannot be seen. Anything drawn as a candle from this source is labelled "sampled". The figures cover only the listed exchanges. They are not global prices or global volumes.
- Detection is not instant. A move is detected at the first closed time boundary after it and confirmed one sampling step later. That is typically 5 to 10 minutes after the move starts and up to about 15. The page in your browser then checks for news about once a minute. The words "instant" and "real time" are not used.
- Volume inside a time window is rarely available. Volume for a window exists only for a coin pair that is mapped on a single exchange, and only where that exchange's terms allow it. Otherwise only the rolling 24-hour volume is shown.
- New coins and new deployments are quiet for days. Each detector needs between 3 and 30 days of history that we collected ourselves before it can say that something is unusual. A coin that has just entered the list has no stories until then.
- The statistics are heuristics. They are built on data with heavy tails. A robust z-score is not a p-value. The oddity score is a ranking, not a probability. How many stories appear per day is not known until the thresholds have been calibrated on collected data.
- The rank is by volume, and it is ours. It is the rank of consolidated 24-hour trading volume on the listed exchanges, not the rank by market cap, because there is no source for coin supply. A thin or wash-traded coin can rank high. The rank can flip back and forth near position 100. The rank shown is the last verified hourly snapshot, not a live rank.
- There is no live stream from the exchanges. The label "Streaming" is never shown unless a real connection to an exchange exists. Today the data is polled and sampled.
- Story pages have a text preview, not a picture. Shared links carry the correct title and description and one fixed Coins.place image. A generated picture per story is not part of this version.
- History is only what we collected. History also depends on what the exchanges let us read back, which is a few hundred to a thousand rows per request. For that reason no page says "all-time". A chart range of "All" means all the history we hold.
- All times are UTC. The interface shows UTC everywhere, not the time zone of your device.