Interactive line chart comparing the rebased price index of 312 Magic: The Gathering sets since release, with search-to-highlight.
MTG price-pattern research · prototype
Is buying Magic cards actually a good investment?
Each line is one set: the average price of its tracked cards, indexed to 100 at first
coverage and plotted against days since release — so a $2 commons-heavy set and a $50 mythic-heavy
set land on the same scale. Search a set to pin it, or hover the chart to explore.
Since release
Calendar date
1y
3y
7y
All
Log
Linear
Buy at 1d
1mo
1y
5y
n = 274 sets
"Since release" aligns every set to a common day-0 origin regardless of when it actually released;
"Calendar date" plots the same lines against real time instead, so you can see how the whole market
moved during a given stretch (e.g. a slump hitting every set at once). Presale data (before release day)
is excluded entirely — the index only starts once a set is actually on shelves. Data on or after
2026-08-01 is excluded too: that's when this project's scraping ramped up, so coverage right at the
tail is uneven across sets (some caught up, some not) rather than a real market signal. Index = mean
price across every currently-tracked card in the set, rebased to 100 at the earliest day MTGStocks has
coverage (day 0 = release when available; noted per set otherwise). Price history before
2018-01-01 is excluded: MTGStocks bulk-onboarded its catalog on 2017-11-24, so anything earlier is
usually just one or two cards (often a Power Nine card standing in for the whole set) rather than real
set-wide coverage. Sets with fewer than 50 total cards (Signature Spellbooks, From the Vault, precon
singles, etc.) are excluded too — too small for "buy one of each" to mean much. Log-scale y-axis
by default since the spread runs from <1× to 45×. "Buy in at" rebases every line so 100
lands on whatever the price was that far after release instead of at day one — prior data stays
visible, just rescaled around the new anchor, so you can see what buying in later (missing the presale
spike, catching a dip) would actually have looked like. A buy-in choice is grayed out once it wouldn't
leave any room to see what happened afterward at the current zoom level. A set that hasn't reached the
chosen buy-in day yet is left out of that view entirely; a set that's simply too old to have data that
far back (MTGStocks didn't track it yet) stays visible and keeps its normal default anchor instead of
being force-rebased to a point with no record. "Sets released" narrows the whole chart to sets released
within the chosen years — drag either handle in to drop the oldest or newest sets. The bright line is the average of all
274 sets' own index values at each point in time — each set counts once, regardless of how many
cards it has or what they're worth, so a 50-card box set pulls exactly as hard as a 700-card core set.
274 of 370 pulled sets qualify; the rest have no matching MTGStocks catalog page, too little post-2018
data, too few cards, or nothing left once presale and post-8/1 data are excluded (Star Trek, The Hobbit).
Source pipeline: stage6_set_index.py.