Cardmarket Scraper - Card Prices, Trends, Sellers & Reviews avatar

Cardmarket Scraper - Card Prices, Trends, Sellers & Reviews

Pricing

from $1.70 / 1,000 card, offer or seller records

Go to Apify Store
Cardmarket Scraper - Card Prices, Trends, Sellers & Reviews

Cardmarket Scraper - Card Prices, Trends, Sellers & Reviews

Scrape Cardmarket trading cards by keyword or URL. Extract price guides, trends, 30/7/1-day averages, daily price history, seller offers and prices. Includes seller ratings and customer feedback for market research, price monitoring and trading card analysis.

Pricing

from $1.70 / 1,000 card, offer or seller records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Features

Limited permissions

Share

Cardmarket Scraper

Scrape Cardmarket, Europe's largest trading-card marketplace (Pokemon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Lorcana), by keyword or URL. Every product row carries the full price guide (trend, 30/7/1-day averages, daily chart series) and the seller offer table; seller records carry aggregate ratings and customer feedback entries.

Why This Scraper?

  • Price guide + offers in one row. The product page's own price data (trend, 30-day, 7-day and 1-day averages, the daily sell-price series and up to 50 seller offers with condition, language, seller country and sales count) lands on the product record.
  • Every link shape routed. Paste product pages, expansion listings, search-result links, seller profiles or a seller's Offers page; the actor walks each the way the site does, paginating search and expansion results and seller offer pages.
  • Seller feedback included. Seller profiles ship aggregate evaluation percentages per category plus the individual feedback entries (buyer, country, transaction value band, date, per-category ratings, comment text).
  • Recurring updates built in. Incremental mode labels every record NEW / UPDATED / UNCHANGED / REAPPEARED / EXPIRED across scheduled runs of the same scope, so a price monitor only pays for what actually moved.
  • All five games. Pokemon, Magic, YuGiOh, OnePiece and Lorcana share the same grammar; pick the game section for keyword search, or paste links from any section.

