Japan Used Camera Sold Price vs Dealer Ask — Lens Resale Value
Pricing
from $20.00 / 1,000 model sold comps
Japan Used Camera Sold Price vs Dealer Ask — Lens Resale Value
Sold comps for any camera or lens model in Japan: what it actually sold for at auction next to the Japanese dealer ask per condition rank (未使用/A/AB+/AB/B), and the spread between them — the used-gear export and proxy-buying decision in one call. From $0.02. 中古カメラの業者ask×落札実売の差を1コールで。
Pricing
from $20.00 / 1,000 model sold comps
Rating
0.0
(0)
Developer
h ichi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
Share
What did this camera actually sell for in Japan, what is a Japanese dealer asking for it, and how big is the gap? One call per model returns all three.
| Side | Source | What you get | Basis |
|---|---|---|---|
| Dealer ask | Fujiya Camera (フジヤカメラ, Nakano) | Shelf price per condition rank (未使用 / A / AB+ / AB / AB- / B / 現状品 / コレクション), with the exact population count and median behind each | ask · seller dealer |
| Sold | Yahoo! Auctions Japan (ヤフオク) | Closed auctions with at least one bid = realized sale prices | sold · seller mixed |
| Sold | Mercari Japan (メルカリ) | Sold-out listings, as a second realized reference | sold · seller consumer |
| Consumer ask | PayPay Flea Market (PayPayフリマ) | Live listings (optional) | ask · seller consumer |
The headline field is spread: the dealer's median ask minus the realized sold median, overall and rank by rank. That is the used-camera export trade's buy decision expressed as one number.
No model-name matching is involved — a model number is already the search key on all four sites, so nothing is being guessed on your behalf.
Pricing — from $0.02 per model, no subscription
| Event | Price | When |
|---|---|---|
model-analyzed | $0.02 | Per model, whatever the number of sources |
listing-scraped | $0.002 | Only if you enable Include individual listings |
A default run (1 model, 3 sources, summary only) costs $0.02 and took 29 seconds measured 2026-08-07. Apify's free plan includes $5/month of credit ≈ 250 default runs. No subscription, no minimum.
A model is only charged when the spread could actually be computed — i.e. when a dealer ask median and a realized sold median both came back. Measured 2026-08-07: Fujiya had zero used Nikon D850 bodies in stock, so that record shipped with three sold/ask medians in it and cost $0.00, because the thing you are buying is the gap, not the lookup. (If you deliberately select one side only — e.g. Fujiya alone for the rank ladder — the record is billed as soon as that side delivers.)
Why priceBasis and sellerType are on every block
A closed Yahoo! auction is a realized transaction. A dealer's shelf price is an aspiration nobody has agreed to yet. And a graded, inspected, shop-warrantied dealer ask is not the same quantity as a stranger's Mercari asking price either. Subtract the wrong pair and your "margin" is fiction. So:
- every source block carries
priceBasis(ask/sold) and a plain-EnglishpriceBasisLabel; - every source block carries
sellerType(dealer/consumer/mixed) — this is what stopsspreadfrom quietly becoming "Fujiya vs some guy"; spreadonly ever pairs a dealer ask with a realized sale. A consumer ask is never promoted into it; those comparisons still ship, incomparison.pairs, taggedask_vs_sold/sold_vs_sold/ask_vs_ask;statsBasissays how each distribution was measured —exact(the whole filtered result set fit on one page),population_quantiles(read off the site's own price-sorted paging),sample(the first pages only). It is deliberately a different word frompriceBasis, which is an economic label.
The rank ladder is the point
Japanese used-camera dealers grade every body and lens on a published ladder, and secondhand_state is a filter on the shop's search — so for every rank the Actor gets the exact population count and, by jumping to the page holding the median of a price-ascending sort, the exact population median. Not a first-page average.
spread.byRank then quotes each rank against the same realized sold median, which is what the trade actually acts on: an AB body at ¥236,500 against a ¥192,181 auction median is a different business from an AB+ at ¥370,150.
Input
| Field | Example | Notes |
|---|---|---|
models | ["Canon EOS R6"] | Model name or number. Latin script works everywhere; Japanese also works. Each model costs $0.02 |
sources | ["fujiya","yahoo_auction","mercari"] | The spread needs Fujiya plus one sold source. Price per model does not change |
conditionRanks | [] | Empty = the whole ladder. Codes: 1000=未使用, 1001=A, 1002=AB+, 1003=AB, 1004=AB-, 1005=B, 1006=現状品, 1007=コレクション. Narrow it to speed up multi-model runs |
mercariStatus | "sold_out" | sold_out (a second sold comp) / on_sale (consumer ask) / both (two separate blocks) |
priceMinJpy / priceMaxJpy | 80000 | Optional window on the auction / flea-market side. The de-junking tool — see below |
includeNewReference | false | Also price the dealer's new/outlet stock, for usedVsNewDiscountPct |
maxListingsPerSource | 60 | 30–300 listings sampled per source. Does not affect the dealer rank counts or rank medians |
includeIndividualListings | false | Enable to also get every sampled listing, +$0.002 each |
convertToUsd | true | Adds USD next to JPY (one FX lookup per run) |
Output example (type: "model_sold_comps", abridged — measured 2026-08-07)
{"type": "model_sold_comps","model": "Canon EOS R6","spread": {"comparable": true,"basis": "dealer_ask_vs_sold","askSource": "fujiya_dealer_ask", "askSellerType": "dealer","askMedianJpy": 238150, "askListingsFound": 28,"soldSource": "yahoo_auction_sold","soldMedianJpy": 192181, "soldListingsFound": 619, "soldPricedListings": 34,"spreadJpy": 45969, "spreadPct": 23.9,"soldP25ToAskMedianRatio": 0.606, "mixWarning": false,"byRank": [{"rank": "A", "dealerListings": 2, "askMedianJpy": 372900, "soldMedianJpy": 192181, "spreadJpy": 180719, "spreadPct": 94.0},{"rank": "AB+", "dealerListings": 11, "askMedianJpy": 370150, "soldMedianJpy": 192181, "spreadJpy": 177969, "spreadPct": 92.6},{"rank": "AB", "dealerListings": 12, "askMedianJpy": 236500, "soldMedianJpy": 192181, "spreadJpy": 44319, "spreadPct": 23.1},{"rank": "AB-", "dealerListings": 3, "askMedianJpy": 231550, "soldMedianJpy": 192181, "spreadJpy": 39369, "spreadPct": 20.5}],"askMedianUsd": 1505.35, "soldMedianUsd": 1214.78, "spreadUsd": 290.57,"note": "spreadJpy = dealer ask median - realized sold median. … It is not profit."},"sources": {"fujiya_dealer_ask": {"priceBasis": "ask", "sellerType": "dealer", "statsBasis": "exact","totalListingsFound": 28, "sampledListings": 28, "pricedListings": 28,"priceJpy": {"min": 168850, "p25": 236500, "median": 238150, "p75": 370150, "max": 372900, "average": 286354},"signals": {"rankStats": [{"rank": "AB", "rankLabel": "AB", "count": 12, "medianJpy": 236500, "medianBasis": "exact"}, "…"],"rankPremium": {"baseRank": "AB-", "baseMedianJpy": 231550, "premiumPct": {"A": 61.0, "AB+": 59.9, "AB": 2.1}},"modelMixSampled": [["EOS R6 Mark II ボディー", 16], ["EOS R6 Mark III ボディー", 11], ["EOS R6 ボディー", 1]],"distinctModelsSampled": 3,"brandTop": [["Canon", 28]]}},"yahoo_auction_sold": {"priceBasis": "sold", "sellerType": "mixed", "statsBasis": "sample","totalListingsFound": 619, "pricedListings": 34, "priceFilterApplied": true,"priceJpy": {"min": 128000, "p25": 144325, "median": 192181, "p75": 227328, "max": 425000, "average": 201663},"signals": {"soldListings": 34, "unsoldListings": 0, "sellThroughRatioSampled": 1.0,"bidCount": {"min": 1, "median": 3, "max": 104}}},"mercari_sold": {"priceBasis": "sold", "sellerType": "consumer", "totalListingsFound": 1650,"priceJpy": {"median": 206000}, "signals": {"medianDaysToSell": 6}}},"comparison": {"medianJpy": {"fujiya_dealer_ask": 238150, "yahoo_auction_sold": 192181, "mercari_sold": 206000},"comparable": true, "mixedBasis": true,"pairs": [{"from": "yahoo_auction_sold", "to": "fujiya_dealer_ask", "basis": "ask_vs_sold", "sameBasis": false,"sellerTypes": {"yahoo_auction_sold": "mixed", "fujiya_dealer_ask": "dealer"}, "diffJpy": 45969, "diffPct": 23.9},{"from": "yahoo_auction_sold", "to": "mercari_sold", "basis": "sold_vs_sold", "sameBasis": true,"diffJpy": 13819, "diffPct": 7.2}]},"priceFilterJpy": {"min": 80000, "max": null,"appliedTo": ["yahoo_auction_sold", "mercari_sold"],"notAppliedTo": ["fujiya_dealer_ask"]},"sourcesWithData": ["fujiya", "mercari", "yahoo_auction"],"exchangeRateJpyUsd": 0.006321,"checkedAt": "2026-08-07T07:03:45+00:00"}
With includeIndividualListings: true you additionally get one record per listing, each tagged with source, priceBasis, sellerType and — on the dealer side — conditionRank.
Use cases
- Sourcing for export — buy at auction, sell at the dealer band.
spread.byRanktells you which grade the gap actually lives in - Pricing your own used stock — quote against the same rank ladder Japanese dealers publish
- Insurance / estate valuation — a realized sold median plus a dealer ask, with the sample sizes attached
- Deciding whether to sell or trade in —
sellThroughRatioSampled(Yahoo) andmedianDaysToSell(Mercari) are the liquidity,spreadis the money you leave on the table by trading in - Watching a model over time — schedule it and track
spreadPctper rank
Notes & limits — read these before trusting a number
- A model name also matches its accessories. Measured 2026-08-07:
Canon EOS R6with no price floor returned a Yahoo sold p25 of ¥2,300 (straps, caps, batteries) against a ¥238,150 dealer ask, and a "71.9%" spread that was pure product mix. The Actor computesspread.soldP25ToAskMedianRatioand raisesspread.mixWarning: truewhen it drops below 0.25. Fix it withpriceMinJpy— the same model with a ¥80,000 floor gives the honest 23.9% above - The dealer's search is looser than a model number. Measured 2026-08-07:
keyword=Nikon Z6IIreturns 18 used hits of which 14 are Z6III bodies and 4 are Z6II, andkeyword=Z6IIreturns exactly the same set. No price statistic can reveal that, sosignals.modelMixSampledships the title histogram behind the ask median (in the example above: 16 Mark II, 11 Mark III, 1 original R6 — which is why the A / AB+ ranks sit near ¥370,000 and AB / AB- near ¥235,000). Always read it before quotingspread priceMinJpy/priceMaxJpyare not applied to the dealer block, and the record says so inpriceFilterJpy.notAppliedTo. Those counts and rank medians are read off the shop's own filters and were never enumerated here — a client-side window cannot honestly claim to have touched them- The dealer may simply not stock the model. Then
spread.comparableisfalsewith anote, the sold medians are still returned, and the model is free totalListingsFoundis what each site reports and is never rewritten by the price window. Each site counts differently (Mercari caps its hit count)- Check
pricedListingsbefore trusting a median: a tight window can leave a source with very few listings - Yahoo's sold filter is
bidCount >= 1; ended auctions with no bid are sampled but excluded from the price statistics (signals.unsoldListings) - Mercari's
medianDaysToSellusesupdated - created, which also moves on price edits, so it skews low — a liquidity signal, not an exact time-to-sale - PayPay Flea Market can never return sold prices — they are not server-rendered. Nothing here pretends otherwise
- A source that fails does not fail the run: it comes back as
available: falsewith anerrorand the rest are still compared. Only a model where every source failed fails the run - Large multi-model runs may hit the internal time budget; affected blocks carry
truncatedForTimeLimit. Run fewer models per call, or narrowconditionRanks - Read-only, no login, no browser, HTTP+JSON only, 256 MB. 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件につき、「日本の業者が今いくらで売っているか(状態ランク別)」と「実際にいくらで落札されたか」、そしてその差(スプレッド)を1レコードで返す Actor です。
- 中核は
spread: フジヤカメラの中古 ask 中央値 − ヤフオク落札(入札1件以上)の sold 中央値。状態ランク別(byRank)にも出します。実測(2026-08-07)では Canon EOS R6 が ask ¥238,150 / sold ¥192,181 = +23.9%、ランク別では AB +23.1% / AB+ +92.6% でした - 基準タグは2種類:
priceBasis(ask/sold)に加えてsellerType(dealer/consumer/mixed)。保証・検品付きの業者 ask と、メルカリの個人出品 ask は別物なので、spreadは「業者 ask × 実売 sold」の組み合わせしか作りません(個人 ask はcomparison.pairsに basis タグ付きで残します) - ランク別の件数と中央値は正確値です: フジヤの
secondhand_stateは絞り込みフィルタなので、各ランクの母集団件数と(価格昇順ページの中央位置を直接取ることで)母集団中央値が取れます。1ページ目の平均ではありません - 料金: 型番1件 $0.02(
model-analyzed)、個別明細は $0.002/件(listing-scraped、既定 OFF)。スプレッドが計算できなかった型番は課金されません — 実測でNikon D850はフジヤに中古在庫ゼロだったため $0.00 でした。無料プランの月$5クレジットで既定実行 約250回。サブスク不要 - 必ず読んでほしい注意2点: ①型番はアクセサリにも一致します(EOS R6 は無フィルタだとヤフオク側 p25 が ¥2,300 = ストラップ等になり、スプレッドが 71.9% と嘘になります)。
spread.mixWarningが立つのでpriceMinJpyで下限を切ってください。②業者側の検索は型番より緩い(実測:Nikon Z6IIの18件中14件が Z6III)。signals.modelMixSampledに商品名の内訳を必ず出しているので、ask 中央値を引用する前に見てください - その他:
priceMinJpy/priceMaxJpyは業者ブロックには適用しません(母集団の正確値を客観的に壊さないため。適用範囲はpriceFilterJpyに明記)。1ソースが落ちてもavailable: falseとして残り、他ソースの比較は続行します。ブラウザ不使用・ログイン不要・1.5秒に1リクエスト、ヤフオクと PayPayフリマは同一基盤のため逐次取得。個人情報は取得しません