Status Page Incident Detection
Watch AWS, Stripe, GitHub, and any other vendor's status page and route incidents into your own incident-response channels - faster than email subscriptions.
aws-status-pageThe scenario
A vendor your product depends on - AWS, Stripe, Twilio, Cloudflare - declares an incident. The status page updates immediately. Their email subscription will reach you in two to ten minutes, by which point your own customers are already in your support inbox asking why payments are failing.
You want the gap between "vendor confirms incident" and "your on-call gets paged" to be under thirty seconds.
The problem
Most vendor status pages publish RSS or Atom, but those feeds are polled by your subscribed clients on their own schedule. The vendor's own email/SMS notifications are slow because they batch. Building a fast status-page watcher per vendor is feasible but tedious - and you'd need one per vendor, since they all look different.
How Verid solves it
Vendor status pages are mostly conventional. They have a top-level status string ("All Systems Operational", "Degraded Performance", "Major Outage") in a stable element, plus a list of recent incidents. Verid extracts the status string with CSS, or pulls the most recent incident title with regex, and fires when it changes.
The pre-built aws-status-page template targets AWS specifically; the same pattern adapts to Stripe, GitHub, Twilio, and most Statuspage.io-hosted pages.
Build the monitor
Extraction config - Statuspage.io conventions
{
"method": "css",
"fields": {
"overall_status": ".page-status .status",
"most_recent_incident": ".incidents-list .incident-title:first-child"
}
}
Extraction config - Regex against the page
If a vendor's status page is non-Statuspage and you can't rely on classes:
{
"method": "regex",
"fields": {
"status_label": "(All Systems Operational|Degraded Performance|Partial Outage|Major Outage)"
}
}
Predicate
Fire on any transition away from operational:
{ "type": "field_changes", "field": "overall_status" }
Or, fire only when the status string contains an outage keyword:
{ "type": "field_matches_regex", "field": "overall_status", "pattern": "(Degraded|Outage|Partial)" }
Create the monitor
curl -X POST https://api.verid.dev/v1/monitors \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Stripe status",
"url": "https://status.stripe.com",
"schedule_interval_seconds": 60,
"extract_config": {
"method": "css",
"fields": {
"overall_status": ".page-status .status",
"most_recent_incident": ".incidents-list .incident-title:first-child"
}
},
"diff_predicate": { "type": "field_changes", "field": "overall_status" },
"deliveries": [
{ "type": "webhook", "url": "https://my-pager.example.com/incidents/stripe" }
]
}'
SDK:
import { VeridClient } from '@verid.dev/sdk';
const client = new VeridClient({ apiKey: 'vrd_your_api_key' });
await client.monitors.create({
name: 'Stripe status',
url: 'https://status.stripe.com',
schedule_interval_seconds: 60,
extract_config: {
method: 'css',
fields: {
overall_status: '.page-status .status',
most_recent_incident: '.incidents-list .incident-title:first-child',
},
},
diff_predicate: { type: 'field_changes', field: 'overall_status' },
deliveries: [
{ type: 'webhook', url: 'https://my-pager.example.com/incidents/stripe' },
],
});
What the webhook delivers
{
"id": "del_01H...",
"fired_at": "2026-05-08T14:21:00Z",
"diff": {
"fields_changed": ["overall_status", "most_recent_incident"],
"before": {
"overall_status": "All Systems Operational",
"most_recent_incident": "No recent incidents"
},
"after": {
"overall_status": "Partial Outage",
"most_recent_incident": "Elevated error rates on Charges API"
}
}
}
Your pager service catches this webhook, dedupes against the run id, and creates an incident.
Caveats & tips
- Use a fast interval - but stay tier-aware. 30- to 60-second intervals are right for status pages. Make sure your plan tier allows the cadence; check the pricing page for the cutoffs.
- Fire on the recovery, too. A
field_changespredicate will fire when status goes from "Partial Outage" back to "Operational." Your pager service can use this to auto-resolve the incident - handy. - The official vendor JSON endpoints are also good targets. Statuspage.io exposes
https://status.{vendor}.com/api/v2/status.json. Swap to JSONPath extraction and you get cleaner, more reliable fields. - Multiple monitors per vendor. One for the overall status (fast interval), one for the incident list (slower) lets you cap the noise on the slower one.
Related use cases
For your own service's API health, see JSON API field monitoring. For releases that may correlate with incidents, see GitHub release monitoring. For RSS-based status feeds, see RSS feed new items.
Ship this monitor today
5 monitors free, no credit card. Set up takes about a minute.
Get started free