Uptime-Kuma Status Extractor avatar

Uptime-Kuma Status Extractor

Pricing

from $0.35 / 1,000 monitors

Go to Apify Store
Uptime-Kuma Status Extractor

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

Datamule

Maintained by Community

Actor 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 via GET /api/entry-page, or read from a …/status/<slug> UI URL, or set explicitly with slug.
  • 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 / ping monitor with no url, a page with no open incident, a version that stores incidents under incident (singular) vs incidents (plural) — every one yields null for 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

FieldRequiredDescription
sourcesA 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.
slugThe 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.
modeall (default), heartbeat, or monitors. See modes above.
maxRecordsGlobal 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:

ColumnDescription
sourceThe status page origin the monitor came from.
slugThe resolved status-page slug.
groupId / groupNameThe parent group the monitor belongs to (e.g. Web services).
monitorIdUptime-Kuma's numeric id for the monitor.
nameThe monitor's display name.
typeMonitor type (http, keyword, port, dns, ping, …).
urlThe monitored URL, for monitors that expose one (null for port/dns/… checks).
sendUrlWhether the page shows the monitor's URL publicly (1/0).
pageTitle / theme / publishedPage-level config, promoted onto every row.
openIncidentTitleTitle of the first open incident on the page, else null.
lastStatusLatest heartbeat status: 1 = up, 0 = down, 2 = pending, 3 = maintenance. null in monitors mode.
lastPingLatest heartbeat response time in milliseconds (null when the check records none).
lastHeartbeatTimeTimestamp of the latest heartbeat.
uptime24h24-hour uptime ratio (1 = 100%, 0.9874 = 98.74%).
heartbeatCountHow many heartbeats the page returned for the monitor.
_monitorCountHow many monitors the source page publishes.
_rawThe 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.pet is 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.