Both sides of the market
What a card sells for. And what it buys for.
Every card has two prices. Almost every card API publishes one of them. TCGGraph carries the dealer's bid next to their asking price on the same object, in the same shape, with the same daily history — so you can answer what a collection is worth to sell, not just what it would cost to rebuild.
- 61,671
- Cards with a dealer bid
- 80,758
- Buylist quotes held
- 3.8×
- Swing in bid across price bands
- Daily
- Bid refresh, with history
The problem
Retail tells you what a card costs. It does not tell you what it is worth.
If you are valuing a collection, quoting a trade-in, pricing a bulk lot or marking a portfolio, the retail price is the wrong number. It is what someone would pay to acquire the card, and nobody in your flow is doing that. Your user wants to know what they can get for it.
The usual workaround is to take retail and apply a percentage. It feels reasonable and it is wrong nearly everywhere, because the discount is not a constant — it is a function of what the card is worth.
So the two-price problem is not solved by arithmetic. It is solved by carrying the second price.
curl -G "https://api.tcggraph.com/v1/cards/mtg_f6555d1f-d4c/prices" \
-d listType=buylist \
-H "Authorization: Bearer $TCGGRAPH_KEY"{
"prices": [
{
"source": "cardkingdom",
"listType": "retail",
"finish": "normal",
"currency": "USD",
"market": 24.99
},
{
"source": "cardkingdom",
"listType": "buylist",
"finish": "normal",
"currency": "USD",
"market": 13.50
}
]
}Measured, not assumed
Why a flat percentage is always wrong somewhere
Across 74,736 cards where we hold a dealer's bid and their own asking price, the bid runs at 14.5% of retail on the cheapest cards and 54.9% on the most expensive. Pick any single percentage and it is badly wrong at one end of your inventory.
| Retail price of the card | Cards measured | Average bid, as a share of retail |
|---|---|---|
| Under $1 | 29,811 | 14.5% |
| $1 – $5 | 22,551 | 33.6% |
| $5 – $20 | 14,504 | 48.9% |
| $20 – $100 | 6,488 | 53.1% |
| $100 – $500 | 1,046 | 54.1% |
| $500 and up | 336 | 54.9% |
A bulk common is worth a fraction of its sticker price to a dealer who has to sort, store and eventually shift it. A card someone is actively looking for is worth most of it. That is the whole shape of the trade, and it is invisible if you only hold one number.
Who this is for
Anyone whose user is selling rather than buying
Trade-in and buy counters
Game shops, conventions, pop-up buy desks
Quote a customer a number in seconds instead of thumbing through a binder and guessing. Offer a percentage of the real dealer bid rather than a percentage of retail, and your margin stops depending on which staff member happens to be on the counter.
Collection valuation
Collection trackers, insurance tools, estate valuation
A collection valued at retail is a number the owner can never actually realise. Showing both sides — what it would cost to buy and what it would fetch to sell — is the difference between a fantasy figure and a defensible one.
Bulk and lot pricing
Bulk buyers, liquidators, deck-out services
Sub-dollar cards clear at a seventh of retail while premium singles clear at over half. Pricing a mixed lot off a single blended percentage overpays on the bulk and underpays on the hits; per-card bids get the whole box right.
Sell-side portfolio tracking
Investment and portfolio apps
Track what a position is worth on exit, not on entry. A portfolio marked at retail overstates itself by roughly half at the top of the market and far more at the bottom, and users notice the moment they try to sell.
One parameter
Nothing to migrate, nothing to reconcile
Retail and buylist are separate rows with separate history, never blended into a single figure. Omitting the parameter returns retail, so nothing you have already built changes behaviour.
Because both sides sit on the same card object, the spread is a subtraction rather than a reconciliation job across two providers with two identifier schemes.
Buylist covers Magic: The Gathering today — 61,671 printings. Dealer bids are far scarcer than retail prices across the hobby, and we would rather name the game than inflate a coverage number.
{
card(id: "mtg_f6555d1f-d4c") {
name
prices {
source
listType
finish
currency
market
}
}
}Questions
Buylist, answered
Ship your card app this weekend
$19 a month for 25,000 credits, no sales call and no contract. Pick a plan and your first query runs in under a minute.