How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
githubin Official status pages. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Read vendor Statuspage APIs and get service status, components, incidents and planned maintenance in JSON. Compare your previous snapshot to find changed services.
Who uses it
SRE teams
Keep one table of vendor status next to your own alerts.
IT and support teams
Check if an outage comes from a vendor before users ask.
Ops managers
Track planned maintenance from your main vendors.
Price
Prices will be shown after release.
Questions
Does a green status mean the service is up?
Not always. It shows what the vendor posts, not its real uptime.
Do I get the full incident history?
No. You get the vendor's latest feed, often 50 incidents, plus open ones.
Which status pages work?
Vendor pages that use the Statuspage JSON API, up to 50 per run.
Do unchanged services cost money?
Yes. Each checked service has one fee. Incidents have no extra fee.
Details
Step by step on Apify
- Open Input. Keep the five sample names in
statusPages. - Keep
includeComponents: trueandonlyChanges: false. - Click Start.
- Open the Services dataset view. Check
serviceandoverallIndicator. - Open Status details for the nested lists. Export JSON for full nested data, or CSV for the service table.
- Open the output links for
RUN_SUMMARYandSNAPSHOT.
Use cases
| Task | Settings | Result |
|---|---|---|
| Refresh a vendor status dashboard | onlyChanges: false | One current record per checked service. |
| Check for updates before sending an alert | Prior snapshot and onlyChanges: true | Only services with new or changed observations. |
| Review recent incident updates | incidentsSince | Recently updated resolved incidents plus all unresolved incidents in the available feed. |
| Track planned work | Any normal run | Upcoming or active maintenance in each service record. |
Tips for better results
- Start with the five sample vendors. Then add your own status page URL.
- Save the SNAPSHOT and use it next run with only changes on.
- Keep the same component and date settings when you compare runs.
Limits and good to know
CHARGE_LIMIT gives a successful run with partial and preserves delivered results. A source error, bad response, deadline or graceful cancellation gives a failed run with an error or partial summary. Earlier saved rows remain. The Actor stops at the first source failure. It does not invent a green record for unread pages. A valid service with no incidents still returns its status record.
- Up to 50 URL entries, checked once per distinct page. Custom URLs must be vendor-operated pages with the compatible JSON API
- Latest incident feed only. Some vendors have fewer incidents or more components. Maintenance is only the upcoming/active list in the summary
- Two source requests per page, with up to two redirects and two attempts per request. Request cap: 200; body cap: 2 MB; total body cap: 16 MB
- Source work stops after 150 seconds, even with a larger platform timeout. Default timeout is 300 seconds. Memory is fixed at 256 MB; other memory levels are rejected with
RESOURCE_ERROR - No key, login, CAPTCHA bypass, proxy or independent uptime probe
- Data may change between the summary and history requests. Vendor publishing delays also affect freshness
- No open data licence is supplied. Source text belongs to its provider. Follow the vendor's terms. See the GitHub API and Atlassian terms
Troubleshooting
| Symptom / reason | Check and action |
|---|---|
INVALID_URL or INPUT_PAGES | Use 1–50 HTTPS vendor root URLs or the six built-in names. Remove credentials, query strings and fragments. |
NOT_FOUND, HTTP_ERROR, INVALID_JSON or SOURCE_SCHEMA | Open the vendor's public summary API. A custom or changed API format is unsupported. Check the URL or contact support. |
UNSAFE_ADDRESS or UNSAFE_REDIRECT | Private/internal addresses and unsafe redirects are blocked. Use a public vendor page. |
RATE_LIMIT, REQUEST_TIMEOUT or SOURCE_ERROR | The vendor limited or failed the request. Retry later with fewer pages. Earlier rows may still be available. |
SNAPSHOT_SCOPE | Use the same includeComponents and incidentsSince as the old snapshot, or start a fresh baseline. |
SNAPSHOT_LIMIT | Keep the union at 50 pages and snapshot under 1 MB. Start a fresh baseline before it exceeds the fingerprint limit. |
| Empty dataset in change mode | Check unchangedPages. It is normal when all checked services are unchanged. Service checks are still charged. |
CHARGE_LIMIT | Raise your charge limit or use fewer pages. Only delivered results update the snapshot. |
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"service": "GitHub",
"pageUrl": "https://www.githubstatus.com",
"pageId": "kctbh9vrtdwd",
"overallIndicator": "none",
"overallDescription": "All Systems Operational",
"components": [
{
"id": "0l2p9nhqnxpd",
"name": "Visit www.githubstatus.com for more information",
"status": "operational",
"updatedAt": "2025-03-19T05:00:21.309Z"
}
],
"incidents": [
{
"id": "hcbtzksccj2f",
"name": "Disruption with some GitHub services",
"status": "resolved",
"impact": "minor",
"createdAt": "2026-08-26T15:09:03.575Z",
"updatedAt": "2026-08-31T20:41:06.290Z",
"resolvedAt": "2026-08-26T16:07:52.512Z",
"shortlink": "https://stspg.io/4s4bvnc0frrj",
"lastUpdateText": "Please refer to the combined summary in this related incident: https://www.githubstatus.com/incidents/y1t7p9fzrlj2",
"lastUpdateAt": "2026-08-26T16:07:52.512Z",
"scheduledFor": null,
"scheduledUntil": null
}
],
"scheduledMaintenances": [],
"provider": "atlassian-statuspage-v2",
"sourceUrl": "https://www.githubstatus.com/api/v2/summary.json",
"sourceUpdatedAt": "2026-10-13T16:19:26.788Z",
"fetchedAt": "2026-10-13T17:26:09.319Z",
"dataLicence": null,
"historyCoverage": "latest_incidents_feed_and_all_unresolved",
"changeType": "new",
"status": "complete"
}Data fields (16)
| Field | Type | Meaning |
|---|---|---|
service | string | Vendor name from the status page. |
pageUrl | string | Normalized requested HTTPS status page. |
pageId | string | Vendor page ID, verified across both API responses. |
overallIndicator | string | Raw vendor overall indicator such as none, minor, major or critical. |
overallDescription | string | Vendor text describing the overall status. |
components | array | Current component IDs, names, states and update dates; empty when disabled. |
incidents | array | Latest incidents feed plus all unresolved incidents from the summary, filtered by update date. |
scheduledMaintenances | array | Upcoming or active planned work from the summary API. |
provider | string | Status API format, not an endorsement or an uptime measurement. |
sourceUrl | string | Summary API URL; recent history comes from incidents.json on the same page. |
sourceUpdatedAt | string | Page update time supplied by the vendor; null when absent. |
fetchedAt | string | UTC time when this service record was normalized. |
dataLicence | null | Null because the vendor API supplies no data licence statement. |
historyCoverage | string | Explicit bounded feed coverage; the full incident archive is not fetched. |
changeType | string | Comparison with the supplied snapshot: new, changed, or unchanged. |
status | string | Complete means this service was read within the documented feed coverage. Read RUN_SUMMARY for run-level partial failures. |
Input settings (5)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Official status pages required | statusPages | array | ["github", "atlassian", "cloudflare", "digitalocean", "discord"] |
| Include components | includeComponents | boolean | true |
| Incidents updated since | incidentsSince | string | |
| Previous snapshot | previousSnapshot | object | |
| Only changed services | onlyChanges | boolean | false |
Use cases with this tool
Each guide shows all the steps and the other tools.