Track visual changes on your website and competitors. Catch SEO issues before they impact rankings.
Traditional uptime monitoring tells you if your site is "up" - but what about visual issues? A page can load with a 200 status while:
Your site looks completely broken but returns 200 OK.
Desktop works fine, but mobile users see a mess.
Ad networks or analytics can break your layout.
Miss pricing changes, new features, or SEO updates.
Catch layout issues, missing images, or broken hero sections before users see them.
Verify pricing displays correctly after deployments.
Monitor A/B tests and campaign pages for visual regressions.
Track your Google rankings with SERP screenshots.
Get alerted when competitors update pricing or features.
Separate monitoring for mobile, tablet, and desktop.
const fetch = require('node-fetch');
const fs = require('fs');
const PAGES_TO_MONITOR = [
{ name: 'Homepage', url: 'https://yoursite.com/', device: 'desktop' },
{ name: 'Homepage Mobile', url: 'https://yoursite.com/', device: 'mobile' },
{ name: 'Pricing', url: 'https://yoursite.com/pricing', device: 'desktop' },
{ name: 'Competitor', url: 'https://competitor.com/', device: 'desktop' }
];
async function captureAll() {
const timestamp = new Date().toISOString().split('T')[0];
for (const page of PAGES_TO_MONITOR) {
const params = new URLSearchParams({
url: page.url,
api_key: process.env.SNAPAPI_KEY,
device: page.device,
response: 'binary'
});
const response = await fetch(
`https://snapapi.alterra-solutions.com/v1/screenshot?${params}`
);
const filename = `${page.name.replace(/\s+/g, '_')}_${timestamp}.png`;
fs.writeFileSync(`./screenshots/${filename}`,
Buffer.from(await response.arrayBuffer())
);
console.log(`✅ Captured: ${page.name}`);
}
}
captureAll();
# .github/workflows/monitoring.yml
name: SEO Monitoring
on:
schedule:
- cron: '0 */6 * * *' # Every 6 hours
workflow_dispatch:
jobs:
capture:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- run: npm install node-fetch
- run: node monitor.js
env:
SNAPAPI_KEY: ${{ secrets.SNAPAPI_KEY }}
- uses: actions/upload-artifact@v3
with:
name: screenshots
path: ./screenshots/
Consistent sub-2-second captures. No flaky tests.
Desktop, tablet, and mobile viewports in one API.
Works with cron, GitHub Actions, or any scheduler.
Store screenshots over time to track changes.
100 screenshots/month free - enough for hourly monitoring of 3 pages.
Get Free API Key →