Checkly

checklyhq.comcontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

Synthetic monitoring with real browsers: Playwright scripts run on a schedule from several regions, checking that a journey still works rather than only that a page responds.

Promptfree, for everyone, and the only version there is
Build me synthetic monitoring that replaces Checkly: real browser journeys on a schedule, from more than one place, with a screenshot and a trace when they fail.

STACK
- Node 20+ with Fastify for the control plane
- SQLite through better-sqlite3, WAL mode
- Playwright for browser checks, plain fetch for API checks
- Runners as small agents that poll the control plane, so a second region is one more VPS
- Caddy in front

THE DATA MODEL
- checks: id, name, kind, script_path, config_json, schedule_seconds, regions_json, timeout_ms, retries, degraded_ms, is_active, muted_until
- runs: id, check_id, region, status, started_at, ended_at, duration_ms, error_kind, error_message, attempt, artifacts_path
- steps: id, run_id, position, name, status, duration_ms, error_message — a journey fails at a step, and that is what you need to know
- assertions: id, run_id, kind, target, expected, actual, passed
- incidents: id, check_id, opened_at, closed_at, cause_run_id, region_scope, notified_at
- alerts: id, incident_id, channel, target, sent_at, acknowledged_at
- status_pages, components, and a mapping from checks to components
- Runs are append-only and retained in full for a window, then reduced to per-hour summaries — but the summary is computed from the rows, never stored as the only record within the window

CHECK KINDS
- API check: a request or a sequence of them, with assertions on status, headers, body via JSON path, and response time
- Browser check: a Playwright script committed as a file, running a real journey — sign in, search, add to basket, check out
- Ping and TCP checks for the simple cases
- Multistep API checks where a value from one response is used in the next, which is most real API testing

RUNNING FROM SEVERAL PLACES
- A runner is a small process with a region name and a token; it long-polls for work, runs it, and posts back the result with artifacts
- The control plane never runs checks itself, so the machine that decides is not the machine that can be busy
- A failure in one region and a success in another is a network event, not an outage, and the incident logic must know the difference: open an incident only when a configurable number of regions agree, unless the check is marked single-region
- Runner health is itself monitored: a region that stops reporting is an alert, not silence

FAILURE ARTIFACTS, WHICH IS WHY BROWSER CHECKS ARE WORTH IT
- On failure: a screenshot at the failing step, the full trace, the console log, the network log with timings, and the HTML at the moment it broke
- Kept for failures always, for successes only on demand — traces are large
- The run page shows the step timeline, then the screenshot, then the trace. A failure you cannot see is a failure you will debug by rerunning it by hand

ALERTING WITHOUT NOISE
- Escalation: notify after N consecutive failures, not the first, configurable per check
- Channels: email, webhook, chat, and a shell command for anything else
- Recovery notifications, always, in the same channel
- Muting with an end time, never indefinitely
- A daily digest of degraded checks — the ones that pass but are getting slower, which is the failure you would otherwise find from a customer

PERFORMANCE OVER TIME
- Duration percentiles per check per region, computed at query time
- A degraded threshold separate from the timeout, so 'still works, twice as slow' is visible
- Charts as inline SVG, drawn by hand

STATUS PAGE
- Components mapped to checks, uptime over 90 days computed from runs, incidents with a written update history
- On its own subdomain and, ideally, on a different machine — a status page hosted on the thing it reports on is a status page that goes down with it. Say that in the README

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, RUNNER_TOKEN_SALT, SMTP_URL, SESSION_SECRET, ARTIFACT_PATH
- Migrations on boot, each once
- Secrets for check scripts stored encrypted and injected as environment variables at run time, never written to a log or an artifact
- Backup of the database nightly; artifacts pruned on a schedule
- Health endpoint

WHAT MATTERS MOST
The runner protocol and the multi-region incident rule. Build those first and run one browser check every five minutes for a week against a real site. A monitor that pages you for a hiccup in one region gets muted, and a muted monitor is worse than none.

Give me the repository, the runner agent, migrations, .env.example, two seed checks, and a README with deploy steps for the control plane and for a second region.

What you lose

  • Browser checks running from several regions on a schedule, with the capacity provisioned
  • Traces and screenshots captured automatically when a check fails
  • Alert routing with escalation

If you would rather not build

  • Uptime Kuma, for simple availability

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$40/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Playwright

$0

The same engine the paid product runs; tracing and screenshots included.

microsoft/playwrightfree · open source

Gatus

$0

Declarative health checks with conditions and alerting, one binary.

TwiN/gatusfree · open source

Why this verdict

our own opinion · changed only by a person

80/100

Verdict yes at 80. Playwright in scheduled CI covers this well; the discipline is choosing three journeys that matter and running them somewhere else.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Checkly

answered from the record above

Is Checkly free?

No — the plan we track is $40 a month. Team from around $40/month billed monthly, priced on check runs.

Can you replace Checkly by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 80 out of 100, build time one session. Read what you lose before you decide.

How much does Checkly cost?

$40 a month on Team — $480 a year. Recorded 10 Aug 2026.

What do you lose by replacing Checkly?

Browser checks running from several regions on a schedule, with the capacity provisioned; Traces and screenshots captured automatically when a check fails; Alert routing with escalation. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Checkly?

Yes: Playwright, Gatus. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 25 in Monitoring & uptime

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc