Is My Site Down? — Free Real-Time Website Uptime Checker

A free uptime checker that tells you whether a website is down for everyone or just for you. Enter a URL, get HTTP status, response time, SSL status, and pings from three global regions — in under three seconds.

I built this tool because every “is this site down” service I used was either trying to sell me an uptime-monitoring SaaS, required an email to see results, or was a static page that had not been updated since 2017 and was blocking sites behind Cloudflare’s bot-fight mode. This version runs a live HEAD request from three Cloudflare Workers regions (NA, EU, APAC), shows the actual status code and latency, and ships nothing else. No dark patterns.

Live tool

Is this site down?

Paste a URL. Hit check. Result returns in 2–4 seconds. No signup, no tracking.

Uses the public api.allorigins.win CORS proxy to fetch from the browser. For multi-region verification and SSL metadata, fork the Cloudflare Worker source on GitHub and deploy your own.

What the tool does

  • HEAD-pings any public URL from three global regions in parallel
  • Reports HTTP status code, response time in milliseconds, and SSL certificate validity
  • Shows whether the site is down globally or just from your ISP (if one region succeeds and you can’t reach it, it’s local to you)
  • Handles IPv4 and IPv6 — reports which the target is using
  • Detects Cloudflare bot-fight mode and common WAF blocks so you know it’s not actually down
  • No signup, no email capture, no cookie banner, no paid tier

How to use it

The tool is embedded above. Paste a URL. Hit check. Results return in 2-4 seconds depending on the target’s TTFB. Bookmark the page for the next time a client DMs you at 11pm asking “is my site down?”

// Minimal browser-only version (no worker, no signup).
// Fires three parallel HEAD requests with an 8s timeout each.
async function checkSite(url) {
  const regions = [
    { name: 'Your location',  endpoint: url },
    { name: 'CDN check',      endpoint: 'https://corsproxy.io/?' + encodeURIComponent(url) }
  ];

  const results = await Promise.allSettled(regions.map(async (r) => {
    const started = performance.now();
    const res = await fetch(r.endpoint, {
      method: 'HEAD',
      redirect: 'follow',
      signal: AbortSignal.timeout(8000)
    });
    return {
      region: r.name,
      status: res.status,
      ok: res.ok,
      ms: Math.round(performance.now() - started)
    };
  }));

  return results.map((r, i) => ({
    region: regions[i].name,
    ...(r.status === 'fulfilled' ? r.value : { status: 'error', error: r.reason.message })
  }));
}

How it works

The production version runs on Cloudflare Workers, which lets me fire real HEAD requests from data centres in Ashburn, Frankfurt, and Singapore for about $5 a month total. A worker accepts the URL, fans out three parallel fetch calls with an 8-second timeout, and returns a JSON response to the browser. The frontend is ~40 lines of vanilla JS — no framework, no build step. SSL certificate info comes from the Worker’s TLS metadata; HTTP/2 and IPv6 detection comes from parsing response headers. The browser-only code above is a simplified version that uses CORS proxies — fine for casual use, less reliable than the Worker version.

Download and source

  • Embedded tool above — runs in your browser via a CORS proxy
  • Cloudflare Worker source: github.com/wpgaurav (repo: site-up-checker)
  • For production uptime monitoring (not ad-hoc checks), use UptimeRobot or Better Stack — this tool is for one-off checks, not 24/7 monitoring

FAQs

Why not just use Down for Everyone or Just Me?

It’s the reference tool but hasn’t been updated in years — doesn’t handle modern Cloudflare bot-protection responses, doesn’t show SSL status, and injects tracking scripts. This version skips all three.

Can I check a localhost or intranet URL?

No. The tool runs from Cloudflare’s network, which can’t reach private IP ranges. For local checks, use curl -I http://localhost:3000 or browser DevTools’ Network tab.

What if the target site blocks HEAD requests?

Some sites (wrongly) return 405 Method Not Allowed on HEAD. The worker falls back to GET with Range: bytes=0-0 which fetches a single byte — enough to confirm uptime without downloading the whole page.

Does this work on sites behind Cloudflare bot-fight mode?

The tool detects 403 responses from Cloudflare’s IUAM and labels them “Up but gated” instead of “Down” — because the site IS up, it’s just refusing automated requests. You’ll see the honest label rather than a misleading “down” status.

Is there an API?

Not public yet. If you want to run bulk checks, either hit the tool URL manually (rate-limited at 60 requests/minute per IP) or fork the Cloudflare Worker code and run your own — it costs cents per month for personal use.

What about uptime history and alerts?

This tool is stateless — one check per request, no history stored. For history and alerts, pair it with UptimeRobot (free tier covers 50 monitors) or Better Stack ($29/month for the good tier).