Use Cases

  • Who: Trading-card stores tracking competitor prices across conditions and sellers.
  • Who: Collectors watching a watchlist of cards with trend and 30/7/1-day averages and the cheapest current offers.
  • Who: Market analysts measuring price history per expansion from the daily sell-price series.
  • Who: Sellers monitoring their own (or competitors') customer feedback over time.

Data You Get

FieldExample
titleSample Hydra Card (SMP 001)
gamePokemon
expansion151
rarityHolo Rare
urlhttps://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200
priceTrend4.56
avg305.01
avg74.78
avg14.62
fromPrice1.23
availableCount321
chart30d[{"date": "01.01.2026", "price": 4.4}, ...]
chart14d[{"date": "15.01.2026", "price": 4.51}, ...]
offersCount12
offers[{"sellerName": "sample_seller_store", "conditionCode": "NM", "language": "English", "price": 3.99}, ...]
sellerNamesample_seller_store
sellerTypePrivate
memberSince2024
positivePct99.2
overallLabelVery Good
ratingCategories[{"category": "Overall Evaluation", "pct": 99.2}, ...]
feedback[{"buyer": "sample_buyer", "date": "01.01.2026", "overall": "Very Good", "comment": "..."}, ...]
condition / language / quantity / priceNM / English / 1 / 3.99
sellerCommentperfekt fuer Binder (the seller's own note on an offer)
changeType / changedFieldsUPDATED / ["priceTrend"] (incremental mode)

Sample shape: values are illustrative placeholders, not from a live record. Records are distinguished by the kind field: product (price guide + nested offers), offer (one row per offer from a seller's stock page) and seller (profile + nested feedback).

How to Use

Search mode

  1. Pick the game section (Pokemon, Magic, YuGiOh, OnePiece, Lorcana).
  2. Add one or more keywords to Search strings; each walks the site's own result pages (30 cards per page).
  3. Keep Fetch price guide per card on to read every found card's price-guide page; turn it off for fast card rows only.

Search by keyword:

{
"mode": "search",
"game": "Pokemon",
"searchStrings": ["Blastoise ex", "Charizard"],
"fetchDetails": true,
"maxOffers": 20,
"maxItems": 50
}

URL mode

Paste any mix of links: every shape the site emits is routed. Product pages read the price guide and offer table; expansion and search links walk their result pages; seller profiles collect ratings and feedback; Offers pages emit one row per offer.

LinkWalk
.../Products/Singles/<Expansion>/<Card>Product page: price guide + offer table
.../Products/Singles/<Expansion>Expansion listing, paginated
.../Products/Search?searchString=<q>Search results, paginated
.../Users/<Seller>Seller profile + feedback entries
.../Users/<Seller>/Offers/<Category>One row per offer, paginated

Paste links (URL mode):

{
"mode": "urls",
"urls": [
"https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200",
"https://www.cardmarket.com/en/Pokemon/Users/thenutworldwide"
],
"fetchSellerFeedback": true,
"maxFeedback": 20,
"maxItems": 20
}

Incremental price monitor over scheduled runs:

{
"mode": "search",
"game": "Magic",
"searchStrings": ["Uro, Titan of Nature's Wrath"],
"fetchDetails": true,
"maxOffers": 50,
"maxItems": 100,
"incrementalMode": true,
"stateKey": "tcg-watchlist"
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("abotapi/cardmarket-com-scraper").call(run_input={
"mode": "search",
"game": "Pokemon",
"searchStrings": ["Blastoise ex"],
"fetchDetails": True,
"maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('abotapi/cardmarket-com-scraper').call({
mode: 'search',
game: 'Pokemon',
searchStrings: ['Blastoise ex'],
fetchDetails: true,
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

How maxItems shapes a run

maxItems stops the run after that many records; 0 means unlimited. Incremental suppression does not consume budget: a scheduled run where nothing changed pushes 0 rows and costs no dataset-item events.

Resume and recurring updates

Turn on Incremental mode and put the run on a schedule. Every run of the same scope compares against the previous one: unchanged records are suppressed (and never billed), card-level moves (from-price, title, expansion) are labelled UPDATED, disappeared records can be emitted as EXPIRED tombstones, and resumeFromRunId continues one interrupted run without re-collecting what it already pushed.

Send results into your apps (MCP connectors)

Results land in the run dataset as clean JSON. To pipe them straight into an AI agent or automation, add MCP connectors in the input's export section, and the run exports each connector's slice after the walk finishes. Max items to export per connector bounds each slice; a Notion connector also takes a Notion parent page.

Input Parameters

ParameterTypeDefaultDescription
modeSelectsearchsearch walks keyword results; urls walks the links you paste
gameSelectPokemonGame section for search mode (Pokemon, Magic, YuGiOh, OnePiece, Lorcana)
searchStringsListBlastoise exKeywords for search mode
urlsListthree sample linksProduct, expansion, search or seller links for URL mode
fetchDetailsBooleantrueRead each found card's price-guide page (trend, averages, chart, offers)
maxOffersNumber20Seller offers embedded per product record (the page carries up to 50)
fetchSellerFeedbackBooleantrueCollect customer feedback entries on seller profiles
maxFeedbackNumber20Feedback entries per seller (20 per page)
maxItemsNumber20Stop after this many records (0 = unlimited)
resumeFromRunIdString(empty)Continue one interrupted run
incrementalModeBooleanfalseLabel records NEW/UPDATED/UNCHANGED/EXPIRED across scheduled runs
emitUnchangedBooleanfalseAlso emit records whose data did not change
emitExpiredBooleanfalseTombstone records that disappeared from a complete scan
stateKeyString(empty)Stable name for one monitoring campaign's incremental state
ignoreFieldsForChangesList(empty)Fields excluded from the change comparison
proxyConfigurationProxyApify ProxyConnection settings; the backup connection engages automatically when the site refuses the default
mcpConnectorsJSON(empty)MCP connector export targets
maxNotifyListingsNumber50Max items exported per MCP connector
notionParentPageUrlString(empty)Notion parent page (Notion connector only)

Output Example

Browse the run dataset through the Output tabs: Overview (all records), Products (price guide + nested offers), Offers (one row per offer), Sellers (profiles with feedback) and Changes (incremental runs only). Export to CSV/Excel/JSON/XML from any tab.

Sample shape: values are illustrative placeholders, not from a live record. Records are distinguished by the kind field: product (price guide + nested offers), offer (one row per offer from a seller's stock page) and seller (profile + nested feedback).

{
"id": "product:Pokemon:ABC123",
"kind": "product",
"title": "Sample Hydra Card (SMP 001) 151 - Singles",
"game": "Pokemon",
"expansion": "151",
"url": "https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200",
"fromPrice": 1.23,
"priceTrend": 4.56,
"avg30": 5.01,
"avg7": 4.78,
"avg1": 4.62,
"availableCount": 321,
"chart30d": [{"date": "01.01.2026", "price": 4.4}],
"offers": [{"offerId": "0000000001", "sellerName": "sample_seller_store", "condition": "Near Mint", "conditionCode": "NM", "language": "English", "sellerCountry": "Germany", "salesCount": 42, "quantity": 1, "price": 3.99}],
"offersCount": 12,
"detailFetched": true
}

Product record with the price guide and offer table (sample shape)

Plan Requirement

The site refuses ordinary datacenter and residential connections, so the actor automatically rides its backup connection once the default one has been refused. That backup lane is available on paid Apify plans; on free plans the run fails with a clear message rather than returning silent-empty results. Bring-your-own proxy URLs are honored as-is (the backup lane never overrides them).

FAQ

How much does a run cost?

Costs scale with what comes back: the primary event bills per record, the price-guide event bills once per product whose page was read (detail enrichment is on by default, turn it off for fast, cheap card rows), and the seller feedback event bills once per seller that delivered feedback. Check the Pricing tab for exact rates.

The actor reads only publicly accessible pages (product listings, public price data and public seller profiles) without any login. Use the data in line with Cardmarket's terms and your local regulations.

Can I schedule recurring runs?

Yes. Turn on Incremental mode and put the run on a schedule: every run of the same scope is compared against the previous one, unchanged records are suppressed (and not billed), card-level moves (from-price, title, expansion) are labelled UPDATED, and enriched rows refresh their full price-guide data. Note the site's own result feed re-orders between requests: a scheduled keyword run capped below the result count legitimately classifies mostly NEW (a rotated slice of the same cards), while URL-mode watchlists (pasted product or seller links) suppress deterministically.

Why did a run return 0 records?

A pasted link that no longer exists (removed listing or expired sale) is skipped with a warning, and a run whose links all point at removed pages ends honestly with no records. If every page read was refused, the run fails with a connection message instead. Relax the search string, check the game section, or paste a fresher link.

Can I use it with AI agents or MCP?

Yes. Results land in the default dataset as clean JSON, and the MCP connectors input forwards a condensed summary per record to your Apify MCP server setup for direct use in AI agents.

πŸ”— More scrapers you might like

Pair this actor with these related scrapers from the same team:

🏷️ Vinted Scraper
Scrape Vinted across 27 country marketplaces by keyword, filters, item or seller URL...
πŸ›’ Reverb Music Gear and Sold Price Guide Scraper
Scrape reverb.com music gear: guitars, amps, synths, pedals, drums and pro audio. Search...
🧩 WEBTOON Scraper
Scrape the WEBTOON catalog into structured data. Extract series, genres, rankings and...
πŸ›’ Mercari Japan Scraper
Scrape Mercari Japan listings, sellers and reviews at scale. Extract names, prices...
🏷️ Vinted France Scraper
Scrape Vinted.fr second-hand fashion listings by keyword, brand, price, condition, sort...
πŸš— Trade Me NZ Scraper
Scrape trademe.co.nz across all five sections: Marketplace goods and auctions, Property...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.