# Yuyu-tei Japan TCG Singles — Sell, Buy-back & Spread in 1 Call (`jpmarketdata/yuyutei-tcg-price-checker`) Actor

Japanese TCG singles on yuyu-tei.jp in one call: retail and buy-back price quantiles, the measured sell/buy spread per card, plus rarity breakdown, in-stock ratio and damaged-copy discount. Pokemon, Yu-Gi-Oh, One Piece and more. From $0.02, no subscription. 遊々亭の販売・買取相場を1コールで。

- **URL**: https://apify.com/jpmarketdata/yuyutei-tcg-price-checker.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 88.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 market summaries

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/platform/actors/running/actors-in-store#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

## Yuyu-tei Japan TCG Singles — Sell, Buy-back & Spread in 1 Call

**What does this card cost in Japan — and what will a Japanese shop pay for it?**
One call answers both, for a card name or a whole expansion set.

This Actor reads [Yuyu-tei](https://yuyu-tei.jp/) (遊々亭 — a major Japanese
trading-card retailer), which publishes **its selling price and its buy-back
price on the same catalog**, and returns **one compact market record**:

- **`sellPriceJpy`** — min / p25 / median / p75 / max / average of the Japanese
  **retail** price
- **`buyPriceJpy`** — the same quantiles for the price the shop **pays to buy
  the card back** (買取価格). This is the objective ceiling on what a card can be
  sourced for in Japan, and it does not exist in any TCGplayer/CardMarket-derived
  dataset
- **`spreadPct`** — the **measured** sell/buy spread per card, `(sell − buy) / sell`.
  The two sides are joined on the shop's own hidden cart keys (`cart_ver` /
  `cart_cid`), so it is a real per-card match, not a name join
- **`rarityBreakdown`** — count, median sell, median buy and median spread per
  rarity (SR / SAR / AR / RR / …)
- **`inStockRatio`**, **`damaged.medianDiscountPct`** (how much cheaper a 傷有り
  copy is), **`buyPriceUpCount`** (cards whose buy-back price was just raised —
  a demand signal), **`topBySellPrice`** and **`tightestSpread`** top-5 lists
- USD conversion at the current rate

There is **no paging** on this shop: a search renders its entire result set on
one page (312 cards measured), so `cardsFound` is the exact population, not a
sample.

No login, no API key, nothing stored between runs. 2–3 requests per run.

### Pricing — from $0.02 per call, no subscription

| Event | Price | When |
|---|---|---|
| Market summary | **$0.02** | Once per run (per query analyzed) |
| Individual card record | **$0.002** | Only if you enable **Include individual cards** |

A default run costs **$0.02** and takes about 6 seconds.
**A query that finds zero cards is never charged.**

### Input

| Field | Example | Notes |
|---|---|---|
| `game` | `"poc"` | Section code: `poc` Pokemon / `ygo` Yu-Gi-Oh! / `opc` One Piece / `dm` Duel Masters / `ws` Weiss Schwarz / `ua` Union Arena / `vg` Vanguard / `digi` Digimon / `bs` Battle Spirits / `gcg` Gundam. Any other code the shop uses also works |
| `searchMode` | `"cardName"` | `cardName` = search the catalog, `setCode` = list a whole expansion |
| `cardName` | `"ピカチュウ"` | Japanese works best — the catalog is Japanese-only |
| `setCode` | `"m05"` | The code in the set URL, e.g. `https://yuyu-tei.jp/sell/poc/s/m05` |
| `rarity` | `"SR"` | Optional: keep only one rarity, as printed in the section headings |
| `includeDamaged` | `true` | Adds 1 request and the damaged-copy discount |
| `inStockOnly` | `false` | Restrict every statistic to cards that can ship today |
| `includeIndividualCards` | `false` | Enable to also get one record per card (+$0.002 each) |
| `maxRecords` | `100` | Caps the individual records only — the summary always covers every card found |
| `convertToUsd` | `true` | Adds USD statistics |

