pgProof

Restore-tested Postgres backups

A backup is a hypothesis.
A restore is proof.

pgProof backs up your Postgres on schedule, then restores every backup into a disposable environment and verifies it — tables counted, constraints checked, RLS policies present. You get the proof, not a promise.

works with : Supabase · Neon · Railway · Render · self-hosted (Coolify, Dokploy, any VPS)

pgProof weekly report — Mon 09:00 · 3 projects
✓ acme-prod     restored in 94s · 42 tables · 1,184,302 rows · FK valid · 17 RLS policies · sha256 archived
✓ side-project  restored in 12s · 9 tables · 48,110 rows · FK valid · sha256 archived
▲ client-cms    restore OK · probe query #2 returned 0 rows (expected > 0) — check orders table
next purge: 4 backups (retention 30d) · storage 2.1 GB · all dumps client-key encrypted

Why this exists

0backups included on Supabase's free plan — and projects pause after 7 days of inactivity
> 60–80%of new Supabase and Neon databases are created by AI agents — no constraints, no backups, no tests
Neveris the typical answer to "when did you last test-restore your cron pg_dump?"

Backup tools ship dumps to a bucket and stop there. Nobody finds out the dump was broken until the night they need it. pgProof finds out the same day, every time.

Every backup goes through the drill

  1. Dumppg_dump on your schedule — schema, data, roles, grants. On Supabase: RLS policies, auth users, storage metadata included.
  2. Restoreinto a disposable container matching your Postgres major version (13–17).
  3. Verifytables and rows counted against the manifest, FK constraints validated, sequences coherent, extensions present.
  4. Probeyour own sanity queries run against the restored copy — "SELECT count(*) FROM orders" should never be zero.
  5. Report & destroyproof lands in your inbox, the container is destroyed. Nothing persists outside your encrypted storage.

Two ways to connect

managed postgres

Connection string

Paste a connection string for Supabase, Neon, Railway, Render or any reachable Postgres. Read-only role script provided, static egress IPs published for your allowlist.

self-hosted

Push agent

A single container on your VPS (one-click on Coolify or Dokploy). Dumps and encryption happen on your box, pushed to your own S3/R2/B2 bucket. Your credentials never leave your server.

Planned pricing

FreeSolo — $9/moMaker — $19/moAgency — $49/mo
1 project
weekly backup
monthly drill
3 projects
daily backups
drill on every backup
probe queries
10 projects
hourly backups
90-day retention
your own bucket
40 projects
per-client reports
API access

Project pools are swappable — a dead side project frees a slot, no cancellation dance. Storage billed at cost.

Get early access

Launching soon. Tell us what you run — the waitlist shapes what ships first, and early-access pricing is locked for life.

No spam. One email when the beta opens, one weekly build-log if you opt in.

Questions you should ask a backup service

Who can read my dumps?
Nobody, including us. Envelope encryption with a per-customer key; dumps stream to storage without touching our disks. Self-hosted mode never sends us credentials at all.
What access do you need?
A read-only role, created by a script you can read. Never a superuser. Our egress IPs are static and published for your allowlist.
Is this point-in-time recovery?
No. PITR is your host's $100/month product. pgProof is scheduled logical backups — up to hourly — with proof that each one actually restores. For most indie projects that is the protection that matters, at a tenth of the price.
What if a drill fails?
You get an immediate alert with the diagnosis (truncated dump, missing extension, version mismatch) and the last verified backup stays clearly marked. A failed drill today beats a failed restore the night you need it.