Japan Resale Cross-Market Checker — Yahoo, Mercari, PayPay avatar

Japan Resale Cross-Market Checker — Yahoo, Mercari, PayPay

Pricing

from $20.00 / 1,000 keyword analyzed across markets

Go to Apify Store
Japan Resale Cross-Market Checker — Yahoo, Mercari, PayPay

Japan Resale Cross-Market Checker — Yahoo, Mercari, PayPay

One keyword, three Japanese resale markets, one call: Yahoo! Auctions sold prices, Mercari (sold out / on sale) and PayPay Flea Market. Returns median and quartiles per market plus the cross-market price gap, every number labelled sold or asking. From $0.02 — no subscription. 日本3市場の相場差を1コールで比較。

Pricing

from $20.00 / 1,000 keyword analyzed across markets

Rating

0.0

(0)

Developer

h ichi

h ichi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

What is this worth in Japan, and where is it cheapest? One call per keyword prices it on all three big Japanese resale marketplaces at once and returns the gap between them.

MarketWhat you getBasis
Yahoo! Auctions Japan (ヤフオク)Closed auctions with at least one bidsold
Mercari Japan (メルカリ)Sold-out and/or on-sale listingssold and/or asking
PayPay Flea Market (PayPayフリマ)Live listingsasking

Buying the same answer as three separate single-market scrapers costs $0.06 and leaves you to reconcile three schemas. Here it is one $0.02 record, with the markets already lined up next to each other.

Why the priceBasis labels matter more than the numbers

A closed Yahoo! auction is a realized sale price. A live PayPay listing is an asking price — what a seller hopes for, which nobody has agreed to yet. PayPay does not publish sold listings at all, so the asking price is the only thing that market can honestly supply.

Subtract those two medians without noticing and your "arbitrage margin" is fiction. So:

  • every market block carries priceBasis (sold / asking) and a plain-English priceBasisLabel
  • every entry of comparison.pairs is tagged basis: sold_vs_sold, sold_vs_asking or asking_vs_asking, plus a boolean sameBasis
  • when Mercari is queried with both statuses it is returned as two separate blocks (mercari_sold, mercari_on_sale) rather than one blended median — a single number may only ever have one basis
  • comparison.mixedBasis and comparison.note say out loud when the headline spread crosses bases

sold_vs_sold (Yahoo ↔ Mercari sold out) is the pair you can act on. asking_vs_asking (Mercari on sale ↔ PayPay) tells you where to buy today. sold_vs_asking is context, not margin.

Pricing — from $0.02 per keyword, no subscription

EventPriceWhen
Keyword analyzed across markets$0.02Per keyword, whatever the number of markets
Individual listing$0.002Only if you enable Include individual listings

A default run (1 keyword, 3 markets, summary only) costs $0.02 and takes about 10 seconds.

A keyword is only charged when at least two of the selected markets actually returned data (or the single one, if you selected only one). A "cross-market" record with one market in it is not a comparison, so it is free.

Input

FieldExampleNotes
keywords["nintendo switch"]Japanese usually matches more listings than English. Each keyword costs $0.02
markets["yahoo_auction","mercari","paypay_flea"]Multi-select, all three by default. The price per keyword does not change
mercariStatus"both"both / sold_out (sold comps) / on_sale (asking)
maxItemsPerMarket10030–300 listings sampled per market (and per Mercari status)
priceMinJpy / priceMaxJpy15000Optional price window, applied identically to all markets client-side
includeIndividualItemsfalseEnable to also get every sampled listing, +$0.002 each
convertToUsdtrueAdds USD stats at the current rate (one FX lookup per run)

Output example (type: "cross_market_summary", abridged, measured 2026-07-26)

{
"type": "cross_market_summary",
"keyword": "nintendo switch",
"markets": {
"yahoo_auction": {
"market": "yahoo_auction",
"marketName": "Yahoo! Auctions Japan (closed auctions)",
"priceBasis": "sold",
"priceBasisLabel": "Sold — winning bid of an ended auction (bidCount >= 1)",
"available": true,
"totalListingsFound": 229986,
"sampledListings": 50,
"pricedListings": 50,
"priceJpy": {"min": 980, "p25": 3405, "median": 4540, "p75": 6520, "max": 62000, "average": 9026},
"signals": {"soldListings": 50, "unsoldListings": 0, "sellThroughRatioSampled": 1.0,
"bidCount": {"min": 1, "median": 1, "max": 1}},
"sourceUrl": "https://auctions.yahoo.co.jp/closedsearch/closedsearch?p=nintendo+switch&n=50&b=1"
},
"mercari_sold": {"priceBasis": "sold", "priceJpy": {"median": 4775}, "signals": {"medianDaysToSell": 0}},
"mercari_on_sale": {"priceBasis": "asking", "priceJpy": {"median": 3474}},
"paypay_flea": {"priceBasis": "asking", "priceJpy": {"median": 14200},
"signals": {"likeCount": {"median": 4}}}
},
"comparison": {
"marketsCompared": ["yahoo_auction", "mercari_sold", "mercari_on_sale", "paypay_flea"],
"medianJpy": {"yahoo_auction": 4540, "mercari_sold": 4775, "mercari_on_sale": 3474, "paypay_flea": 14200},
"listingsFound": {"yahoo_auction": 229986, "mercari_sold": 15000, "mercari_on_sale": 15000, "paypay_flea": 149999},
"comparable": true,
"cheapestMarket": "mercari_on_sale", "priciestMarket": "paypay_flea",
"spreadJpy": 10726, "spreadPct": 308.8, "spreadBasis": "asking_vs_asking",
"mixedBasis": true,
"pairs": [
{"from": "yahoo_auction", "to": "mercari_sold", "basis": "sold_vs_sold", "sameBasis": true,
"diffJpy": 235, "diffPct": 5.2, "cheaperMarket": "yahoo_auction"},
{"from": "mercari_on_sale", "to": "paypay_flea", "basis": "asking_vs_asking", "sameBasis": true,
"diffJpy": 10726, "diffPct": 308.8, "cheaperMarket": "mercari_on_sale"}
],
"note": "Bases are mixed. …"
},
"marketsWithData": ["mercari", "paypay_flea", "yahoo_auction"],
"checkedAt": "2026-07-26T06:21:11+00:00"
}

