Product Page Upgrade + Supply Data Pipeline Rebuild


Product pages got a big update this week, and the supply data pipeline underneath them got fully rebuilt. Here’s what landed.

New product page features

Each product page now opens with a stats bar. Used to be you had to scroll through a chart to find the current price or figure out how many sellers were still active — now it’s just there:

Market Price $119.00
14d Change
Last Sale $116.50 Apr 21
Active Sellers 12
Sold Yesterday 3
Net Supply Δ (today)
New Listings (today)
OOP Risk (90d) ~38d to OOP

The price and volume chart picked up tabbed time ranges — 7D, 30D, 90D, and ALL — so you can actually zoom in on what’s happening this week versus the full history:

Price & Volume History

There’s also a day-of-week breakdown showing which days have historically had lower average prices. Useful if you’re not in a rush and want to time a buy:

Best Time to Buy

Su
$116 18
Mo
$115 22
Tu
$112 19
We
$116 25
Th
$117 21
Fr
$120 30
Sa
$118 27
↓ Buy on Tu (lowest avg) ↑ Avoid Fr (highest avg)

And a set trajectory chart that plots this set’s price movement against similar sets at the same point in their lifecycle. Correlation is Pearson — each peer shows its r-value so you can gauge how much weight the comparison is actually worth:

Set Trajectory vs Similar Sets

BRO This set bro The Brothers' War r=0.91 mom March of the Machine r=0.78

Supply data is normalizing

Seller counts, price ladders, and market price snapshots may lag by a day or two while the new pipeline gets its footing. This is expected — the underlying scraper is running, data just needs a short window to accumulate and stabilize.

Sales data is unaffected. Revenue numbers, price history, and velocity figures are all sourced from a separate pipeline and are current.

Data dump API changes

If you pull from /api/dump, two things changed.

New tables: tcg_snapshots and manapool_snapshots are now in the dump alongside the existing products, sets, and sales tables. The listings table is retired.

tcg_snapshots is a daily supply snapshot per product — open/close inventory, seller counts, low price, market price, and a full price-bin ladder:

FieldDescription
product_idLinks to the products table
scrape_dateDate of the snapshot (YYYY-MM-DD)
open_qty / close_qtyTotal quantity listed at start and end of day
open_sellers / close_sellersDistinct seller counts at start and end of day
low_priceLowest listed price that day
market_priceTCGPlayer market price
bins_jsonJSON array of price bins — each with priceMin, priceMax, priceLabel, totalQuantity, sellerCount

Parquet format: All tables are now available as Parquet (Snappy-compressed) alongside JSONL. Add ?format=parquet to any table endpoint:

curl -o tcg_snapshots.parquet "https://mtgsold.com/api/dump/tcg_snapshots?format=parquet"

Full schema and endpoint reference in the Data Access FAQ.

Dark mode

It’s here, it works, it respects your system settings. Hit the button in the header if you want to flip it manually.