# Cardmarket Listings Scraper — Offers, Shops & Prices (`crawloop/cardmarket-listings-scraper`) Actor

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.

- **URL**: https://apify.com/crawloop/cardmarket-listings-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.19 / 1,000 cardmarket listings

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Cardmarket Listings Scraper — Offers, Shops & Prices

> **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**, 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

| Actor | Focus |
| :--- | :--- |
| [TCGPlayer Listings Scraper](https://apify.com/crawloop/tcgplayer-listings-scraper) | US TCG seller listings and shops |
| Cardmarket Listings Scraper ◄── you are here | EU TCG seller offers and shops |
| [Fanatics Collect Scraper](https://apify.com/crawloop/fanatics-collect-scraper) | Weekly / Premier auctions, Buy Now, sold comps |
| [Goldin Auctions Scraper](https://apify.com/crawloop/goldin-scraper) | High-end sports cards / TCG hammer + sold |
| [PSA Population Report Scraper](https://apify.com/crawloop/psa-pop-report-scraper) | Set-level PSA pop census and gem rate |
| [Whatnot Listings Scraper](https://apify.com/crawloop/whatnot-listings-scraper) | US live-commerce listings and shops |
| [PriceCharting Scraper](https://apify.com/crawloop/pricecharting-scraper) | Guide prices for games, TCG, and comics |
| [eBay Active Listings Scraper](https://apify.com/crawloop/ebay-active-listings-scraper) | Live eBay BIN / auction asking prices |
| [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | Completed eBay sold comps |
| [eBay Sold Price Intelligence](https://apify.com/crawloop/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 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

- **Guide / trend / 30-day average prices** — Cardmarket publishes a public price-guide CSV; for US guide comps use [PriceCharting Scraper](https://apify.com/crawloop/pricecharting-scraper)
- **US TCG seller listings** — use [TCGPlayer Listings Scraper](https://apify.com/crawloop/tcgplayer-listings-scraper)
- **Weekly / Premier auction hammer** — use [Fanatics Collect Scraper](https://apify.com/crawloop/fanatics-collect-scraper) or [Goldin Auctions Scraper](https://apify.com/crawloop/goldin-scraper)
- **PSA 10 pop / gem rate** — use [PSA Population Report Scraper](https://apify.com/crawloop/psa-pop-report-scraper)
- **US live-commerce firehose** — use [Whatnot Listings Scraper](https://apify.com/crawloop/whatnot-listings-scraper)
- **eBay sold comps / fair-value reports** — use [eBay Sold Listings Scraper](https://apify.com/crawloop/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}/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 parsing** — `85,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 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 |

### Quick start

**Product URL (all offers on the page):**

```json
{
  "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):

```json
{
  "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:**

```json
{
  "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 |
| `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`) |
| `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:**

```json
{
  "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

```javascript
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

```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

```bash
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](https://docs.apify.com/platform/integrations/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](https://apify.com/crawloop/tcgplayer-listings-scraper) on the same SKU for US asks. For **PSA 10 pop / gem rate**, chain [PSA Population Report Scraper](https://apify.com/crawloop/psa-pop-report-scraper); for weekly auction hammer, [Fanatics Collect Scraper](https://apify.com/crawloop/fanatics-collect-scraper). Sold-comp volume still goes to [eBay Sold Listings Scraper](https://apify.com/crawloop/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.

### Related Actors

| Actor | Focus |
| :--- | :--- |
| [TCGPlayer Listings Scraper](https://apify.com/crawloop/tcgplayer-listings-scraper) | US TCG listings and shops |
| Cardmarket Listings Scraper ◄── you are here | Cardmarket listings and shops |
| [Fanatics Collect Scraper](https://apify.com/crawloop/fanatics-collect-scraper) | Weekly / Premier auctions + sold |
| [PSA Population Report Scraper](https://apify.com/crawloop/psa-pop-report-scraper) | PSA pop census and gem rate |
| [Whatnot Listings Scraper](https://apify.com/crawloop/whatnot-listings-scraper) | Whatnot listings, shops, optional shows |
| [Goldin Auctions Scraper](https://apify.com/crawloop/goldin-scraper) | Sports cards / TCG auctions |
| [PriceCharting Scraper](https://apify.com/crawloop/pricecharting-scraper) | TCG / games / comics guides |
| [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) | eBay sold comps |

# Actor input Schema

## `searchKeywords` (type: `array`):

Cardmarket product search queries (e.g. charizard, black lotus). Each keyword finds matching products, then seller offers on those product pages. Results are merged and deduplicated by listing ID.

## `sellerUsernames` (type: `array`):

Walk each seller's Cardmarket shop inventory (Offers / Singles). Handles without @, e.g. CardGameCorner. Game-scoped — set game below. Optional shopQuery filters by card name.

## `shopQuery` (type: `string`):

When walking seller shops (usernames or /Users/ URLs), only keep listings whose card name matches this filter. Leave empty for full inventory. Does not apply to marketplace keyword search.

## `startUrls` (type: `array`):

Cardmarket product, seller/shop, or search URLs. Product pages scrape seller offers. /Users/{handle}/Offers walks that shop. Search URLs parse searchString and game.

## `game` (type: `string`):

Cardmarket catalog for keyword search and seller shops. Ignored when a start URL already contains the game path (e.g. /en/Magic/...).

## `locale` (type: `string`):

Cardmarket locale prefix (/en, /de, /fr, /es, /it). Prices stay in EUR.

## `minCondition` (type: `string`):

Only return listings at or better than this condition. Site grades: MT NM EX GD LP PL PO (Played is PL; MP is accepted as PL).

## `language` (type: `string`):

Only return listings in this print language.

## `sellerCountry` (type: `string`):

Only show listings from sellers in this country (ISO code).

## `sellerType` (type: `string`):

Filter by Cardmarket seller type. Commercial = professional + powerseller.

## `sort` (type: `string`):

Sort for keyword search and seller shops. Product offer tables stay in Cardmarket price order.

## `minPrice` (type: `number`):

Drop listings cheaper than this EUR amount.

## `maxPrice` (type: `number`):

Drop listings more expensive than this EUR amount.

## `isFoil` (type: `boolean`):

Only return foil listings when the product exposes a foil flag.

## `isReverseHolo` (type: `boolean`):

Only return reverse-holo listings.

## `isSigned` (type: `boolean`):

Only return listings for signed cards.

## `isAltered` (type: `boolean`):

Only return listings for altered art cards.

## `isFirstEd` (type: `boolean`):

Only return first-edition listings.

## `isPlayset` (type: `boolean`):

Only return playset listings (typically 4 copies).

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

Maximum listing rows to collect across all keywords, shops, and URLs. 0 = unlimited (subject to maxPages). Cardmarket product pages cap at 300 offers unless you tighten filters.

## `maxPages` (type: `integer`):

Safety cap on pagination. Product offers load ~50 per page; shops ~20; search ~30 products. Shop inventory is capped at 15 pages (~300 hits) by Cardmarket.

## `monitorMode` (type: `boolean`):

On a schedule, push and charge only listing IDs not seen in a previous run. First run delivers the full match set (baseline). Pair with an Apify Schedule and a stable monitorStoreName.

## `monitorStoreName` (type: `string`):

Named Key-Value store for seen listing IDs across scheduled runs. Use a distinct name per watch (e.g. blastoise-nm vs charizard-shops).

## `resetMonitorState` (type: `boolean`):

Clear the seen-ID cache before this run (next run becomes a new baseline).

## `proxyConfiguration` (type: `object`):

Recommended on Apify: RESIDENTIAL. Datacenter IPs usually hit Cloudflare. Local runs can leave proxy off.

## Actor input object example

```json
{
  "searchKeywords": [
    "charizard"
  ],
  "startUrls": [
    {
      "url": "https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200"
    }
  ],
  "game": "Pokemon",
  "locale": "en",
  "minCondition": "any",
  "language": "any",
  "sellerCountry": "any",
  "sellerType": "any",
  "sort": "best_match",
  "isFoil": false,
  "isReverseHolo": false,
  "isSigned": false,
  "isAltered": false,
  "isFirstEd": false,
  "isPlayset": false,
  "maxItems": 100,
  "maxPages": 20,
  "monitorMode": false,
  "monitorStoreName": "cardmarket-listings-monitor",
  "resetMonitorState": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Default dataset items.

# 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 = {
    "searchKeywords": [
        "charizard"
    ],
    "startUrls": [
        {
            "url": "https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/cardmarket-listings-scraper").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 = {
    "searchKeywords": ["charizard"],
    "startUrls": [{ "url": "https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/cardmarket-listings-scraper").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 '{
  "searchKeywords": [
    "charizard"
  ],
  "startUrls": [
    {
      "url": "https://www.cardmarket.com/en/Pokemon/Products/Singles/151/Blastoise-ex-V3-MEW200"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call crawloop/cardmarket-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/yDw1sZO3eljSXKolV/builds/gGuVw35L7j66FxbPn/openapi.json