With includeIndividualItems: true you additionally get one record per listing, each tagged with market, marketEntry and priceBasis.

Use cases

  • Cross-market sourcing — buy on the cheapest market, sell on the dearest; the sold_vs_sold pair is the one with a realized price on both ends
  • Proxy buying & export — quote a Japanese client a defensible price band per marketplace in one request
  • Repricing — schedule the Actor and watch the median per market move over time
  • Deciding where to listlistingsFound is the supply you would compete with, signals.sellThroughRatioSampled (Yahoo) and signals.medianDaysToSell (Mercari) are the liquidity
  • Market research — how big is the asking-vs-sold premium in Japan, per category

Notes & limits

  • A broad keyword compares different products, not different markets. "nintendo switch" matched a console-heavy mix on PayPay and an accessory-heavy mix on Mercari, which is why the measured spread above is 308% — that number is real, but it is a product-mix artifact, not arbitrage. Narrow the keyword, or set priceMinJpy / priceMaxJpy; with a ¥15,000 floor the four medians tighten to ¥16,990–¥31,000, which is the actual console band
  • Check pricedListings before trusting a median: a tight price window can leave a market with very few listings
  • totalListingsFound is what each site reports for the keyword and is never rewritten by the client-side price window; each site also counts differently (Mercari caps its hit count at 15,000)
  • PayPay Flea Market can never return sold prices — they are not server-rendered. Nothing in this Actor pretends otherwise
  • Yahoo's sold filter is bidCount >= 1; ended auctions that received no bid are sampled but excluded from the price statistics (signals.unsoldListings)
  • Mercari's medianDaysToSell uses updated - created, which also moves on price edits, so it skews low — read it as a liquidity signal, not an exact time-to-sale
  • A market that fails does not fail the run: it comes back as available: false with an error, and the remaining markets are still compared. Only a keyword where every market failed fails the run
  • Read-only, no login, no browser. Requests are throttled to one per 1.5 s, and Yahoo! Auctions and PayPay Flea Market are queried sequentially because they share one backend
  • No personal data is collected — sellers are excluded from every record

日本語ガイド

キーワード1件につき、ヤフオク(落札)・メルカリ・PayPayフリマの3市場の相場を1レコードで比較する Actor です。

  • 概要: 各市場の価格統計(最安・p25・中央値・p75・最高・平均)に加えて、市場間の価格差(comparison)を返します。単体スクレイパー3本を買うと $0.06 かかり、スキーマの突き合わせも自分でやることになりますが、これは $0.02 の1レコードで揃った状態で返します。
  • 価格の「基準」が最重要: ヤフオクの落札価格は実際に成約した価格(sold)、PayPayフリマは**出品価格(asking)**です(PayPay は売却済み商品を公開していないため asking しか取得できません)。この2つを無自覚に引き算すると、存在しない利ざやが出ます。そこで全ブロックに priceBasis(sold / asking)、全ペアに basis(sold_vs_sold / sold_vs_asking / asking_vs_asking)を必ず付けています。メルカリで「両方」を選んだ場合は mercari_soldmercari_on_sale の2ブロックに分けて返します(1つの中央値が2つの基準を混ぜないため)。
  • 使い方: keywords にキーワード(日本語の方がヒットしやすい)、markets で市場を選択(既定は3市場)、mercariStatus でメルカリの売り切れ/販売中を選びます。priceMinJpy / priceMaxJpy3市場に同一条件で適用されるので、付属品や大量セット出品を除いて比較したいときに使ってください。個別明細が必要なときだけ includeIndividualItems を ON にします。
  • 料金: キーワード1件 $0.02(市場を何個選んでも同額)、個別明細は $0.002/件(既定 OFF なので既定実行は $0.02 固定)。選択した市場のうち2市場以上(1市場だけ選んだ場合は1市場)からデータが返らなかったキーワードには課金されません — 1市場だけの結果は「横断比較」ではないためです。サブスクリプション不要です。
  • 注意: 広いキーワードは「市場の違い」ではなく「商品構成の違い」を比較してしまいます(実測: nintendo switch は PayPay が本体中心・メルカリが付属品中心になり、価格差 308% と出ました)。キーワードを絞るか価格帯を指定してください(¥15,000 以上に絞ると4つの中央値は ¥16,990〜¥31,000 に収束し、本体の実勢価格帯になります)。中央値を読む前に pricedListings(統計に使われた件数)を確認してください。
  • その他: ヤフオクの sold 判定は入札1件以上、メルカリの medianDaysToSell は出品〜更新の日数(値下げでも動くため短めに出ます)。1市場が失敗しても available: false として残り、他市場の比較は続行します(全市場×全キーワードが失敗したときだけ run を失敗させます)。ブラウザ不使用・ログイン不要・1.5秒に1リクエスト、ヤフオクと PayPayフリマは同一基盤のため逐次取得しています。個人情報は取得しません。