HobbyLink Japan Gunpla & Figure Prices + Stock Status avatar

HobbyLink Japan Gunpla & Figure Prices + Stock Status

Pricing

from $20.00 / 1,000 keyword market summaries

Go to Apify Store
HobbyLink Japan Gunpla & Figure Prices + Stock Status

HobbyLink Japan Gunpla & Figure Prices + Stock Status

Type a keyword and get what Gunpla, model kits and figures cost at HobbyLink Japan and if they are in stock, preorder, backorder or discontinued. Returns typical price and range over the items read, counts by stock status and release years. $0.02 per keyword, no results = no charge. Unofficial.

Pricing

from $20.00 / 1,000 keyword market summaries

Rating

0.0

(0)

Developer

h ichi

h ichi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

What it does: Type a keyword and get what Gunpla, model kits and figures cost at HobbyLink Japan, and whether they are in stock, preorder, backorder or discontinued.

You enter: one or more keywords in English, e.g. RG Nu Gundam; Japanese product names work too.

You get: from the items read (24 per page, 2 pages by default, 8 max): typical price and range in yen and USD, counts by stock status (in stock / preorder / backorder…), share in stock, share on sale and typical discount, release years. Optional: one row per item.

Price: $0.02 per keyword. +$0.002 per item if you also want the list. No results = no charge.

Example: enter RG Nu Gundam → 273 listings found, 24 read (the second page added nothing new) · prices ¥500–60,000, typical ¥500 because decal sheets and parts for the kit match the same words · 12 in stock, 11 backorder, 1 out of stock · release years 2025 (10), 2021 (8) (real run, 2026-08-17)

Unofficial — not affiliated with HobbyLink Japan. Reads public pages only.

Pricing — $0.02 per keyword

EventPriceWhen
Keyword market summary$0.02Per keyword analyzed
Individual item$0.002Only if you enable Include individual listings

A default run (1 keyword, summary only) costs $0.02. You pay per keyword; there is no monthly fee. A keyword that returns zero listings is never charged.

Input

FieldExampleNotes
keywords["RG Nu Gundam"]HLJ's catalogue is indexed in English — product and line names work best. Japanese product names also work (measured 2026-08-18: gundam 16,477 hits, ガンダム 33,219). Each keyword costs $0.02
pagesPerKeyword21–8. One page = 24 items = 1 page request + 1 batch price request. Default 2 (48 items)
includeIndividualItemsfalseEnable to also get each sampled item as its own record (+$0.002 each)
convertToUsdtrueAdds USD stats at the current exchange rate. A failed lookup never fails the run

Does a number cover every listing, or only the ones read?

Every record carries priceJpyBasis, so you never have to guess:

priceJpyBasisWhat it meansWhen you get it
exactThe pages read covered the whole result set — the numbers cover every matching itemNarrow keywords (hits ≤ pagesPerKeyword × 24)
sampleThe numbers cover only the items actually read, count = how many of them had a priceEverything else

There is deliberately no third option. HLJ's search orders results by relevance and offers no price sort, so there is no position in the list whose price stands for the whole result set. Sibling Actors of ours (bookoff-market-checker, digimart-instrument-market-checker) do read their numbers off every listing — they can, because those sites let you sort cheapest first and that order holds across pages. HLJ does not, and this Actor will not claim a coverage it cannot support. What you get is an honest sample of the first N relevance-ranked hits, clearly labelled, with totalListingsFound next to it so you can see what share of the results you are looking at.

Everything else in the record (stockBreakdown, the ratios, saleRatePct, releaseYearTop) likewise covers only the items read (sampledListings tells you how many).

inStockRatioSampled vs orderableRatioSampled — read this one

HLJ's price feed carries an is_in_stock flag that is true for backordered items too — it means "you may place the order", not "it is on the shelf". Taken at face value it reports 100% availability on a keyword that is nearly half backorder — in the measured run below, orderableRatioSampled is 1.0 while inStockRatioSampled is 0.5. So this Actor splits it:

  • inStockRatioSampled — share of sampled items whose HLJ state code is literally instock. This is the one you want.
  • orderableRatioSampled — share for which HLJ will accept an order at all (in-stock plus backorder/preorder). Reported separately, under a name that says what it is.

When a keyword comes back empty

keywordStatus is ok as soon as HLJ returns hits, and not_found when it returns none — with hint naming the next thing to try in one sentence (null otherwise). The shop indexes both languages, so a not_found on an English name is worth retrying in Japanese: measured 2026-08-18, gundam finds 16,477 items and ガンダム 33,219. A keyword that returns nothing is never charged.

Output example (type: "market_summary")

