Uptime monitoring that checks twice before it wakes you
Website monitoring, API monitoring and cron job monitoring in one place. Every failure is confirmed before anyone is alerted, every incident arrives with a likely cause, and your status page keeps up on its own.
| 14:00:02 | checkout-api | 200 | 182 ms | ||
| 14:01:02 | checkout-api | 200 | 1,940 ms | degraded: over 1,500 ms | |
| 14:02:02 | checkout-api | 503 | 30.0 s | failure 1 of 2 | |
| 14:02:17 | checkout-api | 503 | 30.0 s | re-check: confirmed down | |
| 14:02:18 | incident | opened · Slack, email · AI report queued | |||
| 14:09:02 | checkout-api | 200 | 204 ms | recovered · incident resolved |
Seven kinds of check, one model
Every monitor has the same states (up, degraded, down, paused), the same alerting and the same incident flow, whatever it checks. Pick the kind, or let UpButler infer it from what you pass.
httpWebsite and API checks
Status codes, keyword present or absent, JSON paths, headers, latency budgets, TLS certificate expiry. Any method, headers and body.
All plans
tcpPort checks
Databases, mail servers, game servers: anything that should accept a connection.
All plans
dnsDNS records
A, AAAA, CNAME, MX, TXT and NS records, optionally with the values that must be present.
All plans
heartbeatCron and job monitoring
Your job pings a URL when it runs. No ping in time, plus grace, means down. A /fail URL reports errors immediately.
All plans
manifestOne endpoint, many components
Read a JSON health document and map each key to a status page component. Statuspage components.json works as is.
All plans
scriptMulti-step API checks
Log in, create a record, read it back, clean up. Runs in an isolated sandbox.
Pro and Business
browserReal-browser checks
Playwright drives Chromium through your sign-up or checkout and fails when the page does.
Business, up to 20 monitors
No false alarms is a feature
An alert you learn to ignore is worse than no alert. Here is what happens between a failed request and your phone buzzing.
- 01
Check fails
Timeout, wrong status, assertion miss.
- 02
Re-check in 15 s
Most blips end here, silently.
- 03
Confirmed down
After 2 consecutive failures by default.
- 04
One incident
Failures on the same page within 30 min are grouped.
- 05
Reminders
30 min, 2 h and 8 h if still down.
- 06
Recovery
Incident resolves, summary drafted.
With several regions, step 1 is a vote: see below. Thresholds are per monitor: failureThreshold from 1 to 10, recoveryThreshold for flappy services, and reminder intervals you can change or turn off. Alerts go to email, Slack, Discord, Telegram or a signed webhook.
Checked from four places, decided by majority
A route problem between one data center and your server is not your outage. Monitors can be checked from several EU locations in the same round, and the result is a vote: down only when a strict majority of the regions that answered say so, degraded on an even split, up when only a minority fails. You still see every region's latency and errors.
Free checks from 1 region, Starter from up to 2, Pro from up to 3, Business from all four. Works for HTTP, TCP, DNS and manifest monitors; the failure threshold still applies on top, round by round.
- Helsinkitimeout30.0 s
- Nuremberg20041 ms
- Falkenstein20038 ms
- Lauterbourg20052 ms
Website monitoring
A 200 does not mean the page works. Check that the words your customers need are actually on it, that the TLS certificate is not about to expire, and that it loads within your budget. On Business, a real browser can click through the flow that pays your bills.
Add statusPage and the same call puts it on your status page.
curl -X POST https://upbutler.com/api/v1/services \
-H "Authorization: Bearer $UPBUTLER_KEY" -H "Content-Type: application/json" \
-d '{"name":"Website","url":"https://acme.com","keyword":"Add to cart","statusPage":"acme"}'curl -X POST https://upbutler.com/api/v1/monitors \
-H "Authorization: Bearer $UPBUTLER_KEY" -H "Content-Type: application/json" \
-d '{
"name": "Orders API",
"url": "https://api.acme.com/v1/orders?limit=1",
"headers": { "Authorization": "Bearer test_…" },
"intervalSec": 30,
"assertions": [
{ "source": "status", "op": "eq", "value": 200 },
{ "source": "json", "path": "$.data[0].id", "op": "exists" },
{ "source": "latency", "op": "lt", "value": 800, "severity": "degraded" },
{ "source": "ssl_days", "op": "gt", "value": 14, "severity": "degraded" }
]
}'API monitoring
Send real requests with your headers and body, then assert on what comes back: status, JSON paths, headers, latency. Mark a check degraded instead of down when it is only slow. Script checks on Pro chain several requests together.
Cron job monitoring
The jobs that fail quietly are the expensive ones: backups, invoices, data syncs. A heartbeat monitor expects a ping every period. Silence past the grace window means down, and a /fail ping reports an error straight away, with no waiting.
# 1. Create the heartbeat (or let your agent do it)
curl -X POST https://upbutler.com/api/v1/services \
-H "Authorization: Bearer $UPBUTLER_KEY" -H "Content-Type: application/json" \
-d '{"name":"Nightly backup","periodSec":86400,"graceSec":1800}'
# 2. Ping it from the job
30 2 * * * /opt/backup.sh && curl -fsS https://upbutler.com/hb/<token> \
|| curl -fsS https://upbutler.com/hb/<token>/failAI incident report · checkout-api
Likely causes
- Upstream timeout: responses climbed from ~180 ms to 1.9 s a minute before the first 503.
- The 503 body names the load balancer, not the app: the backend pool was likely empty.
Suggested next steps
- Check the health of the checkout backend instances and recent deploys.
Public summary
Some customers cannot complete checkout right now. We are working on it and will update this page within 30 minutes.
Alerts that come with a first guess
When an incident opens, UpButler sends the relevant check context (status codes, timings, TLS and DNS details, a short response excerpt) to a language model and attaches what comes back: likely causes, next steps and a customer-safe summary. On recovery it drafts the post-incident summary.
Record deploys from CI with the API, the upbutler CLI or our GitHub Action, and the report tells you when errors started right after a release, with the version and commit.
Free includes 10 reports a month, Starter 100, Pro 1,000 and Business 5,000. It can be switched off per monitor.
Limits, plainly
Free$0
10
monitors, every 5 min, from 1 region
30 days of history
Starter$12/mo
25
monitors, every 1 min, from up to 2 regions
1 year of history
Pro$29/mo
75
monitors, every 30 s, from up to 3 regions
1 year of history · script checks
Business$99/mo
300
monitors, every 30 s, from all 4 regions
2 years of history · 20 browser checks
Commercial use is fine on every plan, and new workspaces start with 14 days of Pro. See pricing for the full list.
Uptime monitoring questions
What is uptime monitoring?
Uptime monitoring checks your website, API or server from the outside on a schedule and alerts you when it stops responding correctly. UpButler also records response times, opens incidents, updates your status page and drafts what to tell customers.
How often does UpButler check my site?
Every 5 minutes on the Free plan and every minute on Starter, and as often as every 30 seconds on Pro and Business. The default for new monitors is 60 seconds where your plan allows it.
How do you avoid false alarms?
A failed check is re-checked about 15 seconds later, and a monitor is only marked down after two consecutive failures (configurable from 1 to 10). Recovery can require several successes too. Related failures on one status page are grouped into a single incident.
Can I monitor cron jobs and background workers?
Yes, with heartbeat monitors. Your job requests a unique URL each time it runs; if no request arrives within the expected period plus a grace period, the monitor goes down. Calling the /fail URL reports an error immediately.
Where do alerts go?
Email, Slack, Discord, Telegram and webhooks signed per the Standard Webhooks spec. On the Business plan, weekly on-call rotations and escalation policies page whoever is on call by email or Telegram until someone acknowledges; acknowledging works on every plan. There are no SMS or phone-call alerts; forward the webhook to a paging tool if you need them.
Do you check from multiple regions?
Yes, from four EU locations: Helsinki, Nuremberg, Falkenstein and Lauterbourg. HTTP, TCP, DNS and manifest monitors can use 1 region on Free, 2 on Starter, 3 on Pro and all of them on Business. A monitor only goes down when a strict majority of the regions that reported agree; if exactly half fail it is marked degraded instead. A region whose probe is unhealthy is left out of the vote, never counted as a failure.
Can I monitor APIs that need authentication?
Yes. Set any method, headers and body, and assert on the status code, JSON fields, headers and latency. For multi-step flows such as log in then fetch, use script checks on Pro and Business.
Your first monitor takes one call.
Or one sentence to your agent. Free for 10 monitors, no card required.