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:
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
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
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:
| Field | Description |
|---|---|
product_id | Links to the products table |
scrape_date | Date of the snapshot (YYYY-MM-DD) |
open_qty / close_qty | Total quantity listed at start and end of day |
open_sellers / close_sellers | Distinct seller counts at start and end of day |
low_price | Lowest listed price that day |
market_price | TCGPlayer market price |
bins_json | JSON 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.