Measured on 2026-08-17 (real run, RG Nu Gundam, pagesPerKeyword: 2). The whole record, nothing shortened. keywordStatus and hint were added on 2026-08-18 and are shown with the values this record produces. Two pages were asked for, but the second returned no item the first had not already given, so the read stopped at 24 items instead of 48 — pages are merged de-duplicated by item code, never counted twice.

{
"type": "market_summary",
"keyword": "RG Nu Gundam",
"totalListingsFound": 273,
"sampledListings": 24,
"keywordStatus": "ok",
"hint": null,
"priceJpy": { "min": 500, "q1": 500, "median": 500, "q3": 4125, "max": 60000, "count": 24 },
"priceJpyBasis": "sample",
"pricedListings": 24,
"stockBreakdown": { "instock": 12, "backorder": 11, "outofstock": 1 },
"inStockRatioSampled": 0.5,
"orderableRatioSampled": 1.0,
"onSaleRatioSampled": 0.0,
"saleRatePct": null,
"releaseYearTop": [[2025, 10], [2021, 8], [2026, 3], [2023, 1], [2024, 1]],
"checkedAt": "2026-08-17T17:45:17.045978+00:00",
"sourceUrl": "https://www.hlj.com/search/?Word=RG+Nu+Gundam&page=1",
"priceUsd": { "min": 3.14, "q1": 3.14, "median": 3.14, "q3": 25.91, "max": 376.86 },
"exchangeRateJpyUsd": 0.006281
}

That ¥500 typical price is not a glitch, and it is instructive: a RG Nu Gundam search matches the ¥500 water-slide decal sheets and detail parts for the kit as well as the ¥4,500 kit itself, and relevance order puts them near the top. Search a full product name (RG 1/144 Nu Gundam) when you want the kit's own price, and read q3/max alongside the median on any accessory-heavy keyword. The Actor reports what the search returned rather than quietly filtering to make the number look nicer.

What this Actor does not do

  • No numbers covering every listing. HLJ offers no price sort, so no position in the result list can stand for the whole set — see the table above
  • No sold prices. HLJ is a shop: these are asking prices, the yen price a buyer would pay today, not what something actually sold for
  • No item dumps by default. The product is the statistic; individual items are opt-in and separately priced
  • No login-only data. Everything comes from public search pages and HLJ's own public price endpoint
  • Nothing is stored. Every run reads the site live; nothing is kept between runs
  • No customer or seller PII. HLJ is a single retailer — there are no third-party sellers to profile

Notes on the data

  • Prices are not in the search HTML. HLJ renders the result cards server-side but leaves the price span empty and fills it in with JavaScript. This Actor therefore pairs the card list with HLJ's own batch price endpoint (/search/livePrice/?item_codes=…, up to 40 codes per call) instead of running a browser — which is why it fits in 256 MB and finishes in seconds. A generic HTML scraper pointed at these pages returns titles with blank prices
  • Some items genuinely have no price (unannounced or delisted products). They are still counted in sampledListings and in stockBreakdown; pricedListings tells you how many made it into the price statistics. They are never counted as ¥0
  • priceJpy is the sell price — what a buyer pays today. When an item is discounted, the pre-discount price is available per item as listPriceJpy, with savingsJpy and saleRatePct
  • saleRatePct is the median over discounted items only. Including the large majority of the catalogue that is not on sale would drag it to 0 and hide the only number a bargain hunter wants. null means nothing in the sample was on sale
  • releaseYear is parsed from HLJ's release_date (e.g. "July 2026"2026). Future years are normal and meaningful here: preorders for kits not yet released are a large part of this catalogue
  • Stock state codes are HLJ's own (instock, preorder, futurerelease, backorder, orderstop, discontinued, …). Codes we do not recognise are passed through in stockBreakdown rather than dropped, so a new HLJ state never silently disappears from the split. Items HLJ's price feed did not answer for appear as unpriced_or_unknown
  • Requests are throttled to ≥1.2 s and the run carries a wall-clock budget; if it is reached, later keywords are sampled over fewer pages and their records carry truncatedForTimeLimit: true

If something goes wrong

  • Wrong number or a failed run? Open a ticket on the Issues tab. I read every one and reply within 2 business days (Japan time).
  • You never get a fake "empty" result. If the site can't be read, the run fails and says so.
  • No results = no charge. You only pay for results you actually get.
  • Checked every week. An automatic test runs this tool weekly; if the site changes, I fix it.
  • Public pages only. No login, no personal data, and it goes easy on the site.

More tools by the same author

Other language editions of this tool: 中文

All tools (Japan marketplaces, real estate, jobs, racing, prediction markets): https://apify.com/jpmarketdata

Disclaimer

Unofficial, independent tool — not affiliated with, endorsed by, or sponsored by HobbyLink Japan. Product names and logos belong to their owners and only say where the data comes from. Data is read from public pages, for market research; check before you act on it.