Decide whether you want the word to appear or disappear, then point the check at the part of the page a person actually sees. The second step is where most keyword alerts go wrong.
To monitor a website for a specific word, you need to settle two things. Do you want an alert when the word appears, or when it goes? And which part of the page are you checking? Most tools get the first right. The second is where they fail, because the HTML a server sends often holds words nobody can see. On 13 September 2026 the Space NK advent calendar page was on sale with a visible Add to Bag button, and "Notify Me" was still sitting in its HTML, just hidden.
Work this out first, because the answer changes which word you type. UptimeRobot's keyword monitoring page splits it the same way. "Keyword not exists" "alerts you when a word or phrase disappears from the page", and "Keyword exists" alerts when one turns up. For a restock, the disappearing version is usually the better one. Shops rarely print "In stock" in a fixed place, but they are consistent about the label they put on something they cannot sell.
| What you want | Watch for | Real example |
|---|---|---|
| A sold-out size to come back | The out-of-stock label disappearing | Urban Outfitters marks unavailable sizes "Out of stock!" inside the size selector |
| A set to become orderable | The status label changing | LEGO uses both "Temporarily out of stock" and "Sold out", and they promise different things |
| A product that has not launched to go live | A buy button appearing, scoped to the button | Space NK read "Coming soon" on 7 September 2026 and showed Add to Bag on 13 September |
| A price or offer to turn up | A word such as "Clearance" or "Sale" appearing | Any listing page where the shop names the discount in the tile |
The wording in that table comes from pages we have already written up: the Urban Outfitters size label, LEGO's availability statuses and the beauty advent calendars. Each shop has its own words, so copy the label off the page rather than guessing it.
To a person, no. To code, yes, unless someone wrote it not to care. MDN's documentation for includes() says plainly that the method "is case sensitive", and gives "Blue Whale".includes("blue") as an expression that returns false. If a shop writes SOLD OUT in capitals and your tool compares exactly, a watch on "sold out" never matches.
changedetection.io's keyword tutorial ignores case for its keyword triggers, which is the sensible default. It also lets you add a condition that the page should not include certain words at the same time, which is how you stop "available" firing on a page that says "unavailable". Ignoring case has its own catch: a plain substring search finds "available" inside "Unavailable" once the case is ignored. Whole-word matching fixes it, so check your tool does it before you trust a short word.
Because the page you see and the HTML the server sends are different documents. Modern shop templates ship every state of a button at once and use CSS or JavaScript to show the right one. The rest stay in the file.
textContent gets the content of all elements, including <script> and <style> elements. In contrast, innerText only shows "human-readable" elements.
The Space NK Beauty Advent Calendar shows how this happens. We fetched it on 13 September 2026. It was priced at £275, its structured data said InStock, and the visible button read Add to Bag. The same HTML contained a Notify Me button inside a wrapper classed `d-hidden`, and a Join the waitlist button inside one classed `d-none`. Both are left in the markup, ready to be switched on, and "Notify Me" turns up again in a list of button labels inside a script. We then opened the page in a browser and asked it both of MDN's questions. The body's `innerText` did not contain "Notify Me" anywhere. Its `textContent` did.
Point a keyword alert at that raw file and it goes wrong both ways. A watch for "Notify Me" disappearing never fires, because the text never leaves the file. A watch for "Notify Me" appearing tells you the calendar is out of stock on a day you could have bought it. UptimeRobot says its keyword checks read "the page source", so this applies to them as it does to any tool that reads the file rather than the rendered page. The HTML `<template>` element is a tidier version of the same thing, and MDN says of it that "by default, the element's content is not rendered". Text inside one is in the file and never on the screen.
The fix is to stop searching the whole page. Choose the one element that holds the answer, the buy button or the stock label, and search only inside that.
Copy the exact label from the live page
Open the product in a normal browser and copy the wording the shop uses, whether that is Sold out, Out of stock, Coming soon or Notify me. Guessing is how you end up watching for a word the shop never prints.
Decide on appear or disappear
For a restock, watch the out-of-stock wording go away. For a launch, watch a buy button arrive. Setting both up is fine, as long as you know which alert means what.
Leave the punctuation off
Type the words, not the decoration. Out of stock still matches Urban Outfitters' Out of stock!, and an exclamation mark is exactly the kind of detail that changes quietly in a redesign.
Scope the check to one element
Pick the stock label or the button rather than the whole page, so hidden templates, recommendation carousels and footer text cannot match. On StockWatch that is the visual selector: click the element and only its text is watched.
Make sure it matches whole words and ignores case
Otherwise available matches unavailable and SOLD OUT slips past sold out. Our custom monitor has in-stock and out-of-stock indicator fields that match whole words and ignore case, and it checks the out-of-stock wording first.
Test it against a page in the other state
Before you rely on the alert, point the same setup at a product that is in stock and one that is sold out. If both come back the same, the check is reading something other than the label.
On StockWatch, the keywords on keyword routing are a different setting. They filter products by name, so a Pokemon rule catches Pokemon listings, and they do not search a page's text. For a word on a page, use the indicator fields or the visual selector above.
Not reliably, and Google's own description explains why. Google Alerts emails you when "new results for a topic show up in Google Search". A shop's product page is usually indexed already, so a label changing on it is not a new result. Our reading is that this makes Alerts good for spotting a new page that mentions your name and weak for noticing that "Sold out" has gone from a page Google already knows. Google's help page does not say that directly. It also depends on Google recrawling the page, which you cannot schedule.
If the wait between the label changing and you hearing about it matters, that delay is covered in why restock alerts arrive too late. For how often to check without a site objecting, see how often you can check a website without getting blocked.
A check that reads a web page on a schedule and tells you when a chosen word or phrase appears or disappears. UptimeRobot describes it as checking "whether a specific word or phrase appears on a web page". The useful versions let you choose the direction and limit the search to part of the page.
Use the disappear setting rather than the appear one. UptimeRobot calls it "Keyword not exists". Then make sure the word only exists in the part of the page you care about, because a copy hidden elsewhere in the HTML means the word never disappears from the file, even when it has gone from the screen.
Usually the check read text you cannot see: a hidden button state, a template, a script, or a recommendation carousel further down listing a different product. Narrowing the check to one element, such as the product's own stock label, is the fix.
It depends on the tool. Plain string matching in code is, and MDN's includes() example returns false for "blue" against "Blue Whale". changedetection.io's keyword triggers ignore case. Check the documentation for whichever tool you use, and if it says nothing, test it with capitals.
A server-side check cannot see behind a login it does not have. On StockWatch the browser extension can run a monitor from your own browser, where you are already signed in. A tool that says it can do this from its own servers would need your login session.
Watch the words on a page, not the whole file Five monitors free, checked every 60 seconds. Alerts to Discord, email or Telegram.