Synthetic monitoring for SREs

The synthetic layer for your observability stack. Managed as code, not clicks

Declare uptime, API, and browser checks in TypeScript or Terraform. Deploy them from CI, run them from 22+ regions or inside your own VPC, and page on-call only after a failure is confirmed. The same check opens the status page incident and hands the rotation a root cause.

22+ public regionsPrivate locationsTypeScript · Terraform · Pulumi
__checks__/fleet.check.ts
1import {
2 ApiCheck, CheckGroupV2, AssertionBuilder,
3} from 'checkly/constructs'
4import { services } from './services.config'
5
6const ok = AssertionBuilder.statusCode().equals(200)
7
8const prod = new CheckGroupV2('prod-fleet', {
9 name: 'Production fleet',
10 locations: ['us-east-1', 'eu-west-1'],
11})
12
13// Every service gets a monitor.
14// No clicks, no drift.
15for (const svc of services) {
16 new ApiCheck(`${svc.slug}-health`, {
17 name: `${svc.name} /health`,
18 group: prod,
19 frequency: 1,
20 request: {
21 method: 'GET',
22 url: `${svc.baseUrl}/health`,
23 assertions: [ok],
24 },
25 })
26}

Trusted by the teams that carry the pager

Vercel
Carhartt
CrowdStrike
Airbus
Fanatics
Mistral
ServiceNow
GoFundMe
Hopper
1Password
Fastly
Total Wine
Few things in site reliability are as frustrating as having a system go down only to learn that your backup scripts stopped running at some point and you didn't notice. Checkly's heartbeat feature made it extremely simple to monitor my backup process for reliable execution.
Dan Subak·Software Engineer, Memfault

The three ways monitoring breaks down at scale

Not because anyone is careless. Because monitors managed by hand always end up like this.

click-ops

Monitors drift

Checks built in a UI two years ago by someone who left. No version history, no review, no owner. The dashboard is green and nobody trusts it.

coverage

New services ship unmonitored

Teams ship weekly; monitors get added when someone remembers. The gap surfaces in the incident review, not before it.

03:14 a.m.

On-call stops believing alerts

A network blip in one region pages the whole rotation. After the third false alarm, alerts get muted. The real one lands in silence.

Checkly treats monitors like the rest of your infrastructure: declared in code, reviewed in pull requests, deployed from CI, and confirmed across regions before anyone gets paged. The alert channel, the status page, and the trace are constructs in the same project, so the whole incident path is one thing you version rather than four tools you wire together.

The ease of integration in our pipeline was remarkable. We have everything defined in a CI/CD pipeline using GitHub Actions using the CLI. Everything scaffolds out based on a configuration, so we just update a configuration file which specifies the environments, what services are there, what the URLs are, and from that, we just generate all the groups and their checks.

Tobias Deekens

Principal Frontend Engineer · commercetools

One incident, end to end

Everything on this page in the order it actually happens. The only human in it is the one who picks up the page at 00:41, and by then the customers have been told and the cause has a name.

  1. 00:00

    The check fails

    detect

    Checkout API returns 503 from us-east-1. Nothing has been sent to anyone yet.

  2. 00:05

    It gets retried, elsewhere

    detect

    Exponential backoff, cross-region. A blip would have resolved itself here and the rotation would never have known.

  3. 00:41

    The page goes out

    communicate

    Second consecutive failure meets the escalation policy. PagerDuty opens an incident, #sre-oncall gets the failing assertion and a link to the run.

  4. 00:41

    Customers are told, by the check

    communicate

    The same check opens the incident on status.acme.com and notifies subscribers. No one wrote it, which is why it actually happens at 00:41 and not at 00:55.

  5. 01:12

    The cause has a name

    resolve

    The trace puts the latency in the payments gateway, not your service. Rocky AI says so in a sentence, before anyone has opened a dashboard.

  6. on recovery

    The loop closes itself

    communicate

    When the check goes green the PagerDuty incident auto-resolves and the status page incident closes itself.

Reliability people, on Checkly

Checkly was incredibly easy to integrate. Even our initial traces setup was quick, and the documentation was better than OTel’s own.

Brian Stack

Infrastructure Engineer · Render

Checkly is a fabulous developer tool. The flexible features and developer-friendly API made the integration super easy, and their support is friendly and knowledgeable.

Connor Hicks

Lead Developer · 1Password

We love Heartbeat Checks! They help us ensure that critical operations run to completion and on time. We had previously evaluated other platforms just for their heartbeat checks, so we are happy to see these within Checkly along with the API and browser checks.

Johannes Gilger

CEO & Founder · urlscan.io

The Checkly CLI has enhanced our engineering team’s ability to quickly build, validate, and deploy an entire suite of checks from their local development environment.

Tavares Chambless

Manager, Quality Assurance · Loyal Health

We’ve been using Checkly for months and it’s been phenomenal. Super easy to set up, works flawlessly and intuitively. The team is super receptive and quick to help.

Jake Cooper

Founder / Engineer · Railway

Checkly is incredible: it combines Pingdom, Ghost Inspector, and Assertible in the same app, and the insights are much more detailed.

Leo Lamprecht

SVP Product · Vercel

Put your monitors where your code lives

npm install, define a check, open a pull request. Your first monitor can be running from CI this afternoon.