BuildNot yet confirmed elsewhere1 publisher2 min readPublished
The hard part of a restock alert is not the scrape, it is the decision to interrupt
A writeup from the team behind Pokemon restock app Restockd puts the engineering in the notify decision: an alert lifecycle of its own, two failure modes counted apart, and a timestamp on every claim.
The Engineer · Build desk

What happened
- The team behind Restockd, a free app for Pokemon and other hard-to-find collectible restocks, wrote up what broke while building its availability alerts.
- Their account puts the hard engineering in deciding when an observation is trustworthy enough to interrupt a user, not in checking retailer pages.
- Signals contradict each other: an Add to Cart button can appear on an item that cannot be bought, and search results can update ahead of the product page.
- Inventory flaps, locations report at different times, and retries can replay an already-processed event, so one buying window produces many valid observations.
Why it matters
- capability Counting the false positive and the late alert as separate failures gives a team two dials to trade against each other, instead of one undifferentiated quality complaint that no rule change can...
- constraint No confirmation delay transfers between a routine monitor and a limited drop, so the threshold is per-product calibration work that cannot be inherited from a library or a vendor default.
- decision Splitting the observation store from the notify path is what lets the alerting rules be rewritten later without back-dating false confidence onto data that never had it.
- exposure Non-idempotent event processing puts user trust on the line rather than an error budget: a single transient failure arrives on someone's phone as spam.
The mechanism here is two stores of state where most teams keep one. Restockd describes an observation record, which says what was seen and when, and an alert record with its own lifecycle kept separate from the stream of inventory events [8]. Most alerting systems start instead with a single boolean, in_stock true or false, while the real input is a collection of clues [7]. That single field then has to carry evidence and freshness at once, plus whether this particular user has already been told about this availability window and whether anything meaningful changed since the last message [9]. Those questions have nowhere to live in a boolean, which is why they get answered by accident.
Take the freshness argument at face value. The post notes that an "in stock" label with no timestamp could mean the system saw availability five seconds ago or twenty minutes ago [11]. That is a 240-fold spread in staleness behind one word [22], and both ends of it look identical to a pipeline that is returning successful responses while quietly serving old inventory [6]. Hence the monitoring recommendation that is easy to skip: track the age of the last useful observation, not just whether the latest request came back clean [12].
The asymmetry the writeup is careful about is the price of one more confirmation check. For ordinary monitoring it costs very little; for a limited Pokemon release, that same short delay is the gap between checking out and missing the drop [14]. So the confirmation step is not a reliability improvement you can switch on globally. It is a purchase, and the currency changes per product.
There is also a testing consequence buried in the argument. A monitor that reads a page correctly is not yet a good alerting system, because the artifact under judgement is the notification at the moment it reaches a person [18], and a phone notification has to make sense on a lock screen, away from the app that produced it [19].
What the post does not offer is a number. It says up front that it is leaving out retailer-specific methods and infrastructure [20], and it publishes no false-positive rate, no late-alert rate, and no actual confirmation threshold [23]. That limits what can be checked. It also makes the claim an architectural one rather than a measured one: keeping the observation apart from the notification is cheap enough to do before you have the data that would tell you where to set the threshold. Anyone alerting on a cached, region-varying third-party signal is running the same decision, whether or not they have named it.
What to watch
- Anyone in this space publishing a confirm-versus-send threshold with both error rates beside it would give the rest of the field a benchmark to be measured against.
- Retailer page changes that remove the availability signal outright push the problem back to acquisition, where none of these decision rules help.
- Whether last-observed timestamps reach the notification itself, and not only an in-app screen, shows if freshness is a user commitment or an internal metric.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence32
- Adoption
- Insufficient
- Hype gap+5
- Incentives55
- Confidence40
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
Restockd is a free app for Pokemon restocks and other hard-to-find collectibles, and its team published the reliability lessons from building it.
- [2]
According to the Restockd writeup, the difficult part was not checking pages but deciding when an observation was trustworthy enough to interrupt someone.
- [3]
A page may show an Add to Cart button for an item that cannot be purchased.
- [5]
Inventory often flaps: an item appears, disappears and returns, different locations may report changes at slightly different times, and a retry can repeat an event that was already processed.
- [6]
A pipeline can look healthy because it is returning successful responses while silently serving old information.
- [7]
Most alerting systems begin with a boolean, in_stock true or false, while the real world gives something closer to a collection of clues.
- [8]
An alert needs its own lifecycle, separate from the stream of inventory observations.
- [9]
The suggested dedup questions are whether this person has already been told about this availability window, whether anything meaningful changed since the previous alert, and whether a repeated alert is useful or just exposes internal noise.
- [10]
Retries should be safe: if processing the same event twice sends two notifications, a temporary failure can turn into spam, so idempotency protects user trust rather than being backend housekeeping.
- [11]
An inventory label without a timestamp is ambiguous: "in stock" could mean the system saw availability five seconds ago or twenty minutes ago.
- [12]
Freshness belongs in monitoring: track the age of the last useful observation, not only whether the latest request succeeded.
- [13]
The recommended starting point is keeping the raw observation separate from the decision to notify, which makes it possible to change alerting rules without pretending the source data was more certain than it was.
- [14]
For ordinary monitoring another confirmation check may cost very little, but for a limited Pokemon release a short delay can be the difference between checking out and missing the drop.
- [15]
There is no universal delay that solves the tradeoff; the right choice depends on the product, the source, and what users expect from the alert.
- [16]
The two failures are measured separately: a false positive sends someone to an item they cannot buy, and a late alert is accurate but arrives after it is useful.
- [17]
Calling both failure modes "bad data" hides the tradeoff; measuring them separately lets a team decide which mistake is more costly in each situation.
- [18]
A monitor that correctly reads a page is not necessarily a good alerting system; the product has to be judged at the moment the notification reaches a person.
- [19]
A push notification, a community post and a social update may describe the same restock but are encountered differently, and a phone notification must make sense on a lock screen.
- [20]
The article states it covers the reliability lessons without getting into retailer-specific methods or infrastructure.
- [21]
Sometimes a retailer changes a page and the availability signal simply vanishes.
- [22]
The staleness range hidden by an untimestamped "in stock" label spans a factor of 240.
- [23]
The writeup publishes no measured false-positive rate, no late-alert rate and no confirmation delay value.
Sources
1 independent publisher whose own reporting we read for this story.
- dev.toWhy real-time restock alerts are harder than they look
1 article · August 24, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.