pingrobot

Blog / Uptime monitoring

How to Monitor Website Uptime for Free (4 Practical Options)

· 5 min read

Short answer

The easiest free way to monitor website uptime is a hosted monitoring service with a free plan, which checks your site every few minutes from outside your network and emails or messages you when it fails. If you prefer to run it yourself, a self-hosted open-source monitor or a small curl script on a separate machine also works, but you then have to keep the monitor itself running.

You can monitor website uptime for free by signing up for a hosted monitoring service with a free plan, adding your URL, and connecting an alert channel such as email or Telegram. The service checks your site from its own servers every few minutes and notifies you when a check fails. Alternatives are a self-hosted open-source monitor or a simple curl script run by cron on a different machine. All of them work; they differ in how much maintenance you take on.

The one rule: monitor from outside

Whatever option you choose, the checker must not live on the server it watches. A script on your web server cannot report that the web server is down. Use a separate provider, or at least a separate machine in a different location.

Option 1: a hosted free plan

This is the fastest route and the one that needs no maintenance.

Setup steps

  1. Create an account with an uptime monitoring service that has a free tier.
  2. Add an HTTP(S) monitor for your homepage, for example https://example.com/.
  3. Add a second monitor for a page that matters commercially, such as /checkout or /contact, and give it a keyword check for text that only appears when the page works, for example the label on your submit button.
  4. Connect at least one alert channel besides email. A chat app on your phone is noticed faster.
  5. Test the alert by adding a temporary monitor for a URL that does not exist, such as https://example.com/monitor-test-404, and confirm you get notified. Then delete it.

What to look for in a free plan

Feature Why it matters
Check interval 5 minutes is standard on free tiers; shorter means faster detection
Number of monitors Enough for every important URL and job
Confirmation from a second location Fewer false alarms
Alert channels Email plus at least one chat or webhook option
Heartbeat monitors Lets you watch cron jobs, not just URLs
Status page Lets visitors check status without contacting you

PingRobot's free plan, for example, includes 10 monitors with 5-minute checks, re-checks failures from a second region, and sends alerts by email.

Trade-offs: you depend on the provider, and free tiers have limits on interval and monitor count.

Option 2: a self-hosted open-source monitor

Open-source tools such as Uptime Kuma give you a web dashboard and many alert integrations, and they run on a small VPS or a home server.

Setup outline

  1. Rent a small VPS from a different provider than your website host, or use a machine you already have outside your production network.
  2. Install the tool, typically with Docker.
  3. Put it behind HTTPS and a strong password, because the dashboard can reveal your infrastructure.
  4. Add your monitors and alert channels.

Trade-offs: the software is free, but the VPS usually is not, and you are now responsible for updates, backups and the monitor's own uptime. Ask yourself: who monitors the monitor? A common answer is a hosted free plan watching the self-hosted instance.

Option 3: a curl script and cron

If you only need "tell me when this URL stops returning 2xx", a few lines of shell on any always-on Linux machine are enough.

#!/bin/sh
# /usr/local/bin/check-site.sh
URL="https://example.com/"
STATE_FILE="/var/tmp/check-site.state"

if curl -fsS -o /dev/null --max-time 15 "$URL"; then
  NEW=up
else
  NEW=down
fi

OLD=$(cat "$STATE_FILE" 2>/dev/null || echo up)

if [ "$NEW" != "$OLD" ]; then
  echo "$URL is $NEW at $(date -u)" | mail -s "Site $NEW: $URL" you@example.com
  echo "$NEW" > "$STATE_FILE"
fi

Run it every five minutes:

*/5 * * * * /usr/local/bin/check-site.sh

Notes on the script:

  • -f makes curl exit with an error on HTTP status 400 and above, so 5xx errors count as down.
  • --max-time 15 treats a hanging server as down instead of waiting forever.
  • The state file means you get one email when the site goes down and one when it recovers, not an email every five minutes.
  • mail requires a working mail setup on the machine. You can replace that line with a curl call to a chat webhook.

Trade-offs: a single location means a network problem near your checker looks like an outage. There is no history, no uptime percentage and no status page unless you build them.

Option 4: a scheduled CI workflow

GitHub Actions and similar CI services can run a curl command on a schedule.

name: uptime
on:
  schedule:
    - cron: "*/5 * * * *"
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - run: curl -fsS -o /dev/null --max-time 15 https://example.com/

A failed run triggers the CI provider's normal failure notification.

Trade-offs: GitHub's minimum schedule is every 5 minutes, runs can be delayed during busy periods, and scheduled workflows in public repositories are disabled after 60 days without repository activity. Treat this as a backup, not your only monitor.

Comparison

Option Cost Maintenance History and status page Best for
Hosted free plan Free None Usually yes Most sites
Self-hosted open source VPS cost Medium Yes Teams that want full control
curl + cron Free if you have a server Low to medium No Developers, single URLs
CI schedule Free tier minutes Low No Backup checks

Make free monitoring reliable: a checklist

  • Monitor the HTTPS URL your visitors actually use, including the www form if that is canonical.
  • Use a keyword check on at least one important page. A keyword monitor catches error pages that return 200.
  • Set a timeout between 10 and 30 seconds. A page that takes 40 seconds is effectively down.
  • Send alerts to two channels so one broken inbox does not hide an outage.
  • Add a heartbeat for your backups. See cron job monitoring with heartbeats.
  • Test alerts after setup and after changing channels.
  • Review the incident history monthly to spot patterns, such as downtime every night at the same time.

When to move beyond free

Free monitoring stops being enough when:

  • An outage of a few minutes costs real money, so 1-minute checks are worth paying for.
  • You promise clients an uptime level and need precise numbers. See uptime percentage explained.
  • Your team coordinates in Slack or Discord and wants alerts there.
  • You need more monitors than the free limit allows.

Until then, a free plan plus a good checklist covers the failures that matter most. For background on how checks work, read what is uptime monitoring.

Start monitoring free — 10 monitors, no credit card.

Frequently asked questions

Is free uptime monitoring good enough for a business website?

For most small business and brochure sites, yes. A free plan with 5-minute checks and email or chat alerts catches real outages. Upgrade when minutes of downtime start to cost money or you need faster detection.

Why should the monitor not run on the same server as my website?

If the server goes down, the monitor goes down with it and no alert is sent. External monitoring must run on separate infrastructure, ideally in a different provider or region.

Can I use GitHub Actions as a free uptime monitor?

It works for low-stakes checks, but scheduled workflows run at most every 5 minutes, can start late when GitHub is busy, and are disabled in public repositories after 60 days without repository activity.

How many monitors does a typical small site need?

Usually three to six. The homepage, one key conversion page with a keyword check, an API or health endpoint if you have one, and a heartbeat for each important scheduled job.