🟢 Status Page Monitor
Pricing
Pay per usage
🟢 Status Page Monitor
Monitor vendor status pages and incident feeds to extract real-time outage data. Schedule runs to integrate alerts into your DevOps tools.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
太郎 山田
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Vendor Status Page & Incident Digest Monitor
Monitor public vendor status pages and incident feeds. Returns one digest row per vendor with executive summary, incident state, affected components, and change detection.
Store Quickstart
Run this actor with your target input. Results appear in the Apify Dataset and can be piped to webhooks for real-time delivery. Use dryRun to validate before committing to a schedule.
Key Features
- 📡 SaaS change detection — Diff pricing, terms, and feature pages across vendor sites
- 🕐 Scheduled snapshots — Persistent snapshots enable delta alerts between runs
- 🎯 Multi-vendor tracking — Monitor dozens of vendors per run for procurement intelligence
- 📊 Diff visualization — Structured before/after payloads for downstream diffing UIs
- 📡 Alert delivery — Webhook push to procurement/legal teams on material changes
Use Cases
| Who | Why |
|---|---|
| Developers | Automate recurring data fetches without building custom scrapers |
| Data teams | Pipe structured output into analytics warehouses |
| Ops teams | Monitor changes via webhook alerts |
| Product managers | Track competitor/market signals without engineering time |
Input
| Field | Type | Default | Description |
|---|---|---|---|
| vendors | array | prefilled | List of vendors with their status page URLs. Each vendor must have a statusPageUrl. Optionally provide an incidentFeedUr |
| requestTimeoutSeconds | integer | 30 | HTTP timeout per status page or incident feed request. |
| userAgent | string | — | Optional User-Agent override for HTTP requests. |
| maxIncidentsPerVendor | integer | 10 | Maximum number of recent incidents to include in the evidence array per vendor. |
| incidentLookbackDays | integer | 30 | How many days back to look for incidents when filtering feed entries. 0 = all available. |
| delivery | string | "dataset" | dataset: write rows to Apify dataset. webhook: POST digest to a URL. Starter path: dataset. |
| datasetMode | string | "all" | all: every vendor row. changes_only: only vendors whose state changed since last run. action_needed: only vendors where |
| webhookUrl | string | — | Required when delivery=webhook. Receives the full digest payload as JSON POST. |
Input Example
{"vendors": [{"id": "stripe","name": "Stripe","criticality": "high","owner": "Ops","tags": ["payments","core"],"statusPageUrl": "https://status.stripe.com","incidentFeedUrl": "https://status.stripe.com/history.rss"}],"requestTimeoutSeconds": 30,"maxIncidentsPerVendor": 10,"incidentLookbackDays": 30,"delivery": "dataset","datasetMode": "all","notifyOnNoChange": false,"snapshotKey": "status-page-incident-snapshots","concurrency": 3,"dryRun": false}
Output
| Field | Type | Description |
|---|---|---|
vendorId | string | |
vendorName | string | |
checkedAt | timestamp | |
executiveSummary | string | |
incidentState | string | |
incidentCount | number | |
affectedComponents | array | |
actionNeeded | boolean | |
recommendedActions | array | |
changedSinceLastRun | boolean | |
evidence | array | |
meta | object |
Output Example
{"vendorId": "stripe","vendorName": "Stripe","checkedAt": "2025-06-02T08:00:00.000Z","executiveSummary": "Stripe is fully operational. No active incidents.","incidentState": "operational","incidentCount": 0,"affectedComponents": [],"actionNeeded": false,"recommendedActions": [],"changedSinceLastRun": false,"evidence": [],"meta": {"statusPageUrl": "https://status.stripe.com","incidentFeedUrl": "https://status.stripe.com/history.rss","criticality": "high","owner": "Ops","tags": ["payments","core"],"parseSource": "statuspage-api","fingerprint": "a1b2c3d4e5f6...","previousFingerprint": "a1b2c3d4e5f6...","isFirstRun": false}}
API Usage
Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.
cURL
curl -X POST "https://api.apify.com/v2/acts/taroyamada~status-page-incident-digest-monitor/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "vendors": [ { "id": "stripe", "name": "Stripe", "criticality": "high", "owner": "Ops", "tags": [ "payments", "core" ], "statusPageUrl": "https://status.stripe.com", "incidentFeedUrl": "https://status.stripe.com/history.rss" } ], "requestTimeoutSeconds": 30, "maxIncidentsPerVendor": 10, "incidentLookbackDays": 30, "delivery": "dataset", "datasetMode": "all", "notifyOnNoChange": false, "snapshotKey": "status-page-incident-snapshots", "concurrency": 3, "dryRun": false }'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("taroyamada/status-page-incident-digest-monitor").call(run_input={"vendors": [{"id": "stripe","name": "Stripe","criticality": "high","owner": "Ops","tags": ["payments","core"],"statusPageUrl": "https://status.stripe.com","incidentFeedUrl": "https://status.stripe.com/history.rss"}],"requestTimeoutSeconds": 30,"maxIncidentsPerVendor": 10,"incidentLookbackDays": 30,"delivery": "dataset","datasetMode": "all","notifyOnNoChange": false,"snapshotKey": "status-page-incident-snapshots","concurrency": 3,"dryRun": false})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('taroyamada/status-page-incident-digest-monitor').call({"vendors": [{"id": "stripe","name": "Stripe","criticality": "high","owner": "Ops","tags": ["payments","core"],"statusPageUrl": "https://status.stripe.com","incidentFeedUrl": "https://status.stripe.com/history.rss"}],"requestTimeoutSeconds": 30,"maxIncidentsPerVendor": 10,"incidentLookbackDays": 30,"delivery": "dataset","datasetMode": "all","notifyOnNoChange": false,"snapshotKey": "status-page-incident-snapshots","concurrency": 3,"dryRun": false});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Tips & Limitations
- Schedule weekly runs for procurement watchlists; daily for critical vendors.
- Use webhook delivery to drop diffs into a shared procurement Slack channel.
- Track competitor pricing quarterly to inform your own pricing strategy.
- Store snapshots persistently — these are valuable for contract renegotiation evidence.
- Combine with
vendor-change-monitorfor term-level changes alongside pricing.
FAQ
Q: Which vendors work without an incidentFeedUrl?
A: All vendors. The feed is optional and supplements the status page parsing.
Q: Does this use a headless browser?
A: No. Pure HTTP + JSON/RSS parsing. Low resource usage, high throughput.
Q: How do I monitor more than 3 vendors?
A: Add more vendor objects to the vendors array. Use concurrency: 5 for faster runs.
Q: What happens if a status page is unreachable?
A: The vendor row gets incidentState: "unknown" and actionNeeded: true with an error explanation in recommendedActions.
Does this bypass anti-bot measures?
No — it uses standard requests. Some vendors with aggressive bot protection may not be monitorable; report these issues and we'll adjust fetch strategy.
Can I monitor internal portals?
No — this actor is public-web only. Internal portals with auth are out of scope.
Related Actors
SaaS & Vendor Monitoring cluster — explore related Apify tools:
- SaaS Pricing & Terms Monitor API — Monitor pricing, terms, and feature pages with machine-readable diffs, snapshot history, and dataset/webhook delivery.
- SaaS / Company Site Change Monitor Pro — Premium monitor for pricing, terms, and feature page diffs with dataset/webhook delivery.
- Vendor Pricing, Terms & Renewal Watch API — Monitor vendor pricing changes, terms-of-service updates, renewal language, privacy / DPA policy diffs, and procurement / vendor-risk alerts with one summary-first vendor digest per monitored vendor.
Cost
Pay Per Event:
actor-start: $0.01 (flat fee per run)dataset-item: $0.003 per output item
Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01
No subscription required — you only pay for what you use.