Cardmarket Scraper avatar

Cardmarket Scraper

Pricing

from $0.15 / 1,000 cards

Go to Apify Store
Cardmarket Scraper

Cardmarket Scraper

Daily EU trading card market prices from Cardmarket for 20 games. Trend price, lowest listing, 1/7/30-day averages and foil variants for both single cards and sealed product, with real set names and price movement since your last run.

Pricing

from $0.15 / 1,000 cards

Rating

0.0

(0)

Developer

Unfenced Group

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Cardmarket Scraper

Extract daily European market prices from Cardmarket for 20 trading card games, covering both single cards and sealed product, with trend price, lowest listing, 1/7/30-day averages, foil and holo variants, real set names, and price movement since your last run. No API key required.


Why this scraper?

🎮 20 games in one actor

Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Disney Lorcana, Digimon, Flesh and Blood, Star Wars: Unlimited, Dragon Ball Super, Riftbound and eleven more. Pick the game in the input rather than hunting for a separate actor per game.

📦 Sealed product, not just singles

Booster boxes, displays, elite trainer boxes, tins, theme decks, blisters and coins are priced alongside single cards. Set productType to sealed or all. Sealed is where the largest price movements happen and it is the part of the market most tools leave out.

🏷️ Real set names

Cardmarket's catalogue identifies sets by numeric ID only. This scraper resolves those IDs to readable expansion names, and to official three-letter set codes for Magic. You get "Obsidian Flames", not 1234.

📈 Full price history per card

Trend price, current lowest listing, and 1-day, 7-day and 30-day sale averages, for the regular printing and the foil or holo printing separately. Momentum percentages against the 7-day and 30-day averages are calculated for you.

🔁 Price movement between runs

Every record carries changeStatus (NEW, PRICE_UP, PRICE_DOWN, UNCHANGED), the previous trend price, and the percentage change. Schedule it daily and the output reads as a movement feed rather than a flat snapshot.

🇺🇸 EU versus US spread

For Magic, switch on includeUsPrices to add the US market price per card, converted to euros, and the percentage spread against the Cardmarket trend price. That is the cross-Atlantic arbitrage gap on a per-card basis. Printings with no US counterpart, such as Summer Magic and the 30th Anniversary set, are caught before they reach the output: the spread comes back null with a reason in usMatchConfidence rather than a false gap.

🔒 No seller data

This scraper collects no seller usernames, no seller locations, no ratings, and no personal data of any kind. It reads market-level price data only.


Input parameters

ParameterTypeDefaultDescription
gamestring"pokemon"Which trading card game to price. One of pokemon, magic, yugioh, onepiece, lorcana, digimon, fleshandblood, starwarsunlimited, dragonballsuper, riftbound, battlespiritssaga, finalfantasy, forceofwill, cardfightvanguard, weissschwarz, starwarsdestiny, worldofwarcraft, mylittlepony, dragoborne, thespoils.
searchQuerystring(empty)Case-insensitive filter on the product name. Leave empty for the whole game catalogue.
productTypestring"singles"singles, sealed, or all.
expansionNamesarray[]Keep only these expansions. Accepts the resolved set name, or the three-letter set code for Magic. Empty means all expansions.
priceMinEurinteger(empty)Keep products whose trend price is at least this many euros.
priceMaxEurinteger(empty)Keep products whose trend price is at most this many euros.
onlyPricedbooleantrueSkip products with no trend price in today's price guide.
includeUsPricesbooleanfalseAdd the US market price and EU/US spread. Magic only. Adds roughly a minute to the run.
sortBystring"trendDesc"trendDesc, trendAsc, momentum (biggest 7-day movers first), or name.
maxResultsinteger1000Maximum number of products to return.

Output schema

Every field below is present on every record. Fields Cardmarket does not publish for a given product are returned as null rather than omitted.

Always present

