Nintendo Switch 2 game prices stopped making sense sometime around Labor Day 2026. The console itself jumped from $449.99 to $499.99 in the U.S. on September 1, the Japanese system rose by ¥10,000, and the U.K. price climbed by £24. Game pricing followed its own messy path: Mario Kart World sits at $79.99, Donkey Kong Bananza and Metroid Prime 4: Beyond list at $69.99, and the same titles carry different price tags depending on whether you buy a bundle, a game-key card, or a standalone digital copy. Add regional currency swings and retailer “sale ranges” that stretch from $34.99 to $104.99 for a single SKU, and tracking what you are actually paying becomes a spreadsheet problem, not a browsing problem.
This tutorial builds a working Nintendo Switch 2 game price tracker from scratch: a spreadsheet schema, a Python script that logs prices and flags drops, and a monthly audit routine that catches the sneaky price hikes retailers do not announce. By the end you will have a reusable system that separates MSRP from bundle math, full game cards from game-key cards, and U.S. dollar pricing from the yen, pound, and euro figures that confuse most casual trackers. Twelve steps, roughly 75 minutes of setup, and you keep the tool running indefinitely.
None of this requires a finance background. The formulas are basic spreadsheet arithmetic, and the automation script is short enough to read top to bottom in a few minutes even if you have never written Python before. What this tutorial does assume is that you are tired of guessing whether a listed price is actually a deal, or whether it is a bundle, a different edition, or a currency conversion wearing a deal’s clothing. The system below exists to settle that question with a number instead of a gut feeling.
Don't miss new tech stories on Google
Add Shattered once in the Google app and our stories show up in your news suggestions.
Why Nintendo Switch 2 Game Prices Got Confusing in 2026
Three things collided this year to make Nintendo Switch 2 game prices harder to track than any prior console generation. First, Nintendo raised hardware prices mid-cycle rather than at launch. The U.S. console moved from $449.99 to $499.99 effective September 1, 2026, the European price rose from €469.99 to €499.99, the U.K. price went from £395.99 to £419.99, and Japan’s domestic system jumped from ¥49,980 to ¥59,980, according to Nintendo’s own price-revision notice. None of those are game prices, but every bundle that pairs hardware with software now carries that inflation baked in, which skews any tracker that does not separate console cost from game cost.
Second, Switch 2 software settled into a three-tier pricing structure rather than one flat number. Most first-party titles now land at $59.99, $69.99, or $79.99 depending on scope and platform exclusivity, with Mario Kart World sitting at the top tier and Donkey Kong Bananza, Metroid Prime 4: Beyond, and Pokémon Pokopia clustering at $69.99. Third, Nintendo introduced game-key cards alongside traditional full game cards, which means two physical products can sit on the same store shelf with different download requirements, different resale behavior, and occasionally different prices depending on region, as documented by Perfectly Nintendo’s cataloguing of Japanese retail listings. A tracker built for the original Switch era simply does not have columns for any of this.
The practical effect is that two shoppers looking at the “same” game can be looking at genuinely different products. One buyer’s $69.99 Metroid Prime 4: Beyond is a full game card that works offline forever. Another buyer’s $69.99 copy is a game-key card that needs an internet connection the first time it is inserted, and whose long-term resale behavior nobody has fully tested yet because the format is still new. A plain MSRP list glosses over that difference entirely, which is the core reason this tutorial treats format as its own column rather than a footnote.
Prerequisites: What You Need Before You Start
You do not need a developer background to finish this tutorial, but you do need a few tools in place before Step 1. None of these cost money beyond what you would already spend on a spreadsheet or a code editor.
- A spreadsheet tool: Google Sheets (free) or Microsoft Excel 365. Screenshots in this tutorial assume Google Sheets.
- Python 3.10 or newer installed locally, for the automation steps. Check with
python3 --versionin a terminal. - The
requestslibrary (pip install requests) for the price-check script in Step 6. - A free API key from a currency-conversion service such as exchangerate.host or Open Exchange Rates, used in Step 7 for regional comparisons.
- Accounts on the storefronts you actually shop: a Nintendo eShop account tied to your real region, and logins for whichever retailers you compare (Target, Best Buy, Amazon, or your local equivalent).
- About 75 minutes of uninterrupted time for the initial build; ongoing maintenance takes 5 to 10 minutes a week once the tracker is running.
Step 1: Map the Official Switch 2 Price Tiers
Before you track a single real price, write down the baseline tiers Nintendo actually uses. This gives you a reference point so you can immediately spot when a retailer is overcharging, undercharging, or just listing a different edition than the one you think you are comparing. Based on current U.S. storefront listings, three tiers cover almost every first-party Switch 2 release.
| Price tier | Example titles | Typical category |
|---|---|---|
| $59.99 | Ports and Switch 2 Edition upgrades of older games | Enhanced re-releases |
| $69.99 | Donkey Kong Bananza, Metroid Prime 4: Beyond, Pokémon Pokopia | Standard first-party titles |
| $79.99 | Mario Kart World | Flagship launch titles |
Tech Advisor’s running list of the best Switch 2 games confirms the $79.99 ceiling on at least one reviewed title, which is the number worth treating as your top budget alert threshold. Retailer listings for the same games can range well outside these tiers, Target’s own Donkey Kong Bananza listing shows a base $69.99 price that can shift with promotions, so write the official tier down first and treat every retailer number as a variance from it, not the other way around.
It helps to think of these tiers the way you would think of trim levels on a car. The number alone tells you roughly what you are getting before you read a single review: $59.99 signals an upgraded re-release rather than new content, $69.99 signals a standard new game with a full production budget, and $79.99 signals a title Nintendo is treating as a system-seller, the kind of release that gets its own bundle. Once that framework is in your head, a listing that breaks the pattern, a brand-new first-party game priced at $49.99, or an upgraded port suddenly priced at $69.99, becomes an immediate signal to double check the listing rather than something you would otherwise scroll past.
Step 2: Build Your Price-Tracking Spreadsheet
Open a new Google Sheet and create the following columns across row 1. This schema is the backbone of everything else in this tutorial, so resist the urge to simplify it until you have used it for at least a month.
title | platform | edition | format | region | retailer
msrp_usd | current_price | currency | tax_rate | shipping_cost
trade_in_value | effective_cost | last_checked | notes
The format column is the one most trackers skip, and it is the one that matters most this generation. Give it exactly three allowed values: digital, full_game_card, and game_key_card. The edition column should distinguish a standard release from a “Switch 2 Edition” upgrade of a prior-gen title, since those frequently carry different MSRPs for what looks like the same game. Freeze row 1 and set data validation dropdowns on format, region, and currency now, before you have fifty rows of inconsistent entries to clean up later.
A few of these columns are easy to underrate until you actually use the sheet. retailer matters because the same title’s current price routinely differs between Nintendo’s own storefront, Target, Best Buy, and Amazon, sometimes by $10 or more during a promotional window, and you want to know which number came from where without re-checking every site each time. last_checked matters because a price you logged a month ago is a historical data point, not a live quote, and treating it as current is how trackers end up recommending a purchase based on stale information. notes is the catch-all for anything that does not fit a structured column: a listing that bundles in a carrying case, a price that only applies to a specific storefront account region, or a promotion with an expiration date worth remembering.
Step 3: Separate Game-Key Cards From Full Game Cards
This step gets skipped constantly, and it is the single biggest source of tracker confusion. A full game card contains the entire game on the cartridge; a game-key card contains a license that triggers a mandatory download the first time you insert it. Both are physical products, both sit in the same retail boxes, and both can carry the same sticker price, but they behave completely differently for resale, lending, and offline play.
Perfectly Nintendo’s catalogue of Japanese retail listings notes that game-key cards are not strictly tied to matching your console or Nintendo Account to the card’s purchase region the way standard regional purchases are, and that they can function even in countries without a local Nintendo eShop. That is a meaningful point for anyone comparing import pricing: a game-key card bought cheaper from a different region may still require a download tied to that card’s licensing server, so log the format column accurately rather than assuming “physical” always means “plug and play.” When you enter a title in your spreadsheet, check the back of the box or the digital listing for the words “requires download” before marking it full_game_card.
Step 4: Log MSRP for Every Title on Your Wishlist
Now populate real rows. Pull official MSRP from Nintendo’s own storefront first, then cross-check against at least one major retailer before you trust the number. Here is a starting set based on current U.S. listings.
| Title | Format | U.S. MSRP | Notes |
|---|---|---|---|
| Mario Kart World | Digital / cards | $79.99 | Flagship launch title, top of the price range |
| Donkey Kong Bananza | Digital / cards | $69.99 | CAD $99.99 in Canada per Nintendo’s store |
| Pokémon Pokopia | Digital / cards | $69.99 | Also offered inside the $500 bundle |
| Metroid Prime 4: Beyond | Digital / cards | $69.99 | Retail sale range seen as low as $50.99 |
| Kirby Air Riders | Digital | ¥8,980 (JP eShop) | Japanese eShop price, convert before comparing |
Add every title you personally care about, not just these five. The point of this row-by-row logging is catching the gap between MSRP and what a specific retailer actually charges on a specific day, which is exactly the kind of range Target’s own listings expose: $50.99 to $69.99 for Metroid Prime 4: Beyond and a startling $34.99 to $104.99 spread across different Pokémon Pokopia SKUs. That range usually means different editions, bundles, or third-party sellers are mixed into one listing page, not that the base game actually costs four times as much on a bad day.
Step 5: Calculate True Effective Cost
Sticker price is not what you pay. Tax, shipping, and any trade-in credit you apply against the purchase all move the real number. Add a formula column that does this math automatically instead of eyeballing it every time.
=current_price + (current_price * tax_rate) + shipping_cost - trade_in_value
In Google Sheets, assuming current_price is column H, tax_rate is column I, shipping_cost is column J, and trade_in_value is column K, the actual cell formula looks like this:
=H2+(H2*I2)+J2-K2
Drag that formula down every row once, then forget about it. Set trade_in_value to zero for anything in the digital format column, since digital purchases cannot be resold or traded in under current Nintendo eShop terms. This single formula is what turns a list of sticker prices into a list of what titles actually cost you to own.
Step 6: Automate Price Checks With a Script
Manually refreshing prices gets old fast. This step builds a small Python script that checks a list of product pages and logs the price it finds into a CSV file you can later import back into your spreadsheet. The script below is a template, you will need to adjust the CSS selector for whichever retailer pages you track, since every storefront marks up its price element differently.
import csv
import requests
from datetime import datetime
from bs4 import BeautifulSoup
TRACKED_ITEMS = [
{"title": "Mario Kart World", "url": "https://example-retailer.com/mario-kart-world", "selector": ".price-now"},
{"title": "Donkey Kong Bananza", "url": "https://example-retailer.com/donkey-kong-bananza", "selector": ".price-now"},
]
def fetch_price(item):
headers = {"User-Agent": "Mozilla/5.0 (price-tracker/1.0)"}
resp = requests.get(item["url"], headers=headers, timeout=10)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
node = soup.select_one(item["selector"])
if not node:
return None
price_text = node.get_text(strip=True).replace("$", "").replace(",", "")
return float(price_text)
def log_prices(path="price_log.csv"):
with open(path, "a", newline="") as f:
writer = csv.writer(f)
for item in TRACKED_ITEMS:
price = fetch_price(item)
writer.writerow([datetime.now().isoformat(), item["title"], price])
print(f"{item['title']}: {price}")
if __name__ == "__main__":
log_prices()
Run it with python3 price_tracker.py. A successful run prints each tracked title with the price it pulled, and appends a row to price_log.csv. Schedule it with cron (Linux or macOS) or Task Scheduler (Windows) to run once a day, and you have a running history without lifting a finger after setup.
This script uses requests and BeautifulSoup because they are lightweight, well documented, and sufficient for product pages that render their price server-side rather than through heavy client-side JavaScript. If a retailer you track loads its price with JavaScript after the initial page load, plain requests will return a page missing the number you need, and you will have to swap in a browser-automation tool like Playwright or Selenium for that specific retailer. Before reaching for a heavier tool, check the page’s raw HTML source (view-source in your browser) to confirm the price genuinely is not present in the initial response, since a surprising number of retail sites still render pricing server-side even in 2026.
Step 7: Compare Regional Pricing Gaps
Switch 2 game and hardware pricing diverges noticeably by region once you strip out currency conversion noise. The table below uses Nintendo’s own published hardware price-revision notice as the base reference point, since it is the cleanest apples-to-apples figure available across regions.
| Region | Console price before Sept. 2026 | Console price after Sept. 1, 2026 | Increase |
|---|---|---|---|
| United States | $449.99 | $499.99 | $50 |
| Eurozone | €469.99 | €499.99 | €30 |
| United Kingdom | £395.99 | £419.99 | £24 |
| Japan | ¥49,980 | ¥59,980 | ¥10,000 |
Nintendo’s price-revision notice specifies that the Japanese prices already include tax, while the U.S. figures typically do not, so your spreadsheet’s tax_rate column needs to reflect that difference before you compare across borders. For game software specifically, the Japanese eShop listings compiled by Perfectly Nintendo show titles like Kirby and the Forgotten Land – Switch 2 Edition at ¥8,578, a number that only becomes comparable to a U.S. price once you run it through a live exchange rate and add whatever consumption tax applies. Pull a current rate from a free API such as exchangerate.host rather than hardcoding a rate you looked up once, since JPY/USD alone has moved meaningfully across 2026.
Step 8: Run the Bundle Math
Console bundles look like discounts but frequently are not, once you subtract the standalone price of the included game. This step forces you to do that subtraction every time a new bundle appears.
| Bundle | Bundle price | Console-only equivalent | Implied game discount |
|---|---|---|---|
| Switch 2 + Mario Kart World (digital) + 3-month NSO | $549.99 | $499.99 | $50 off a $79.99 game, plus NSO value |
| Switch 2 + Switch Sports Resort | $529.99 | $499.99 | $30 off, game standalone price unconfirmed |
| “Choose Your Game” bundle (Mario Kart World, Bananza, or Pokopia) | $500 | $499.99 | Roughly $70-$80 of included software for about $0.01 over console price |
Nintendo’s own showroom listing confirms the $549.99 Mario Kart World bundle includes the console, a digital copy of the game, and a three-month Nintendo Switch Online subscription, while Ground News’s coverage of the “Choose Your Game” promotion puts that package at roughly $500 for console plus a digital code for one of three launch titles. Add a bundle_discount helper column to your spreadsheet that does bundle_price - console_msrp, and you will immediately see which bundles are genuinely good value and which ones just repackage the console at a markup disguised as a free game.
The Switch Sports Resort bundle is worth watching closely for a different reason: as of this writing, Nintendo has listed the bundle price at $529.99 and set an October 22, 2026 availability date, but has not published a clean standalone MSRP for the game itself the way it has for Mario Kart World. When a title launches bundle-first without a clear standalone number, log the bundle price in your tracker with a note flagging the missing standalone figure, and update the row the moment a standalone listing appears. Treating an unknown as unknown, rather than guessing, is what keeps your bundle_discount column trustworthy instead of decorative.
Step 9: Set Price-Drop Alerts
Once your script in Step 6 is logging prices daily, add a simple threshold check that flags when a tracked title drops below one of the tier prices you mapped in Step 1. This is the step that actually saves you money instead of just satisfying curiosity.
ALERT_THRESHOLDS = {
"Mario Kart World": 69.99,
"Donkey Kong Bananza": 59.99,
"Metroid Prime 4: Beyond": 59.99,
}
def check_alerts(title, price):
threshold = ALERT_THRESHOLDS.get(title)
if threshold and price is not None and price <= threshold:
print(f"ALERT: {title} dropped to ${price}, at or below your ${threshold} target")
Call check_alerts(item["title"], price) inside the loop in your Step 6 script, right after the price is fetched. If you want a text or email notification instead of a console print, pipe that alert string into a webhook (Slack, Discord, or a simple email-sending library like smtplib) rather than relying on yourself to remember to check the terminal output every morning. The reason a webhook beats a console print in practice is simple: a script that only prints to a terminal is only useful while you are staring at that terminal, and most people are not staring at a terminal when a $69.99 game drops to $49.99 for a weekend sale.
Step 10: Track Trade-In and Resale Value
Physical cards, whether full game cards or game-key cards, retain resale value that digital purchases never do under current Nintendo eShop account rules. Add a trade_in_value entry for every physical title by checking a resale marketplace periodically, since this number moves independently of the retail MSRP and can meaningfully change your effective cost calculation from Step 5.
Tokyo Game Story's buy-and-sell listings for Switch 2 software are one concrete example of a secondary market actively pricing used physical cards, useful as a reference point if you are trying to estimate resale value before you buy rather than after. There is no single reliable "average trade-in value" figure for Switch 2 titles as of October 2026, prices vary heavily by condition, region, and whether the listing includes original packaging, so populate this field from the specific marketplace you intend to actually sell through rather than a generic industry average.
If you are specifically weighing a game-key card against a full game card at the same price, resale uncertainty should tip the decision toward the full game card when both options are genuinely available at checkout. A full game card's resale behavior is well understood from a decade of original Switch history. A game-key card's long-term resale value is still an open question simply because the format has not existed long enough to generate a track record, and secondary marketplaces have historically priced unfamiliar formats conservatively until buyer demand proves otherwise.
Step 11: Audit for Hidden Price Hikes
Not every price increase gets announced. Nintendo Life's reporting on the September 2026 console price change framed it as a clearly flagged "last chance" style PSA before the hike took effect, but software price creep is rarely communicated that clearly. Run a monthly audit comparing your logged MSRP against the current listed price for every title in your tracker, and flag any title where the gap has grown since your last check.
import csv
def audit_price_drift(log_path="price_log.csv", known_msrp=None):
known_msrp = known_msrp or {}
latest = {}
with open(log_path) as f:
for row in csv.reader(f):
timestamp, title, price = row
latest[title] = float(price)
for title, current in latest.items():
baseline = known_msrp.get(title)
if baseline and current > baseline:
drift = current - baseline
print(f"DRIFT: {title} is now ${current}, up ${drift:.2f} from your logged ${baseline} MSRP")
Run this once a month against your own CSV log. It will not catch a brand-new, never-tracked price hike, but it will catch creeping increases on titles you have been watching for a while, which is exactly the kind of change retailers rarely announce.
Step 12: Schedule a Monthly Review
Close the loop by putting a recurring calendar reminder, not a one-time task, on reviewing the whole tracker once a month. During that review: re-verify MSRP for any title you have not checked in 60 days against the official Nintendo storefront, archive price_log.csv rows older than six months into a separate file so your script stays fast, re-run the currency conversion in Step 7 since exchange rates drift, and prune any tracked title you have already bought or decided to skip. A tracker nobody maintains becomes stale within a quarter, and stale price data is worse than no data because it looks trustworthy while being wrong.
How Switch 2 Game Prices Compare to the Original Switch Era
If you tracked prices on the original Switch, the Switch 2 numbers will feel like a jump, and they are. Most original Switch first-party titles launched at $59.99, with a handful of flagship releases reaching $69.99 late in that console's life. Switch 2 shifted that whole scale up by roughly one tier: what used to be the top price is now the middle price, and a new $79.99 ceiling sits above it for the biggest launches. That is before accounting for the September 2026 hardware increase, which moved the console itself up by $50 in the U.S., a jump large enough that it changes the math on whether buying console-and-game bundles still beats buying each piece separately.
Game-key cards add a second structural change that has no real precedent from the original Switch generation, where every cartridge, with rare licensing exceptions, contained the full game. If you are migrating a price-tracking habit built around the first Switch, the single biggest adjustment is not the dollar figures, it is adding the format column from Step 2 and actually using it, since the old assumption that "physical equals complete and offline-capable equals resellable at full value" no longer holds uniformly across every box on the shelf.
| Generation | Typical first-party tier | Flagship tier | Physical format options |
|---|---|---|---|
| Original Switch (late-cycle) | $59.99 | $69.99 (select titles) | Full game cartridge only |
| Switch 2 (2026) | $69.99 | $79.99 (Mario Kart World) | Full game card or game-key card |
Common Pitfalls When Tracking Switch 2 Game Prices
Most of these mistakes come from treating Switch 2 pricing like Switch 1 pricing, carrying over habits that made sense when every game was a flat $59.99 full cartridge sold in one currency you actually used. The list below covers the errors that show up most often once people start building their own tracker from the steps above.
- Confusing bundle price with game MSRP. The $549.99 Mario Kart World bundle is not a $549.99 game, it is a $499.99 console plus a game and a subscription. Always subtract console MSRP first.
- Ignoring the format column. A $69.99 game-key card and a $69.99 full game card look identical in a spreadsheet with no format field, but they behave completely differently at resale time.
- Comparing JPY or GBP prices without converting currency and tax. A raw ¥8,980 figure means nothing next to a $69.99 figure until you apply a live exchange rate and account for Japan's tax-inclusive pricing.
- Trusting a retailer's price range as the real MSRP. Target's own listings show spreads like $34.99 to $104.99 for a single title page, which usually reflects mixed editions or third-party sellers, not a legitimate four-fold price swing on the base game.
- Forgetting shipping and tax in the effective cost formula. A game that looks $10 cheaper at an out-of-state retailer can cost more once shipping and your local tax rate are added back in.
- Assuming digital purchases hold resale value. Under current Nintendo eShop account terms, digital licenses are not transferable or resellable, so your
trade_in_valuecolumn should default to zero for anything markeddigital.
Troubleshooting Your Price Tracker
Even a short script accumulates small failures once it runs unattended for weeks at a time. The issues below are the ones that come up most often once a tracker has been running long enough to hit real-world retailer changes, rate limits, and stale data.
- The script returns "None" for every price. The retailer changed their page's CSS class. Open the page in a browser, inspect the price element, and update the
selectorvalue inTRACKED_ITEMS. - Requests are getting blocked or returning a 403 error. Some retail sites block generic scraper user agents. Rotate a more realistic
User-Agentstring and add a short delay between requests so you are not hammering the server. - The effective cost formula shows a negative number. This usually means
trade_in_valueexceeds the purchase price, which is a data entry error, not a real deal. Double check the row. - Currency conversion looks wrong by a large margin. Your API key may be returning a cached or stale rate. Confirm the API's documented refresh interval and re-pull if it has been more than 24 hours.
- Price alerts never fire even though you can see a lower price manually. Check that
ALERT_THRESHOLDSactually contains the exact title string your script is logging, since a mismatched key (a typo, extra whitespace, or a colon versus a dash) will silently skip the title. - The spreadsheet's dropdown validation keeps rejecting valid entries. Re-check your data validation rule's exact list of allowed values, trailing spaces in a dropdown list are a common silent cause.
- Game-key card titles are showing up in your full-game-card totals. Re-audit the
formatcolumn, this almost always means an entry was logged before you confirmed whether the title requires a download. - Your cron job isn't running the daily price check. Confirm the cron entry's path to
python3matches the one returned bywhich python3, a mismatched interpreter path is the most common reason scheduled scripts silently fail. - Regional MSRP figures don't match what Nintendo's own store shows today. Prices change. Treat every logged MSRP as a snapshot with a
last_checkeddate, and re-verify directly against Nintendo's storefront before making a purchase decision based on an old row.
Advanced Tips for Serious Deal Hunters
Once the base tracker is running reliably, a few upgrades turn it from a personal spreadsheet into something closer to a real monitoring tool. First, chart your price_log.csv data over time in Google Sheets or a quick matplotlib script, a visual price history makes it far easier to spot a genuine seasonal dip versus a one-day flash sale that will not repeat.
Second, build a small multi-currency dashboard tab that converts every regional price into your home currency automatically using a live API call, rather than manually re-running conversions every time you check the sheet. Third, route your Step 9 alerts into a webhook instead of a console print, a Slack or Discord channel that pings you the moment a tracked title crosses your threshold is far more useful than a script you have to remember to check. Fourth, if you track enough titles that manual CSS selector maintenance becomes annoying, look at a dedicated price-history tool rather than maintaining scraper selectors yourself, several general-purpose price trackers already support game retailers and can feed your spreadsheet via their own export or API, saving you the maintenance burden in Step 6 entirely.
Finally, consider versioning your spreadsheet itself. Google Sheets keeps a version history automatically, but if you move to a local CSV-based workflow, commit price_log.csv to a private Git repository on a schedule. That gives you a durable, timestamped history of exactly what you believed a title cost on any given day, which is useful not just for personal budgeting but for sanity-checking a retailer's claim that a "limited-time price" has not quietly become the new permanent price.
The Complete Working Project
Here is the full tracker combined into one script, including the spreadsheet-compatible CSV export, the effective cost calculation, the alert check, and the drift audit from every step above. Save this as switch2_price_tracker.py and point TRACKED_ITEMS at your real retailer URLs and CSS selectors.
import csv
import requests
from datetime import datetime
from bs4 import BeautifulSoup
TRACKED_ITEMS = [
{"title": "Mario Kart World", "url": "https://example-retailer.com/mario-kart-world",
"selector": ".price-now", "msrp": 79.99, "alert_at": 69.99, "format": "digital"},
{"title": "Donkey Kong Bananza", "url": "https://example-retailer.com/donkey-kong-bananza",
"selector": ".price-now", "msrp": 69.99, "alert_at": 59.99, "format": "full_game_card"},
{"title": "Metroid Prime 4: Beyond", "url": "https://example-retailer.com/metroid-prime-4",
"selector": ".price-now", "msrp": 69.99, "alert_at": 59.99, "format": "game_key_card"},
]
LOG_PATH = "price_log.csv"
def fetch_price(item):
headers = {"User-Agent": "Mozilla/5.0 (price-tracker/1.0)"}
try:
resp = requests.get(item["url"], headers=headers, timeout=10)
resp.raise_for_status()
except requests.RequestException as exc:
print(f"ERROR fetching {item['title']}: {exc}")
return None
soup = BeautifulSoup(resp.text, "html.parser")
node = soup.select_one(item["selector"])
if not node:
return None
price_text = node.get_text(strip=True).replace("$", "").replace(",", "")
try:
return float(price_text)
except ValueError:
return None
def effective_cost(price, tax_rate=0.0, shipping=0.0, trade_in=0.0):
if price is None:
return None
return round(price + (price * tax_rate) + shipping - trade_in, 2)
def run_tracker():
rows_to_log = []
for item in TRACKED_ITEMS:
price = fetch_price(item)
cost = effective_cost(price)
rows_to_log.append([datetime.now().isoformat(), item["title"], price, cost, item["format"]])
if price is not None and price <= item["alert_at"]:
print(f"ALERT: {item['title']} is at ${price}, at or below your ${item['alert_at']} target")
if price is not None and price > item["msrp"]:
print(f"DRIFT: {item['title']} is listed at ${price}, above its ${item['msrp']} MSRP")
with open(LOG_PATH, "a", newline="") as f:
writer = csv.writer(f)
writer.writerows(rows_to_log)
print(f"Logged {len(rows_to_log)} price checks to {LOG_PATH}")
if __name__ == "__main__":
run_tracker()
Running python3 switch2_price_tracker.py against live retailer pages produces output similar to this on a normal day:
DRIFT: Mario Kart World is listed at $84.99, above its $79.99 MSRP
Logged 3 price checks to price_log.csv
And on a day with a genuine discount:
ALERT: Donkey Kong Bananza is at $59.99, at or below your $59.99 target
Logged 3 price checks to price_log.csv
Pair this script with the spreadsheet schema from Step 2 by exporting price_log.csv into a new Google Sheets tab using File > Import, and you have a complete, low-maintenance Nintendo Switch 2 game price tracker that covers MSRP tiers, format differences, regional conversion, bundle math, and drift detection in one system.
None of the twelve steps above require you to trust a single retailer's claim at face value. That is the actual point of building this rather than just bookmarking a deals page: a bookmark shows you one number from one source on one day, while a tracker shows you how that number moved against an official MSRP baseline, how it compares across currencies and formats, and whether a "sale" is a genuine discount or a bundle repackaging the same money differently. Once it is running, the system pays for the 75 minutes you spent setting it up the first time a price alert catches a real drop you would otherwise have missed.
Frequently Asked Questions
What is the standard price range for Nintendo Switch 2 games in 2026?
Most first-party titles fall into three tiers: $59.99 for enhanced ports and Switch 2 Edition upgrades, $69.99 for standard new releases like Donkey Kong Bananza and Metroid Prime 4: Beyond, and $79.99 for flagship launch titles like Mario Kart World.
Why did the Nintendo Switch 2 console price go up in September 2026?
Nintendo raised the U.S. console price from $449.99 to $499.99, the European price from €469.99 to €499.99, the U.K. price from £395.99 to £419.99, and the Japanese price from ¥49,980 to ¥59,980, effective September 1, 2026, according to the company's own price-revision notice. Nintendo did not attribute the increase to a single public cause in that notice.
What is the difference between a game-key card and a full game card?
A full game card contains the complete game on the cartridge. A game-key card contains a license that triggers a mandatory download the first time it is inserted, and can in some cases work across regions differently than a standard full game card.
Do digital Switch 2 games hold any resale value?
No. Under current Nintendo eShop account terms, digital purchases are tied to your account and are not transferable or resellable, unlike physical full game cards and game-key cards, which can be traded or sold through secondary marketplaces.
Is the Switch 2 "Choose Your Game" bundle a good deal?
At roughly $500 for a console plus a digital code for Mario Kart World, Donkey Kong Bananza, or Pokémon Pokopia, the bundle effectively adds a $69.99 to $79.99 game for about one cent over standalone console price, which is a stronger discount than most of Nintendo's other 2026 bundles.
Why do retailer listings show such a wide price range for the same Switch 2 game?
Wide ranges, such as $34.99 to $104.99 seen on some Pokémon Pokopia listings, typically reflect multiple editions, bundles, or third-party marketplace sellers grouped onto a single product page, not a legitimate price swing on the base standalone game.
How often should I update my Switch 2 price tracker?
Automate daily checks with the Step 6 script for titles you are actively watching, and run the full manual audit from Step 12 once a month to catch MSRP drift, currency rate changes, and stale trade-in values.
Can I use this tracker for games outside the U.S. market?
Yes. The spreadsheet schema in Step 2 already includes a region and currency column specifically so you can log Japanese, European, or U.K. pricing alongside U.S. figures, as long as you run every entry through a current exchange rate before comparing effective costs across regions.
