You can monitor a website for free in four ways: a free tier from a monitoring service, a small script on a server you already run, a scheduled workflow on a CI service such as GitHub Actions, and free one-off checkers for when something already seems wrong. For a personal site or a side project, that is often enough. Pay for monitoring when downtime costs you money or reputation, when you need to know within a minute or two, or when more than one person has to be woken up and kept informed.
This guide walks through each free option, what it does well, what it quietly misses, and how to tell when you have outgrown it.
What website monitoring has to do
Whatever you use, free or paid, judge it by four jobs. If one is missing, you don’t have monitoring yet, you have a hope.
- Check regularly, from outside. A check from the same server as the site can pass while visitors can’t connect. The interval is the longest you can stay unaware of an outage.
- Decide what counts as down. A timeout, a refused connection, a 5xx, an invalid certificate, or a page that answers 200 but shows an error. See what uptime monitoring is for the details.
- Reach a person. An alert that lands in a spam folder at 03:00 is not an alert. It has to arrive somewhere you actually look, and a recovery notice should follow.
- Keep a record. When did it go down, for how long, and how often does it happen? Without history you can’t answer a client, check a hosting provider’s SLA or spot a pattern.
Option 1: a free tier from a monitoring service
Several monitoring services offer a free plan, and it is the quickest way to get the four jobs covered for a handful of URLs. The limits differ from service to service and change over time, so read the current plan page and terms rather than a comparison article. These are the questions worth asking:
- How often does it check? Free plans often check less often than paid ones. Every 5 minutes means an outage can run for up to 5 minutes before the first failed check.
- Is a failure confirmed before the alert? A second check from the same or another location filters out a single dropped request. Without it, expect false alerts.
- Which alert channels are included? Email only, or also chat and push notifications on your phone?
- Can it check content? A status code alone misses a page that loads but is broken. Look for keyword or response checks.
- How long is history kept, and is commercial use allowed? Some free plans are meant for personal projects only.
Option 2: a script on a server you already have
If you have a server or a VPS somewhere other than where the website runs, one crontab line gives you a basic check every 5 minutes:
*/5 * * * * curl -fsS -m 10 -o /dev/null https://example.com/ || echo "example.com failed at $(date -u)" | mail -s "Site down" you@example.com
-f makes curl fail on HTTP errors, -m 10 gives up after 10 seconds, and the mail only goes out when the request fails. It costs nothing, and you control every detail. It also has real gaps:
- Nobody watches the watcher. If that server goes down, or its mail setup breaks, the checks stop and you hear nothing. Silence looks exactly like a healthy site.
- Mail from a server often lands in spam unless the sending domain has SPF, DKIM and DMARC set up. Our guide to SPF, DKIM and DMARC explains why.
- Every failure is an alert, and you get one every 5 minutes for as long as the outage lasts, but no recovery notice.
- No history. Unless you log each result and build a report, you can’t say what your uptime was last month.
Never run the check on the same server as the website. A server that can’t be reached from the internet can usually still reach itself.
Option 3: a scheduled CI workflow
No spare server? A scheduled workflow on GitHub Actions can run the same check. A failed step fails the run, and GitHub notifies you:
name: Site check
on:
schedule:
- cron: '7,22,37,52 * * * *'
jobs:
check:
runs-on: ubuntu-latest
steps:
- run: curl -fsS -m 10 -o /dev/null https://example.com/
It works, with limits that GitHub documents for the schedule event:
- The shortest interval is once every 5 minutes.
- Scheduled runs can be delayed when GitHub Actions is busy, especially at the start of every hour, and some queued jobs may be dropped. That is why the example avoids minute 0.
- In a public repository, scheduled workflows are disabled after 60 days without repository activity.
- Notifications go to the user who last changed the cron schedule in the workflow file, not to a team.
A workflow is a good stopgap for a side project. As monitoring for something people pay for, an alert that may come late, or not at all, is a weak link. The cron expression tool shows when a schedule like the one above actually runs.
Option 4: free checkers for when something seems wrong
One-off checkers don’t watch anything, but they answer the first questions in an incident in seconds. All of these are free and need no account:
- Is it down? checks any website from our server once, so you can tell “down for everyone” from “just me”.
- SSL checker shows when a certificate expires, who issued it and the full chain.
- Domain expiry checker reads the expiry date and registrar from the registry.
- DNS lookup and the SPF, DKIM and DMARC checker show what your domain publishes right now.
Checkers are a complement, not a replacement: they only look when you ask, and you only ask once you already suspect a problem. The website down checklist shows where each one fits.
Two expiry dates free setups forget
Outages from expired certificates and domains are among the easiest to prevent, and a plain “is it up?” check only notices them after the fact.
- Certificates. Let’s Encrypt stopped sending expiration emails on June 4, 2025, so if your renewal job breaks, nobody tells you. Certificates are also getting shorter lifetimes, which means more renewals that can fail; see what shrinking certificate lifetimes mean.
- Domains. Renewal reminders go to the email address on the registrar account, which is often an old one or someone who left. Turn on auto-renew and check that the card on file is valid.
When it’s time to pay
Free monitoring is fine as long as an outage you find out about late is an annoyance, not a loss. These are the signs that it no longer is:
- The site earns money by the minute. A shop, a booking system or a SaaS product. Put a number on it with the downtime cost calculator; if an hour of downtime costs more than a year of monitoring, the decision is made.
- You promise an uptime figure. 99.9% allows 43 minutes and 49 seconds of downtime a month, as the uptime calculator shows. With a 5-minute interval, detection alone can use a large part of that.
- More than one person is involved. Alerts need to reach whoever is on call, escalate when nobody responds, and land in the team’s chat.
- Customers ask “is it just me?” A status page that updates from your checks answers them before they open a ticket.
- You look after sites for clients. You need reports that show what happened and when, without building them by hand.
- The important part isn’t the homepage. Checkout, login, an API or the nightly backup need checks a curl line can’t do well: multi-step flows, JSON checks and heartbeats.
What paying gets you with Uptimecheck
Uptimecheck has no free plan, but every new workspace starts with a 14-day free trial of Professional, with no card required. If the trial ends without a plan, monitoring pauses and your monitors and history are kept for 30 days. Every plan includes:
- Uptime checks every minute from Stockholm, Sweden, with each failure confirmed by a second check before an alert, and keyword, JSON and header checks on the response.
- Alerts by email, Slack, Microsoft Teams, Discord, Google Chat, Mattermost, Telegram, PagerDuty, ntfy, Pushover, webhooks and push notifications on your phone, with a recovery notice when the site is back.
- SSL and domain expiry reminders, cron job heartbeats and status pages that update themselves.
- History of uptime, response times and incidents for 1, 2 or 3 years depending on the plan.
Plans cost €12, €39 or €92 a month billed monthly, or €9, €29 or €69 a month billed yearly, excl. VAT, sold through Link (Stripe), our reseller. Start includes 15 uptime monitors, Professional 100 and Business 250. Compare everything on the pricing page, or look around the live demo first.
Start free, and move up when the site matters. Try Uptimecheck free for 14 days, no credit card required.