Overview

Weekly snapshots of all MTG sealed product data. Available as gzipped JSONL or Parquet.

Endpoints

MethodPathDescription
GET/api/dumpLatest release manifest
GET/api/dump/{table}JSONL stream (gzip)
GET/api/dump/{table}?format=parquetParquet download

Tables: products, sets, sales, tcg_snapshots, manapool_snapshots

Usage

# JSONL (auto-decompressed)
curl https://mtgsold.com/api/dump/sales

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

Schema

sets

ColumnType
set_idint
nametext
abbreviationtext
published_ondate

products

ColumnType
product_idint
set_idint
nametext
image_urltext
released_ondatetime
last_scraped_atdatetime
manapool_urltext

sales

ColumnType
idint
product_idint
order_datedatetime
purchase_pricereal
shipping_pricereal
quantityint
conditiontext
varianttext
languagetext
marketplacetext
sale_fingerprinttext

tcg_snapshots

ColumnType
product_idint
scrape_datedate
open_qtyint
close_qtyint
open_sellersint
close_sellersint
low_pricereal
market_pricereal
bins_jsonjson

bins_json structure: [{priceMin, priceMax, priceLabel, totalQuantity, sellerCount}]

manapool_snapshots

ColumnType
idint
product_idint
scraped_atdatetime
low_pricereal
market_pricereal
available_quantityint

Update Schedule

TableFrequency
salesWeekly (Mondays EST)
tcg_snapshotsDaily
manapool_snapshotsDaily
sets / productsOn new product discovery

Manifest Response

{
  "release_date": "2026-04-24",
  "generated_at": "2026-04-24T03:00:00Z",
  "tables": {
    "sales": {
      "jsonl_gz": "releases/2026-04-24/sales.jsonl.gz",
      "parquet": "releases/2026-04-24/sales.parquet",
      "endpoints": {
        "jsonl": "/api/dump/sales",
        "parquet": "/api/dump/sales?format=parquet"
      }
    }
  }
}

Errors

StatusCause
400Table name not in allowed list
404Wrong table name or no release yet

Responses are cacheable for 1 hour.