A backup counts once it restores
Most teams find out their backups are broken on the day they need them. backupd restores yours on a schedule, counts what came back, and tells you when something is missing.
Restore test
app-prod-2026-10-15-0300.pgdump.zst.age- 5 of 5
- 1,766,383
- 41s
- postgres 16
- Fetch the backup
- Decrypt
- Restore
- Count rows
- Clean up
| Table | Backed up | Restored | Result |
|---|---|---|---|
public.sessions | 1,402,377 | 1,402,377 | match |
public.order_items | 241,880 | 241,880 | match |
public.orders | 96,512 | 96,512 | match |
public.users | 18,204 | 18,204 | match |
public.invoices | 7,410 | 7,410 | match |
- Integrity
- Every backup is read back and checked.
- Sandbox
- Restored on a sandbox server, never yours.
- Counted
- Rows and documents, table by table.
- Every backup
- Pro tests every backup up to 10 GB.
After every backup
The stored file is read back, decrypted and decompressed, both checksums are compared, and the engine’s archive format is checked. A backup that fails this is not counted as good.
Backup
app-prod-2026-10-16-0900.pgdump.zst.age- Dump
- Compress
- Encrypt
- Upload
- Check
The restore test
- FetchThe backup is fetched from storage like any restore.
- DecryptIt is decrypted with backupd’s key and decompressed, and the checksum is matched.
- RestoreIt is restored into a temporary database on a sandbox server running the same engine.
- CountEvery table or collection is counted and compared with the counts taken when the backup was made.
- Clean upThe temporary database is dropped. Your database is never touched.
How often
- Starter: the latest backup, every day.
- Pro: every backup up to 10 GB, and the latest larger one every day.
- Custom: every backup, whatever its size.
Storage
2,317 backup files · 66.5 GB stored
| File | Size | Restore test | Created |
|---|---|---|---|
app-prod-2026-10-16-0900.pgdump.zst.age | 612 MB | Passed | 12 min ago |
billing-2026-10-16-0600.sql.zst.age | 88 MB | Not tested | 2 h ago |
app-prod-2026-10-16-0800.pgdump.zst.age | 611 MB | Passed | 1 h ago |
events-2026-10-16-0300.archive.zst.age | 1.4 GB | Passed | 9 h ago |
marketing-site-2026-10-13-0300.zip.age | 20 MB | Passed | 3 days ago |
When a count is short
The backup is marked as failing its test and an alert goes to your channels. The backup’s page lists each table that came back short, with both counts, and you can rerun the test from there.
Per engine
Postgres counts are exact up to 25 million rows when we can export a snapshot; MySQL and MongoDB counts are always exact. Convex has no temporary deployment to restore into, so its backups get an integrity check and per-table counts instead.
Find out tonight, not on the bad day
Connect a database and its first restore test runs on your plan’s schedule. Starter is free for 14 days.