# SaaS Status Page Incident Monitor (`to_kosmi/status-page-incident-monitor`) Actor

- **URL**: https://apify.com/to\_kosmi/status-page-incident-monitor.md
- **Developed by:** [KOSMI](https://apify.com/to_kosmi) (community)
- **Categories:** Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## SaaS Status Page Incident Monitor

Monitor public SaaS status-page RSS/Atom history feeds and produce a normalized incident dataset plus a Markdown digest.

### What it does

- Fetches public status history feeds such as GitHub, Cloudflare, Stripe, OpenAI, and any compatible RSS/Atom feed.
- Normalizes incidents into a consistent output schema.
- Filters by lookback window, optional keywords, and scheduled maintenance inclusion.
- Emits one dataset item per matching incident.
- Saves a human-readable `DIGEST.md` and machine-readable `OUTPUT.json` to the key-value store.

### Who it is for

- MSPs and internal IT teams tracking vendor incidents across their dependency stack.
- SaaS operators who need a daily upstream-dependency digest.
- Reliability/SRE teams that want lightweight vendor-outage context without building feed plumbing.

### Example input

```json
{
  "daysBack": 7,
  "keywords": ["api", "auth", "billing"],
  "includeMaintenance": false,
  "maxItems": 50,
  "feeds": [
    {"name": "GitHub", "url": "https://www.githubstatus.com/history.rss"},
    {"name": "Cloudflare", "url": "https://www.cloudflarestatus.com/history.rss"},
    {"name": "Stripe", "url": "https://www.stripestatus.com/history.rss"}
  ]
}
````

### Output item schema

```json
{
  "id": "stable sha256-based id",
  "sourceName": "GitHub",
  "sourceUrl": "https://www.githubstatus.com/history.rss",
  "title": "Incident with Actions",
  "url": "https://www.githubstatus.com/incidents/...",
  "publishedAt": "2026-07-07T10:00:00+00:00",
  "severity": "incident",
  "status": "resolved",
  "summary": "Resolved - Actions jobs recovered."
}
```

### Limits and caveats

- This Actor uses public RSS/Atom feeds only. It does not log in or bypass access controls.
- Statuspage descriptions vary by vendor; `severity` and `status` are best-effort classifications from public text.
- For paid/production monitoring, customers should choose their own vendor feed list and keyword filters.
- Healthy/no-incident vendors may still publish scheduled maintenance notices; use `includeMaintenance=false` to suppress them.

### Local development

```bash
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
python3 -m pytest tests -v
python3 -m py_compile src/*.py tests/*.py
apify validate-schema .actor/INPUT_SCHEMA.json
apify run --purge
```

### Monetization angle

Position as a small B2B dependency-outage digest. Start low-friction on Apify with pay-per-result or free usage while measuring demand. If it gets usage, add stateful delta-only output, Slack/Telegram/webhook delivery, and predefined feed packs for startups, devtools, finance APIs, and cloud providers.

# Actor input Schema

## `feeds` (type: `array`):

RSS/Atom history feeds from public SaaS status pages.

## `daysBack` (type: `integer`):

Only include incidents published in this many days.

## `keywords` (type: `array`):

Optional case-insensitive filters matched against vendor, title, and summary.

## `includeMaintenance` (type: `boolean`):

Include scheduled maintenance notices as well as incidents.

## `maxItems` (type: `integer`):

Maximum dataset items to emit.

## `timeoutSeconds` (type: `integer`):

HTTP timeout per feed.

## `digestTitle` (type: `string`):

Markdown title for DIGEST.md.

## Actor input object example

```json
{
  "feeds": [
    {
      "name": "GitHub",
      "url": "https://www.githubstatus.com/history.rss"
    },
    {
      "name": "Cloudflare",
      "url": "https://www.cloudflarestatus.com/history.rss"
    },
    {
      "name": "Stripe",
      "url": "https://www.stripestatus.com/history.rss"
    },
    {
      "name": "OpenAI",
      "url": "https://status.openai.com/history.rss"
    }
  ],
  "daysBack": 7,
  "keywords": [
    "api",
    "auth",
    "billing",
    "database",
    "workers"
  ],
  "includeMaintenance": true,
  "maxItems": 50,
  "timeoutSeconds": 20,
  "digestTitle": "SaaS Status Incident Digest"
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "feeds": [
        {
            "name": "GitHub",
            "url": "https://www.githubstatus.com/history.rss"
        },
        {
            "name": "Cloudflare",
            "url": "https://www.cloudflarestatus.com/history.rss"
        },
        {
            "name": "Stripe",
            "url": "https://www.stripestatus.com/history.rss"
        },
        {
            "name": "OpenAI",
            "url": "https://status.openai.com/history.rss"
        }
    ],
    "keywords": [
        "api",
        "auth",
        "billing",
        "database",
        "workers"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("to_kosmi/status-page-incident-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "feeds": [
        {
            "name": "GitHub",
            "url": "https://www.githubstatus.com/history.rss",
        },
        {
            "name": "Cloudflare",
            "url": "https://www.cloudflarestatus.com/history.rss",
        },
        {
            "name": "Stripe",
            "url": "https://www.stripestatus.com/history.rss",
        },
        {
            "name": "OpenAI",
            "url": "https://status.openai.com/history.rss",
        },
    ],
    "keywords": [
        "api",
        "auth",
        "billing",
        "database",
        "workers",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("to_kosmi/status-page-incident-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "feeds": [
    {
      "name": "GitHub",
      "url": "https://www.githubstatus.com/history.rss"
    },
    {
      "name": "Cloudflare",
      "url": "https://www.cloudflarestatus.com/history.rss"
    },
    {
      "name": "Stripe",
      "url": "https://www.stripestatus.com/history.rss"
    },
    {
      "name": "OpenAI",
      "url": "https://status.openai.com/history.rss"
    }
  ],
  "keywords": [
    "api",
    "auth",
    "billing",
    "database",
    "workers"
  ]
}' |
apify call to_kosmi/status-page-incident-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=to_kosmi/status-page-incident-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "SaaS Status Page Incident Monitor",
        "version": "0.1",
        "x-build-id": "hswAnH9HrtPvuy46e"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/to_kosmi~status-page-incident-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-to_kosmi-status-page-incident-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/to_kosmi~status-page-incident-monitor/runs": {
            "post": {
                "operationId": "runs-sync-to_kosmi-status-page-incident-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/to_kosmi~status-page-incident-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-to_kosmi-status-page-incident-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "feeds": {
                        "title": "Status feeds",
                        "type": "array",
                        "description": "RSS/Atom history feeds from public SaaS status pages."
                    },
                    "daysBack": {
                        "title": "Days back",
                        "minimum": 0,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only include incidents published in this many days.",
                        "default": 7
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Optional case-insensitive filters matched against vendor, title, and summary."
                    },
                    "includeMaintenance": {
                        "title": "Include maintenance",
                        "type": "boolean",
                        "description": "Include scheduled maintenance notices as well as incidents.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Maximum items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum dataset items to emit.",
                        "default": 50
                    },
                    "timeoutSeconds": {
                        "title": "Feed timeout seconds",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "HTTP timeout per feed.",
                        "default": 20
                    },
                    "digestTitle": {
                        "title": "Digest title",
                        "type": "string",
                        "description": "Markdown title for DIGEST.md.",
                        "default": "SaaS Status Incident Digest"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
