n8n + Apify · Web and domains
Website Change Alerts in Slack with n8n
The Website Change Monitor reads a site's sitemaps, fetches the pages, and on every run after the first returns only what changed: new pages, removed pages and pages whose text changed, with a preview of the words added and removed. Save it as an Apify task on a schedule, and an n8n workflow built on Apify's official node posts the changes that matter to Slack.
Website Change Monitor — Sitemap Monitor & Page Diff. Pay per result; see the Store page for current pricing.
What you build
An Apify schedule runs a saved task that watches a competitor's site. When a run succeeds, the Apify node's On new Apify event trigger starts the workflow, a second Apify node reads the run's dataset, a filter keeps new, removed and content-changed pages of medium or high severity, and Slack gets one message per change with the page title, the URL and a preview of the edit.
Use includePatterns to watch only part of a site, such as /pricing or /blog/, and contentSelector to ignore headers and footers. The sitemap change monitor guide covers every option.
Before you start
- An Apify account and its API token (Console → Settings → API & Integrations). The Actor is billed per result to that account; the Store page lists the current prices. Set a maximum total charge in the task's run options to cap a run.
- An n8n instance with the Apify node installed (self-hosted: Settings → Community Nodes → Install
@apify/n8n-nodes-apify; n8n Cloud: search for Apify in the nodes panel) and a Slack credential.
Step 1: Save the input as an Apify task
Open the Actor in Apify Console from its Store page. On the Input tab, switch to the JSON editor, paste this input with the site you watch, and click Save as a new task:
{
"sites": [
"https://www.sitemaps.org/"
],
"mode": "monitor",
"checkContent": true,
"maxPages": 200,
"stateStoreName": "n8n-slack-site-changes",
"resetBaseline": false
}
In monitor mode the first run records a baseline of every page; each later run compares with the previous one and emits only changes. Run the task once from Console now to record the baseline. Then open Schedules in Console, create a daily (or hourly) schedule, and add the task to it.
Step 2: Build the n8n workflow
1. Trigger: Apify, On new Apify event
Create a workflow and add the Apify node's On new Apify event trigger with your Apify credential. Set Resource to Watch to the task you saved and Event Type to Succeeded.
2. Apify: Get dataset items
Add an Apify node with Get dataset items and set Dataset ID to the run's default dataset ID from the trigger output (in Apify's run webhook payload it is resource.defaultDatasetId; check the trigger's test output for the exact path).
3. Filter
Add a Filter node with two conditions: changeType is one of new-url, removed-url or content-changed, and severity is not low. This also drops the baseline records of the first run.
4. Slack: Send Message
Add the Slack node, send a message to your channel, and build the text with expressions, for example:
{{ $json.changeType }} ({{ $json.severity }}): {{ $json.title }}
{{ $json.url }}
+ {{ $json.changedPreview.addedPreview }}
- {{ $json.changedPreview.removedPreview }}
Save the workflow and activate it.
Fields to map
Each dataset item is one page event:
| Field | Use it for |
|---|---|
changeType | new-url, removed-url, lastmod-changed, content-changed, status-changed, baseline or error |
url, title | The page |
severity, severityReason | low, medium or high, with a one-phrase reason |
changedPreview.addedPreview, changedPreview.removedPreview | Short previews of the text added and removed |
changedPreview.similarity | How similar the new text is to the old, 0 to 1 |
lastmod, status | Sitemap lastmod and the HTTP status |
All fields are described in the Sitemap change monitor guide.
Costs and limits
- Apify bills the Actor per page checked and per change, at the prices on its Store page.
maxPagescaps the pages checked per run. - The Actor finds pages through the site's sitemaps (and optionally its feeds); a page that is in no sitemap is not watched.
- The trigger fires only on finished runs with the event type you choose; add a second workflow on Failed if you want to hear about failures.
FAQ
Can I skip n8n?
The Actor can POST its own alert: set webhookUrl to an endpoint you control, and with notifyOnlyOnChanges it posts only when something changed. n8n is useful for filtering on severity and formatting the Slack message.
How do I watch only the pricing page?
Add "includePatterns": ["/pricing"] to the input. Patterns can be globs, regular expressions or substrings of the URL.
How do I reset the baseline?
Run the task once with resetBaseline set to true, or use a new stateStoreName.
Is this affiliated with n8n or Slack?
No. owlabee is an independent developer on Apify Store, and the n8n node used here is Apify's own. Not affiliated with or endorsed by n8n, Slack, Apify or any site named.