# TCGPlayer Listings Scraper — Prices, Sellers & Market Data (`crawloop/tcgplayer-listings-scraper`) Actor

Scrape TCGPlayer listings by keyword, product URL, or seller shop — a TCGPlayer API alternative for US TCG shops. Export market price, seller offers, condition, shipping, and optional recent sales as JSON.

- **URL**: https://apify.com/crawloop/tcgplayer-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 $1.79 / 1,000 tcgplayer 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

## TCGPlayer Listings Scraper — Prices, Sellers & Market Data

> **Disclaimer:** Unofficial tool for publicly accessible TCGPlayer listings. **TCGPlayer** and related names are trademarks of eBay Inc. / TCGplayer, Inc. Not affiliated with, sponsored by, or endorsed by TCGPlayer or eBay. For informational, research, aggregation, and market-intelligence use only. Respect applicable terms of use and law.

**TCGPlayer listings scraper** for the US trading-card marketplace — **Pokémon**, **Magic: The Gathering**, **Yu-Gi-Oh!**, **Lorcana**, **One Piece**, and more. Use it as a **TCGPlayer scraper**, **TCGPlayer API alternative**, and **TCGPlayer seller shop** export: paste a **product URL**, walk a **seller name**, or search by **keyword**. Dataset rows are **one seller listing each** — **USD price**, **shipping**, **condition**, **printing**, **market / median / lowest**, and **seller rating**. Fast **HTTP JSON** — **no login**, **no official API key**. Call from **Python**, **Node.js**, **cURL**, or **Apify MCP**.

Built for **US TCG shops**, **restock pricing**, **seller intelligence**, and **scheduled listing monitors**. Official developer API access is closed to new apps — this Actor reads the same public marketplace JSON the website uses.

### Collectibles suite

