Methodology
How we calculate prices.
We say “real prices, no bamboozling” on the homepage — this page is the unglamorous version of what that actually means. If you're going to trust a number on this site to inform a purchase, you should know exactly where it came from.
Where the data comes from
Every price on CardPricer is derived from publicly observable marketplace activity — we do not estimate, simulate, or fabricate prices. If there's no recent comp, we say so.
- On-chain sales (Collector Crypt, Magic Eden) — USDC-settled prints with Solscan audit links. These are our highest-trust comps.
- Sports card market data — per-grade prices and sales pace are sourced from SportsCardsPro, which compiles them from completed marketplace sales. We snapshot these daily to build our own price history.
- TCG aggregators — Scryfall (Magic), Pokémon TCG API / TCGdex (Pokémon), YGOPRODeck (Yu-Gi-Oh), and OPTCG API (One Piece) for catalog data and prices tagged as
quote, not sold prints. Card scans and data are © their respective publishers; CardPricer is not produced by or endorsed by them. - eBay — Marketplace Insights sold data when available; active asks from Browse are stored separately as
listingobservations so we never confuse an ask with a sale.
PWCC, Goldin, COMC, and TCGplayer sold feeds are on the roadmap. Each comp row records its source and observation_type so the provenance panel can show exactly what you're looking at.
How a card gets a price
- Listings are pulled. A scheduled job queries eBay for a tracked search (e.g. “Luka Doncic Prizm”) and stores raw listings.
- Listings are normalized. Each listing is matched to a card row by year, set, card number, and grade. Listings that can't be confidently matched are dropped rather than guessed.
- Current price = recent observed average. The card's
current_priceis the mean of the most recent qualifying comps for that exact card and grade. Outliers outside a sane band are excluded. - Changes are computed against history. The 7-day and 30-day price changes compare today's rolling average to the rolling average from N days ago. No marketing fluff.
How fresh the data is
The price refresh job runs daily. Hover any sparkline to see the most recent 30-day window of comps for an asset. If a card hasn't had a sale in a while, the sparkline will be flat — that's the truth, not a bug.
On a card detail page, you can also see live (active) listings on the right. Those are asks, not sales — we mark each listing with a delta vs our mid-market so you can spot obvious overpricing or genuine deals at a glance.
What “market cap” means here
We use two distinct numbers and we name them honestly:
- Listed value =
Σ current_priceacross every card we track in a category. It is the size of the bid we currently observe — not a true market capitalization, because we don't yet ingest population (PSA / BGS / SGC pop counts) for every card. - 30D notional volume =
Σ price × sales_volume_30d. The dollars that actually changed hands in the last 30 days — closer to a real-economy “turnover” metric. - True market cap =
Σ population × price. We are actively building toward this — pop-report ingestion is on the roadmap. When it ships, the headline number on each player folder and category view will use this formula; listed value and 30D volume stay as supporting metrics.
What we don't do
- We don't accept payment to surface, hide, or boost any card or seller. There are no paid placements on deal lists or in search results.
- We don't set or recommend prices. We report the prices the market is paying.
- We don't guarantee that any individual card will sell at the displayed price. Comps are a baseline, not a quote.
What we do make money from
CardPricer is free and ad-free. When you click an outbound link to eBay from a deal list, a card detail page, or a player profile, that link includes our eBay Partner Network ID. If you end up buying through that link, eBay pays us a small commission at no extra cost to you.
That's the entire revenue model right now. Critically, the commission does not depend on what you buy or who from — so we have no incentive to push you toward any particular listing. See our affiliate disclosure for the full version.
Use the data in your own tools
Every number on this site is available over a free public API. The same provenance, confidence scoring, and comp breakdowns that power the front end are exposed at /api/v1/* with open CORS and a generous anonymous rate limit. No signup required to start.
Spot a wrong price?
Bad data on a comp-driven site is inevitable — eBay listings include misgrades, counterfeits, and the occasional wildly-priced auction. If you notice something off, email hello@cardpricer.app with the URL and we'll investigate.
Next
Try the search.
The fastest way to see what we mean is to type a name into the asset search.
Open the terminal