Your competitor's pricing page changed last night. Their refund policy was updated at 2am. They removed a feature from their standard tier.
You found out three weeks later.
Here is how to monitor competitor websites for changes in real-time — without paying $200/month for tools that do the same thing with less control.
What You Actually Need to Monitor
Most change-monitoring guides tell you to track "everything." That floods you with noise.
The changes that actually matter:
Pricing changes — price increases signal room to compete on cost; decreases signal they are losing deals to price objections.
Feature additions/removals — your competitive positioning needs updating. Sales team needs to know.
Terms of Service changes — especially data retention and privacy clauses. Post-GDPR, ToS changes can signal a pivot in how they handle user data — which is a compliance consideration if you're an enterprise buyer evaluating them.
Job postings — track what they're building. 5 new "ML Engineer" postings = they're building an AI feature. 3 "Account Executive" postings = they're pushing into enterprise.
The GDPR-Safe Monitoring Stack
A critical note before building: monitoring competitor public pages is legal and GDPR-compliant when you:
- Only scrape publicly accessible pages (no login-required content)
- Store only the content delta, not user data
- Do not use the data to profile individuals
The GDPR applies to personal data of natural persons. Competitor product pages, pricing, and feature documentation are not personal data.
Component 1: Page Change Detector
The simplest approach: hash the page content and compare to previous hash. When hash changes, fetch and store the diff.
import hashlib
import requests
def get_page_hash(url):
resp = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'}, timeout=30)
# Normalize: remove timestamps, session tokens, dynamic ads
content = resp.text
return hashlib.md5(content.encode()).hexdigest(), content
def check_for_changes(url, stored_hash, stored_content):
new_hash, new_content = get_page_hash(url)
if new_hash != stored_hash:
return True, new_hash, new_content
return False, stored_hash, stored_content
For production: use a proper diff library (difflib) to extract WHAT changed, not just THAT something changed.
Component 2: Apify Website Monitor
For JavaScript-heavy pages (most modern pricing pages use React/Vue), requests-based scrapers miss dynamically loaded content.
Apify's website content scraper handles:
- JavaScript rendering via Playwright headless browser
- Cookie banner dismissal (common on European sites — GDPR consent flows)
- Dynamic content loading
Run daily. Cost: ~$0.01-0.05 per page checked, depending on complexity.
Component 3: n8n Orchestration
n8n workflow (runs every 6 hours):
- Fetch current page → Apify website scraper
- Compare to stored version → Code node (Python/JS diff)
- Score the change → Code node (is this pricing? features? ToS?)
-
Route by importance:
- Pricing change → immediate Slack + Telegram alert
- Feature change → Slack next morning
- Minor text update → log only (no alert)
- Store diff → Google Sheets (audit trail)
Component 4: GDPR-Aware Data Handling
If any competitor page accidentally includes personal data (user testimonials with names, employee profiles):
import re
PERSONAL_DATA_PATTERNS = [
r'[A-Z][a-z]+ [A-Z][a-z]+', # Names (basic)
r'[\w.-]+@[\w.-]+\.\w+', # Emails
r'\+?[\d\s\-\(\)]{10,15}', # Phone numbers
]
def scrub_personal_data(text):
for pattern in PERSONAL_DATA_PATTERNS:
text = re.sub(pattern, '[REDACTED]', text)
return text
Apply this to stored diffs — you never need the personal data anyway.
Real Results From My Setup
Monitoring 12 competitor domains for 6 months:
| Signal Type | Times Detected | Action Taken | Outcome |
|---|---|---|---|
| Price increase | 4 | Sales email to their customers | 2 deals |
| Feature removal | 3 | Updated comparison page | +15% demo conversions |
| ToS privacy change | 2 | Alerted compliance team | 0 action needed |
| New job postings | 47 | Adjusted product roadmap | 1 feature shipped early |
The pricing change detections alone paid for the monitoring stack 10x over.
Setup Time: Under 2 Hours
- Create free Apify account (includes $5 credit)
- Set up n8n (Docker: 5 minutes)
- Configure 5-10 target pages
- Connect Slack or Telegram for alerts
Total monthly cost: $3-8 in Apify credits.
Get the Complete Scraper Bundle
The Apify scrapers used in this stack — including the website content scraper and page change detector — are part of the Apify Scrapers Bundle — $29 one-time.
Pre-configured inputs for monitoring 30+ site types. No setup time.
What competitor signals are most valuable for your business? Drop them in the comments.
Top comments (0)