Cardmarket Listings Scraper — Offers, Shops & Prices
Under maintenancePricing
from $2.19 / 1,000 cardmarket listings
Cardmarket Listings Scraper — Offers, Shops & Prices
Under maintenanceScrape 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
Maintained by CommunityActor stats
0
Bookmarked
34
Total users
10
Monthly active users
12 days ago
Last modified
Categories
Features
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 each — EUR price, condition, language, quantity, foil / signed flags, seller type, and Cardmarket trend / discount vs trend (plus USD). 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
| Actor | Focus |
|---|---|
| TCGPlayer Listings Scraper | US TCG seller listings and shops |
| Cardmarket Listings Scraper ◄── you are here | EU TCG seller offers and shops |
| Fanatics Collect Scraper | Weekly / Premier auctions, Buy Now, sold comps |
| Goldin Auctions Scraper | High-end sports cards / TCG hammer + sold |
| PSA Population Report Scraper | Set-level PSA pop census and gem rate |
| Whatnot Listings Scraper | US live-commerce listings and shops |
| PriceCharting Scraper | Guide prices for games, TCG, and comics |
| eBay Active Listings Scraper | Live eBay BIN / auction asking prices |
| eBay Sold Listings Scraper | Completed eBay sold comps |
| eBay Sold Price Intelligence | Recommended 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 want trend, averages, and discount vs trend on each offer, plus a USD price
- 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
- Catalog-wide price-guide dumps — each offer can include Cardmarket trend, averages, and discount vs trend; this Actor does not export the full price-guide file. For US guide comps use PriceCharting Scraper
- US TCG seller listings — use TCGPlayer Listings Scraper
- Weekly / Premier auction hammer — use Fanatics Collect Scraper or Goldin Auctions Scraper
- PSA 10 pop / gem rate — use PSA Population Report Scraper
- US live-commerce firehose — use Whatnot Listings Scraper
- eBay sold comps / fair-value reports — use eBay Sold Listings Scraper
- Official Cardmarket API replacement — new API apps are closed; this Actor reads public product and shop HTML
- Buyer PII, DMs, or order history — public offer rows only
Key features
- Product URLs — scrape every seller offer on a card page (not a 10-row default)
- Seller shop inventory — walk
/Users/{handle}/Offerswith optionalshopQuery - 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 parsing —
85,00 €becomes85.0withcurrency: EUR - Trend and USD — Cardmarket public price guide (trend, averages, discount vs trend) and the ECB daily EUR→USD rate on each offer
- 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 case | What you get |
|---|---|
| Pokémon / MTG restock | Current Cardmarket offers for a SKU, condition band, and seller country |
| Seller shop dump | Active inventory for a handle; shopQuery to keep one card / set |
| Arbitrage watch | monitorMode on a product URL; only new offer IDs billed |
| EU vs US comps | Cardmarket live rows, then eBay sold listings for the same query |
| Shop intelligence | Professional vs private sellers, country, sales count, comments |
| Deal finder | minDiscountPct: 25 keeps offers at least 25% below Cardmarket trend |
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.
Deal finder (offers at least 25% under trend):
{"searchKeywords": ["charizard"],"game": "Pokemon","minDiscountPct": 25,"maxItems": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Keyword search + monitor:
{"searchKeywords": ["charizard"],"game": "Pokemon","maxItems": 150,"monitorMode": true,"monitorStoreName": "cardmarket-charizard","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchKeywords | Array | — | Product search queries (required if no URLs/sellers) |
sellerUsernames | Array | — | Shop handles to walk (game-scoped) |
shopQuery | String | — | Filter each seller shop by card name. Empty = full inventory |
startUrls | Array | — | Cardmarket product, seller, or search URLs |
game | String | Pokemon | Catalog for keywords and usernames |
locale | String | en | en / de / fr / es / it |
minCondition | String | any | MT NM EX GD LP PL PO — keep this grade or better |
language | String | any | Print language filter |
sellerCountry | String | any | ISO seller country |
sellerType | String | any | private, commercial, professional, powerseller |
sort | String | best_match | price_asc / price_desc / name_asc for search and shops |
minPrice / maxPrice | Number | — | EUR price band |
includePriceGuide | Boolean | true | Add Cardmarket trend, averages, low, and discount vs trend |
includeUsd | Boolean | true | Add priceUsd from the ECB daily EUR/USD rate |
minDiscountPct | Number | — | Keep offers at least this % below trend. Null discounts are dropped |
isFoil / isReverseHolo / isSigned / isAltered / isFirstEd / isPlayset | Boolean | false | Extra flags |
maxItems | Integer | 100 | Max rows (0 = unlimited subject to maxPages) |
maxPages | Integer | 20 | Pagination safety cap |
monitorMode | Boolean | false | Emit only new IDs vs previous run |
monitorStoreName | String | cardmarket-listings-monitor | Named KV store for seen IDs |
resetMonitorState | Boolean | false | Wipe the seen-ID cache |
proxyConfiguration | Object | RESIDENTIAL | Datacenter IPs usually hit Cloudflare |
Output format
Each dataset item is one seller offer (recordType: listing).
| Field | Type | Description |
|---|---|---|
recordType | String | listing |
listingId / id | String | Cardmarket article / stock row id |
productId | String | Product id from the card page |
game / locale | String | Catalog and site language |
cardName | String | Card title |
expansion | String | Set name |
rarity | String | When present on shop rows |
collectorNumber | String | e.g. 200 or FST 220 |
condition / conditionName | String | NM plus full label Near Mint |
language | String | Print language |
isFoil / isReverseHolo / isSigned / isAltered / isFirstEd / isPlayset | Boolean | Extra flags |
quantity | Integer | Available copies |
price | Number | EUR major units (85,00 € → 85.0) |
trendPrice | Number | Cardmarket trend (EUR). Foil / reverse holo uses the holo trend, or null |
avgPrice / lowPrice | Number | Cardmarket average and low (EUR); holo variants when the row is foil or reverse holo |
avg1Price / avg7Price / avg30Price | Number | 1-day, 7-day, and 30-day averages (EUR) |
discountVsTrendPct | Number | (trend − price) / trend × 100, one decimal. Positive = cheaper than trend |
priceGuideDate | String | createdAt of the price-guide file |
priceUsd | Number | Offer price × ECB EUR/USD, two decimals |
eurUsdRate | Number | ECB daily EUR→USD rate |
currency | String | EUR |
sellerUsername / sellerUrl | String | Seller handle and shop URL |
sellerType | String | private, professional, or powerseller |
sellerCountry | String | Item location |
sellerSales | Integer | Sales count from the offer row |
sellerComment | String | Seller note on the listing |
productUrl / url | String | Public product URL |
source | String | product_url, seller_shop, or search |
searchQuery | String | Keyword or handle that produced the row |
scrapedAt | String | ISO 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","trendPrice": 120.0,"avgPrice": 98.5,"lowPrice": 80.0,"avg30Price": 101.2,"discountVsTrendPct": 29.2,"priceGuideDate": "2026-10-31T02:42:33+0100","priceUsd": 92.27,"eurUsdRate": 1.0855,"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 ApifyClientclient = 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. If UNBLOCKER times out or returns HTTP 502, the run switches to RESIDENTIAL DE and Camoufox automatically.
Why not a price guide Actor?
Each offer can include Cardmarket trend, averages, and discount vs trend from the public price guide. This Actor still has no catalog-wide price-guide mode — it 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.
Related Actors
| Actor | Focus |
|---|---|
| TCGPlayer Listings Scraper | US TCG listings and shops |
| Cardmarket Listings Scraper ◄── you are here | Cardmarket listings and shops |
| Fanatics Collect Scraper | Weekly / Premier auctions + sold |
| PSA Population Report Scraper | PSA pop census and gem rate |
| Whatnot Listings Scraper | Whatnot listings, shops, optional shows |
| Goldin Auctions Scraper | Sports cards / TCG auctions |
| PriceCharting Scraper | TCG / games / comics guides |
| eBay Sold Listings Scraper | eBay sold comps |