TCG Price Movers & Spike Alerts - Pokemon, Magic, Cardmarket avatar

TCG Price Movers & Spike Alerts - Pokemon, Magic, Cardmarket

Pricing

from $18.50 / 1,000 per alert delivereds

Go to Apify Store
TCG Price Movers & Spike Alerts - Pokemon, Magic, Cardmarket

TCG Price Movers & Spike Alerts - Pokemon, Magic, Cardmarket

Trading cards actually moving on Cardmarket, or an alert when one on your watchlist moves. Pokemon, Magic, Yu-Gi-Oh and 16 more games, read from Cardmarket's own daily price files.

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

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

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 on your own watchlist moves. Pokémon, Magic, Yu-Gi-Oh!, Lorcana, One Piece and sixteen more games. One row per card: 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 card 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.

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.
  • 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 card variant that moved. A riser:

{
"game": "Pokémon",
"cardName": "Ash's Pikachu [Iron Tail | Thunderbolt]",
"idProduct": 778123,
"expansionId": 5432,
"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.

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 card'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 card 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 card 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 card 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 card 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 cards are kept - the ones a move actually matters on. A watchlist of names is always well under it.
  • 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 card that moved since the last run (alerts mode)
Price mover$0.00499A card 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
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
includeFoilbooleantruePrice foil variants as their own rows
requireCorroborationbooleantrueOnly report moves every average and the live offers agree on
maxWatchedinteger5000Cap on remembered cards 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}'

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?

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 TCG Price Arbitrage tool.
  • Averages are of sales that happened. A card nobody traded in 30 days has no avg30, and it cannot be judged a mover - it is skipped rather than guessed at.
  • 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.
  • Sealed products are not covered here; this reads the singles catalog.

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? Not yet. Ask if you want it - the same files carry a sealed catalog.

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 Price GuideThe full daily price table for a game - every card, every average
Cardmarket Deal FinderLive offers priced under a card's own trend, condition-aware
TCG Price ArbitrageThe same card priced on Cardmarket (EU) against TCGplayer (US)

Which one do I want? This actor tells you what changed. The Price Guide gives you everything, priced. The Deal Finder 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, sealed products? Open an issue on the Issues tab with the run ID, or write to contact@lowlanddata.com. Reports get read the same day.