# TCGplayer Product Pricebook (`jpmarketdata/tcgplayer-product-pricebook`) Actor

Build a bulk pricebook for exact TCGplayer product IDs, with verified set and card identity, separate printing market prices and listed medians. Preserves unavailable prices as null, without seller data.

- **URL**: https://apify.com/jpmarketdata/tcgplayer-product-pricebook.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 product analyzeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## TCGplayer Product Pricebook

Build a small pricebook for exact TCGplayer product IDs. Each product report identifies its set and card number, and keeps source printing prices separate for repeated inventory valuation and acquisition checks.

**Price:** $0.05 per successful product report (`product-analyzed`).

### Input

`productIds` accepts 1–10 positive integer TCGplayer product IDs. The numeric ID is authoritative: 517044 is Venusaur ex - 198/165, not Charizard. `maxItems` caps successfully analyzed product reports at 10. Duplicate IDs are fetched once. No search keywords, seller URLs, cookies, credentials or API key are accepted.

### Output

One row per product containing `productId`, `productName`, `productLine`, `setName`, `setCode`, `cardNumber`, `sourceUrl`, `currency`, `status`, `printings`, `reason` and `fetchedAt`. Each printing has `printingType`, `marketPrice`, `listedMedianPrice` and `status`. All price values are USD. Source null prices remain null and are labeled unavailable; they are not zero-valued cards. Market prices are source-computed market estimates, while listed median prices describe asking prices. Neither is a new observed individual transaction.

Printing labels are taken from the source, such as Normal and Foil. This report does not claim condition-specific, language-specific or graded-card valuation. A product whose published printing prices are all null returns `unavailable` with an explanation. Card identity is taken from the details endpoint and must match the requested numeric ID.

### Pricing

$0.05 per successfully analyzed product report, using one `product-analyzed` event regardless of the number of printing variants. A verified product with published null price points is a successful, billable unavailability report. Missing products, authentication failures and malformed source responses are not billed. The example input requests one product report and uses the same event against any available Apify credit; it does not promise a zero-dollar run or apply a customer-plan restriction. The lower of `maxItems`, unique input IDs and the available event budget is applied before fetching. A later source failure does not undo earlier completed reports or their charges.

### Limits

At most ten products and twenty HTTP requests: two GETs per product, no retries or redirect following. At least ten seconds separate requests to each origin; the details and pricepoints endpoints are on separate origins. Run limit 180 seconds, 256 MB memory, no browser, paid external API or proxy. Stop on access blocks, rate limits, timeouts, contradictory identity or malformed source structure. A 404 is not a successful empty product. Responses are capped at 1 MB each. Release checks review robots; runtime only allows the two prechecked numeric product routes.

### Privacy

No seller profiles, seller listings, names, addresses, sale histories, images, card descriptions, flavor text or artwork are persisted. Only product identity, source pricing facts, printing labels and source links are returned. No account, cookie or API key is required. Independent product, not affiliated with or endorsed by TCGplayer.

# Actor input Schema

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

Positive numeric product IDs from public TCGplayer URLs. Duplicates are fetched once.

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

Defaults to one sample report; raise up to ten, subject to the available event budget.

## Actor input object example

```json
{
  "productIds": [
    517044
  ],
  "maxItems": 1
}
```

# Actor output Schema

## `reports` (type: `string`):

No description

# 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 = {
    "productIds": [
        517044
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/tcgplayer-product-pricebook").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 = { "productIds": [517044] }

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/tcgplayer-product-pricebook").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 '{
  "productIds": [
    517044
  ]
}' |
apify call jpmarketdata/tcgplayer-product-pricebook --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/tcgplayer-product-pricebook"
        }
    }
}
```

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/zJDuCfskVERrLEFC1/builds/YFPIxBtYFpfCJC6QE/openapi.json
