Cardmarket Scraper - Pokemon & Magic Price Spike Alerts avatar

Cardmarket Scraper - Pokemon & Magic Price Spike Alerts

Pricing

from $18.50 / 1,000 per alert delivereds

Go to Apify Store
Cardmarket Scraper - Pokemon & Magic Price Spike Alerts

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. Corroborated moves only, 21 games.

Pricing

from $18.50 / 1,000 per alert delivereds

Rating

0.0

(0)

Developer

Lowland Data

Lowland Data

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

5 days ago

Last modified

Share

Pokemon Card Price Tracker & Spike Alerts - Cardmarket

Finds the trading cards whose price is actually moving on Cardmarket, Europe's biggest card marketplace - and, if you want, alerts you when a card or a booster box on your own watchlist moves. Pokémon, Magic, Yu-Gi-Oh!, Lorcana, One Piece and sixteen more games. One row per product: what it costs today, what it moved from, the percentage, and the daily, weekly and monthly averages behind it.

Live health record: lowlanddata.com/status/tcg-price-movers - 30-day success rate and daily canary results, failures included. Full input/output reference: tool page.

No scraping is involved: it reads the price-guide files Cardmarket itself publishes every day. That is why a run finishes in under a minute across a whole game, never breaks on a site redesign, and never touches a seller - there is no personal data in the source or in the output.

Quick start (30 seconds, no keys needed)

  1. Hit Start with the prefilled settings: Pokémon, gainers, cards over €2, moves of 15% or more. You get today's biggest risers, largest first.
  2. Change the game, the direction (gainers, losers or both), or add names to narrow it to what you collect.
  3. To be told rather than to look: set mode to alerts, add a daily schedule, and you get a row only when one of your cards actually moves. Set Products to sealed in alerts mode to watch booster boxes, elite trainer boxes and tins.

Who uses this

  • Collectors and investors watch a set of names (cardNames: ["charizard", "umbreon"]) and get told when one spikes, instead of checking pages by hand.
  • Sealed investors put booster boxes and elite trainer boxes on an alerts watch (mode: alerts, productType: sealed) and get told when a box's price moves.
  • Sellers watch the losers list for the game they stock, because a card sliding 30% is inventory to move before it slides further.
  • Traders run gainers on Pokémon every morning and read the top twenty as a market briefing.
  • Newsletter and content people take the weekly movers as ready-made material - the rows are already ranked and sourced.
  • Shops pricing a bulk buy-in run direction: both over an expansion to see which cards in a collection are drifting.

What you get

One JSON item per product variant that moved. A riser:

{
"game": "Pokémon",
"cardName": "Ash's Pikachu [Iron Tail | Thunderbolt]",
"productType": "card",
"category": "Pokémon Single",
"idProduct": 778123,
"expansionId": 5432,
"expansionName": "Scarlet & Violet - 151",
"variant": "regular",
"priceEur": 207.65,
"movedFromEur": 46.47,
"movedToEur": 162.56,
"changePct": 249.8,
"direction": "up",
"comparisonWindow": "7-day vs 30-day average",
"vs30DayPct": 346.8,
"trendEur": 207.65,
"lowEur": 149.9,
"avg1DayEur": 198.0,
"avg7DayEur": 162.56,
"avg30DayEur": 46.47,
"currency": "EUR",
"priceGuideDate": "2026-09-07",
"productUrl": "https://www.cardmarket.com/en/Pokemon/Products?idProduct=778123"
}

Read that row as a ladder: the card averaged €46 over the month, €163 over the past week, and trades at €208 today - and the cheapest copy on sale is already €149.90. Everything agrees, which is what makes it a real move rather than a blip.

Sealed products: alerts mode only

Booster boxes, elite trainer boxes, boosters, tins and box sets come back in the same shape, with productType: "sealed" and Cardmarket's own category (a Pokémon booster box is a Pokémon Display). But Cardmarket publishes no 1, 7 or 30-day sale averages for sealed products, only today's trend and the lowest offer: on the 2026-09-14 guide, none of the 2,914 Pokémon sealed products over €20 had one. So:

  • alerts mode works on sealed products. It compares today's trend with the price the monitor recorded last time, which needs no averages.
  • movers mode cannot rank them. A movers run on productType: sealed is refused before it starts, with this reason. A movers run on both returns card movers and says so in its status.

Sealed products have no foil prices either, so they only ever appear as the regular variant.

What priceEur is, and what you will see when you click through

Being straight about this, because it surprises people: the number on the Cardmarket page will usually not be the number in your row, and neither is wrong.