### Output example (`type: "market_summary"`, values measured for ピカチュウ)

```json
{
  "type": "market_summary",
  "query": "ピカチュウ",
  "game": "poc",
  "gameName": "Pokemon Card Game (ポケモンカードゲーム)",
  "searchMode": "cardName",
  "rarityFilter": null,
  "cardsFound": 312,
  "inStockCount": 133,
  "inStockRatio": 0.4263,
  "sellPriceJpy": {"min": 30, "p25": 780, "median": 9980, "p75": 79800, "max": 998000, "average": 114065},
  "buyPriceJpy": {"n": 272, "min": 2, "p25": 1100, "median": 11000, "p75": 66250, "max": 800000, "average": 85612},
  "spreadPct": {"n": 272, "p25": 39.4, "median": 39.8, "p75": 55.6},
  "damaged": {"n": 111, "medianDiscountPct": 40.3},
  "rarityBreakdown": [
    {"rarity": "PROMO", "count": 145, "sellMedian": 79800, "buyMedian": 48000, "spreadMedianPct": 39.7},
    {"rarity": "TD", "count": 66, "sellMedian": 50, "buyMedian": 100, "spreadMedianPct": 70.6},
    {"rarity": "SR", "count": 5, "sellMedian": 34800, "buyMedian": 25000, "spreadMedianPct": 39.6}
  ],
  "buyPriceUpCount": 251,
  "topBySellPrice": [
    {"cardId": "smpromo-300-10088", "cardNumber": "288/SM-P", "name": "ピカチュウ", "rarity": "PROMO",
     "sellPriceJpy": 998000, "buyPriceJpy": 800000, "spreadPct": 19.8}
  ],
  "tightestSpread": [
    {"cardId": "sm09-10101", "cardNumber": "101/095", "name": "ピカチュウ＆ゼクロムGX", "rarity": "SR",
     "sellPriceJpy": 298000, "buyPriceJpy": 240000, "spreadPct": 19.5}
  ],
  "sellPriceUsd": {"min": 0.19, "p25": 4.99, "median": 63.87, "p75": 510.72, "max": 6387.2, "average": 730.02},
  "exchangeRateJpyUsd": 0.0064,
  "checkedAt": "2026-07-26T09:00:00+00:00",
  "sourceUrls": {
    "sell": "https://yuyu-tei.jp/sell/poc/s/search?search_word=%E3%83%94%E3%82%AB%E3%83%81%E3%83%A5%E3%82%A6&kizu=0",
    "buy": "https://yuyu-tei.jp/buy/poc/s/search?search_word=%E3%83%94%E3%82%AB%E3%83%81%E3%83%A5%E3%82%A6&kizu=0",
    "damaged": "https://yuyu-tei.jp/sell/poc/s/search?search_word=%E3%83%94%E3%82%AB%E3%83%81%E3%83%A5%E3%82%A6&kizu=1"
  }
}
```

With `includeIndividualCards: true` you additionally get one record per card:

```json
{
  "type": "card",
  "query": "m05",
  "game": "poc",
  "cardId": "m05-10118",
  "cardNumber": "118/081",
  "name": "メガダークライex",
  "rarity": "MUR",
  "sellPriceJpy": 59800,
  "buyPriceJpy": 42000,
  "spreadPct": 29.8,
  "damagedPriceJpy": 35880,
  "stockStatus": "in_stock",
  "detailUrl": "https://yuyu-tei.jp/sell/poc/card/m05/10118"
}
```

### Use cases

- **Export / arbitrage sourcing** — compare the Japanese retail band against
  eBay, TCGplayer or CardMarket, and use `buyPriceJpy` as the objective floor of
  what the card is worth in cash inside Japan
- **Buylist benchmarking** — `spreadPct` is a real Japanese shop's gross margin
  per card; use it to price your own buylist
- **Set-level scouting** — run in `setCode` mode right after a release and read
  `rarityBreakdown` to see which rarity carries the set's value
