Backup verification for S3 storage

Exit code 0 is not a backup. We check the bucket.

Your backup job says it succeeded. BackupWitness looks at S3, R2, B2, Wasabi or Hetzner and checks that a fresh, normal-sized backup actually landed. It only lists the bucket and never reads your backups; use the narrowest key your provider offers.

Metadata-level proof, not restore proof.

The dashboard

Every bucket, one glance.

What it catches

The failures a green exit code hides.

freshness

The backup stopped arriving

The newest object under the prefix is older than you allow, or the prefix is empty.

size

The backup shrank

The newest object is below a minimum size, or far from the 7-day median (Pro).

count

Files went missing

Fewer objects under the prefix than you expect.

error

The storage stopped answering

The key was revoked, the bucket is gone or the endpoint is down.

How it works

Three steps, no agent to install.

  1. 01

    Point it at the bucket

    Endpoint, bucket, prefix and a narrow key. Presets for restic, Litestream and database dumps.

  2. 02

    It lists, on a schedule

    Every few minutes it lists the prefix and checks the newest object: fresh, normal size, enough of them.

  3. 03

    You hear when it breaks

    Email on every plan; webhook, Slack, Telegram and ntfy on Pro. Again after 24 h while it stays broken.

Pricing

Start free. Pay when it matters.

Free
0 EUR /mo
  • 3 checks
  • every 60 min
  • email
Pro
15 EUR /mo
  • 25 checks
  • every 15 min
  • email, webhook, slack, telegram, ntfy
Agency
39 EUR /mo
  • 150 checks
  • every 15 min
  • email, webhook, slack, telegram, ntfy
Questions

Before you hand over a key.

Can BackupWitness read my backups?
It never calls anything but ListObjectsV2. On AWS, Wasabi and B2 you can give it a key that can only list. Cloudflare R2 has no list-only key; the narrowest one is read-only for one bucket, and the R2 guide says so plainly.
How is this different from a heartbeat monitor?
A heartbeat proves your job ran. BackupWitness checks what landed in storage, so an upload that failed silently, or an empty dump, still raises an alert.
Does it prove I can restore?
No. It proves a fresh, plausibly sized backup exists. Test restores separately.

Know your backups actually landed.

Start free