Your app is up.Is it working?
A ping only checks that your server answers. Staygreen checks what it answers, that your crons did their job, and that Stripe’s webhooks arrived.
Free for 50 monitors, with commercial use. No card.
{
"status": "ok",
"db": {
"ok": true, "latency_ms": 41
}
}$.db.ok is true, as expected.Failures that pass a ping
Each one is a check you add in a minute, or that your coding agent adds for you. Coming soon means it isn’t running yet, and you don’t pay for it.
Your API says 200 while the database is gone
Assertions on the JSON body, like $.db.ok == true. A wrong value is an outage, even with a 200.
GET askone.org/api/health returned 200 in 182 ms
- Status is 200200
$.db.okequalstruefalse- Answers within 1.5 s182 ms
{"status":"ok","db":{"ok":false,"error":"too many connections"}}GET /api/health returned 200, but $.db.ok == true got false.
{"db":{"ok":false,"error":"too many connections"}}Alerts that say what broke
A failed request is checked again from a second location before anyone is woken. The alert carries the request, what it got and the response, so you can start fixing from your phone.
- Email, Telegram, Slack, Discord or a signed webhook
- A recovery notice when it’s fixed
- On Telegram, acknowledge or pause from the message itself
Your users see it too
A status page on your own domain, in your colours. And a banner inside your app while something is wrong, so people don’t have to go looking.
You write the update, or your agent drafts it for you to publish. Free includes one page with HTTPS on your domain.
- WebsiteOperational
- Live Q&A roomsOperational
- Live votingOutage
- Sign-inOperational
Your coding agent can read it
Staygreen has an MCP server and a REST API on every plan. Ask Claude Code or Codex what’s broken and it gets the evidence, not a guess. It can set up monitoring for a new app from its URL.
> Is anything broken in askone? staygreen: get_incidents(app: "askone", state: "open") One open incident since 14:02: API health. /api/health returns 200, but $.db.ok is false from San Francisco and Toronto. The body says "too many connections". Your pool max is 10 in lib/db.ts. Raise it to 25 and draft a status update for you to publish? > yes staygreen: draft_incident_update(incident: "inc_7Qa2", state: "identified", text: "…") Draft saved. It's not public until you publish it.
Free for most apps
Builder is for when you run several apps, or want checks every minute.
Free
- One app, 50 monitors, HTTP checks every 3 minutes
- Failed requests confirmed from a second location
- A status page on your domain, and the in-app banner
- The MCP server and API for your agent
Builder
- 10 apps, 100 monitors, HTTP checks every minute
- A third location, Frankfurt, in Europe Coming soon
- 10 status pages, no Staygreen mark, email subscribers Coming soon
- Alert routing by severity, 1 year of history
- Alert delay and repeat while down Coming soon
- Maintenance windows Coming soon
Loading workspace and plans…
Choose monthly or yearly billing. Yearly is selected first. A workspace admin can subscribe or change the plan.
Compare everything in each plan
What the same things cost elsewhere
The cheapest plan that unlocks each one, from each vendor’s own pricing page on . Billed monthly unless it says otherwise.
| Feature | Staygreen | UptimeRobot | Better Stack | OpenStatus | Hyperping |
|---|---|---|---|---|---|
| Webhook alerts | Free | €41/moTeam | $34/moOne responder seat | $30/moStarter | $24/moEssentials, billed yearly |
| Checks every minute | Builder | €10/moSolo | $34/moOne responder seat | $30/moStarter | $24/moEssentials, billed yearly |
| A status page on your own domain | Free | €10/moSolo | Its pricing page doesn't say which plan | $30/moStarter | $24/moEssentials, billed yearly |
| A status page without the vendor's name on it | Builder | €41/moTeam | $284/moA seat, plus white-label for one page | $330/moStarter plus white-label | $249/moBusiness, billed yearly |
Webhook alerts
- Staygreen
- Free
- UptimeRobot
- €41/moTeam
- Better Stack
- $34/moOne responder seat
- OpenStatus
- $30/moStarter
- Hyperping
- $24/moEssentials, billed yearly
Checks every minute
- Staygreen
- Builder
- UptimeRobot
- €10/moSolo
- Better Stack
- $34/moOne responder seat
- OpenStatus
- $30/moStarter
- Hyperping
- $24/moEssentials, billed yearly
A status page on your own domain
- Staygreen
- Free
- UptimeRobot
- €10/moSolo
- Better Stack
- Its pricing page doesn't say which plan
- OpenStatus
- $30/moStarter
- Hyperping
- $24/moEssentials, billed yearly
A status page without the vendor's name on it
- Staygreen
- Builder
- UptimeRobot
- €41/moTeam
- Better Stack
- $284/moA seat, plus white-label for one page
- OpenStatus
- $330/moStarter plus white-label
- Hyperping
- $249/moBusiness, billed yearly
UptimeRobot showed its prices in euros, so they stay in euros here. Prices change: check UptimeRobot, Better Stack, OpenStatus and Hyperping before you decide.