- **Demand monitoring** — schedule the Actor and watch `buyPriceUpCount` and the
  median buy price: a shop raising its buy-back offer is the earliest public
  signal that a card is moving
- **Condition pricing** — `damaged.medianDiscountPct` quantifies what the
  Japanese market takes off for a played copy

### Notes & limits

- **No images and no product descriptions are collected or returned.** The
  shop's terms reserve the copyright on its images and copy, so this Actor
  deliberately reads only card name, card number, rarity, prices and stock —
  and never the image URL. Do not expect an image field
- Prices are **shop asks and shop bids**, not transaction records. There is no
  sale history and no timestamp per card, so this is a snapshot, not a time
  series (schedule the Actor if you want one)
- `buyPriceJpy` only exists for cards the shop is currently buying; cards
  without an offer are counted in `cardsFound` but excluded from the buy and
  spread statistics (`buyPriceJpy.n` / `spreadPct.n` tell you how many joined).
  Because the two sets differ, `buyPriceJpy.median` can sit *above*
  `sellPriceJpy.median` — the shop tends not to buy the cheapest cards at all
- `buyPriceUpCount` is the shop's own 買取強化 marker, which it applies
  liberally (251 of 272 cards in the measured ピカチュウ run). Read it as a
  trend over scheduled runs, not as an absolute rarity signal
- The **set pages ignore the damaged flag**, so in `setCode` mode the damaged
  catalog is fetched through the search endpoint (`vers[]=<setCode>&kizu=1`);
  the result is the same set, damaged copies only
- The rarity comes from the shop's section headings and differs per game
  (`SR`/`SAR`/`AR` for Pokemon, `PROMO`, `-` for uncategorized …)
- Japanese-language catalog: English card names mostly do not match. Use
  日本語 (ピカチュウ, 青眼の白龍, モンキー・D・ルフィ)
- Read-only and throttled (1 request / 1.5 s), 2–3 requests per run
- No personal data: this is a first-party retailer's catalog, there are no
  sellers and no user content

***

### 日本語ガイド

**遊々亭(yuyu-tei.jp)の日本語TCGシングルについて、販売価格・買取価格・その差(スプレッド)を1コールで返す Actor です。**

- **概要**: カード名または収録弾コードを指定すると、**販売価格の分位点**(最安・p25・中央値・p75・最高値・平均)、**買取価格の分位点**、そして**カード単位で実測したスプレッド**(`(販売−買取)/販売`)を返します。販売ページと買取ページはショップ自身の隠しフィールド(`cart_ver`/`cart_cid`)で突き合わせているため、カード名の文字列一致ではなく**同一カードの実測差**です。あわせてレアリティ別内訳(件数・販売中央値・買取中央値・スプレッド中央値)、在庫あり率、**傷有り品の値引き率(中央値)**、**買取強化(priceup)件数**、高額 Top5、スプレッド最小 Top5、USD換算を返します。
- **ページングが無い**ため、検索結果は1ページに全件描画されます(実測312件)。`cardsFound` はサンプル数ではなく**母集団の実数**です。
- **使い方**: `game` にセクションコード(`poc`=ポケカ / `ygo`=遊戯王 / `opc`=ワンピース / `dm`=デュエマ / `ws`=ヴァイス / `ua`=ユニアリ / `vg`=ヴァンガード / `digi`=デジモン / `bs`=バトスピ / `gcg`=ガンダム、その他のコードも可)、`searchMode` に `cardName`(カード名検索)か `setCode`(収録弾の全カード)を指定します。`rarity` でレアリティを1種類に絞れます。`includeDamaged`(既定 ON)は傷有りカタログを +1 リクエストで読み、`inStockOnly` を ON にすると在庫のあるカードだけで統計を取ります。
- **料金**: マーケットサマリー1件 **$0.02**、個別カードレコードは **$0.002/件**(既定 OFF なので既定実行は $0.02 固定)。**0件のクエリには課金されません。** サブスクリプション不要です。
- **画像と商品説明文は一切収集・返却しません。** 遊々亭の利用規約は画像・文章の無断転載を禁じているため、本 Actor が返すのは**カード名・型番・レアリティ・価格・在庫という事実データと集計統計のみ**です(画像URLも返しません)。
- **その他の注意**: 価格は「店頭掲示の販売価格/買取価格」であり成約履歴ではありません(販売日時は取得できず時系列分析は不可 — 継続監視はスケジュール実行で行ってください)。買取対象外のカードは `cardsFound` には含まれますが買取・スプレッド統計からは除外されます(`buyPriceJpy.n` / `spreadPct.n` で結合件数が分かります)。収録弾ページは傷有りフラグを無視するため、`setCode` モードの傷有りは検索エンドポイント(`vers[]=<収録弾>&kizu=1`)経由で取得しています。カタログは日本語のため、キーワードは日本語でご指定ください。

