⚠️ Notice:
Community nodes like @custom-js/n8n-nodes-pdf-toolkit can only be installed on self-hosted instances of n8n.

This n8n workflow demonstrates how to monitor competitor websites for SEO changes by scraping content and updating a Google Sheet. It uses the Scraper node fromcustomjs.space to extract HTML content and parse key SEO elements like title, <h1>, <h2>, and meta description.
What this workflow does
- Reads a list of competitor websites from a Google Sheet.
- Uses the CustomJS Scraper node to fetch raw HTML for each website.
- Extracts important SEO data:
- Page title
- <h1>headings
- <h2>headings
- Meta description
 
- Updates the Google Sheet with the latest scraped values and a timestamp.
- Compares the new values with the previous ones:
- If changes are detected, a Slack notification is sent.
 
Requirements
- Self-hosted n8n instance.
- CustomJS API key for the Scraper node.
- A Google Sheet containing competitor website URLs.
- Slack workspace (optional, for notifications).
Workflow Steps
- 
Schedule Trigger
 Runs automatically (weekly by default, adjustable as needed).
 
- 
Google Sheets – Get Competitor URLs
 Reads competitor website URLs from the configured sheet.
 
- 
CustomJS Scraper – Fetch HTML 
- Inputs each website URL.
- Returns raw HTML text for analysis.
 
- 
Code – Extract SEO Elements
 Parses the HTML to extract:
 
- Title
- H1s
- H2s
- Meta description
 
- 
Google Sheets – Update SEO Data
 Updates the sheet with the new SEO data and a current date.
 
- 
If – Check for SEO Changes
 Compares old vs. new values.
 
- 
Slack Notification – Alert on Changes
 Sends a message to Slack when updates are detected.
 
Usage
- 
Get API key from CustomJS 
- Sign up on the CustomJS platform.
- Navigate to your profile page.
- Click “Show” to reveal your API key.
 
- 
Set Credentials for CustomJS API in n8n 
- Copy your API key into a new CustomJScredential.
 
- 
Prepare your Google Sheet 
- Create a sheet with a column named Websites.
- Enter competitor URLs (must start with https://).
 
- 
Run or schedule the workflow 
- The workflow will scrape competitor sites, update the sheet, and notify you of any SEO changes.
 
Example Output
Google Sheet after update:
| Websites | Title | Meta Description | H1s | H2s | Date | 
|---|
| https://example.com | Example Title | Example meta description | Example H1 Heading | Example H2s | 2025-09-07 12:00:00 | 
Slack Notification Example
⚠️ Competitor SEO Change Detected!
Website: https://example.com
Title
- Old: Example Title
- New: New Example Title
Meta Description
- Old: Example meta description
- New: Updated example meta description
H1s
- Old: Example Heading
- New: Updated Heading
H2s
- Old: Example Subheading
- New: Updated Subheading
Date: 2025-09-07 12:00:00
Customization Tips
- Change scraping frequency in the Schedule Trigger (daily, weekly, etc.).
- Track additional elements by extending the regex in the Code Node.
- Send alerts to other platforms (e.g., Email, Microsoft Teams, Discord) by swapping the Slack node.
- Store results in a database instead of Google Sheets if long-term history is required.