Methodology
How SilphCo Price works — and why you can trust it
Last updated:
SilphCo Price is the canonical valuation you see across the platform — on card pages, in your portfolio, and over the API. It is the median of the last 3 clean sales within 180 days for one exact card, finish, edition, language, and grade. Every number comes from recorded sales, with the sale ids behind it. When a cohort has no clean sale in the window, there is no price. We never borrow one from somewhere else.
What Is the SilphCo Price?Link copied!
Most price sites show the last sale or a simple average — both of which can be noisy or misleading for illiquid collectibles. A last sale tells you what one person paid on one day, and one autograph or reprint can set it. An average is pulled around by a single outlier. A median of three recent clean sales is current on liquid cards, and one bad comp cannot set it.
Asking prices are not part of it. Anyone can list a card at any number, so asks never enter the price. Each price carries its sample size, the date of its newest and oldest sale, and the ids of the sales it used, so you can audit it.
What Counts as a Clean SaleLink copied!
Only a clean sale can set the price. A sale is clean when it passes every one of these gates and is not a price outlier:
- Identity verified. The sale is matched to this exact card with confidence. Sales whose identity could not be resolved are left out.
- Real sales only. Completed secondary-market trades count. Price-guide rows and daily price buckets are not sales.
- No lots or sealed items. A bundle of cards, or a sealed product, says nothing about one card.
- No autographs, proxies, or reprints. A signed card, a proxy, or a reprint or anniversary printing does not price the original.
- Slab grade plausibility. A slab grade has to be a real one: 1 to 10, in half steps.
- Language match. A listing that names a different language than the cohort is not a comp.
- Vision quality flags. A sale that photo review has flagged as unreliable is left out.
- Duplicate slab certs count once. The same graded slab sold more than once within 7 days in one cohort counts as one sale, the newest.
These gates cannot be turned off. The outliers setting below relaxes only the price-outlier check.
How the Price Is ChosenLink copied!
By default the price is the median of the newest 3 clean sales in the cohort, looking back at most 180 days. If only one or two clean sales exist, it is the median of those. You can pick a different estimator with the method setting. Every method looks back at most 180 days:
| Method | Value |
|---|---|
median_3 (default) | Median of the newest 3 clean sales |
last | The newest clean sale |
median_7d | Median of the clean sales in the trailing 7 days |
median_30d | Median of the clean sales in the trailing 30 days |
There is no fallback. If the chosen method has no sales in its window, the answer is no price (status none, value null). We do not switch to another method, another grade, another finish, or another language to fill the gap. We show the gap rather than estimate a number.
Outlier RejectionLink copied!
A $50,000 Charizard sale might be a wash trade, a typo, or a bundled deal. A sale is flagged as a price outlier when it sits far outside the normal range for that card and grader, when it is above $25,000, or when the data pipeline marked the price anomalous.
The outliers setting controls what happens to flagged sales. exclude is the default and leaves them out of the price. include puts them back into the pool. It relaxes the outlier flag and nothing else: the clean-sale gates above always apply.
Cohorts Never MixLink copied!
A price belongs to one cohort: a specific card, language, finish, edition, and grade. Cohorts never mix:
- Finishes are separate products. A reverse holo is never priced off a holo sale.
- Editions are separate. 1st Edition, Shadowless, and Unlimited prints each have their own price.
- Languages are separate. An English card is never priced off a Japanese sale.
- Grades are separate. A PSA 10 is never priced off a PSA 9 or a raw near-mint sale, and we do not infer one grade from its neighbors.
If you do not name a finish, we use the card's default print and say so in the price's cohort. If you do not name a grade, we use raw near mint. A cohort that has no price stays empty.
StatusLink copied!
Every price carries a status describing how much to trust it. A price with status thin, stale, or suspect still returns its value. Show the status next to the number rather than presenting it as a settled market price.
When more than one status applies, the first one in this order wins: none, suspect, stale, thin, ok. Most card-and-grade cohorts trade rarely, so many prices are thin or stale. We would rather tell you that than dress up an old sale as a current market price.
Price and Market ContextLink copied!
The SilphCo Price is the median of the newest 3 clean sales in each cohort (Price v2). It is served at GET /api/v3/price, and it is the only price we publish. There is no liquidity midpoint.
Use the asks to see supply: the best ask and the book ask are current listings depth, shown as an optional market block on the price endpoints. They are context, never the price.
On-Chain vs Off-ChainLink copied!
SilphCo reads two kinds of sales data:
On-Chain Sales
Sales recorded on the blockchain via Courtyard (Polygon), Collector Crypt, Phygitals, Beezie, and Magic Eden (Solana). These are cryptographically verified — the transaction hash proves the sale happened at the stated price.
Off-Chain Sales
Sales from marketplaces such as eBay. These represent the traditional paper market, and they carry most of the volume for vintage cards that rarely trade on-chain.
Neither source outranks the other. Both land in the same sales tape, are normalized to the same cohort grain, and pass the same clean-sale gates, so the newest clean sales set the price whichever side they came from.
Adaptive WindowsLink copied!
The SilphCo Price uses a fixed 180-day lookback. The momentum trend is different. A Charizard Base PSA 10 trades dozens of times a month; a vintage PSA 10 might trade once a year, and a single fixed window would overreact for one and ignore the other. So the momentum window scales with trailing 30-day volume via an adaptive half-life:
| 30d Sales | Window | Why |
|---|---|---|
| 10 or more | 14 days | Fast-moving; recent prices matter most |
| 3–9 | 30 days | Steady; balanced view |
| 1–2 | 60 days | Sparse; need more history |
| 0 | 90 days | Floor fallback only |
MomentumLink copied!
When a card shows a statistically significant trend, SilphCo attaches a momentum signal.
Momentum is measured on its own internal time-weighted series, not on the SilphCo Price — a median of the newest clean sales is built for a point-in-time read, not for fitting a trend. We reconstruct weekly snapshots of that series going back twice the adaptive half-life and fit a trend line. If the slope is strong enough to distinguish from noise, we label it Up or Down. If not, we label it Flat with no directional signal.
The forecast horizon matches liquidity: fast-trading cards get a 7-day forecast, sparse cards up to 45 days. Confidence bands widen with less data — wide at 4 snapshots (reflecting genuine uncertainty), narrowing as more history accumulates.
Technical SummaryLink copied!
For developers and data scientists who want the exact formulas:
- SilphCo Price =
median(newest 3 clean sales within 180 days)per cohort. With fewer than 3 clean sales it is the median of those. - Status precedence:
none,suspect,stale(newest sale more than 90 days before the as-of date),thin(fewer than 3 sales used),ok. - A sale is a price outlier when it is outside the 3.0 x IQR fence of that card's sales for the same grader (with at least 5 sales in the group), above $25,000, or marked anomalous upstream.
- Duplicate slab certs: the same cert seen twice within 7 days in one cohort counts once, the newest.
- Asks are fenced at write time: an ask below 8% or above 15x the finish-matched price is dropped before it can enter the book.
- The internal momentum series uses exponential decay weights
w = exp(-ln(2)/H * age)where H is the adaptive half-life in days. - Momentum uses decay-weighted least squares (WLS) on reconstructed weekly snapshots of that series. Significance gate: |t-statistic| >= 1.5.
- Prediction bands use the t-distribution with n-2 degrees of freedom, converging to +/- 1.96 sigma as data grows.