# Actor input Schema

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

Which card game to search. Common codes: poc = Pokemon (ポケモンカードゲーム), ygo = Yu-Gi-Oh! (遊戯王), opc = One Piece, dm = Duel Masters, ws = Weiss Schwarz, ua = Union Arena, vg = Vanguard, digi = Digimon, bs = Battle Spirits, gcg = Gundam Card Game. Any other code the shop uses also works — it is the path segment in https://yuyu-tei.jp/sell/<code>/s/...

## `searchMode` (type: `string`):

cardName = search the whole game catalog for a card name. setCode = list every card of one expansion set.

## `cardName` (type: `string`):

Used when 'Search by' is cardName. Japanese works best — the catalog is Japanese-only (ピカチュウ, 青眼の白龍, ルフィ). One call costs $0.02.

## `setCode` (type: `string`):

Used when 'Search by' is setCode. The code in the URL of a set page, e.g. m05 for https://yuyu-tei.jp/sell/poc/s/m05. Returns every card of that set (one page, no paging).

## `rarity` (type: `string`):

Keep only one rarity, as printed in the shop's section headings: SR, SAR, AR, RR, R, U, C, UR, CHR, PROMO ... (varies per game). Leave empty for all rarities.

## `includeDamaged` (type: `boolean`):

On by default. Adds one request that reads the 傷有り (damaged) catalog and reports how much cheaper a damaged copy is (median discount vs the same card in normal condition). Turn it off to run with 2 requests instead of 3.

## `inStockOnly` (type: `boolean`):

Off by default: out-of-stock cards keep their listed price and are part of the market picture. Turn on to restrict every statistic to cards the shop can actually ship today.

## `includeIndividualCards` (type: `boolean`):

Off by default: a run costs a flat $0.02 for the market summary. Enable to also get one record per card (card number, name, rarity, sell price, buy-back price, spread, damaged price, stock, detail URL) at +$0.002 per card. Images and product descriptions are never returned.

## `maxRecords` (type: `integer`):

Caps how many individual card records are returned (and billed) when 'Include individual cards' is on. The market summary always covers every card found, whatever this value is.

## `convertToUsd` (type: `boolean`):

Adds USD statistics next to JPY using the current exchange rate (open.er-api.com).

## Actor input object example

```json
{
  "game": "poc",
  "searchMode": "cardName",
  "cardName": "ピカチュウ",
  "includeDamaged": true,
  "inStockOnly": false,
  "includeIndividualCards": false,
  "maxRecords": 100,
  "convertToUsd": true
}
```

# 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 = {
    "game": "poc",
    "searchMode": "cardName",
    "cardName": "ピカチュウ"
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/yuyutei-tcg-price-checker").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 = {
    "game": "poc",
    "searchMode": "cardName",
    "cardName": "ピカチュウ",
}

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/yuyutei-tcg-price-checker").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "game": "poc",
  "searchMode": "cardName",
  "cardName": "ピカチュウ"
}' |
apify call jpmarketdata/yuyutei-tcg-price-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jpmarketdata/yuyutei-tcg-price-checker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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