| Actor | Focus |
| :--- | :--- |
| TCGPlayer Listings Scraper ◄── you are here | US TCG seller listings and shops |
| [Cardmarket Listings Scraper](https://apify.com/crawloop/cardmarket-listings-scraper) | 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 **TCGPlayer scraper** / **TCGPlayer listings scraper** that returns flat JSON rows
- You want **product URL arrays**, **seller shop walks**, and **keyword search** in one run
- You track **condition**, **printing**, **shipping**, and **USD offer prices** next to **market price**
- You scrape TCGPlayer 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

- **Nightly bulk catalog CSVs** — tcgcsv-style dumps are a one-shot catalog job; this Actor is live listings
- **EU TCG offer books** — use [Cardmarket Listings Scraper](https://apify.com/crawloop/cardmarket-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 TCGPlayer API replacement** — new developer keys are closed; this Actor reads public marketplace JSON
- **Buyer PII, DMs, or order history** — public listing rows only

### Key features

- **Product URLs** — paginate every seller listing on a SKU (not a 3-offer search card)
- **Seller shop inventory** — walk a store name / seller URL with optional `shopQuery`
- **Keyword search** — find matching products, then scrape their listings
- **Market context on every row** — `marketPrice`, `medianPrice`, `lowestPrice`, `lowestPriceWithShipping`
- **Monitor mode** — named Key-Value store of seen listing IDs; later scheduled runs emit only new rows
- **Optional recent sales** — last completed sales for the SKU (`includeSalesHistory`)
- **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 TCGPlayer listings for a SKU, condition, and printing |
| **Seller shop dump** | Active inventory for a store name; `shopQuery` to keep one card / set |
| **Arbitrage watch** | `monitorMode` on a product URL; only new listing IDs billed |
| **US vs EU comps** | TCGPlayer live rows, then eBay sold listings (or Cardmarket) for the same query |
| **Shop intelligence** | Gold / Direct / verified flags, rating, sales band, shipping |

### Quick start

**Product URL (seller listings on the SKU):**

```json
{
  "startUrls": [
    { "url": "https://www.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard" }
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Keyword search** (cap listings per product for cheaper discovery):

```json
{
  "searchKeywords": ["charizard"],
  "productLine": "pokemon",
  "listingsPerProduct": 10,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

**Seller shop + monitor:**

```json
{
  "sellerNames": ["ProSoul Games"],
  "shopQuery": "charizard",
  "maxItems": 150,
  "monitorMode": true,
  "monitorStoreName": "tcgplayer-charizard-shops",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Input parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchKeywords` | Array | — | Search queries (required if no URLs/sellers) |
| `sellerNames` | Array | — | TCGPlayer store names to walk |
| `shopQuery` | String | — | Filter each seller shop by keyword. Empty = full inventory |
| `startUrls` | Array | — | TCGPlayer product, search, or seller URLs |
| `productLine` | String | `all` | `pokemon`, `magic`, `yugioh`, `lorcana`, … |
| `condition` | String | `any` | Near Mint, Lightly Played, … |
| `printing` | String | `any` | Normal, Holofoil, Reverse Holofoil, … |
| `language` | String | `any` | English, Japanese, … |
| `sort` | String | `best_match` | `best_match`, `best_selling`, `price_asc`, `price_desc`, `name_asc` |
| `minPrice` / `maxPrice` | Number | — | USD price band |
| `listingsPerProduct` | Integer | `10` | Cap offers per product on keyword search (`0` = all) |
| `includeSalesHistory` | Boolean | `false` | Attach recent completed sales for each SKU |
| `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 | `tcgplayer-listings-monitor` | Named KV store for seen IDs |
| `resetMonitorState` | Boolean | `false` | Wipe the seen-ID cache |
| `proxyConfiguration` | Object | RESIDENTIAL | Recommended on Apify; local runs can disable proxy |

### Output format

Each dataset item is one seller listing (`recordType: listing`).

| Field | Type | Description |
| :--- | :--- | :--- |
| `recordType` | String | `listing` |
| `listingId` | Integer | TCGPlayer listing id |
| `productId` | Integer | Catalog product id |
| `url` | String | Public product URL |
| `productName` | String | Card / product title |
| `productLineName` | String | e.g. `pokemon` |
| `setName` / `setCode` | String | Expansion |
| `rarityName` / `cardNumber` | String | Rarity and collector number when present |
| `condition` | String | Near Mint, Lightly Played, … |
| `printing` | String | Normal, Holofoil, … |
| `language` | String | Print language |
| `quantity` | Integer | Available quantity |
| `price` | Number | Listing price (USD) |
| `shippingPrice` | Number | Shipping (USD) |
| `priceWithShipping` | Number | Price + shipping |
| `currency` | String | `USD` |
| `marketPrice` / `medianPrice` / `lowestPrice` | Number | Product-level market stats |
| `lowestPriceWithShipping` | Number | Cheapest offer including shipping |
| `totalListings` | Integer | Live listing count on the SKU |
| `sellerName` / `sellerKey` / `sellerId` | String | Seller identity |
| `sellerRating` / `sellerSales` | Number / String | Public rating and sales band |
| `goldSeller` / `verifiedSeller` / `directSeller` | Boolean | Program flags |
| `sellerPrograms` | Array | Direct, Pro, CertifiedHobbyShop, … |
| `lastSalePrice` / `lastSaleDate` | Number / String | When `includeSalesHistory` is on |
| `recentSales` | Array | Compact completed-sale rows |
| `source` | String | `search`, `product_url`, or `seller_shop` |
| `searchQuery` | String | Keyword or seller that produced the row |
| `scrapedAt` | String | ISO scrape time |

**Example listing row:**

```json
{
  "recordType": "listing",
  "source": "product_url",
  "listingId": 794438088,
  "productId": 219058,
  "productName": "Charizard - 3/70 (#39 Charizard Stamped)",
  "setName": "SWSH04: Vivid Voltage",
  "condition": "Lightly Played",
  "printing": "Normal",
  "price": 19.99,
  "shippingPrice": 2.99,
  "priceWithShipping": 22.98,
  "currency": "USD",
  "marketPrice": 7.78,
  "sellerName": "Damos CardShop",
  "sellerRating": 100,
  "url": "https://www.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard-370-39-charizard-stamped",
  "scrapedAt": "2026-08-24T12:00:00+00:00"
}
```

### 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/tcgplayer-listings-scraper').call({
  startUrls: [
    { url: 'https://www.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard' }
  ],
  maxItems: 50,
  proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'] },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/tcgplayer-listings-scraper").call(
    run_input={
        "searchKeywords": ["charizard"],
        "productLine": "pokemon",
        "maxItems": 50,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
        },
    }
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items[0])
```

**cURL**

```bash
curl "https://api.apify.com/v2/acts/crawloop~tcgplayer-listings-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchKeywords":["charizard"],"productLine":"pokemon","maxItems":25}'
```

### 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/tcgplayer-listings-scraper`.

Example prompts:

- "Run TCGPlayer Listings Scraper on https://www.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard, max 50, residential proxy, and return productName, price, condition, sellerName as JSON"
- "Scrape the TCGPlayer shop for seller ProSoul Games, Pokémon Charizard only, and summarize prices and quantities"
- "Pull TCGPlayer listings for charizard, then run Cardmarket Listings Scraper for the same SKU to compare USD vs EUR asks"

### Suite next step

TCGPlayer is the US TCG offer firehose. Next, run [Cardmarket Listings Scraper](https://apify.com/crawloop/cardmarket-listings-scraper) on the same SKU for EU 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 TCGPlayer API?**\
No. New developer API applications are closed. This Actor reads the public marketplace JSON the website uses and returns structured dataset rows — a practical **TCGPlayer API alternative** for pipelines.

**Can I scrape a TCGPlayer seller shop by name?**\
Yes — set `sellerNames` (or paste a search URL with `seller=` / a sellerfeedback URL in `startUrls`). Add `shopQuery` to keep only matching card names.

**Can I paste a TCGPlayer product URL?**\
Yes — `startUrls` accepts product pages (all seller listings), search URLs (`q` + game), and seller URLs.

**Do I need a TCGPlayer API key or login?**\
No — public marketplace data only.

**Does it need a residential proxy?**\
On Apify, **recommended — residential**. Marketplace JSON often works without a proxy locally. The Actor injects `RESIDENTIAL` on the platform when `proxyConfiguration` is omitted (API / MCP / cURL).

**Why not a catalog dump Actor?**\
Nightly price CSVs already cover bulk catalog snapshots. This Actor is listings: live seller offers, shops, and monitors — the weekly job, not a one-shot export.

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

### Related Actors

| Actor | Focus |
| :--- | :--- |
| TCGPlayer Listings Scraper ◄── you are here | TCGPlayer listings and shops |
| [Cardmarket Listings Scraper](https://apify.com/crawloop/cardmarket-listings-scraper) | EU TCG 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`):

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

## `sellerNames` (type: `array`):

Walk each TCGPlayer seller shop (store name as shown on listings, e.g. ProSoul Games). Optional shopQuery keeps only matching card names.

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

When walking seller shops (names or seller URLs), only keep products matching this query. Leave empty for full inventory. Does not apply to marketplace keyword search.

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

TCGPlayer product, search, or seller URLs. Product pages scrape seller listings. Search URLs parse q + game. seller= / sellerfeedback URLs walk that shop.

## `productLine` (type: `string`):

Limit keyword search and seller shops to one TCGPlayer catalog. Ignored when a start URL already includes /search/{line}/product.

## `condition` (type: `string`):

Keep only this TCGPlayer condition.

## `printing` (type: `string`):

Keep only this finish (Normal, Holofoil, Reverse Holofoil, …).

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

Keep only this print language.

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

TCGPlayer sort for keyword search. Product listing tables stay in site price order.

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

Drop listings cheaper than this USD amount.

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

Drop listings more expensive than this USD amount.

## `listingsPerProduct` (type: `integer`):

Cap seller offers fetched per product during keyword search (0 = all listings, subject to maxItems / maxPages). Product URLs always paginate listings. Use 5–10 for cheap discovery; 0 for a full offer book.

## `includeSalesHistory` (type: `boolean`):

One extra marketplace call per product for latest completed sales. Adds lastSalePrice / lastSaleDate and a compact recentSales array. Off by default.

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

Maximum listing rows to collect across all keywords, shops, and URLs. 0 = unlimited (subject to maxPages).

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

Safety cap on pagination. Search returns ~24 products per page; product listings ~20 offers per page.

## `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. charizard-nm vs shop-prosoul).

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

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

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

Recommended on Apify: RESIDENTIAL. Local runs can leave proxy off — marketplace JSON often works directly.

## Actor input object example

```json
{
  "searchKeywords": [
    "charizard"
  ],
  "startUrls": [
    {
      "url": "https://www.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard"
    }
  ],
  "productLine": "all",
  "condition": "any",
  "printing": "any",
  "language": "any",
  "sort": "best_match",
  "listingsPerProduct": 10,
  "includeSalesHistory": false,
  "maxItems": 100,
  "maxPages": 20,
  "monitorMode": false,
  "monitorStoreName": "tcgplayer-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.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/tcgplayer-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.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/tcgplayer-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.tcgplayer.com/product/219058/pokemon-swsh04-vivid-voltage-charizard"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call crawloop/tcgplayer-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/tcgplayer-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/hhS3eFcCa8PIIXhbR/builds/RSMiUrwM7XwFcobQc/openapi.json
