Free Uptime Monitoring That Actually Pages You
11 Feb 2026A monitoring setup that emails you is not a monitoring setup — you won’t see the email until morning. What you need is something that pages your phone at 3am with a call or a push notification loud enough to wake you, and you can get that for free.
Self-hosted: Uptime Kuma
Uptime Kuma is the self-hosted option worth running. It checks HTTP, TCP, DNS, and ping targets, has a status page built in, and its notification integrations cover most of what you’d want.
docker run -d --name uptime-kuma \
-p 3001:3001 \
-v uptime-kuma:/app/data \
louislam/uptime-kuma:1
The catch with self-hosting your monitor: if the box running Uptime Kuma is in the same datacenter or region as the thing it’s monitoring, a regional outage takes down your monitor and your app together, and you get no alert. Run it on a different provider or region than what it’s watching — a $4/month VPS from a second provider is enough.
Hosted free tiers
If you don’t want to run and maintain even a small monitoring box:
- UptimeRobot — free tier covers a real number of monitors at 5-minute intervals, which is coarse but enough to know within a few minutes that something’s down.
- Better Stack (formerly Better Uptime) — free tier includes status pages and on-call scheduling, which UptimeRobot’s free tier doesn’t.
Hosted wins here because the monitor genuinely lives outside your infrastructure — no chance of a shared-failure-domain blind spot.
The part people skip: actually getting paged
A dashboard turning red at 3am while you’re asleep helps nobody. The alert has to reach you through a channel that interrupts sleep — SMS, phone call, or a push notification with a sound override, not email and not a Slack message you won’t see until you wake up.
ntfy.sh — free, self-hostable or use their public instance, gives you push notifications to a phone app from a simple curl call:
curl -d "Site is down: api.yourapp.com" ntfy.sh/your-topic-name
Wire this as Uptime Kuma’s notification target and you get a phone push on failure, no account needed on the free public instance.
PagerDuty’s free tier caps at a small number of users but includes actual phone-call escalation — useful if you specifically need “call me, and if I don’t ack in 5 minutes, call the next person.” For a one or two person team this is usually enough.
Twilio — if you want a direct phone call without a full incident-management platform, a small script hitting Twilio’s Voice API on alert is a few lines and costs cents per call, not a subscription.
A minimal setup that actually works
- Uptime Kuma (self-hosted, on a different provider than your app) or UptimeRobot (hosted), checking your critical endpoints every 1-5 minutes.
- Notification wired to ntfy.sh for an immediate phone push.
- PagerDuty or a Twilio call script as escalation if you don’t ack within 10-15 minutes — this is the step that actually wakes you up if the push notification gets missed or muted.
What “monitoring” actually needs to check
Don’t just ping /. Check an endpoint that exercises the thing that actually breaks — a /health route that queries the database, not a static page that returns 200 even when the database is down:
app.get('/health', async (req, res) => {
try {
await db.query('SELECT 1')
res.status(200).send('ok')
} catch {
res.status(503).send('not ready')
}
})
A monitor watching a static homepage will say everything’s fine while your database connection pool is exhausted and every real request is failing.
Takeaway
Free-tier monitoring is genuinely enough for a small team. The thing that actually determines whether it saves you is whether the alert reaches a channel loud enough to wake you up — not the monitoring tool itself.