# Cardmarket Price Guide - MTG, Pokemon, Yu-Gi-Oh Card Prices (`kamerozkan/cardmarket-price-guide`) Actor

Cardmarket price guide for Magic, Pokemon, Yu-Gi-Oh, One Piece, Lorcana and 18 more card games: daily avg, low, trend and 1, 7, 30 day averages per card, foil or holo prices, joined with card names and expansion ids. Price change monitor mode. No login, no browser.

- **URL**: https://apify.com/kamerozkan/cardmarket-price-guide.md
- **Developed by:** [Kamer Ozkan](https://apify.com/kamerozkan) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 card prices

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Cardmarket Price Guide - MTG, Pokemon, Yu-Gi-Oh Card Prices

The **Cardmarket Price Guide** as clean data: daily average sell, low and trend prices plus 1, 7 and 30 day averages and foil or holo prices for every card and sealed product of Magic: The Gathering, Pokemon, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood, Digimon, Dragon Ball Super, Star Wars Unlimited, Riftbound and 13 more card games, joined with card names, expansions and product ids. A built-in **price change monitor** returns only the cards whose price moved. No login, no API key, no browser.

### What does Cardmarket Price Guide do?

Cardmarket publishes an official price guide for each game once a day (around 02:45 CET), together with its product catalog. This actor downloads those official public files, joins every price with the product's name, category and expansion, filters them the way you ask and writes one row per card or sealed product.

Because it reads Cardmarket's own published files instead of scraping the website, runs do not hit Cloudflare blocks, need no proxy and finish in seconds: the whole Pokemon guide (80,000 products) is read in about 5 seconds, Magic (the largest, 26 MB) in about 10.

Filter by **card or product name** (Charizard, Black Lotus, Blue-Eyes White Dragon, Booster Box), by your list of **Cardmarket product ids** (your shop inventory or watchlist), by **expansion** name or id, by **product type** (singles, sealed or both) and by a **trend price range**. Sort by price or by **risers first**: the trend price against the 30-day average shows which cards are moving up right now.

### Who is it for?

- **Cardmarket sellers and TCG shops**: reprice your stock every morning from the trend and low prices, by product id.
- **Buyers and speculators**: find risers and fallers across a whole game, or watch a list of chase cards with the price change monitor.
- **Collectors and portfolio trackers**: value a collection daily in EUR, with foil or holo prices next to the normal ones.
- **Price comparison sites, apps and Discord bots**: a reliable daily EUR price feed for 23 games without maintaining a scraper.

### What data can you get?

| Field | Example |
|---|---|
| `idProduct`, `name`, `cardName` | 5465, Black Lotus, Black Lotus |
| `game`, `idGame` | Magic: The Gathering, 1 |
| `productType`, `category`, `idCategory` | single, Magic Single, 1 (sealed: Pokemon Booster, Display, Tins, Elite Trainer Boxes and more) |
| `idExpansion`, `expansionName` | 1, Alpha |
| `idMetacard` | 548 (the same card across printings) |
| `avg`, `low`, `trend` | 152900, 57500, 33768.47 (average sell price, lowest listing, Cardmarket trend price, EUR) |
| `avg1`, `avg7`, `avg30` | 15800, 24192.86, 11535.95 (average sell price over the last 1, 7 and 30 days) |
| `foilVariant`, `avgFoil`, `lowFoil`, `trendFoil`, `avg1Foil`, `avg7Foil`, `avg30Foil` | foil (Magic, Yu-Gi-Oh and most games) or holo (Pokemon), the same prices for that variant |
| `trendVsAvg30Percent` | 192.72 (trend price against the 30-day average) |
| `priceDate` | 2026-10-22T02:44:58+0200 (when Cardmarket built the price guide) |
| `dateAdded`, `currency`, `cardmarketUrl` | date the product was added, EUR, a Cardmarket search link for the card |

Price change monitor rows also carry `previousTrend` and `trendChangePercent`.

Games: Magic: The Gathering, Pokemon, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood, Digimon, Dragon Ball Super, Star Wars Unlimited, Star Wars: Destiny, Riftbound, Sorcery: Contested Realm, Gundam Card Game, Cyberpunk TCG, Final Fantasy TCG, Weiss Schwarz, Cardfight!! Vanguard, Force of Will, Battle Spirits Saga, My Little Pony, Dragoborne, The Spoils, World of Warcraft TCG.

### How much does it cost?

You pay per row: **$1.50 per 1,000 prices** ($0.0015 per card or product) on the Free plan, with Store discounts on paid Apify plans: Bronze $1.35, Silver $1.275, Gold and above $1.20 per 1,000 prices. Platform usage is included.

Worked examples:

- The 100 most expensive Charizard cards: 100 x $0.0015 = **$0.15**.
- A shop inventory of 2,000 product ids repriced every morning: 2,000 x $0.0015 = **$3.00 per day**.
- A price change monitor on 500 chase cards where about 40 move by 5% or more per day: 40 x $0.0015 = **$0.06 per day**; unchanged cards are **not charged**.

Products filtered out and unchanged prices skipped by the monitor are never charged. Set **Max results** or a maximum cost per run to cap spending.

### How to use it

1. Click **Try for free**.
2. Pick the **Games** (Pokemon, Magic, Yu-Gi-Oh, One Piece, Lorcana and so on).
3. Optional filters: **Card or product names**, **Cardmarket product ids**, **Expansion names** or **ids**, **Product type**, **Minimum / Maximum trend price**.
4. Choose **Sort by** (highest price, risers first and more) and **Max results**.
5. Optional: turn on **Price change monitor** and schedule the actor daily after 03:00 CET.
6. Click **Start** and download the table as CSV, Excel, JSON or through the API.

### Input example

```json
{
  "games": ["Magic", "Yu-Gi-Oh"],
  "cardNames": ["Black Lotus", "Blue-Eyes White Dragon"],
  "productType": "all",
  "sortBy": "trendDesc",
  "maxItems": 60
}
```

### Output example

A row from a live run (Magic price guide of 2026-10-22, the empty foil fields left out):

```json
{
  "idProduct": 5465,
  "name": "Black Lotus",
  "cardName": "Black Lotus",
  "game": "Magic: The Gathering",
  "idGame": 1,
  "productType": "single",
  "category": "Magic Single",
  "idCategory": 1,
  "idExpansion": 1,
  "expansionName": "Alpha",
  "idMetacard": 548,
  "currency": "EUR",
  "avg": 152900,
  "low": 57500,
  "trend": 33768.47,
  "avg1": 15800,
  "avg7": 24192.86,
  "avg30": 11535.95,
  "trendVsAvg30Percent": 192.72,
  "priceDate": "2026-10-22T02:44:58+0200",
  "dateAdded": "2007-01-01 00:00:00",
  "cardmarketUrl": "https://www.cardmarket.com/en/Magic/Products/Search?searchString=Black%20Lotus"
}
```

A One Piece riser from the same day (sort **Risers first**, minimum trend price 20): Charlotte Pudding (OP08-067), trend 722.87 EUR against a 30-day average of 104.41 EUR, `trendVsAvg30Percent` 592.34.

### Integrations and API

Run it from your code with the Apify API or the `apify-client` package, schedule it in Apify (with the price change monitor each run returns only the cards that moved), or connect it to Make, n8n, Zapier, Google Sheets, Slack or a webhook.

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("kamerozkan/cardmarket-price-guide").call(run_input={
    "games": ["Pokemon"],
    "cardNames": ["Charizard", "Pikachu"],
    "minTrendPrice": "20",
    "onlyChangedPrices": True,
    "minChangePercent": 5,
    "monitorName": "pokemon-chase-cards",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["expansionName"], item["previousTrend"], item["trend"], item["trendChangePercent"])
```

### FAQ

**Where do the prices come from?** From Cardmarket's official public price guide and product catalog files, the source of the price trend and the 1, 7 and 30 day averages Cardmarket shows on product pages. The actor never logs in and never requests the Cardmarket website.

**How fresh are the prices?** Cardmarket rebuilds the price guide once a day, around 02:45 CET. Every row carries `priceDate`, the time that guide was built. Running more often than daily returns the same prices.

**What do avg, low and trend mean?** `avg` is the average sell price of recent sales, `low` the lowest current listing price, `trend` Cardmarket's trend price, and `avg1` / `avg7` / `avg30` the average sell price over the last 1, 7 and 30 days. All prices are in EUR. A field is empty when Cardmarket has no sales for it.

**What is the foil or holo price?** For Magic, Yu-Gi-Oh and most games the `...Foil` fields are the foil version's prices; for Pokemon Cardmarket labels them holo, and `foilVariant` says which one it is. They are empty when that variant has no sales.

**Where do expansion names come from?** The catalog files only carry expansion ids, so `expansionName` is taken from the sealed products of each expansion (for example "Phantom Forces Booster" gives "Phantom Forces"). About 70% of Pokemon singles get a name this way; for expansions without sealed products the name is empty and `idExpansion` is always there.

**How does the price change monitor work?** With **Price change monitor** on, the actor remembers each product's trend price in a named key-value store in your account and outputs only products whose trend moved by at least **Minimum price change (%)** since it was last delivered. The first run outputs every matching product as the baseline. Use one **Monitor name** per watchlist. Unchanged products are skipped and not charged.

**Can I get the whole price guide of a game?** Yes: leave the name and id filters empty and set **Max results** high enough (the Pokemon guide has about 80,000 products; Magic is the largest file).

**Is it legal to collect this data?** It reads public market prices that Cardmarket publishes for download, without logins and without personal data. You are responsible for how you use the data, including Cardmarket's terms.

**Something is not working?** Open an issue on the Issues tab with your run link and we will fix it fast.

### Support

Questions, a game that is missing, or a field you need (for example card conditions, languages or alerts to Discord)? Open an issue on the **Issues** tab of this actor with your run link. Issues are read every working day and fixes ship within a few days; feature requests that other users share get built.

# Actor input Schema

## `games` (type: `array`):

Card games to read. Each game is one official Cardmarket price guide (refreshed daily). Names like Magic, MTG, Pokemon, Yu-Gi-Oh, One Piece, Lorcana, Flesh and Blood, Digimon, Dragon Ball Super, Star Wars Unlimited, Riftbound or Sorcery work, and so do Cardmarket game ids (1 = Magic, 3 = Yu-Gi-Oh, 6 = Pokemon, 18 = One Piece, 19 = Lorcana).

## `cardNames` (type: `array`):

Keep only products whose name contains one of these words (case-insensitive), e.g. Charizard, Black Lotus, Blue-Eyes White Dragon, Booster Box. Leave empty for the whole price guide.

## `productIds` (type: `array`):

Your watchlist or inventory as Cardmarket idProduct numbers, e.g. 275404. Faster and exact for repricing a shop inventory.

## `expansionNames` (type: `array`):

Keep only products of expansions whose name contains one of these words, e.g. Base Set, Scarlet & Violet, Bloomburrow. Expansion names are taken from the sealed products of each expansion, so a few expansions without sealed products have no name; use expansion ids for those.

## `expansionIds` (type: `array`):

Keep only products of these Cardmarket expansion ids (idExpansion in the output).

## `productType` (type: `string`):

Singles (cards), sealed products (boosters, booster boxes, displays, tins, ETBs, decks) or both.

## `minTrendPrice` (type: `string`):

Skip products whose trend price is below this, e.g. 1 to skip bulk commons.

## `maxTrendPrice` (type: `string`):

Skip products whose trend price is above this.

## `sortBy` (type: `string`):

Order of the rows. Risers first sorts by trend price against the 30-day average, which shows the cards that are moving up right now.

## `maxItems` (type: `integer`):

Stop after this many rows. You are charged per row, so this also caps the cost of the run.

## `onlyChangedPrices` (type: `boolean`):

Remember each product's trend price between runs and output (and charge) only products whose trend moved by at least the minimum change below. The first run outputs everything that matches as the baseline. Schedule it daily: the price guide refreshes once a day.

## `minChangePercent` (type: `integer`):

Monitor mode: smallest trend price move, up or down, that counts as a change.

## `monitorName` (type: `string`):

Monitor mode: use a different name for each watchlist you track, so their remembered prices do not mix.

## Actor input object example

```json
{
  "games": [
    "Pokemon"
  ],
  "cardNames": [
    "Charizard"
  ],
  "productType": "single",
  "sortBy": "trendDesc",
  "maxItems": 100,
  "onlyChangedPrices": false,
  "minChangePercent": 5,
  "monitorName": "default"
}
```

# Actor output Schema

## `results` (type: `string`):

One row per result in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "games": [
        "Pokemon"
    ],
    "cardNames": [
        "Charizard"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("kamerozkan/cardmarket-price-guide").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "games": ["Pokemon"],
    "cardNames": ["Charizard"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("kamerozkan/cardmarket-price-guide").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "games": [
    "Pokemon"
  ],
  "cardNames": [
    "Charizard"
  ],
  "maxItems": 100
}' |
apify call kamerozkan/cardmarket-price-guide --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kamerozkan/cardmarket-price-guide"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CWRLYVkv7Ennjv26l/builds/iFz7YmMVurYDc0ZnB/openapi.json