FieldTypeDescription
idProductintegerCardmarket's stable product ID. Use it as the primary key across runs.
namestringProduct name as Cardmarket publishes it.
gamestringDisplay name of the trading card game, for example Pokémon.
gameSlugstringMachine-readable game key matching the game input value.
productTypestringsingle for a card, sealed for boxes, displays, tins and similar.
categoryIdintegerCardmarket's product category ID.
categoryNamestringCategory label, for example Pokémon Display or Magic Single.
idExpansionintegerCardmarket's expansion (set) ID.
expansionNamestring | nullResolved set name. Null for a small number of promo and one-off expansions Cardmarket does not name in its published files.
expansionCodestring | nullOfficial three-letter set code. Populated for Magic only; null for other games.
expansionSourcestring | nullHow the set name was resolved: atlas or catalogue.
dateAddedstring | nullISO 8601 date the product entered Cardmarket's catalogue.
currencystringAlways EUR. Cardmarket is a euro marketplace.
priceGuideDatestringDate of the price guide the figures come from, YYYY-MM-DD.
trendEurnumber | nullCardmarket's trend price, the headline market value.
lowEurnumber | nullLowest current listing price.
avgEurnumber | nullAll-time average sale price.
avg1DayEurnumber | nullAverage sale price over the last day (null when there were no sales).
avg7DayEurnumber | nullAverage sale price over the last 7 days.
avg30DayEurnumber | nullAverage sale price over the last 30 days.
variantTypestring | nullfoil or holo, naming which premium printing the variant fields describe.
variantTrendEurnumber | nullTrend price of the foil or holo printing.
variantLowEurnumber | nullLowest listing for the foil or holo printing.
variantAvgEurnumber | nullAll-time average for the foil or holo printing.
variantAvg1DayEurnumber | null1-day average for the foil or holo printing.
variantAvg7DayEurnumber | null7-day average for the foil or holo printing.
variantAvg30DayEurnumber | null30-day average for the foil or holo printing.
momentum7Pctnumber | nullTrend price against the 7-day average, as a percentage. Positive means rising.
momentum30Pctnumber | nullTrend price against the 30-day average, as a percentage.
trendVsLowPctnumber | nullHow far the cheapest listing sits below the trend price, as a percentage.
variantPremiumPctnumber | nullPremium of the foil or holo printing over the regular one, as a percentage.
searchUrlstringCardmarket search link that resolves to this product.
sourcestringAlways cardmarket.com.
scrapedAtstringISO 8601 timestamp of the run.
contentHashstringHash of the price fields, used to detect change between runs.
changeStatusstringNEW, PRICE_UP, PRICE_DOWN, UPDATED or UNCHANGED versus your previous run.
previousTrendEurnumber | nullTrend price recorded on your previous run. Null on first sight.
trendChangePctnumber | nullPercentage change in trend price since your previous run.

With includeUsPrices: true (Magic only)

FieldTypeDescription
usMarketUsdnumber | nullUS market price for the regular printing, in dollars.
usMarketFoilUsdnumber | nullUS market price for the foil printing, in dollars.
usMarketEurnumber | nullUS market price converted to euros at the day's European Central Bank rate.
euUsSpreadPctnumber | nullUS price against the Cardmarket trend price, as a percentage. Positive means the card is cheaper in Europe. Returned as null when the US match is not reliable, so a bad match never reads as an arbitrage gap.
usMatchConfidencestring | nullok when the two prices are comparable, no_price when no US price was found, price_ratio_implausible when one market sits below a tenth of the other and the match was rejected. Null on runs without includeUsPrices.

Example record

