Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

To run an n8n workflow when a page’s text changes, schedule a fetch of the page, extract only the part of the page you care about, normalize that text, and compare it with the version saved on the previous run. The workflow should send an alert or take any other action only when the two versions differ. The first successful run records a baseline and sends nothing, because there is no earlier version to compare against.

How the workflow fits together

Every change-detection workflow built this way follows the same chain of steps. Each step has a job, and each one can fail in a different way.

Stage Node used in the examples What it does What goes wrong if it is misconfigured
Schedule Schedule Trigger Starts a check at a fixed interval Checks run in the wrong timezone or more often than the site tolerates
Fetch HTTP Request Downloads the page The response lacks the text you expect, often because it is built by JavaScript
Extract HTML Pulls out the element that holds the monitored text using a CSS selector The selector matches nothing, or matches navigation and timestamps too
Normalize A Code step Strips leftover markup and standardizes whitespace Cosmetic changes still register as changes
Compare A hash or a stored snapshot Decides whether the text differs from the last run No saved state exists, so every run looks like a first run
Act Email, Telegram, Google Sheets, or Google Drive Delivers the alert or logs the change Alerts fire on every run because the branch is not gated by the comparison

The pattern is documented in the cited n8n template for webpage change detection, which runs on a schedule, hashes the content, and only continues when the hash differs from the stored value. Webpage change detection and alerts with Google Suite and hash tracking describes that design, and it also treats public documents such as company terms and government policies as typical monitoring targets.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Build the workflow

The steps below assume a new workflow in a recent n8n version. Node labels and menus change between releases, so confirm each name against your installed version. The official n8n documentation describes the Cloud and self-hosted deployment options, and the steps are the same on either.

Set the schedule and fetch the page

  1. Add a Schedule Trigger node and choose an interval. One n8n template runs once a day and another defaults to every four hours. Those are starting points, not recommended rates; choose an interval that matches how often the page is likely to change and how often you can reasonably request it.
  2. Open the workflow settings and set the timezone deliberately. A daily trigger set to the wrong timezone runs at an unexpected hour, which matters when you compare results across days.
  3. Add an HTTP Request node and enter the page URL. For a public page this is usually enough. If the page requires a login or cannot be reached by a plain request, replace this step with a web-scraping service rather than trying to work around the access control.

Extract and normalize the text

  1. Add an HTML node after the request. Use a CSS selector that targets the specific element holding the text you want to monitor, such as the main article body or a policy paragraph. Do not compare the whole page: navigation menus, footers, visitor counters, and “last updated” stamps change for reasons unrelated to the content you care about.
  2. Normalize the extracted text in a Code step. The community Website Change Watcher template removes basic HTML, style, and script content and collapses whitespace before comparison. That removes the most common noise, but a page that injects dynamic elements inside the selected block will still need extra handling, such as removing those elements by their own selectors before normalization.

Compare against the saved state

  1. Compute a hash of the normalized text, or save the normalized text as a snapshot. Both approaches are covered in the next section.
  2. Read the previously stored value, compare it with the current one, and route the workflow through an IF node. The true branch continues to the alert. The false branch stops.
  3. Write the current value back to storage on every run, whether or not it changed. If you only update storage after a change, the workflow will keep alerting on the same difference.

Handle the first run and send the alert

  1. On the first run there is nothing to compare, so store the baseline and end the run. A community example makes this explicit by skipping its initial baseline rather than treating it as a change, which avoids a false alert the moment the workflow is activated.
  2. On later runs, connect the true branch to your action. Email and Telegram suit real-time alerts. Google Sheets works well as a log of dates and changes, and Google Drive can hold a copy of the changed content. One cited template uploads the changed content to Google Drive, logs it to Google Sheets, and can send a notification email. Another sends Telegram and email alerts that include a diff.

Hash or snapshot: which to store

Both approaches tell you whether the text changed. They differ in what you can do afterward.

Approach What is stored Advantage Trade-off
Hash comparison A short fingerprint of the normalized text, computed with a cryptographic hash in the cited template Compact, and the comparison is a simple equality check It tells you that something changed, not what changed
Snapshot with diff The full normalized text from the last run, kept in a sheet or file You can show a human-readable diff in the alert, and filter unchanged content directly More storage, and the stored text may contain private or lengthy content you need to manage

If you only need a yes-or-no signal for a single page, a hash is enough. If the alert should tell a reader what was added or removed, store a snapshot. The snapshot example in the Telegram and email template filters unchanged content before it sends anything.

Choose the fetch method

A plain HTTP Request followed by HTML extraction works when the text you want is present in the server’s response. It does not work when the page builds that text in the browser with JavaScript after it loads. The community Website Change Watcher example states that its simple approach does not handle JavaScript-rendered pages well, so it is the wrong tool for those sites.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Test this before building anything else. Run the HTTP Request node once, open its output, and search for a sentence you can see on the live page. If the sentence is missing, the text is rendered client-side, and you will need a rendering-capable scraping service to retrieve it. If the sentence is present but your selector returns nothing, the problem is the selector, not the fetch.

Choose the alert destination

Destination Shown in the cited material Best used for
Email Template notification email and Telegram and email alerts Notifying a person who needs to act on the change
Telegram Telegram and email alerts template Fast notifications to a phone or chat
Google Sheets Change log in the Google Suite template and snapshot storage in a sheet A dated record of every detected change
Google Drive Upload of changed content in the Google Suite template Keeping a copy of the content as it was when it changed

Use more than one destination when the people who need the alert and the people who need the record are different. Keep the record in the same place every time, so you can compare the history of changes later.

Troubleshooting common problems

  • Alerts fire on every run. The comparison is not gating the action, or the stored value is never updated. Check that the IF node reads the saved state and that storage is written on every run.
  • Alerts fire for changes that do not matter. The selector is too broad, or the normalization misses dynamic content such as timestamps or counters. Narrow the selector to the content block and remove the dynamic elements before comparing.
  • The workflow never detects a change. The selector returns empty text, usually because the page is rendered by JavaScript. Confirm the fetched response contains the expected text, as described above.
  • The first run sends an alert. The baseline branch is not stopping the run. Make sure the first-run path saves state and ends without reaching the notification step.
  • A run fails. Open the execution history for that run, find the first node that returned an error or unexpected output, and fix that node before changing anything else.

Limits to keep in mind

This pattern is polling-based. It can only detect a change at the time of the next check, so a page that changes and reverts between checks will not be caught. Choose the interval with that in mind, and keep it within what the site’s terms allow.

Selectors belong to the page’s current markup. When the site redesigns its layout or renames a class, the selector may stop matching and the workflow will report empty text. Plan to review the selector whenever the workflow stops producing output.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A workflow that works on one page does not transfer to another. Each target needs its own URL, selector, and normalization rules.

Best Value
Sale
PowerShell for Sysadmins: Workflow Automation Made Easy
  • Book - powershell for sysadmins: workflow automation made easy
  • Language: english
  • Binding: paperback

For the Website Change Watcher template, the most recent public reference is a community post dated August 31, 2026, Website Change Watcher workflow template. The n8n templates cited here do not state a specific n8n release that they require, so test them on the version you run.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Sources

The Bottom Line

Schedule the fetch, select only the text that matters, normalize it, and compare it against the value saved on the previous run. Let the first run set the baseline, and send alerts only on later runs where the comparison finds a difference. Confirm early that the page’s text is present in the HTTP response, because a plain fetch cannot see text that JavaScript adds later.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.