Auto Refresh

How it works

Written for the version currently on the Chrome Web Store. Documentation is published in English only.

Permissions, and why we ask for so little

Reloading a tab on a timer requires no access to the site. The extension asks the browser to reload; it never sees the page. That is why installing it does not present the usual 'read and change all your data on all websites' warning.

Two features do need to read the page: the countdown drawn on the page itself, and keyword monitoring. Those ask for access to one site at a time, when you first use them there. Everything granted is listed on the options page and can be revoked per site.

There is no declarative content script in the package. Page code is injected only into tabs you have granted, using chrome.scripting — so on a site you have not granted, not one line of our code runs.

Intervals, schedules and exact times

Fixed repeats every N seconds. Random picks a fresh value in a range on every cycle, which is useful when a rhythmically identical request pattern is undesirable. Custom takes hours, minutes and seconds.

A schedule limits a rule to chosen weekdays and a start–stop window. A window whose end is earlier than its start is treated as crossing midnight, so 22:00 → 02:00 works as you would expect.

Exact times replace the interval entirely: list 09:30 and 14:00 and the page reloads at those moments, rolling over to tomorrow once they have passed.

The countdown drawn on the page

The extension can draw a small countdown onto the page itself so you can see how long is left without opening the toolbar popup. Drag it anywhere; the position is remembered per rule as a percentage of the viewport, so it stays put when the window is resized.

This is the one convenience that requires read access to a site. Turn it off and timed reloads keep working with no permission at all — which is why it is presented as a per-rule option rather than something switched on globally.

Compact mode drops the wording and leaves only the digits, for a page you are watching on a wall display from across the room.

Expression syntax

Plain text matches case-insensitively anywhere in the visible text.

Regular expressions are written between slashes with optional flags: /\$\d+(\.\d{2})?/i. Bare patterns prefixed with $ are also accepted when pasting rules from elsewhere.

CSS selectors and XPath match elements rather than words. XPath starts with // or a dot.

Boolean expressions combine the rest: In Stock AND (Add to Cart OR Buy Now) AND NOT Sold Out. Quote a phrase only when it contains one of the keywords.

Several expressions on one monitor are OR-ed together. When you need AND, write one boolean expression rather than relying on an implicit rule.

Ready-made rules

A dozen templates cover the situations this actually gets used for: an item coming back in stock, a ticket sale opening, a waiting room letting you through, a build finishing, an internal dashboard throwing a 500.

Picking one fills in both the expression and a sensible interval — 15 seconds for a restock, ten minutes for a careers page — because the right interval is as much a part of the recipe as the words are. Everything stays editable afterwards.

Templates ship inside the extension rather than being fetched. Downloading them on demand would mean we could see who is watching what and when, which is precisely the thing we promise not to know.

Picking an element instead of writing a selector

The picker highlights elements as you move over the page; clicking one writes the selector for you. Use it wherever a CSS selector is asked for — the monitored region, a click target, or the value to extract.

It prefers a stable anchor such as id or data-testid over a positional path like div:nth-child(3) > span. Positional paths break the first time a site adds a banner; attribute anchors usually survive a redesign.

If a selector does break, the AI repair takes the old selector plus a fragment of the new page and proposes a replacement, with a confidence score you can judge before accepting it.

Appears, disappears, anything changes

Appears fires when a match shows up. Disappears fires when every expression stops matching — useful for waiting-room wording going away.

Anything changes needs no keywords. It fingerprints the visible text and alerts when the fingerprint moves. The first scan only establishes a baseline, so a fresh rule never fires immediately.

Fingerprints deliberately ignore raw HTML. Nonces, timestamps and inline scripts change on nearly every load, so hashing the markup would alert constantly.

Scanning options

Wait before scanning gives dynamic pages time to render. If a monitor never fires on a site that clearly matches, this is almost always the reason.

Restricting a monitor to a region using a CSS selector removes the whole page's furniture from consideration and is the single most effective way to cut false positives.

Scanning HTML source instead of visible text matches hidden markup as well. It is a developer option; it will match things nobody can see.

Click automation

A click target is a CSS selector with an optional XPath fallback, triggered either after each reload or only when the monitor fires. Targets run in order.

Use the picker instead of writing selectors by hand — it prefers id and data-testid over positional paths, which survives site redesigns far better.

Captcha detection pauses the rule and alerts you. The extension does not attempt to solve, bypass, or otherwise defeat a challenge.

Kiosk rotation

Give a rule a list of URLs, one per line, and the tab cycles through them on the timer instead of reloading the same page. It is the mode you want for a wall display or a spare monitor showing several dashboards in turn.

The rotation cursor lives with the rule's runtime state, so a browser restart or a suspended service worker resumes at the right URL rather than starting the list over.

Monitors still apply while rotating, which means one rule can cycle four dashboards and alert you when any of them starts showing an error.

Extracting a value over time

Point at a price, a stock count or a rank and every check records what it said. Numbers are parsed out of their surroundings — currency symbols and thousands separators are stripped — so 1 299,00 € becomes a number you can chart and compare.

A threshold turns the series into an alert: below a figure, above a figure, or a percentage move since the last sample. Without one, the series is recorded quietly and only shows up when you go looking.