{
"idProduct": 5395,
"name": "Lightning Bolt",
"game": "Magic: The Gathering",
"gameSlug": "magic",
"productType": "single",
"categoryId": 1,
"categoryName": "Magic Single",
"idExpansion": 1,
"expansionName": "Limited Edition Alpha",
"expansionCode": "LEA",
"expansionSource": "atlas",
"dateAdded": "2007-01-01T00:00:00Z",
"currency": "EUR",
"priceGuideDate": "2026-09-04",
"trendEur": 409.41,
"lowEur": 379.00,
"avgEur": 421.86,
"avg1DayEur": 399.00,
"avg7DayEur": 415.20,
"avg30DayEur": 418.75,
"variantType": "foil",
"variantTrendEur": null,
"variantLowEur": null,
"variantAvgEur": null,
"variantAvg1DayEur": null,
"variantAvg7DayEur": null,
"variantAvg30DayEur": null,
"momentum7Pct": -1.4,
"momentum30Pct": -2.2,
"trendVsLowPct": -7.4,
"variantPremiumPct": null,
"usMarketUsd": 626.67,
"usMarketFoilUsd": null,
"usMarketEur": 539.20,
"euUsSpreadPct": 31.7,
"usMatchConfidence": "ok",
"searchUrl": "https://www.cardmarket.com/en/Magic/Products/Search?searchString=Lightning%20Bolt",
"source": "cardmarket.com",
"scrapedAt": "2026-09-04T19:32:15.672Z",
"contentHash": "ffd387447a0bbf27",
"changeStatus": "PRICE_DOWN",
"previousTrendEur": 415.00,
"trendChangePct": -1.3
}

Examples

Every priced Pokémon card, most valuable first:

{
"game": "pokemon",
"productType": "singles",
"sortBy": "trendDesc",
"maxResults": 5000
}

Sealed Pokémon product above 100 euros, for reseller sourcing:

{
"game": "pokemon",
"productType": "sealed",
"priceMinEur": 100,
"sortBy": "trendDesc",
"maxResults": 1000
}

Magic cards with the EU/US spread, for cross-market arbitrage:

{
"game": "magic",
"productType": "singles",
"priceMinEur": 20,
"includeUsPrices": true,
"sortBy": "trendDesc",
"maxResults": 2000
}

Daily movement feed for one Lorcana set:

{
"game": "lorcana",
"expansionNames": ["The First Chapter"],
"productType": "all",
"sortBy": "momentum",
"maxResults": 1000
}

💰 Pricing

$0.19 per 1,000 results — you only pay for products actually returned. Failed retries are never charged.

ResultsCost
100~$0.02
1,000~$0.19
10,000~$1.90
100,000~$19.00

Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Subscription tiers lower the rate further, down to $0.15 per 1,000 at the Gold tier. Use the Max results cap in the input to control your spend exactly.


Performance

Run sizeTypical time
1,000 resultsunder 1 minute
10,000 results1–2 minutes
100,000 results3–5 minutes

Adding includeUsPrices costs roughly one extra minute per run, regardless of result count.


Known limitations

  • A small share of expansions carry no resolvable set name, mostly promotional and one-off sets. Coverage runs from about 86% to 98% of cards depending on the game. Where the name cannot be resolved, expansionName is null and idExpansion is still returned rather than a guess being made.
  • expansionCode is populated for Magic only. Other games have no official short code in the published data.
  • Cardmarket publishes no product-URL mapping in its catalogue files, so searchUrl is a search link rather than a direct product link. It resolves to the product reliably.
  • Some games publish only a trend figure for the foil printing and no foil averages. The variant average fields are null in those cases.
  • Prices refresh once per day, in the early hours European time. Running more often than daily returns the same figures.
  • The US market comparison covers Magic only, and reaches about 70% of priced Magic singles. Coverage is thinner at the top of the market: roughly 75% of cards between 20 and 100 euros carry a US price, falling to about 26% above 1,000 euros, because US market data is sparse for the rarest cards. Cards without a US price return null in those fields rather than an estimate. Where a US price exists but the two markets are more than a factor of ten apart, the match is treated as unreliable: euUsSpreadPct is null and usMatchConfidence says why. This affects under 1% of priced Magic singles above 20 euros.

Technical details

  • Source: cardmarket.com — European trading card market prices
  • Coverage: 20 games, single cards and sealed product, all expansions
  • Refresh: daily price guide, dated in every record via priceGuideDate
  • Retry: automatic retry on network errors with exponential backoff

Rate this actor

If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.


Need a custom scraper?

Unfenced Group builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

Get in touch: www.unfencedgroup.nl