SaaS Outage & Status Monitor avatar

SaaS Outage & Status Monitor

Pricing

from $8.00 / 1,000 results

Go to Apify Store
SaaS Outage & Status Monitor

SaaS Outage & Status Monitor

Monitor third-party software supply chains by scraping vendor status pages. Generate daily digests of service disruptions, outages, and component health.

Pricing

from $8.00 / 1,000 results

Rating

0.0

(0)

Developer

太郎 山田

太郎 山田

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Vendor Status Page & Incident Digest Monitor

Safeguard your business operations by continuously monitoring third-party software supply chains and SaaS vendor status pages. Modern enterprises rely heavily on external tools, making it critical to track when a crucial provider experiences downtime. This web scraper is engineered to automatically extract ongoing incident data from dozens of vendor websites, eliminating the need to manually refresh URLs during a crisis. By setting up recurring scheduled runs, the scraper navigates to each designated status page, evaluating the current service health and pulling structured details directly from the browser. The final output is a clean, actionable digest that includes an executive summary of the outage, the current incident state, and a precise list of affected components. To reduce noise, the tool features intelligent change detection that identifies diffs between historical and current runs. Your incident response tools are only updated when actual state changes occur—such as a degraded API failing completely or a service returning to normal operations. Extract essential reliability data, export the scraped results to your centralized risk dashboards, and maintain comprehensive visibility over all your external vendor dependencies. Whether you are tracking major cloud providers or niche SaaS APIs, this scraper seamlessly integrates into your existing workflows, ensuring you never miss a critical service update.

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

WhoWhy
DevelopersAutomate recurring data fetches without building custom scrapers
Data teamsPipe structured output into analytics warehouses
Ops teamsMonitor changes via webhook alerts
Product managersTrack competitor/market signals without engineering time

Input

FieldTypeDefaultDescription
vendorsarrayprefilledList of vendors with their status page URLs. Each vendor must have a statusPageUrl. Optionally provide an incidentFeedUr
requestTimeoutSecondsinteger30HTTP timeout per status page or incident feed request.
userAgentstringOptional User-Agent override for HTTP requests.
maxIncidentsPerVendorinteger10Maximum number of recent incidents to include in the evidence array per vendor.
incidentLookbackDaysinteger30How many days back to look for incidents when filtering feed entries. 0 = all available.
deliverystring"dataset"dataset: write rows to Apify dataset. webhook: POST digest to a URL. Starter path: dataset.
datasetModestring"all"all: every vendor row. changes_only: only vendors whose state changed since last run. action_needed: only vendors where
webhookUrlstringRequired 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

FieldTypeDescription
vendorIdstring
vendorNamestring
checkedAttimestamp
executiveSummarystring
incidentStatestring
incidentCountnumber
affectedComponentsarray
actionNeededboolean
recommendedActionsarray
changedSinceLastRunboolean
evidencearray
metaobject

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 ApifyClient
client = 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-monitor for 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.

SaaS & Vendor Monitoring cluster — explore related Apify tools:

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.

⭐ Was this helpful?

If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.

Bug report or feature request? Open an issue on the Issues tab of this actor.