Cardmarket Scraper - Card Prices, Trends, Sellers & Reviews
Pricing
from $1.70 / 1,000 card, offer or seller records
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
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Features
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
| Field | Example |
|---|---|
title | Sample Hydra Card (SMP 001) |
game | Pokemon |
expansion | 151 |
rarity | Holo Rare |
url | https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200 |
priceTrend | 4.56 |
avg30 | 5.01 |
avg7 | 4.78 |
avg1 | 4.62 |
fromPrice | 1.23 |
availableCount | 321 |
chart30d | [{"date": "01.01.2026", "price": 4.4}, ...] |
chart14d | [{"date": "15.01.2026", "price": 4.51}, ...] |
offersCount | 12 |
offers | [{"sellerName": "sample_seller_store", "conditionCode": "NM", "language": "English", "price": 3.99}, ...] |
sellerName | sample_seller_store |
sellerType | Private |
memberSince | 2024 |
positivePct | 99.2 |
overallLabel | Very Good |
ratingCategories | [{"category": "Overall Evaluation", "pct": 99.2}, ...] |
feedback | [{"buyer": "sample_buyer", "date": "01.01.2026", "overall": "Very Good", "comment": "..."}, ...] |
condition / language / quantity / price | NM / English / 1 / 3.99 |
sellerComment | perfekt fuer Binder (the seller's own note on an offer) |
changeType / changedFields | UPDATED / ["priceTrend"] (incremental mode) |
Sample shape: values are illustrative placeholders, not from a live record. Records are distinguished by the
kindfield:product(price guide + nested offers),offer(one row per offer from a seller's stock page) andseller(profile + nested feedback).
How to Use
Search mode
- Pick the game section (Pokemon, Magic, YuGiOh, OnePiece, Lorcana).
- Add one or more keywords to Search strings; each walks the site's own result pages (30 cards per page).
- 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.
| Link | Walk |
|---|---|
.../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 ApifyClientclient = 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | Select | search | search walks keyword results; urls walks the links you paste |
game | Select | Pokemon | Game section for search mode (Pokemon, Magic, YuGiOh, OnePiece, Lorcana) |
searchStrings | List | Blastoise ex | Keywords for search mode |
urls | List | three sample links | Product, expansion, search or seller links for URL mode |
fetchDetails | Boolean | true | Read each found card's price-guide page (trend, averages, chart, offers) |
maxOffers | Number | 20 | Seller offers embedded per product record (the page carries up to 50) |
fetchSellerFeedback | Boolean | true | Collect customer feedback entries on seller profiles |
maxFeedback | Number | 20 | Feedback entries per seller (20 per page) |
maxItems | Number | 20 | Stop after this many records (0 = unlimited) |
resumeFromRunId | String | (empty) | Continue one interrupted run |
incrementalMode | Boolean | false | Label records NEW/UPDATED/UNCHANGED/EXPIRED across scheduled runs |
emitUnchanged | Boolean | false | Also emit records whose data did not change |
emitExpired | Boolean | false | Tombstone records that disappeared from a complete scan |
stateKey | String | (empty) | Stable name for one monitoring campaign's incremental state |
ignoreFieldsForChanges | List | (empty) | Fields excluded from the change comparison |
proxyConfiguration | Proxy | Apify Proxy | Connection settings; the backup connection engages automatically when the site refuses the default |
mcpConnectors | JSON | (empty) | MCP connector export targets |
maxNotifyListings | Number | 50 | Max items exported per MCP connector |
notionParentPageUrl | String | (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
kindfield:product(price guide + nested offers),offer(one row per offer from a seller's stock page) andseller(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.
Is it legal to scrape Cardmarket?
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.