Everything is exportable as CSV. The chart in the panel is deliberately a single line with no axes — the panel is 320px wide, and precise reading is what the export is for.

Change history

Every time a monitor fires, the time, the page and the matched text are written down. This is what makes an unattended watch worth leaving running: hours later you can see exactly what happened and when, rather than finding a notification you missed.

Snapshots keep the surrounding text at the moment of the hit, so you can compare before and after instead of only knowing that something moved.

Local history is a ring buffer whose size you set in options; the oldest entries drop off as new ones arrive. Longer retention lives in the account, and only if you turn cloud sync on.

What the AI is for

Rule building takes a sentence — 'tell me when it is back in stock and under $200' — and returns an expression, a mode and a suggested interval. It is the fastest way past the syntax for people who will never learn regular expressions and should not have to.

Change summarising takes the before and after text of a hit and says in one line what actually changed, which matters on a page where the useful difference is buried among timestamps and rotating adverts.

Change classification judges whether a diff is meaningful or noise, and selector repair proposes a replacement when a site redesign breaks one. All four run on our servers: there is no model key anywhere in the extension package, and requests carry the fragment being analysed rather than a browsing history.

Alerts

In the browser: a notification, a sound, highlighting the match on the page, or bringing the tab to the front.

Outside the browser: email, a webhook, Telegram, Discord or Slack. Configure them on the dashboard; they need an account and a Pro plan.

Alerts are not retried. A restock notice that arrives ten minutes late is worse than useless, so a failed delivery is reported rather than queued.

Each channel below has its own setup on the dashboard, and the dashboard links straight back to these paragraphs.

Email

Add the address on the dashboard and we send one confirmation email to it. The channel stays silent until the link inside is opened; the link works once and expires after 24 hours.

This double confirmation is not a formality. Without it, anyone with an account could type a stranger's address and have our domain deliver text of their choosing to it — the shape of an open mail relay, and a fast way to lose a sending reputation. The Test button therefore cannot confirm an address, only a confirmed address can be tested.

Email is the only channel that counts against a daily allowance, because it is the only one we pay for. Confirmation emails do not count, but resending one is rate limited.

Webhook

Paste an https:// endpoint you control. We POST application/json shaped as { source, title, body, url, at }: the title and body of the hit, the page it happened on, and an ISO timestamp.

One attempt, an eight second timeout, no retry. Custom headers can be stored with the channel when you need an auth token on your side.

The URL must be https, and hosts that resolve to private or link-local ranges are rejected when the channel is added — including the cloud metadata address. That check exists so this form cannot be used to make our servers probe an internal network on someone's behalf.

Telegram

Telegram needs two values, and the dashboard asks for both: a bot token and a chat id. Message @BotFather, send /newbot, and copy the token it returns. Then send any message to your new bot — a bot cannot open a conversation with you — and read chat.id from https://api.telegram.org/bot<token>/getUpdates.

We call sendMessage on Telegram's Bot API with your token. The token lives on your account, is used for nothing else, and is never handed to the extension; revoking it in BotFather cuts delivery immediately.

Discord

Server Settings → Integrations → Webhooks → New Webhook, choose the channel, then Copy Webhook URL and paste it on the dashboard.

We POST a Discord embed carrying the title, the matched text and a link to the page. The URL is itself the credential — anyone holding it can post into that channel — so treat it as a secret. Deleting the webhook in Discord revokes it instantly, with nothing to change on our side.

Slack

In your Slack app under Incoming Webhooks, activate them, add one to the workspace, pick the channel, and copy the hooks.slack.com URL.

We POST { text } with the title, the matched text and the page URL. The webhook is bound to the single channel you picked and is the credential itself; revoke it in Slack to stop delivery.

When Chrome freezes a background tab

Chrome's memory saver discards tabs it believes are idle, which stops the reload cycle. The extension notices a discarded tab and reloads it to bring it back.

Keeping the window visible avoids it entirely. 'Keep the computer awake' in options prevents system sleep from having the same effect overnight.

Sync, devices and what leaves your machine

Without an account, nothing leaves your browser at all.

With cloud sync on, we store the rules you wrote and the hits they produced. We do not store, and have no interest in, a list of the sites you visit.

Merging happens on the device, per rule, by last-modified time — editing on a laptop never overwrites what a desktop set up. Tab-scoped rules never sync, because a tab id means nothing on another machine.

The trial, and what the free tier keeps

The trial is seven days with everything unlocked, timed locally. It needs no account, no card and has nothing to cancel — when it ends, Pro features become read-only rather than disappearing, so nothing you configured is lost.

The free tier is meant to be genuinely usable rather than a demo: unlimited refresh rules, every refresh-layer option, and three plain-text monitors. Random intervals, sounds and notifications are not metered, because charging per alert is what makes competing extensions unpleasant to live with.

What Pro adds is scale and the cloud: unlimited monitors, advanced expressions, scheduling, click automation, extraction, history, AI and alerts that leave the browser. Lifetime is the same feature set with the AI allowance resetting yearly instead of monthly — inference costs recur even when a payment does not.