productUrl opens the product's own page, which leads with From - the cheapest copy on sale right now. This actor leads with priceEur, Cardmarket's trend price: what the product has actually been selling for. They drift apart in both directions, often by a lot:

Card (2026-09-09 guide)priceEur (trend)Cheapest offer on the page
Sobble (S-P 146)€53.84€29.88
Celebratory Fanfare (254)€230.12€400.00

If you want the number the page shows, use lowEur - that is the same figure as From, to the cent. priceEur answers "what does this go for", lowEur answers "what would one cost me today".

The offers on that page also mix conditions, languages and graded slabs - one ordinary card runs from a €29.88 near-mint raw copy to a €999 PSA 10 - and Cardmarket's averages are computed across that mix. That is the same blending that makes the corroboration test necessary, and it is why a single price for a card is a blend rather than a quote for one specific copy.

A faller looks the same with the ladder inverted:

{
"cardName": "Charizard [Energy Burn | Fire Spin]",
"variant": "regular",
"priceEur": 57.27,
"avg30DayEur": 344.39,
"changePct": -83.4,
"direction": "down",
"vs30DayPct": -83.4,
"lowEur": 54.0
}

And in alerts mode, a row arrives only when a product you are watching has moved since the monitor last looked:

{
"cardName": "Umbreon Gold Star [Dark Ray | Feint Attack]",
"priceEur": 6303.25,
"movedFromEur": 4412.27,
"movedToEur": 6303.25,
"changePct": 42.9,
"direction": "up",
"comparisonWindow": "since 2026-09-07",
"isAlert": true,
"previousSeenAt": "2026-09-07T06:00:00.000Z"
}

The honest part: why most "movers" lists are noise

Cardmarket's averages are averages of whatever actually sold in the window. A card that trades a few times a month can swing 20% on nothing more than one sale being a German copy in played condition. Measured on the 2026-09-07 Pokémon guide: about half of every priced card in the catalogue "moved" more than 15% on any window, at any price floor. A tool that reports those is reporting nothing.

So by default this actor only reports a corroborated move, which means all of the following point the same way:

  • the 30-day average, the 7-day average and today's trend form a ladder in the same direction;
  • the cheapest live offer has already repriced to match - sellers have noticed too.

That keeps roughly one card in ten, and they are the ones a person would agree are moving. Turn requireCorroboration off if you want the raw comparison, and expect a much noisier list.

Two more guards worth knowing:

  • minPriceEur (default €2) - a 2-cent common going to 4 cents is a 100% move and means nothing. The floor is what keeps bulk out.
  • Foils are separate rows. A foil and its regular print are different products with different prices, and they often move independently.

How change detection works (alerts mode)

  • Where the memory lives. A named key-value store on your account (stateStoreName). It holds the last price this monitor reported per product variant. There is no server on my side holding your watchlist.
  • What the first run does. It records today's prices for everything passing your filters and pushes nothing. From the next run you are told only about movement.
  • One price guide a day. Cardmarket publishes a new file each morning. If you run the monitor twice in one day, the second run says so and charges nothing for the comparison, rather than pretending prices stood still.
  • What the memory can hold. maxWatched (default 5,000 variants). When a whole game overflows it, the most valuable products are kept - the ones a move actually matters on. A watchlist of names is always well under it.
  • Cards and sealed are separate watches. A sealed watch and a cards watch on the same game keep separate memories; a watch you set up before sealed products existed keeps its baseline.
  • Starting over. resetState: true forgets the recorded prices and takes a fresh baseline.

What this costs

Pay per outcome.

EventPriceWhen it is charged
Spike alert$0.0199 (from $0.0185 on paid plans)A watched product that moved since the last run (alerts mode)
Price mover$0.00499A product in a movers list
Actor start$0.005Per run, whatever it finds

Live prices are always the ones on this page's Pricing tab. A worked example: a daily watchlist of 200 cards costs the actor start on a quiet day - about 15 cents a month - plus 2 cents per genuine move. A weekly top-50 movers digest costs about 25 cents a run. New Apify accounts come with free monthly platform credits.

Input reference

