Suruga-ya Items Scraper (restock & price watch) avatar

Suruga-ya Items Scraper (restock & price watch)

Pricing

from $0.70 / 1,000 item scrapeds

Go to Apify Store
Suruga-ya Items Scraper (restock & price watch)

Suruga-ya Items Scraper (restock & price watch)

Search Suruga-ya (駿河屋), Japan's biggest used games, anime and collectibles shop, and get one flat row per product: own new and used prices, time-sale prices, sold-out flag, cheapest marketplace offer, list price, maker, release date and image.

Pricing

from $0.70 / 1,000 item scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Share

Search Suruga-ya (駿河屋) - Japan's largest shop for used games, anime goods, figures, trading cards, books and CDs - and get one flat row per product: Suruga-ya's own new and used prices, time-sale prices, whether it is sold out, the cheapest marketplace offer from other shops, list price, maker, release date and image. No nested objects, no HTML to strip.

Built for a restock or price watch: run the same keywords on a schedule and diff sold_out and price_yen between runs.

Input

fieldmeaning
keywordsOne or more searches, exactly as typed into Suruga-ya's search box. Each becomes https://www.suruga-ya.jp/search?category=&search_word=<keyword>
searchUrlsOptional. Suruga-ya search URLs copied from your browser, for a category, sort order or view a keyword alone cannot express. Anything that is not a suruga-ya.jp/search URL is skipped and logged
inStockOnlyHide sold-out products, using the parameters of the page's own 品切れ ON/OFF toggle (ck=true&inStock=On). Off by default - a restock watch needs the sold-out rows
maxItemsStop after this many products in total, shared by every keyword and URL, in order. Suruga-ya shows 24 per page
proxyConfigurationResidential, pinned to Japan, by default - see Proxy below

Paging follows the results page's own "次のページ" (next page) link until there is none, maxItems is reached, or a page brings nothing new. Any query parameter of your URL that the next-page link leaves out (an inStock or rankBy filter, say) is carried over, so a filter cannot quietly fall off on page 2.

Output

One Suruga-ya search card can show several prices at once, so each is its own column.

fieldmeaning
product_idSuruga-ya's product number (/product/detail/<id>). Usually digits, occasionally letters (ZSARO37368), so always a string
titleProduct name
urlThe card's own link. Usually /product/detail/<id>; a product whose only stock is with one marketplace shop links to that shop's offer (?tenpo_cd=...), and some sold-out products link to the /product/other/<id> offers page
categorySuruga-ya's product type, e.g. フィギュア, ニンテンドースイッチ2ソフト
badgeThe ribbon over the card: 新入荷 (new arrival), 値下げ (price cut), 人気上昇中 (trending)
conditionsThe conditions Suruga-ya itself sells it in right now: 新品 (new), 中古 (used), both, or empty when sold out
price_yenLowest of Suruga-ya's own prices on the card, after any time sale
price_new_yen, price_new_max_yenOwn new price; _max is the top of a printed range
price_used_yen, price_used_max_yenOwn used price; a range ("¥1,120 ~ ¥1,400") means several used copies of different grades are in stock
regular_price_new_yen, regular_price_used_yenThe struck-through regular price while a タイムセール (time sale) runs
time_sale_ends_atWhen that time sale ends, ISO 8601 in Japan time
list_price_yenManufacturer's list price (定価)
sold_outtrue when the card says 品切れ (sold out at Suruga-ya itself), false when it shows an own price
marketplace_price_yen, marketplace_offer_countCheapest offer from Suruga-ya's marketplace (マケプレ) shops, and how many such offers there are
makerMaker, publisher or label
release_dateRelease date (発売日), ISO 8601
image_urlProduct photo
queryThe keyword or search URL this row came from

A sold-out product is still a row - with sold_out: true, no own prices, and usually a marketplace price. That is what makes a restock watch possible.

null is not zero

Every column except product_id, title, url, conditions and query can be null, and is null whenever the card simply does not print that value - never 0 or an empty string, because a 0 would read as a measurement. On the 96 cards the parser was built against (four real search pages, 2026-10-01 and 2026-10-04):

  • own prices are null on sold-out (品切れ) cards - 16 of 96;
  • price_*_max_yen is null unless the card prints a range;
  • regular_price_*_yen and time_sale_ends_at are null unless a time sale is on;
  • marketplace_* is null when no marketplace shop has an offer - 31 of 96;
  • list_price_yen, maker, release_date and badge are blank on some cards (e.g. promotional goods with no list price or release date).

sold_out is null only if a card shows neither 品切れ nor an own price, which did not happen on any card measured.

Proxy

Residential pinned to Japan is the default, and the only setting that works. Suruga-ya is behind Cloudflare. Measured on three days in a row to 2026-10-04: Apify datacenter exits got Cloudflare's "Just a moment..." challenge with HTTP 403, and so did unpinned residential exits; only RESIDENTIAL with apifyProxyCountry: "JP" returned the real results page.

When a challenge does come back - as a 403, or as a 200 carrying the challenge or no product cards - the actor switches to a new exit address and retries. A page that is still refused after the retries is logged as a failure and nothing is charged for it.

Billing

Pay per event: $0.0007 per product row, plus a small fixed actor-start fee per run (see the pricing tab). Platform usage - compute and the residential proxy - is included. A product id is charged at most once per run, even when two of your searches both return it. A run that fails on its own input is not charged at all.

Limits

  • What a genuinely empty search looks like on Suruga-ya has not been captured yet; such a search is treated like a refusal - retried, then logged as a failure - and costs nothing.
  • inStockOnly sends the parameters the site's own toggle link uses; its effect was not observed in a saved response.