saysOK vs Uptime Kuma
Uptime Kuma is a free, open-source monitor you run on your own server, and a good one. saysOK is the hosted alternative: nothing to run or keep up, checks from more than one place, and on-call and incidents for a team.
- Incident
- INC-2841
- Affected
- Acme shop
- 02:14:07 Slack · #client-alerts sent
- 02:14:08 Phone call · Maya, on call this week answered
- 02:15:31 Acknowledged by Maya
Side by side
saysOK's column is what its plans include today. Uptime Kuma's is what its project page said on Oct 16, 2026; check there for current figures.
| What is compared | saysOK | Uptime Kuma |
|---|---|---|
| Running it | ||
| Price | $19 or $79 a monthPro or Team, flat per workspace | FreeOpen source under the MIT licence |
| Who runs it | saysOK, hostedNothing to install, update or back up | YouOn your own server, with Docker or Node.js |
| If its server goes down | Checks run on separate regional workersThe checks do not run where your product runs | Your monitoring goes down with itUnless you run it somewhere else than what it watches |
| Monitoring | ||
| Check types | HTTP, keyword, TCP, ping, DNS, SSL; JSON on TeamPing opens a TCP connection to port 443 or 80, no ICMP. Plus heartbeats and browser checks | HTTP, keyword, JSON, TCP, ping, DNS, WebSocket and morePlus push monitors, Docker containers and game servers |
| Fastest check | 30 sec or 15 secPro or Team, up to 3 million or 15 million checks a month | 20 secAs its project page states |
| Checked from several places | YesA failure must be seen from two regions before anyone is paged, unless you change it | Not describedIts project page mentions no checks from other places |
| Team and incidents | ||
| People | 5 or 10 seatsPro or Team; $4 a month per extra seat on Team | Not describedIts project page does not mention several users or roles |
| On-call and escalation | Included | Not described |
| Incidents and post-mortems | Included | Not described |
| Status pages | 3 or unlimitedPro or Team, each on your own domain | SeveralEach can sit on its own domain |
| Maintenance windows | Included | Included |
What happens at 02:14 with saysOK.
One night at a made-up product, step by step: what saysOK does on its own, what your team sees, and what your customers read.
- Your teamThe check from Frankfurt gets HTTP 503From api.acme.example/health. One region only, so nobody is paged yet.02:14:00
- Your teamVirginia sees it too: incident openedSEV-1. Maya, primary on call, gets a push notification and the Slack message at once.02:14:07Your status page“We are investigating an issue affecting API.”Nobody typed it: the page and its subscribers are updated from the incident.
- Your teamMaya acknowledgesFrom the Slack message. The secondary on call is never woken.02:16:30
- Your teamChecks pass from every region: resolvedThe incident resolves itself, and the Slack message says so.02:29:50Your status page“This incident has been resolved.”API is operational again, and subscribers are told.
- Your teamThe post-mortem is writtenStarted from the incident's timeline.09:30:00Your status pageThe post-mortem goes on the pageUnder the incident, for customers to read.
- Down for
- 15 min 50 s
- Customers told
- at 02:14
- Status updates typed
- none
Which one fits
Neither is right for everyone. This is how we would choose.
Choose Uptime Kuma if
- You want monitoring for free, and you are happy to run, update and back up a server for it.
- You need a check type saysOK does not have, such as WebSocket, Docker containers or game servers.
- Your monitoring must stay inside your own network.
Choose saysOK if
- You would rather not run the thing that tells you your servers are down.
- A failure should be confirmed from a second place before it wakes anyone.
- Several people share on-call, with escalation, incidents and post-mortems.
What saysOK includes
Part of the product, not sold as an add-on.
On-call, with a next person if nobody answers
A schedule says who is primary and who is secondary each day. An alert rule pages them in steps: when an alert is not acknowledged in time, the next person is paged.
- at once Slack · #alerts
- +5 min Primary on-call, if not acknowledged
- +10 min Secondary on-call, if still not acknowledged
Every incident keeps its record
A timeline of what was detected, who acknowledged and when it was resolved, with a severity from SEV-1 to SEV-4. Write the post-mortem from it and publish it to your status page.
- 02:14:07Detected: Acme shop is down
- 02:14:08Maya paged by phone call
- 02:15:31Acknowledged by Maya
- 02:31:10Resolved: checks passing again
Cron jobs and backups, next to the uptime checks
A heartbeat monitor expects a ping from each scheduled job and alerts when one does not arrive, so a backup that silently stopped is found the same day.
# crontab: report in when the backup has run
0 3 * * * backup.sh && curl -fsS https://saysok.com/api/heartbeats/YOUR_TOKEN/pingAn API, and a way in for AI assistants
Monitors, incidents and heartbeats are reachable over a public REST API. The MCP endpoint lets assistants such as Claude Code and Cursor work with them too.
curl https://api.saysok.com/v1/monitors \ -H "Authorization: Bearer YOUR_API_KEY"
claude mcp add --transport http saysok https://api.saysok.com/mcp --header "Authorization: Bearer YOUR_API_KEY"
Try it on your own sites.
The free plan covers 10 monitors and one status page. Move to Pro or Team when you need faster checks or seats for a team.