Get early access
Early access · for self-hosted Postgres, MySQL next

Know your backups actually restore.

Restore testing for databases outside the managed safety net: self-hosted Postgres on VMs, Hetzner, DigitalOcean or on-prem, and the off-site pg_dump copies you keep of Supabase, Neon or RDS.

RecoverProof restores your database backups on a schedule, checks that the data is complete, fresh and uncorrupted, and alerts you the day a backup stops being recoverable. Tests run inside your own infrastructure, so your data never leaves it. Every test leaves evidence you can hand to an auditor.

A backup you haven't restored is a hope, not a backup

Backup jobs report "success" when a file was written. They don't tell you whether that file restores, how long it takes, or whether the data inside is what you think it is.

Silent failures

Dumps that end halfway, a cron job that died months ago, a bucket lifecycle rule that deleted last week's files.

Stale or wrong data

Backing up a replica that stopped replicating, or the staging database by mistake. The file restores fine; the data is old.

Auditors want proof

SOC 2, ISO 27001 (control 8.13) and NIS2 ask you to test restores regularly and keep records. Most teams do it by hand once a year, if at all.

How it works

You run a small RecoverProof runner (one Docker container) next to your backups: on a server, as a Kubernetes CronJob, in CI or in your cloud account. Nothing changes in your backup setup, and no backup data is sent to us.

1

Fetch

The runner pulls the latest backup from S3, Cloudflare R2, Backblaze B2 or Google Cloud Storage using read-only credentials that stay with you.

2

Restore

It restores the backup into a throwaway, network-isolated database on the same major version you run in production.

3

Verify

It runs the integrity and data checks below, then deletes the restored database and the backup copy.

4

Report

Only measurements reach RecoverProof: row counts, timings, pass/fail. We compare them with previous runs, alert you, and build your evidence report.

Restored isn't the same as good

Every test checks your data in layers, each catching a different kind of failure.

  • The file: present, fresh, expected size, decompresses and decrypts cleanly
  • The restore: completes with zero errors; time to restore is measured
  • Physical integrity: every table is read back and indexes are checked for corruption
  • Completeness: row counts per table compared with previous runs
  • Freshness: the newest records in key tables are close to the backup time
  • Schema drift: tables or columns that disappeared
  • Your own rules: optional SQL assertions, like "there is an order from the last 24 hours"
RecoverProof · prod-db · 2026-11-03 04:00 UTC backup s3://acme-backups/pg/2026-11-03.dump ✓ file 2.84 GB (+0.6% vs 7-day avg), 4h old ✓ restore 0 errors, 11m 42s (Postgres 16) ✓ integrity 212 tables read, 418 indexes ok ✗ rows orders: 41,208 (expected ~2.1M) ✗ freshness orders.created_at newest 9 days old ✓ schema no changes ✓ rules 3/3 passed RESULT FAILED: restorable, but data is incomplete Alert sent to #ops and on-call email

Illustrative example of a failed test.

Evidence your auditor will accept

Each month you get a PDF report listing every restore test, its result, measured restore time and any incidents with when they were fixed. It maps to the restore-testing requirements in SOC 2 (A1.3), ISO 27001 (8.13) and NIS2 (business continuity).

Your data stays with you

Backups are restored inside your infrastructure. We never receive backup files, rows or credentials, and never connect to your production database.

You can see what we see

The runner's source code is open for your security team to review, and the exact report it sends is documented. Table names can be hashed if even those are sensitive.

Least privilege

The runner needs read-only access to the backup bucket and an outbound HTTPS connection. No inbound access to your network. Prefer us to run it? A hosted option is available too.

Get early access

We're onboarding a small group of teams first, starting with PostgreSQL pg_dump backups in S3-compatible storage. Early teams get founding pricing and a say in what we build next.

  • Planned pricing from $19 per database per month
  • Daily or weekly restore tests, run in your infrastructure
  • Slack and email alerts
  • Monthly audit evidence report

We'll only email you about RecoverProof. See our privacy policy.

Questions

Which backups are supported?

First: PostgreSQL logical dumps (pg_dump custom, directory, tar or plain SQL, optionally gzip/zstd compressed) stored in S3-compatible storage. MySQL dumps and RDS/Aurora snapshots are next. Tell us what you use in the form; it decides what we build after that.

How large can the database be?

Early access starts with databases up to tens of gigabytes. Because the runner uses your own compute, size mostly depends on the machine you give it; tell us your size.

Can't I just script this myself?

You can, and some teams do. The hard parts are keeping it running, noticing when the script itself silently breaks, building useful data checks and history, and producing evidence an auditor accepts. RecoverProof is that script, maintained and monitored. If you'd rather build it yourself, here's how.

We only use RDS or Aurora. Do we need this?

Probably not first. AWS Backup can already restore snapshots on a schedule and report on it; checking the data inside is left to Lambda functions you write. RecoverProof is built for what that doesn't cover: self-managed databases, providers outside AWS, and independent off-site copies (often kept for ransomware or account-compromise scenarios) that nobody ever tests. It also checks the data itself out of the box and keeps a history to spot anomalies.

Do you get a copy of our data?

No. Restores happen inside your infrastructure, run by the RecoverProof runner. It sends us only measurements: row counts per table, timings, schema fingerprints and pass/fail results, never rows, files or credentials. You can read the runner's code and inspect every report it sends. If you'd rather not run anything yourself, we also offer a hosted option with isolated, in-memory restores that are deleted after each test.

What about encrypted backups?

Yes, that's planned for the first version: you provide a key scoped to decrypt only. With the runner, the key stays in your infrastructure and never reaches us.