Inspiration
Nintendo Switch 2 restocks in Korea can disappear in minutes. Checking many retailer pages by hand is stressful, unreliable, and often too slow—especially when a product is sold out most of the time.
We wanted a practical “radar” that watches the signals people actually use: official stores, major retailers, price-discovery sites, and community posts. The goal is simple: help a real person notice a legitimate restock quickly enough to make their own purchase decision.
What it does
StockScout is a 24/7 restock-alert system for Nintendo Switch 2 in Korea.
It monitors nine sources, including official retail pages, Himart, Danawa, Gamewoori, CJ OnStyle, and community signals from DC Inside and Algumon. When a product changes from sold out to genuinely in stock, StockScout sends an immediate Telegram alert with a direct purchase link and a login/preparation reminder.
It also provides:
- Duplicate-safe alerts that survive restarts
- Community-post alerts for early restock signals
- Telegram status checks, daily heartbeats, and weekly summaries
- A private Korean status dashboard with monitor health, latency, recent alerts, and drop-pattern charts
- Escalation-ready notifications for critical restocks
StockScout never automates checkout or purchasing. A human always makes the final purchase.
How we built it
We built StockScout in Python with an asynchronous monitoring engine so each source can run independently without one failed page stopping the rest of the system.
Each retailer has a focused parser based on real captured page fixtures. The engine tracks state transitions, so it alerts only when a product moves from unavailable to available. For community sources, it uses persistent deduplication to report each relevant post once.
We used:
- Python, asyncio, aiohttp, Beautiful Soup, and lxml
- Telegram Bot API for actionable alerts
- JSONL telemetry and atomic local state persistence
- A read-only aiohttp dashboard
- Oracle Cloud for always-on monitoring
- Cloudflare Tunnel and authenticated access for the private dashboard
- pytest-based offline verification with 173 passing tests
Challenges we ran into
The hard part was not sending a message—it was making that message trustworthy.
Retail pages expose availability in many different ways: HTML buttons, JavaScript variables, JSON-LD data, and price thresholds. Some pages can return an unrelated product with an “InStock” signal, which could create a costly false positive. We added exact product-identity checks, source-specific parsing rules, and regression fixtures from real captured pages.
We also had to balance speed with responsible monitoring. StockScout uses jitter, rate-limit detection, exponential backoff, and conservative polling instead of trying to bypass anti-bot systems.
Finally, a restock alert only matters if it reaches a human. We designed retries, priority levels, quiet hours for non-critical messages, health warnings, and test fire drills around that real-world constraint.
Accomplishments that we're proud of
We are proud that StockScout is more than a prototype: it is running continuously in production with nine monitors and a protected live dashboard.
We built a system that:
- Sends one actionable alert per real stock transition instead of repeatedly spamming users
- Keeps monitoring resilient when an individual source fails
- Captures parser failures as evidence for safe future fixes
- Prevents duplicate community alerts across restarts and overlapping searches
- Includes a full end-to-end demo and monthly alert drill
- Reached 173 automated offline tests based on real page fixtures
Most importantly, we built safety into the product boundary: StockScout alerts people, but never purchases on their behalf.
What we learned
We learned that reliability is a product feature. A fast alert is useless if it is false, duplicated, lost during a restart, or sent after a user has muted the channel.
We also learned that web monitoring needs humility. Pages change, anti-bot responses happen, and an “in stock” field alone is not enough. Capturing real evidence, testing parsers offline, and treating uncertainty as a reason not to alert made the system much safer.
What's next for StockScout
Next, we plan to expand StockScout carefully rather than simply adding more polling.
We want to add more operator-approved sources, activate a stable canary product to detect parser drift early, improve historical restock insights, and offer optional escalation channels such as high-priority mobile notifications.
Beyond Nintendo Switch 2, the same alert-only architecture could support other time-sensitive drops—while preserving the same principle: detect signals responsibly, notify humans quickly, and leave the final action to them.
Built With
- aiohttp
- asyncio
- beautiful-soup
- cloudflare-tunnel
- lxml
- oracle-cloud
- pytest
- python
- telegram-bot-api
Log in or sign up for Devpost to join the conversation.