Cardmarket Scraper - Pokemon & Magic Price Spike Alerts

Pokemon and Magic cards whose Cardmarket price is really moving, or an alert when a card or booster box on your watchlist moves.

Pokemon and Magic cards whose Cardmarket price is really moving, or an alert when a card or booster box on your watchlist moves. Corroborated moves only, 21 games.

$19.90 / 1,000 · 100.0% success over 26 public runs in the last 30 days.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
game string Which trading card game to scan. Pokemon is the busiest market on Cardmarket. pokemon
productType string Single cards, or the sealed products Cardmarket prices in the same daily guide: booster boxes (displays), boosters, elite trainer boxes, tins, box sets and more. cards
mode string Movers ranks the products moving right now and works on the very first run. Alerts remembers today’s prices and tells you only when one of yours moves later. movers
direction string Prices going up, going down, or both. gainers
window string Which pair of averages the headline change compares. 7d
minChangePct integer Ignore anything that moved less than this. 15
minPriceEur integer A 2-cent common doubling to 4 cents is a 100% move and means nothing. The floor is what keeps bulk out. 2
maxPriceEur integer Optional ceiling, for watching a budget bracket. -
cardNames array Partial names, one per line: charizard, umbreon, or for sealed products booster box, 151. Leave empty to scan the whole game. []
expansionIds array Cardmarket expansion ids, as they appear in the output rows. -
includeFoil boolean Foils are priced separately and often move on their own. Sealed products have no foil prices. True
requireCorroboration boolean Requires the 30-day average, the 7-day average and today’s trend to all point the same way, with the cheapest live offer already repriced. Without it, roughly half the catalogue looks like it is moving. True
maxWatched integer Caps the monitor memory. When a whole game overflows it, the most valuable products are kept. 5000
resetState boolean Forget the recorded prices and take a fresh baseline. False
stateStoreName string Named key-value store holding the prices this monitor last reported. tcg-movers-state
maxItems integer Stop after this many rows. Biggest movers come first. 200
reportFailures boolean When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. True

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

A real result row from a recent run:

{
  "avg1DayEur": 300,
  "avg30DayEur": 14.2,
  "avg7DayEur": 140.11,
  "cardName": "Celebratory Fanfare",
  "category": "Pokémon Single",
  "changePct": 886.7,
  "comparisonWindow": "7-day vs 30-day average",
  "currency": "EUR",
  "direction": "up",
  "expansionId": 3214,
  "expansionName": "SWSH Black Star Promos",
  "game": "Pokémon",
  "idProduct": 573615,
  "isAlert": false,
  "lowEur": 179,
  "movedFromEur": 14.2,
  "movedToEur": 140.11,
  "priceEur": 230.12,
  "priceGuideDate": "2026-10-04",
  "productType": "card",
  "productUrl": "https://www.cardmarket.com/en/Pokemon/Products?idProduct=573615",
  "trendEur": 230.12,
  "variant": "regular",
  "vs30DayPct": 1520.6
}
FieldTypeMeaning
game string Trading card game the row belongs to.
cardName string Card name as Cardmarket's catalog spells it, attacks included.
idProduct integer Cardmarket product id. Stable, and what productUrl links to.
expansionId ['integer', 'null'] Expansion id. Reusable as the expansionIds input.
expansionName ['string', 'null'] The set the expansion id refers to. Empty for the few games Cardmarket publishes no expansion index for, and for a set too new to have been harvested.
variant string regular or foil - they are priced separately and move separately.
priceEur ['number', 'null'] Cardmarket's trend price: what the card has been selling for. Not the cheapest copy on sale - that is lowEur, the figure the card page shows as From.
movedFromEur ['number', 'null'] The older of the two averages this row compares.
movedToEur ['number', 'null'] The newer of the two. Not the same as priceEur unless the window is the trend.
changePct number Move between them, in percent. Negative for a fall. Rows are sorted by its size.
direction string up or down. Filter on this.
comparisonWindow string Which two figures were compared, in words.
vs30DayPct ['number', 'null'] Today's trend against the 30-day average - the plain hot-or-not number.
trendEur ['number', 'null'] Cardmarket's own trend price.
lowEur ['number', 'null'] Cheapest live offer, the same figure the card page leads with as From. On a real rise the offers have already repriced.
avg1DayEur ['number', 'null'] Average of yesterday's sales. Absent when nothing sold.
avg7DayEur ['number', 'null'] Average of the last 7 days of sales.
avg30DayEur ['number', 'null'] Average of the last 30 days of sales.
currency string Always EUR: Cardmarket is a European marketplace.
priceGuideDate string Date of the price guide the row was read from. One per day.
productUrl ['string', 'null'] The card on Cardmarket. Null for the few games with no public path.
isAlert boolean True in alerts mode: the card moved since this monitor last looked.
previousSeenAt ['string', 'null'] Alerts mode only: when the previous price was recorded (ISO).

Health

100.0% success over 26 public runs in the last 30 days. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.

The history behind this tool

This tool answers what a source shows today. Its output also feeds a series recorded every day and kept: Trading card price history, daily, 21 games. A run gives you the current market; the series is the part that cannot be reconstructed afterwards, because the source overwrites it.