Cardmarket Listings Scraper — Offers, Shops & Prices avatar

Cardmarket Listings Scraper — Offers, Shops & Prices

Pricing

from $2.19 / 1,000 cardmarket listings

Go to Apify Store
Cardmarket Listings Scraper — Offers, Shops & Prices

Cardmarket Listings Scraper — Offers, Shops & Prices

Scrape Cardmarket listings by product URL, seller shop, or keyword — a Cardmarket API alternative for EU TCG shops. Export seller, condition, language, quantity, and EUR price as JSON.

Pricing

from $2.19 / 1,000 cardmarket listings

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Disclaimer: Unofficial tool for publicly accessible Cardmarket listings. Cardmarket and related names are trademarks of Sammelkartenmarkt GmbH und Co. KG. Not affiliated with, sponsored by, or endorsed by Cardmarket. For informational, research, aggregation, and market-intelligence use only. Respect applicable terms of use and law.

Cardmarket listings scraper for Europe's TCG marketplace — Pokémon, Magic: The Gathering, Yu-Gi-Oh!, Lorcana, One Piece, and more. Use it as a Cardmarket scraper, Cardmarket API alternative, and Cardmarket seller shop export: paste a product URL, walk a seller username, or search by keyword. Dataset rows are one seller offer eachEUR price, condition, language, quantity, foil / signed flags, and seller type. HTTP-first with Cloudflare fallback — no login. Call from Python, Node.js, cURL, or Apify MCP.

Built for EU TCG shops, weekly restock pricing, seller intelligence, and scheduled listing monitors.

Collectibles suite

ActorFocus
TCGPlayer Listings ScraperUS TCG seller listings and shops
Cardmarket Listings Scraper ◄── you are hereEU TCG seller offers and shops
Fanatics Collect ScraperWeekly / Premier auctions, Buy Now, sold comps
Goldin Auctions ScraperHigh-end sports cards / TCG hammer + sold
PSA Population Report ScraperSet-level PSA pop census and gem rate
Whatnot Listings ScraperUS live-commerce listings and shops
PriceCharting ScraperGuide prices for games, TCG, and comics
eBay Active Listings ScraperLive eBay BIN / auction asking prices
eBay Sold Listings ScraperCompleted eBay sold comps
eBay Sold Price IntelligenceRecommended price and demand score

When to use this Actor

  • You need a Cardmarket scraper / Cardmarket listings scraper that returns flat JSON rows
  • You want product URL arrays, seller shop walks, and keyword search in one run
  • You track condition, language, seller country, and EUR offer prices
  • You scrape Cardmarket with Python, Node.js, or MCP and export JSON / CSV
  • You run a daily monitor and only want new listing IDs billed

When not to use this Actor

Key features

  • Product URLs — scrape every seller offer on a card page (not a 10-row default)
  • Seller shop inventory — walk /Users/{handle}/Offers with optional shopQuery
  • Keyword search — find matching products, then scrape their offers
  • Leader filters — min condition, language, seller country, seller type, signed / altered / first-ed / playset / foil
  • EUR parsing85,00 € becomes 85.0 with currency: EUR
  • Monitor mode — named Key-Value store of seen listing IDs; later scheduled runs emit only new rows
  • Deduplicated IDs across keywords, shops, and URLs
  • MCP / AI ready — call from assistants via Apify MCP

Use cases

Use caseWhat you get
Pokémon / MTG restockCurrent Cardmarket offers for a SKU, condition band, and seller country
Seller shop dumpActive inventory for a handle; shopQuery to keep one card / set
Arbitrage watchmonitorMode on a product URL; only new offer IDs billed
EU vs US compsCardmarket live rows, then eBay sold listings for the same query
Shop intelligenceProfessional vs private sellers, country, sales count, comments

Quick start

Product URL (all offers on the page):

