Automated Competitor Change Detection
Build an automated change-detection pipeline with scheduled screenshots and visual diffs. Get Slack or email alerts when competitor sites change.
Overview
This is not a one-time analysis — it is a continuous, automated pipeline. Screenshotly captures competitor pages on a schedule, and your pipeline diffs each new capture against the previous one to detect meaningful changes in real time.
The technical workflow: a cron job or serverless function calls the Screenshotly API on a cadence (hourly, daily, weekly). Each capture is stored with a timestamp. An image-diff library like pixelmatch or resemble.js compares the new capture against the baseline, producing a diff score (0-100%). When the score exceeds your threshold — say 5% to ignore ad rotations and minor layout shifts — the pipeline fires an alert via Slack webhook, email, or PagerDuty.
E-commerce teams use this to detect competitor price drops within hours. SaaS product managers catch new feature launches before the press release. Agencies run monitoring across dozens of competitor domains for their clients — all hands-free. The key difference from competitive analysis is that this runs autonomously and continuously, while analysis is a deliberate, point-in-time exercise.
Key Benefits
Results You Can Expect
How It Works
Register competitor URLs and set a capture cadence (hourly/daily)
Deploy a cron job or serverless function to call the Screenshotly API
Store each capture with a timestamp in S3, R2, or a database
Run pixelmatch or resemble.js to diff new vs previous capture
Fire Slack webhook or email when diff score exceeds your threshold
Code Example
// Scheduled competitor monitoring
const monitorCompetitor = async (competitorUrl) => {
const screenshot = await fetch('https://api.screenshotly.app/screenshot', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
url: competitorUrl,
device: 'desktop',
format: 'png',
fullPage: true,
}),
});
// Save with timestamp for comparison
const timestamp = new Date().toISOString();
await saveToStorage(`competitors/${timestamp}.png`, screenshot);
// Run visual diff against yesterday's capture
const changes = await detectChanges(screenshot, yesterdayCapture);
if (changes.significant) {
await sendAlert(changes);
}
};Frequently Asked Questions
How do I detect changes between competitor screenshots?
Use image comparison libraries like pixelmatch or resemble.js to compute a pixel-level diff. Set a threshold (e.g. 5% change) to filter out noise like ad rotations and focus on meaningful updates like pricing or layout changes.
Can I monitor competitor pages behind login walls?
If you have legitimate access to competitor portals (e.g. public pricing after signup), you can pass session cookies via the API. Never use this to access content you are not authorized to view.
What's the best schedule for competitor monitoring?
Monitor pricing pages daily, feature and landing pages weekly, and blog/content pages monthly. Adjust frequency based on how often competitors update — fast-moving SaaS companies may warrant more frequent checks.
How many competitor pages can I monitor at scale?
The API handles thousands of captures per day depending on your plan. Batch URLs and process them sequentially with small delays to stay within rate limits. The Growth plan supports up to 10,000 captures per month.
Want a step-by-step walkthrough?
Read: Website Monitoring Screenshots Guide →Ready to automate competitor monitoring?
Get started with 100 free screenshots. No credit card required.
Related Use Cases
Competitors
Analyze competitor positioning, feature sets, and pricing strategy with side-by-side website screenshots. Build strategic market intelligence decks.
Brand Monitoring
Protect your brand by capturing timestamped evidence of unauthorized logo use, trademark infringement, and counterfeit listings for legal enforcement.
SEO Audits
Capture screenshots for SEO audits and track visual changes over time. Document SERP rankings and competitor positions.