FieldTypeDefaultWhat it does
gamestringpokemonOne of 21 games on Cardmarket
productTypestringcardscards, sealed (booster boxes, ETBs, tins; alerts mode only) or both
modestringmoversmovers ranks what is moving now; alerts watches for future moves
directionstringgainersgainers, losers or both
windowstring7dWhich averages the headline change compares (1d, 7d, 30d)
minChangePctnumber15Ignore smaller moves
minPriceEurnumber2Price floor - the main noise filter
maxPriceEurnumbernoneOptional ceiling
cardNamesstring[]emptyPartial names to watch; empty scans the whole game
expansionIdsnumber[]emptyRestrict to given expansions. Every row names its set in expansionName.
includeFoilbooleantruePrice foil variants as their own rows
requireCorroborationbooleantrueOnly report moves every average and the live offers agree on
maxWatchedinteger5000Cap on remembered products in alerts mode
maxItemsinteger200Stop after this many rows, biggest movers first

Scheduling and API use

curl -X POST "https://api.apify.com/v2/acts/lowlanddata~tcg-price-movers/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"game":"pokemon","mode":"alerts","cardNames":["charizard","umbreon"],"minChangePct":10}'

A daily watch on booster boxes over €50 (schedule it; the first run records the baseline):

curl -X POST "https://api.apify.com/v2/acts/lowlanddata~tcg-price-movers/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"game":"pokemon","mode":"alerts","productType":"sealed","cardNames":["booster box"],"direction":"both","minPriceEur":50,"minChangePct":10}'

Pull only the risers from a dataset:

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&filter=direction%3Dup"

In n8n or Make: Schedule (daily, after 06:00 CET when the new guide is out) -> this actor in alerts mode -> Telegram or Slack.

Use it with AI agents (MCP)

Every tool here doubles as an MCP endpoint: tcg-price-movers/api/mcp. A prompt that works as-is:

Which Pokémon cards over 20 euros rose the most on Cardmarket this week,
and what are they trading at now?

The whole family in one connector. Every tool in the TCG Prices bundle shares one endpoint:

https://mcp.apify.com?actors=lowlanddata/cardmarket-price-guide,lowlanddata/cardmarket-deal-finder,lowlanddata/tcg-price-arbitrage,lowlanddata/tcg-price-movers

Sources and honest coverage notes

  • Cardmarket's own daily price guide and product catalog, published as public files after the API closed to new applicants. One file per game, read directly - no login, no scraping, no rate limit.
  • Prices are Cardmarket's, so they are European sales in euros. They do not track TCGplayer or eBay, and a card can move in the US without moving here. That difference is the point of the Pokemon Card Arbitrage tool.
  • Averages are of sales that happened. A product nobody traded in 30 days has no avg30, and it cannot be judged a mover - it is skipped rather than guessed at. Sealed products carry no averages at all, which is why they are watched in alerts mode.
  • One guide per day, published overnight CET. Running more often than daily cannot show new movement.
  • Condition and language are not separated. Cardmarket's averages mix them, which is exactly why the corroboration test exists. For sealed products, a sealed box and a resealed one are not separated either.

FAQ

Does it work on the first run? In movers mode, yes - the price guide carries its own 1, 7 and 30-day averages, so momentum needs no history. alerts mode needs one baseline run first.

Why is a card I know spiked missing? Most likely the corroboration test: if the trend jumped but the week and month have not followed, or the cheapest offer has not repriced, it is treated as a blip. Set requireCorroboration: false to see it anyway.

Can I watch just my collection? Put the names in cardNames (partial matches work) or restrict to expansionIds. Both together narrow it further.

Which window should I use? 7d for a weekly briefing, 30d for slower structural moves, 1d to catch something breaking today.

Does it cover sealed boxes? Yes, in alerts mode: set productType to sealed and schedule it daily. Cardmarket publishes no sale averages for sealed products, so they cannot appear in a movers list.

Is my watchlist private? It lives in a key-value store on your own Apify account. I never see it.

More tools from Lowland Data

ToolWhat it does
Cardmarket Scraper - card & sealed pricesEvery product in a game, priced daily: trend, low, and 1/7/30-day averages
Cardmarket Listings ScraperLive offers for a card: price, quantity, condition and seller country
Cardmarket RepricerFeed in your own stock and see which of your prices the market moved past
TCGplayer & Cardmarket ArbitrageThe same card priced in the EU against the US, with the spread

Which one do I want? This actor tells you what changed. The Price Guide gives you everything, priced; the Listings Scraper finds a copy to buy right now. Full catalogue: lowlanddata.com/catalogue.

Support

A card that should have shown up, a game you want added? Open an issue on the Issues tab with the run ID, or write to contact@lowlanddata.com. Reports get read the same day.

Working well for you? A rating on this page takes ten seconds and helps other buyers find it: it is also the clearest signal of what we should build next.