{
"startUrls": [
{ "url": "https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200" }
],
"maxItems": 100,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Seller shop walk (omit shopQuery for full inventory, subject to Cardmarket's ~300-hit cap):

{
"sellerUsernames": ["CardGameCorner"],
"game": "Pokemon",
"maxItems": 100,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Add "shopQuery": "charizard" to keep only shop listings matching that name.

Keyword search + monitor:

{
"searchKeywords": ["charizard"],
"game": "Pokemon",
"maxItems": 150,
"monitorMode": true,
"monitorStoreName": "cardmarket-charizard",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Input parameters

ParameterTypeDefaultDescription
searchKeywordsArrayProduct search queries (required if no URLs/sellers)
sellerUsernamesArrayShop handles to walk (game-scoped)
shopQueryStringFilter each seller shop by card name. Empty = full inventory
startUrlsArrayCardmarket product, seller, or search URLs
gameStringPokemonCatalog for keywords and usernames
localeStringenen / de / fr / es / it
minConditionStringanyMT NM EX GD LP PL PO — keep this grade or better
languageStringanyPrint language filter
sellerCountryStringanyISO seller country
sellerTypeStringanyprivate, commercial, professional, powerseller
sortStringbest_matchprice_asc / price_desc / name_asc for search and shops
minPrice / maxPriceNumberEUR price band
isFoil / isReverseHolo / isSigned / isAltered / isFirstEd / isPlaysetBooleanfalseExtra flags
maxItemsInteger100Max rows (0 = unlimited subject to maxPages)
maxPagesInteger20Pagination safety cap
monitorModeBooleanfalseEmit only new IDs vs previous run
monitorStoreNameStringcardmarket-listings-monitorNamed KV store for seen IDs
resetMonitorStateBooleanfalseWipe the seen-ID cache
proxyConfigurationObjectRESIDENTIALDatacenter IPs usually hit Cloudflare

Output format

Each dataset item is one seller offer (recordType: listing).

FieldTypeDescription
recordTypeStringlisting
listingId / idStringCardmarket article / stock row id
productIdStringProduct id from the card page
game / localeStringCatalog and site language
cardNameStringCard title
expansionStringSet name
rarityStringWhen present on shop rows
collectorNumberStringe.g. 200 or FST 220
condition / conditionNameStringNM plus full label Near Mint
languageStringPrint language
isFoil / isReverseHolo / isSigned / isAltered / isFirstEd / isPlaysetBooleanExtra flags
quantityIntegerAvailable copies
priceNumberEUR major units (85,00 €85.0)
currencyStringEUR
sellerUsername / sellerUrlStringSeller handle and shop URL
sellerTypeStringprivate, professional, or powerseller
sellerCountryStringItem location
sellerSalesIntegerSales count from the offer row
sellerCommentStringSeller note on the listing
productUrl / urlStringPublic product URL
sourceStringproduct_url, seller_shop, or search
searchQueryStringKeyword or handle that produced the row
scrapedAtStringISO scrape time

Example listing row:

{
"recordType": "listing",
"source": "product_url",
"listingId": "2135330240",
"game": "Pokemon",
"cardName": "Blastoise ex (MEW 200)",
"expansion": "151",
"collectorNumber": "200",
"condition": "PL",
"language": "German",
"quantity": 1,
"price": 85.0,
"currency": "EUR",
"sellerUsername": "Jayzcards17",
"sellerType": "private",
"sellerCountry": "Austria",
"productUrl": "https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200"
}

Integration examples

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/cardmarket-listings-scraper').call({
startUrls: [{ url: 'https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200' }],
maxItems: 50,
proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'] },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));

Python

from apify_client import ApifyClient
client = ApifyClient(token)
run = client.actor("crawloop/cardmarket-listings-scraper").call(
run_input={
"searchKeywords": ["charizard"],
"game": "Pokemon",
"maxItems": 50,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"],
},
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("cardName"), item.get("price"), item.get("sellerUsername"))

cURL

curl "https://api.apify.com/v2/acts/crawloop~cardmarket-listings-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchKeywords":["charizard"],"game":"Pokemon","maxItems":50,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call crawloop/cardmarket-listings-scraper.

Example prompts:

  • "Run Cardmarket Listings Scraper for product URL https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200, max 50, residential proxy, and return cardName, price, condition, sellerUsername as JSON"
  • "Scrape the Cardmarket shop for seller CardGameCorner on Pokemon, residential proxy, and summarize prices and quantities"
  • "Pull Cardmarket listings for charizard, then run TCGPlayer Listings Scraper for the same SKU to compare EUR vs USD asks"

Suite next step

Cardmarket is the EU TCG offer firehose. Next, run TCGPlayer Listings Scraper on the same SKU for US asks. For PSA 10 pop / gem rate, chain PSA Population Report Scraper; for weekly auction hammer, Fanatics Collect Scraper. Sold-comp volume still goes to eBay Sold Listings Scraper.

FAQ

Is this an official Cardmarket API?
No. New API applications are closed. This Actor reads the same public product and shop pages the website shows and returns structured dataset rows — a practical Cardmarket API alternative for pipelines.

Can I scrape a Cardmarket seller shop by username?
Yes — set sellerUsernames (or paste a /Users/{handle} URL in startUrls) and game. The Actor walks Offers / Singles with pagination. Add shopQuery to keep only listings matching that card name.

Can I paste a Cardmarket product URL?
Yes — startUrls accepts product pages (seller offer table), seller/shop URLs, and search URLs (searchString + game parsed).

Do I need a Cardmarket login?
No — public marketplace data only.

Does it need a residential proxy?
On Apify, yes — residential. Cloudflare usually blocks datacenter IPs. The Actor injects RESIDENTIAL on the platform when proxyConfiguration is omitted (API / MCP / cURL). Local runs can omit the proxy.

Why not a price guide Actor?
Cardmarket already publishes a public price-guide CSV. This Actor is listings: live seller offers, shops, and monitors.

What is monitor mode?
With monitorMode: true, seen listing IDs are stored in a named Key-Value store. The first run is the baseline. Later scheduled runs push and charge only IDs not seen before.

Python / Node.js / MCP?
Yes — use the Apify client examples above or Apify MCP prompts.

How many offers per product?
Product pages load about 50 offers at a time and stop around 300 unless you tighten filters. Shop inventory is also capped near 300 hits by Cardmarket. Raise maxPages / maxItems or add more URLs.

ActorFocus
TCGPlayer Listings ScraperUS TCG listings and shops
Cardmarket Listings Scraper ◄── you are hereCardmarket listings and shops
Fanatics Collect ScraperWeekly / Premier auctions + sold
PSA Population Report ScraperPSA pop census and gem rate
Whatnot Listings ScraperWhatnot listings, shops, optional shows
Goldin Auctions ScraperSports cards / TCG auctions
PriceCharting ScraperTCG / games / comics guides
eBay Sold Listings ScrapereBay sold comps