Try our Chrome extension

Chrome store icon Chrome Webstore

Easily add the current web-page from your browser directly into your changedetection.io tool, more great features coming soon!

Changedetection.io needs your support!

You can help us by supporting changedetection.io on these platforms;

The more popular changedetection.io is, the more time we can dedicate to adding amazing features!

Many thanks :)

changedetection.io team

Automatically applies this tag to any watch whose URL matches. Supports wildcards: *example.com* or plain substring: github.com/myorg
Leave unchecked to use the auto-generated colour based on the tag name.

✨ AI

Configure an AI / LLM provider in Settings → AI / LLM to enable AI features for this group.

These settings are added to any existing watch configurations.

One CSS, xPath 1 & 2, JSON Path/JQ selector per line, any rules that matches will be used.
Show advanced help and tips
  • Remove HTML element(s) by CSS and XPath selectors before text conversion.
  • Don't paste HTML here, use only CSS and XPath selectors
  • Add multiple elements, CSS or XPath selectors per line to ignore multiple parts of the HTML.

Text filtering

  • Text to wait for before triggering a change/notification, all text and regex are tested case-insensitive.
  • Trigger text is processed from the result-text that comes out of any CSS/JSON Filters for this monitor
  • Each line is processed separately (think of each line as "OR")
  • Note: Wrap in forward slash / to use regex example: /foo\d/
  • You can also use conditions - "Page text" - with Contains, Starts With, Not Contains and many more /foo\d/
  • Matching text will be ignored in the text snapshot (you can still see it but it wont trigger a change)
  • Each line processed separately, any line matching will be ignored (removed before creating the checksum)
  • Regular Expression support, wrap the entire line in forward slash /regex/
  • Changing this will affect the comparison checksum which may trigger an alert


  • Block change-detection while this text is on the page, all text and regex are tested case-insensitive, good for waiting for when a product is available again
  • Block text is processed from the result-text that comes out of any CSS/JSON Filters for this monitor
  • All lines here must not exist (think of each line as "OR")
  • Note: Wrap in forward slash / to use regex example: /foo\d/
  • Keep only lines that contain any of these words or phrases (plain text, case-insensitive)
  • One entry per line — any line in the page text that contains a match is kept
  • Simpler alternative to regex — use this when you just want lines about a specific topic
  • Example: enter celsius to keep only lines mentioning temperature readings
  • Extracts text in the final output (line by line) after other filters using regular expressions or string match:
    • Regular expression - example /reports.+?2022/i
    • Don't forget to consider the white-space at the start of a line /.+?reports.+?2022/i
    • Use //(?aiLmsux)) type flags (more information here)
    • Keyword example - example: Out of stock
    • Use groups to extract just that text - example /reports.+?(\d+)/i returns a list of years only
    • Example - match lines containing a keyword /.*icecream.*/
  • One line per regular-expression/string match
Used for watches in "Restock & Price detection" mode
Changes in price should trigger a notification
Minimum amount, Trigger a change/notification when the price drops below this value.
Maximum amount, Trigger a change/notification when the price rises above this value.
Price must change more than this % since the previous check to trigger a change.
For example, if the previous check saw the product at $1,000 USD, 2% would mean it has to change more than $20 since then.
Use with caution! This will easily fill up your email storage quota or flood other storages.
Use system defaults

Tip: Use AppRise Notification URLs for notification to just about any service! Please read the notification services wiki here for important configuration notes.

Show advanced help and tips
  • discord:// (or https://discord.com/api/webhooks...)) only supports a maximum 2,000 characters of notification text, including the title.
  • tgram:// bots can't send messages to other bots, so you should specify chat ID of non-bot user.
  • tgram:// only supports very limited HTML and can fail when extra tags are sent, read more here (or use plaintext/markdown format)
  • gets://, posts://, puts://, deletes:// for direct API calls (or omit the "s" for non-SSL ie get://) more help here
  • Accepts the {{token}} placeholders listed below
Customise notifications
Title for all notifications
Body for all notifications — You can use Jinja2 templating in the notification title, body and URL, and tokens from below.
Show token/placeholders
Token Description
{{base_url}} The URL of the changedetection.io instance you are running.
{{watch_url}} The URL being watched.
{{watch_uuid}} The UUID of the watch.
{{watch_title}} The page title of the watch, uses <title> if not set, falls back to URL
{{watch_tag}} The watch group / tag
{{preview_url}} The URL of the preview page generated by changedetection.io.
{{change_datetime}} Date/time of the change, accepts format=, change_datetime(format='%A'), default is '%Y-%m-%d %H:%M:%S %Z'
{{diff_url}} The URL of the diff output for the watch.
{{diff}} The diff output - only changes, additions, and removals
All diff variants accept lines=, context=, word_diff=, ignore_junk= args, e.g. {{diff(lines=10)}}, {{diff_added(lines=5, context=2)}}
{{diff_clean}} The diff output - only changes, additions, and removals — Without (added) prefix or colors
{{diff_added}} The diff output - only changes and additions
{{diff_added_clean}} The diff output - only changes and additions — Without (added) prefix or colors
{{diff_removed}} The diff output - only changes and removals
{{diff_removed_clean}} The diff output - only changes and removals — Without (added) prefix or colors
{{diff_full}} The diff output - full difference output
{{diff_full_clean}} The diff output - full difference output — Without (added) prefix or colors
{{diff_patch}} The diff output - patch in unified format
{{diff_changed_from}} Only the changed words/values from the previous version — e.g. the old price. Best when a single value changes per line; multiple changed fragments are joined by newline.
{{diff_changed_to}} Only the changed words/values from the new version — e.g. the new price. Best when a single value changes per line; multiple changed fragments are joined by newline.
{{current_snapshot}} The current snapshot text contents value, useful when combined with JSON or CSS filters
{{triggered_text}} Text that tripped the trigger from filters

Warning: Contents of {{diff}}, {{diff_removed}}, and {{diff_added}} depend on how the difference algorithm perceives the change.
For example, an addition or removal could be perceived as a change in some cases. More Here
  • For JSON payloads, use |tojson without quotes for automatic escaping, for example - { "name": {{ watch_title|tojson }} }
  • URL encoding, use |urlencode, for example - gets://hook-website.com/test.php?title={{ watch_title|urlencode }}
  • Regular-expression replace, use |regex_replace, for example - {{ "hello world 123" | regex_replace('[0-9]+', 'no-more-numbers') }}
  • For a complete reference of all Jinja2 built-in filters, users can refer to the https://jinja.palletsprojects.com/en/3.1.x/templates/#builtin-filters

Format for all notifications