Vendor Status Watch

Free: SaaS outage alerts from your own GitHub Actions

If you already have a workflow, add the action and you are done. Your vendors, your webhook secret, your runner — nothing leaves your repository except the POST to your own channel.

- uses: APVentureEngine/vendor-status-watch-action@v1
  with:
    vendors: github,openai,cloudflare,stripe
    webhook-url: ${{ secrets.WEBHOOK_URL }}

Does it actually work? We check every day.

Anyone can publish a broken action. So each build downloads APVentureEngine/vendor-status-watch-action@v1 from the public tag — the same bytes you get — and runs its self-test: poll real vendor status feeds through the live map, deliver a real webhook payload, confirm a second run stays quiet instead of re-alerting, and confirm dry-run posts nothing. Last run 2026-09-24T12:29:22Z.

schema: PASS (name/description/branding/inputs wired, no ${{ }} in run bodies)
polled 2 vendors via remote map: github=ok, cloudflare=degraded
  watching    GitHub: now watching — currently ok
  watching    Cloudflare: now watching — currently degraded, 3 open incident(s) already listed (not re-alerted)
webhook json -> http 200 ok
live e2e: PASS (1 payload(s), state at .vendor-status-watch/state.json, 2 vendor(s) baselined)
idempotence: PASS (second run with the same state posted nothing)
dry-run: PASS (fresh state, nothing posted)
ALL PASS

Reproduce it yourself in about a minute — no account, no key:

git clone --branch v1 https://github.com/APVentureEngine/vendor-status-watch-action
cd vendor-status-watch-action && python3 selftest_action.py

If that check ever fails, this box disappears rather than telling you it passed. Note for the curious: our own GitHub organisation cannot run Actions minutes, which is why you see no build badge here. That limit is ours and it does not touch you — the action runs on your runner, in your repository, which is exactly what the test above exercises.

Or start from the template repo

No workflow yet? Click Use this template, list your vendors in one JSON file, add one repository secret (your webhook URL), and copy the workflow file the README points you to — four minutes, and the README walks through every click. GitHub then runs it every 5 minutes on their free tier (~2,000 Actions minutes a month on free plans; a 5-minute schedule uses roughly a third of that). The poller reads our daily-refreshed vendor map at run time, so when a vendor moves from Statuspage to Instatus next quarter your alerts keep working without you touching anything.

{
  "vendors": ["twilio", "github", "cloudflare", "openai", "vercel"],
  "format": "auto",
  "map_url": "https://raw.githubusercontent.com/APVentureEngine/vendor-status-watch/main/vendors.json",
  "unreachable_after": 3,
  "mute_maintenance": false
}

The webhook URL never goes in the file: it lives in a repository secret named WEBHOOK_URL.

Events you receive: now watching (once, with any already-open incidents listed but not re-alerted), opened, updated, resolved, unreachable (the vendor's feed stopped answering — you are told, instead of silently seeing green), recovered. Slack Block Kit, Discord embeds, Teams Adaptive Cards and plain JSON are auto-detected from the webhook host.

#alerts · vendor-status-watch APP
🟢 Crypto.com — RESOLVED
Monoova banking option unavailable for AUD deposits/withdraws
This incident has been resolved.
started 2026-09-24 11:16 UTC · status page
🟡 ESET — INCIDENT
[ESET Business Account, ESET MSP Administrator, ESET PROTECT Hub] planned maintenance
Scheduled maintenance is currently in progress. We will provide updates as necessary.
started 2026-09-24 10:58 UTC · status page
🟡 IONOS — INCIDENT
Störungsmeldung für Webhosting
Wir haben es geschafft, die Einschränkungen zu minimieren.
started 2026-09-24 10:39 UTC · status page
What lands in your Slack — rendered from the 3 newest real incidents in the feed (Discord and Teams get native embeds/cards; anything else gets plain JSON).
Honest limits: 323 of the 1,127 mapped vendors publish no machine-readable status (Apple, Microsoft 365 and Okta among them — bespoke HTML pages; AWS, Azure, Google Cloud, Slack and Stripe ARE covered, by hand-written parsers over their own public feeds). The template tells you on its first run which of your picks are unsupported; we do not fake an OK for them. Coverage by platform is on the coverage page.

Would rather not run it? We host the same watcher for $49 / 12 months — no repo, no YAML, nothing to install.