Uptime-Kuma Status Extractor
Pricing
from $0.35 / 1,000 monitors
Uptime-Kuma Status Extractor
Point at any Uptime-Kuma status page and export its monitors, latest status, ping and 24h uptime from the public status-page API. One actor over thousands of self-hosted uptime monitors.
Pricing
from $0.35 / 1,000 monitors
Rating
0.0
(0)
Developer
Datamule
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Point at any self-hosted Uptime-Kuma status page and export its monitors, latest status, ping and 24-hour uptime as clean, structured rows.
Uptime-Kuma is the dominant self-hosted uptime monitor. Every public Uptime-Kuma status page — regardless of version or theme — exposes the same unauthenticated public JSON API:
GET /api/status-page/{slug}— the page config + monitor tree (publicGroupList).GET /api/status-page/heartbeat/{slug}— per-monitor heartbeat history + 24h uptime.
This actor speaks that one standard, so a single actor works against every Uptime-Kuma instance in existence — no per-host scraper.
Give it a status page URL; get back a flat, fully-typed dataset row for every monitor — its group, type, URL, latest status, last ping, 24-hour uptime and page config — ready for a spreadsheet, a database, an uptime/SLA report or an observability pipeline.
Built for agents
- A personal operations agent can check whether home-lab or business services are up before starting a dependent workflow.
- An incident agent can turn public status pages into structured monitor state, latency and 24-hour uptime for triage or alerts.
- A research agent can compare public Uptime-Kuma fleets without scraping dashboards or holding credentials.
The ready-to-run example targets the official Uptime-Kuma demo and returns five live monitors. The form caps the first run at 20 rows, so it is safe to call from an autonomous tool loop.
Uptime-Kuma only.
What it does
- Any Uptime-Kuma page, one input. Pass the domain base (
https://status.kuma.pet). The status-page slug is resolved automatically viaGET /api/entry-page, or read from a…/status/<slug>UI URL, or set explicitly withslug. - Multiple sources per run. Give a list of status pages; each is harvested independently.
- Three modes.
- All (default) — every monitor from the config tree, with latest status / ping / 24h uptime joined from the heartbeat API where available.
- Heartbeat — only monitors that actually have a heartbeat series (status/ping/uptime populated).
- Monitors — the monitor tree only; no heartbeat request is made (fastest, config-only).
- Reads by key presence. Uptime-Kuma instances differ only in which optional fields they populate. A
port/dns/pingmonitor with nourl, a page with no open incident, a version that stores incidents underincident(singular) vsincidents(plural) — every one yieldsnullfor that column, never an error. - Harvests the open pages. A private or unpublished page
404s its slug — that source is skipped with a logged note and the run continues, never crashing.
Input
| Field | Required | Description |
|---|---|---|
sources | ✅ | A list of Uptime-Kuma status-page base URLs (e.g. ["https://status.kuma.pet"]). A …/status/<slug> UI URL also works — the slug is read from the path. |
slug | The status-page slug to use for every source. Leave empty to resolve per source via /api/entry-page. Set it when a host serves multiple pages. | |
mode | all (default), heartbeat, or monitors. See modes above. | |
maxRecords | Global cap on emitted monitor rows across all sources (each row = one billable event). |
Example inputs
{ "sources": ["https://status.kuma.pet"] }
{ "sources": ["https://status.kuma.pet"], "slug": "uptime-kuma", "mode": "all" }
{ "sources": ["https://status.nixnet.services"], "mode": "monitors" }
{ "sources": ["https://status.kuma.pet", "https://status.nixnet.services"], "mode": "heartbeat", "maxRecords": 500 }
Output
One row per monitor:
| Column | Description |
|---|---|
source | The status page origin the monitor came from. |
slug | The resolved status-page slug. |
groupId / groupName | The parent group the monitor belongs to (e.g. Web services). |
monitorId | Uptime-Kuma's numeric id for the monitor. |
name | The monitor's display name. |
type | Monitor type (http, keyword, port, dns, ping, …). |
url | The monitored URL, for monitors that expose one (null for port/dns/… checks). |
sendUrl | Whether the page shows the monitor's URL publicly (1/0). |
pageTitle / theme / published | Page-level config, promoted onto every row. |
openIncidentTitle | Title of the first open incident on the page, else null. |
lastStatus | Latest heartbeat status: 1 = up, 0 = down, 2 = pending, 3 = maintenance. null in monitors mode. |
lastPing | Latest heartbeat response time in milliseconds (null when the check records none). |
lastHeartbeatTime | Timestamp of the latest heartbeat. |
uptime24h | 24-hour uptime ratio (1 = 100%, 0.9874 = 98.74%). |
heartbeatCount | How many heartbeats the page returned for the monitor. |
_monitorCount | How many monitors the source page publishes. |
_raw | The complete original monitor object — nothing is ever dropped. |
Every field is nullable and read by key presence — an instance that omits url / an incident / a heartbeat simply yields null for that column, never an error.
Notes & scope
- Public status data only. This reads a status page's public JSON — the same data the dashboard renders in a browser. No login is used or required.
- Honest failure. A page with no monitors, or every source private, returns 0 records and a clean success. A URL that isn't an Uptime-Kuma status page (an HTML page, a body with no
publicGroupList) fails fast with a clear message. - Find instances. Any public Uptime-Kuma status page works; the demo at
https://status.kuma.petis a good place to try it.
Pricing
Pay-per-event: $0.0005 per monitor returned. The current five-monitor demo is $0.0025 at list price; the 20-row first-run cap is at most $0.01. A capped run charges only for what it emits.