Nintendo eShop Price & Sale Scraper (US, Canada, Japan)
Pricing
from $1.04 / 1,000 game scrapeds
Nintendo eShop Price & Sale Scraper (US, Canada, Japan)
Nintendo eShop scraper for sale and price-drop alerts: Switch and Switch 2 games, DLC and bundles from the US, Canada and Japan stores, one row per item with price now, regular price, sale price, percent off, sale end date, platform, publisher and store link.
Pricing
from $1.04 / 1,000 game scrapeds
Rating
0.0
(0)
Developer
Superslow Sloth
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Get the Nintendo eShop sale list for the United States, Canada and Japan as one flat table: every Switch and Switch 2 game, DLC and bundle that is on sale right now, with the price now, regular price, sale price, percent off and the date the sale ends, plus platform, publisher, release date and the store link. Run it on a schedule and diff the dataset for eShop sale and price-drop alerts: which games just went on sale, how deep the cut is, and how the same sale compares across USD, CAD and JPY.
No account, no API key, no login, no browser. It reads the same search services nintendo.com and nintendo.com/jp query from your browser.
Input
| Field | Notes |
|---|---|
regions | US, CA, JP, any mix. All three by default. Each region is read on its own. |
onSaleOnly | true by default: only items the store has reduced right now (the US/Canada Deals list, Japan's sale flag). Set false for the full price list. |
searchQuery | Optional title or word (zelda, mario kart, ゼルダ). Japan matches romaji and Japanese alike. Empty = the whole list. |
maxItems | Items to return per region (default 100, up to 50,000). |
proxyConfiguration | Apify datacenter proxy by default. |
Example input:
{"regions": ["US", "CA", "JP"],"onSaleOnly": true,"maxItems": 5000}
That returns every item on sale in all three regions: on 2026-10-18 it returned 12,304 rows (US 4,118, Canada 4,088, Japan 4,098) in about 35 seconds.
Output
One row per item and region. Prices are numbers in the region's currency:
dollars and cents for USD/CAD, whole yen for JPY.
| Field | Notes |
|---|---|
region, currency | US/USD, CA/CAD, JP/JPY. |
query, position | Your search query (null without one) and the item's place in the order it was read for that region (1 is first). |
nsuid, sku | Nintendo's eShop id for the item in that region, and the US/Canada SKU (null for Japan, which sends none). The same game has a different nsuid in each region. |
title, url, image_url | As the store shows them. url is the www.nintendo.com product page for US/Canada and the store-jp.nintendo.com page for Japan, built from the nsuid the way nintendo.com/jp builds it. |
platform | Nintendo Switch or Nintendo Switch 2 (the US/Canada list has a handful of iOS/Android items too). |
product_type | game, dlc (an add-on) or bundle. |
publisher, developer | As sent. developer exists only in the US/Canada data and is often empty there. |
release_date | YYYY-MM-DD as the store sends it. A far-future date such as 2027-12-31 is the store's own placeholder for "not announced". |
genres | Genre labels as printed (Japanese for Japan). Empty list when none. |
price | The price now, sale or not. 0.0 for a free item. Null for an item with no price yet. |
regular_price | The undiscounted price. |
on_sale, sale_price, amount_off, percent_off | Whether the item is reduced, its sale price, how much comes off and the store's percent (two decimals: 34.02; Japan's unrounded 19.999999999999996 becomes 20.0). All null when not on sale, never 0. |
sale_start, sale_end | The sale window, ISO 8601 with offset: UTC for US/Canada (2026-10-29T23:59:59Z), Japan time for Japan (2026-12-02T23:59:59+09:00). Null when not on sale. |
preorder | True for an item that can be pre-ordered and is not out yet. |
Example row (real values, 2026-10-18):
{"region": "CA","currency": "CAD","query": null,"position": 1,"nsuid": "70010000009921","sku": "7100009921","title": "Undertale","url": "https://www.nintendo.com/en-ca/store/products/undertale-switch/","image_url": "https://assets.nintendo.com/image/fetch/q_auto/f_auto/https://atum-img-lp1.cdn.nintendo.net/i/c/0ef5d86e09a843aeb8ef19f1b3d11051_1024","platform": "Nintendo Switch","product_type": "game","publisher": "8-4","developer": "8-4, Ltd.","release_date": "2018-09-18","genres": ["Role playing"],"price": 12.53,"regular_price": 18.99,"on_sale": true,"sale_price": 12.53,"amount_off": 6.46,"percent_off": 34.02,"sale_start": "2026-10-10T16:00:00Z","sale_end": "2026-11-01T15:59:59Z","preorder": false}
Honest nulls
A field a region does not send is null, never 0 or "": Japan has no SKU
and no developer; an item that is not on sale has null sale price, percent off
and sale window; a coming-soon item has a null price. 0.0 in price means
free, because the store says so.
Pricing
Pay per event:
- $0.002 per run (
actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing. - $0.00104 per item row written (
game-scraped), i.e. $1.04 per 1,000 rows. A row that is not written is not charged.
A full daily sale list of all three regions (about 12,300 rows) costs about $12.80.
How it fetches, and its limits
US and Canada come from the Algolia index behind the nintendo.com store search, using the public search-only key nintendo.com ships to every visitor. Japan comes from search.nintendo.jp, the search behind nintendo.com/jp/software. A refusal (403, 429, 5xx), a 200 that is not the service's answer, or a dropped connection is treated as the address being blocked: the actor rotates to a fresh one and retries.
Things worth knowing, all measured on 2026-10-18:
- Up to 1,000 items per region come in the store's own order (most popular
first in the US and Canada). The US/Canada index serves at most 1,000 hits per
query, so a larger
maxItemsreads the list in price slices of at most 1,000 each, cheapest first, until every item is read. A slice of one single price that still holds more than 1,000 items is split by platform, age rating, DLC flags and publisher; the run log reports any items that could still not be reached. - Items with no price are not part of a sweep. About 1,055 US items have no
price yet (coming-soon games, add-ons not sold on their own). A price slice can
never select them, so a full-list sweep with
onSaleOnlyoff leaves them out and says how many in the log. A search that matches 1,000 items or fewer returns them. None of them is ever on sale. - Japan covers Switch and Switch 2 only, like the US and Canada lists. Its search also lists 3DS, Wii U and amiibo items; those are left out. Japanese entries without an eShop id (accessories, Nintendo Switch Online classics, retired listings) are skipped and counted.
- The Japanese store page can show a waiting room. store-jp.nintendo.com sometimes queues visitors when it is busy; the link is still the item's page.
- A few US/Canada deals carry no sale window. The store marks them reduced
but sends no start or end date (7 of 2,780 US deals under $5 on 2026-10-18);
their
sale_startandsale_endare null. - Japan lists a few items twice (a Switch 2 game card next to its download, same nsuid and price: 3 of 4,101 sale entries). Each is returned once.
- "On sale" is the store's own rule. In the US and Canada it is the Deals list; in Japan the sale flag, and only when the price now differs from the regular price, which is how nintendo.com/jp decides it.
- The key is public but can rotate. If nintendo.com changes it, the US and Canada stop answering with HTTP 403 "Invalid Application-ID or API key"; the run says so plainly in its log and status, does not retry it, and still reads Japan.
Use it from the API
curl -X POST "https://api.apify.com/v2/acts/<your-username>~nintendo-eshop-prices/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"regions": ["US", "JP"], "searchQuery": "zelda", "onSaleOnly": false, "maxItems": 50}'