Japan Used Model Train Market — KATO, TOMIX Search & Alerts
Pricing
from $2.40 / 1,000 listings
Japan Used Model Train Market — KATO, TOMIX Search & Alerts
Search, benchmark and monitor used Japanese model trains (KATO, TOMIX, MicroAce, GreenMax) from Hobbyland Pochi and Hard Off: maker product codes, N / HO scale, set / add-on / single, motor flag, case, normalized grade, JPY/USD. Medians, price history, NEW / PRICE_DROP alerts.
Pricing
from $2.40 / 1,000 listings
Rating
0.0
(0)
Developer
Keiya
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Security
Limited permissionsShare
Japan Used Model Train Market: KATO, TOMIX, MicroAce — Search, Stats, History & Alerts
Quick start
- Click Try for free / open the Actor in Apify Console.
- Keep the prefilled input (
{"mode": "search", "sources": ["pochi", "offmall"], "keywords": ["KATO"], "maxItems": 10}) or type your own: a maker ("TOMIX", "MicroAce"), a product code ("10-1332", "98313", "A-6590") or a train ("新幹線", "0系", "EF58", "Sunrise" → try "サンライズ"). - Press Start. Listings appear in the Output tab in under a minute, with the maker's product code, N / HO scale, set / add-on / single car, whether a powered car is included, case & manual, a normalized condition grade and the price in JPY and USD.
Example output — 3 real rows from the prefilled run above (run on 2026-11-05; prices and stock change daily):
[{"source": "offmall","sourceName": "Hard Off (Off Mall)","sourceItemId": "6676195","url": "https://netmall.hardoff.co.jp/product/6676195/","title": "10-426/10-427 (189系(あずさニューカラー)基本・増結11両セット)","brand": "KATO","brandJa": "カトー","conditionGrade": "VERY_GOOD","conditionGradeRaw": "B","priceJpy": 11000,"inStock": true,"category": "used","scrapedAt": "2026-11-05T12:49:29.502Z","brandRaw": "KATO","productCode": "10-426","productCodeSource": "title","ref": "10-426","model": "kato 10-426","scale": "N","scaleRatio": null,"setType": "add-on","motorized": null,"accessories": null,"lotYear": null,"shop": "ホビーオフ秦野店","priceUsd": 69.51,"fxJpyPerUsd": 158.25},{"source": "pochi","sourceName": "Hobbyland Pochi","sourceItemId": "601688","url": "https://hobbyland-pochi.net/products/detail.php?product_id=15636&product_class_id=601688","title": "客車 セットバラ 10-1873 寝台特急「さくら」佐世保編成バラ マヤ20-2(1両のみ)","brand": "KATO","brandJa": "カトー","brandRaw": "KATO(カトー)","productCode": "10-1873","productCodeSource": "title","ref": "10-1873","shopProductId": "15636","model": "kato 10-1873","scale": "N","scaleRatio": null,"setType": "set","motorized": null,"accessories": {"case": null,"manual": null,"sleeve": null},"lotYear": null,"conditionGrade": "MINT","conditionGradeRaw": "A","priceJpy": 4400,"inStock": true,"category": "used","scrapedAt": "2026-11-05T12:49:30.037Z","priceUsd": 27.8,"fxJpyPerUsd": 158.25},{"source": "pochi","sourceName": "Hobbyland Pochi","sourceItemId": "601697","url": "https://hobbyland-pochi.net/products/detail.php?product_id=15637&product_class_id=601697","title": "電車 セットバラ 10-1182 飯田線荷物電車バラ クモニ83-100(1両のみ)動力なし","brand": "KATO","brandJa": "カトー","brandRaw": "KATO(カトー)","productCode": "10-1182","productCodeSource": "title","ref": "10-1182","shopProductId": "15637","model": "kato 10-1182","scale": "N","scaleRatio": null,"setType": "set","motorized": false,"accessories": {"case": null,"manual": null,"sleeve": null},"lotYear": null,"conditionGrade": "VERY_GOOD","conditionGradeRaw": "B","priceJpy": 4400,"inStock": true,"category": "used","scrapedAt": "2026-11-05T12:49:30.041Z","priceUsd": 27.8,"fxJpyPerUsd": 158.25}]
Japan is where Japanese model trains are cheapest and most plentiful: KATO and TOMIX sets that sold out years ago, MicroAce private-railway EMUs, GreenMax kits, Tenshodo brass, Japan-only limited editions. But the listings are in Japanese, the product code is hidden in an image file name or on the product page, and "does it have the motor car?" is a word in brackets. This Actor turns Japan's large used-train shops into one clean, English dataset you can pipe into Google Sheets, n8n, Slack, Discord or your own pricing model.
Who uses it
| You are… | You use… |
|---|---|
| An eBay seller sourcing Japanese N gauge | search with a grade floor and a max price; stats for the Japanese median per product code before you list |
| A JNR / Shinkansen collector | monitor on "国鉄", "新幹線", "0系", "EF58", "キハ" with alerts to Discord; filter on motorized: true and setType: "set" |
| A private-railway (私鉄) collector | monitor on a railway ("小田急", "近鉄", "阪急", "京急") or a maker that covers them (MicroAce, GreenMax) |
| Hunting Japan-only limited editions | monitor on the product code or name; history to see how often it turns up and at what price |
Shops
| Shop | Id | Listings | What you get |
|---|---|---|---|
| Hobbyland Pochi (ホビーランドぽち, Osaka-based chain specialised in used model trains) | pochi | ~12,000 used N and HO trains, Tetsudou Collection, B-Train Shorty (about 1,100 of them shown as sold) | maker, scale, title, grade A / A´ / B / C / D / ジャンク / 加工品, price, product code from the photo's file name when the shop names it after the code (most KATO / TOMIX / GreenMax items). From the product page: the maker code (メーカー品番), JAN, and case / sleeve / lot facts from the condition note |
| Hard Off Off Mall (ハードオフ オフモール, Hard Off / Hobby Off stores nationwide) | offmall | ~9,600 model trains on sale | maker, code field (usually the maker's product code), name, grade N / S / A / B / C / D / ジャンク, price. From the product page: motor (モーター ○ / -), accessories, case and box condition, store |
Shops not included
| Shop | Why |
|---|---|
| Popondetta (ポポンデッタ) | blocked: Cloudflare answers HTTP 403 to every request from Apify's servers (its "中古品速報" list also needs a session token). About 2,100 used trains were counted on its store lists on 2026-11-05 |
| Surugaya (駿河屋) | blocked: its list pages (/search/) are disallowed by robots.txt |
| Mandarake, Joshin | blocked: plain requests are redirected / refused (403) |
Want a shop added? Open an issue on the Actor page.
What you can do
| Mode | What it does |
|---|---|
| search | Listings matching keywords / makers / grades / price. Keywords match maker + title in English or Japanese, and product codes. For each listing in the result, the product page is read once to add the maker code, motor and case when the listing itself doesn't say. |
| stats | Per-model summary of in-stock listings: count, min / median / max in JPY and USD, broken down by shop and grade, plus the cheapest listing. Models are grouped by maker + product code, so the same set groups across shops. |
| monitor | Run on a schedule. It keeps a snapshot and emits only what changed: NEW, PRICE_DROP, PRICE_UP, SOLD_OUT. An optional webhook goes to Slack / Discord / n8n / Make / Zapier. |
| history | Daily min / median / count per model, by shop and grade, from stored daily snapshots. There is no crawling, so it returns in seconds. Needs keywords, brands or models. |
| deals | In-stock listings at least dealThresholdPct % (default 15) under the median of the same model in the same grade or better, best dealScore first. Statistics only. See Deals. |
Train fields
| Field | Values | Where it comes from |
|---|---|---|
brand | KATO, TOMIX, MicroAce, GreenMax, Tenshodo, Endo, TOMYTEC (Tetsudou Collection), Popondetta, MODEMO, Zoukeimura, Katsumi… (brandJa: カトー, トミックス…) | the shop's maker label, Japanese → English |
productCode | KATO 10-1332, 1-701, 5183, 3067-3 · TOMIX 98313, 9472, HO-9105 · MicroAce A-6590 · GreenMax 31978 · bundles 10-2047+10-2048 | Off Mall's code field or the title (productCodeSource: "title"); Pochi's photo file name ("image", 14 of 14 sampled matched the product page); Pochi's メーカー品番 ("product-page", search / monitor) |
scale | N, HO, Z, other, plus scaleRatio ("1/150", "1/80") | printed scale, or implied by the code (KATO 1-xxx / 3-xxx = HO, 10-xxxx = N; TOMIX HO-xxxx = HO) |
setType | set (基本セット, N両セット, 基本+増結), add-on (増結セット), single (one car or locomotive), null (track, parts, unknown) | title words |
motorized | true = includes a powered car, false = trailer cars only, null = not stated | "(M)" / "動力付き" / a locomotive → true; "(T)" / "動力無し" / display models (Tetsudou Collection) → false; Off Mall product page モーター ○ / - |
accessories | { case, manual, sleeve }, each true / false / null | only what the shop states: "インサート紙なし" → sleeve false, "クリアケース傷み" → case true (worn but present) |
lotYear | 2012 | "2012年ロット": KATO and TOMIX re-run the same code; lots are priced apart |
Condition grades
NEW > MINT > EXCELLENT > VERY_GOOD > GOOD > FAIR > JUNK, plus CUSTOM (modified, repainted, kit-built). The shop's own label is always kept in conditionGradeRaw. Both maps follow the shops' published legends:
| Shop | Raw → normalized |
|---|---|
| Hobbyland Pochi | A (car and case mint, test-run only, extra parts unused) → MINT · A´ (mint car, minor factory dust or an unfixed maker error) → EXCELLENT · B (some extra parts fitted, all originals kept) → VERY_GOOD · C (parts fitted / missing, wheel wear) → GOOD · D (faults, visible marks) → FAIR · ジャンク (as is) → JUNK · 加工品 (custom) → CUSTOM |
| Off Mall | N 新品・未開封 → NEW · S 新品同様・廃盤 → MINT · A 使用回数の少ない美品 → EXCELLENT · B 日常使用・傷汚少 → VERY_GOOD · C 使用感・傷汚れ多 → GOOD · D ダメージ多 → FAIR · ジャンク → JUNK |
Deals
deals mode reads the same listings as stats, then compares each in-stock listing with the other listings of the same model (same model key) in the same grade or better, and returns only those at least dealThresholdPct % under that median:
{ "mode": "deals", "keywords": ["KATO"], "dealThresholdPct": 15, "maxItems": 0 }
Each deal is a normal listing plus:
| Field | Meaning |
|---|---|
medianJpy (medianUsd) | median price of the listings it was compared with |
comparisonCount | how many listings that median is based on |
discountPct | how far under the median, in % |
dealScore | 0–100: the discount (40 % off = full marks) weighted by comparisonCount (1 → 60 %, 5 or more → 100 %). Capped at 50 when comparisonCount is 2 or less (low confidence) |
- Models with nothing to compare against are not returned. Grades sold as is (
JUNKandCUSTOM) are neither returned nor used as comparisons. - The market is the listings this run read: use
maxItems: 0(whole shops) or a keyword that covers the whole model, so every listing of "kato 10-1332" is compared. - No LLM is involved; it is the same arithmetic as
stats.
Deal alerts. In monitor mode, "dealsOnly": true outputs and sends only the NEW / PRICE_DROP events that are deals against the listings that monitor tracks, with the same four fields. They are charged as normal monitor events.
Daily deal digest. In deals mode, set alertWebhookUrl (Slack, Discord or any URL) and the best dealsWebhookTop deals (default 10, highest dealScore first, ties broken by the deeper discount) are POSTed once per run, one line each: score, discount, grade, title, price vs median, link. Schedule it every morning (e.g. 0 7 * * *, maxItems: 0) for a short list of the day's best-priced listings; the dataset still holds every deal.
English summaries (optional, your own LLM key). "summarize": true with llmApiKey (stored encrypted) adds summaryEn to every listing in search and deals mode, e.g. "KATO 10-1332 Sunrise Express 7-car set, Excellent, 24% under Japan median". llmProvider is anthropic (default, Claude Haiku claude-haiku-5-5) or openai (gpt-5-mini); llmModel overrides the model. Listings are sent 25 per request, so the cost grows with the number of listings: with Claude Haiku, 100 listings ≈ $0.003, well under $0.01. Your provider bills your key; the Actor charges nothing extra. Without a key the option is skipped with a warning, and an LLM error never fails the run (the listings are returned without summaryEn).
Input
{"mode": "search","sources": ["pochi", "offmall"],"keywords": ["新幹線", "0系"],"brands": ["KATO", "TOMIX"],"grades": ["MINT", "EXCELLENT", "VERY_GOOD"],"maxPriceJpy": 30000,"maxItems": 30}
Monitor example (schedule it hourly):
{"mode": "monitor","sources": ["pochi", "offmall"],"keywords": ["KATO", "TOMIX"],"alertWebhookUrl": "https://discord.com/api/webhooks/XXX/YYY","alertEvents": ["NEW", "PRICE_DROP"]}
The first monitor run only builds the snapshot and emits nothing. Each monitor keeps one snapshot per shop, keyed by its filters. Give each schedule a distinct monitorId if several use the same filters.
Request budget:
- Every request is one listing page (Pochi 50 trains, Off Mall 30), read newest-first. Requests to Pochi are spaced at least 1.5 s apart.
- An hourly light monitor is normally 2 requests, plus one product page per new listing.
"fullScan": truereads everything: Pochi ≈ 250 pages (~7 min), Off Mall ≈ 320 pages (~6 min).
Price history since 2026-11-05
The Actor's own scheduled full scans store the complete inventory of each shop: Pochi every day, Off Mall once a week, on Sundays. history mode reads those snapshots:
{ "mode": "history", "models": ["kato 10-1332", "tomix 98313"], "days": 90 }
Each row is one model × day: count, minJpy, medianJpy, maxJpy, plus byShop, byGrade and byShopGrade.
- History is still being collected. Treat the first 30 days as indicative only.
- Off Mall numbers appear on Sunday rows only, so compare them week to week.
- History uses the codes found on listing pages (title, Off Mall code field, Pochi photo names). Pochi items whose photo isn't named after the code group by maker + cleaned title.
Output
{"source": "pochi","sourceName": "Hobbyland Pochi","sourceItemId": "601669","url": "https://hobbyland-pochi.net/products/detail.php?product_id=3570&product_class_id=601669","title": "オロネ25 2012年ロット","brand": "KATO","brandJa": "カトー","productCode": "5183","productCodeSource": "product-page","model": "kato 5183","jan": "4949727053882","scale": "N","scaleRatio": "1/150","setType": "single","motorized": null,"accessories": { "case": true, "manual": null, "sleeve": null },"lotYear": 2012,"conditionGrade": "EXCELLENT","conditionGradeRaw": "A´","priceJpy": 3300,"priceUsd": 20.85,"fxJpyPerUsd": 158.25,"inStock": true,"category": "used","scrapedAt": "2026-11-05T06:10:12.000Z"}
stats rows and monitor events have the same shape as in the camera Actor: stats adds count, minJpy, medianJpy, maxJpy, byShop, byGrade; events add eventType and the price change.
Pricing
Pay per event, no subscription:
| Event | Price |
|---|---|
listing (search mode, per listing) | $0.003 |
model-stats (stats mode, per model row) | $0.005 |
alert-event (monitor mode, per NEW / PRICE_DROP / PRICE_UP / SOLD_OUT) | $0.01 |
history-row (history mode, per model × day row) | $0.002 |
deal-row (deals mode, per deal returned) | $0.005 |
Higher Apify plans get progressively lower prices (Bronze / Silver / Gold discounts).
Integrations
- Google Sheets: Apify → Integrations → Google Sheets.
- Slack / Discord: paste an incoming-webhook URL into
alertWebhookUrl. - n8n / Make / Zapier: the Apify node, or point
alertWebhookUrlat a webhook trigger. - AI agents: see the next section.
AI agents (MCP)
A dedicated MCP server, @keiya-dev/japan-used-market-mcp (open source, MIT), gives Claude, Cursor and other MCP clients tools backed by this Actor. Pass "market": "model-train" (the server also covers used cameras, its default, watches and instruments):
| Tool | Mode |
|---|---|
search_listings | search, with product code, scale, set type, motor and accessories |
price_stats | stats |
price_history | history |
start_monitor | creates a scheduled monitor (Task + Schedule) in your Apify account |
list_markets | shops and grades per market (no run) |
Claude Desktop: add this to claude_desktop_config.json. On macOS it is ~/Library/Application Support/Claude/claude_desktop_config.json; on Windows, %APPDATA%\Claude\claude_desktop_config.json. Then restart the app:
{"mcpServers": {"japan-used-market": {"command": "npx","args": ["-y", "@keiya-dev/japan-used-market-mcp"],"env": { "APIFY_TOKEN": "apify_api_..." }}}}
Get the token at Apify Console → Settings → API & Integrations. Runs are billed to your Apify account, as with any other run.
Then just ask: "Find a KATO 0-series Shinkansen set with the motor car under $150", "What's the median price of TOMIX 98313 in Japan?", "Alert me on Discord when a MicroAce Odakyu set appears."
Claude Code: claude mcp add japan-used-market -e APIFY_TOKEN=apify_api_... -- npx -y @keiya-dev/japan-used-market-mcp
Remote / HTTP clients: run npx -y @keiya-dev/japan-used-market-mcp --http --port 3000. The endpoint is /mcp (Streamable HTTP); send your token as Authorization: Bearer <APIFY_TOKEN>.
The generic Apify MCP server also works: add the Actor keiya_dev/japan-used-model-train-market as a tool.
Limitations & fair use
- We read only public listing pages at low request rates and return factual listing data: brand, model / code, price, condition grade, stock, shop and URL. Product photos and the shops' own description text are not copied into the output.
- Prices are the shops' tax-included asking prices (税込), not sold prices. USD is a mid-market conversion for convenience. Shipping is not included.
- Pochi ships within Japan only, may cancel orders sent to forwarding services, and asks buyers not to purchase for resale (転売目的でのご購入はご遠慮ください). Check each shop's terms before you buy.
motorized,accessoriesandsetTypecome from the shops' own words. When a shop doesn't say, the field isnull: nothing is guessed.- Only public listing pages and the product pages of returned or alerted listings are read. There is no login, no search endpoint and no sort parameter that robots.txt forbids.
- If a shop's bot protection challenges a run, a page can't be loaded or a shop changes its layout, the run fails with a message saying what to do. It writes no partial data, charges nothing and leaves the monitor snapshot unchanged.
- Not affiliated with any of the shops or makers.
Changelog
- 2026-11-05 — keywords: words are AND'ed. A keyword with several words now matches listings that contain all of its words, in any order and position ("KATO 新幹線" no longer needs the words side by side). Keywords are still OR'ed with each other. Compatibility: single-word keywords and phrases that appeared side by side still match, but a multi-word keyword can now match more listings than before (e.g. Leica M → "leica" + "m", and "m" is in "mm"). To keep the old exact-phrase behaviour, wrap the keyword in double quotes:
"\"Leica M\""in JSON,"Leica M"in the Console. Monitors whose keywords change get a fresh baseline unless they set amonitorId. - 0.1 (2026-11-05): Hobbyland Pochi (all used model trains) and Hard Off Off Mall (model trains). Search / stats / deals / monitor / history,
dealsOnlyalerts, optional English summaries (your LLM key), maker product codes, scale, set type, motorized, accessories, lot year, normalized grades. Output is factual listing data only:imageUrland the shops' free-text notes are no longer returned.
Related
- Japan Used Camera Market: the same five modes for used cameras and lenses (Fujiya Camera, Sanpou Camera, Naniwa, Hard Off).
- Japan Used Watch Market: Grand Seiko, Rolex and more from WATCHNIAN and Hard Off.
- Japan Used Guitar & Instrument Market: Fender Japan, Made in Japan guitars and wind instruments from Shimokura Gakki and Hard Off.
If this saved you a trip to Akihabara, a review on the Store helps others find it.
日本の方へ
ホビーランドぽち・ハードオフの中古鉄道模型(KATO・TOMIX など)の在庫を、英語の統一形式(状態ランク・円とドル価格つき)で取り出す Actor です。
- 海外転売の仕入れ監視:
monitorモードを Schedule で定期実行し、新着(NEW)や値下げ(PRICE_DROP)を Slack / Discord に通知 - 相場確認:
stats/historyモードで、モデルごとの最安・中央値・最高値と日々の推移を確認 - 割安出品の発見:
dealsモードで、同じモデル・同ランク以上の中央値より安い出品だけを抽出
使い方(Quick start):Apify Console でこの Actor を開き、Input の Mode(search / stats / deals / monitor / history)を選んで Keywords に "KATO", "10-1332", "新幹線" などを入れ、Start を押すだけです。結果は Output タブに表示され、CSV や Excel でダウンロードできます。
料金の円換算目安(1ドル=150円で概算。実際の請求はドル建てで、為替により変わります):
| 内容 | ドル | 円の目安 |
|---|---|---|
| 出品データ 1,000件(search) | $3 | 約450円 |
| モデル集計 1行(stats) | $0.005 | 約0.75円 |
| 割安出品 1件(deals) | $0.005 | 約0.75円 |
| アラート 1件(monitor) | $0.01 | 約1.5円 |
| 価格履歴 1行(history) | $0.002 | 約0.3円 |
Apify の上位プランでは割引(Bronze / Silver / Gold)が自動で適用されます。英語の要約(summarize)を使う場合は、ご自身の Anthropic / OpenAI の API キーに対して各社から別途請求されます(Actor 側の課金はありません)。
日本語でのお問い合わせ・不具合の報告は、Actor ページの Issues タブへどうぞ。