Storage files don’t come back
Restoring a Supabase database only restores storage.objects — the metadata. The actual files live in a separate object store, so a restore hands you a bucket index full of pointers to files that no longer exist.
DISASTER RECOVERY FOR SUPABASE
Database restores only bring back storage.objects metadata — your actual files live elsewhere. BackupDrill snapshots your database and Storage files into your own bucket, then runs scheduled drills that actually restore your database — proof, not hope.
First 30 on the list use the private beta free for 4 weeks. From $19/mo at launch — Supabase PITR is $100/mo per project.
$ backupdrill drill --project acme-prod
✓snapshot fetcheds3://acme-backups/2026-07-03
✓temp postgres 16provisioned
✓pg_restore142 tables in 8m 12s
✓row counts1,482,304 = manifest ✓
✓sampled checksums500/500 primary keys ✓
RESULT: RESTORABLE ✓restore time 11m 04s
report sent → email · slack
Why this exists
Restoring a Supabase database only restores storage.objects — the metadata. The actual files live in a separate object store, so a restore hands you a bucket index full of pointers to files that no longer exist.
Pro-plan backups keep 7 days, can’t be downloaded to your own infrastructure, and disappear with the project. The official fix is PITR at $100/month per project — and it still doesn’t cover Storage files.
Truncated dumps, a schema that no longer restores, a snapshot that quietly shrank 40% — you only find out during a real outage. The first time you test a restore shouldn’t be the day you need it.
How it works
Paste your Session Pooler connection string. We give you the exact SQL to create a read-only backup_reader role — we never ask for your service_role key. First backup completes in minutes.
Daily on paid plans, weekly on Free: pg_dump (custom format) + a full Storage file sync + a manifest with row counts and checksums — written straight to your own S3, R2, or B2 bucket. Bytes stream through our workers and never land on our disks.
We spin up a temporary Postgres, run a full restore, and verify table counts, row counts, and sampled checksums against the manifest — weekly on Team and Agency, monthly on Solo. You get a graded report with the measured restore time. Failures, >30% size drops, or slow runs alert you within 15 minutes.
Planned pricing
Supabase PITR: $100/mo per project, Storage files not included. Final numbers may shift before launch — waitlist members hear first.
For side projects
$0/mo
For products with real users
$19/mo
For small teams
$49/mo
For client work
$99/mo
Annual billing: pay for 10 months. Extra capacity: $5 per 10 GB per project.
FAQ
In your own S3, R2, or B2 bucket — you bring the bucket, you hold the keys. Backup bytes stream through our workers and are never written to our disks. If you cancel tomorrow, every snapshot is still yours.
PITR gives you point-in-time recovery for $100/month per project — and still doesn’t cover Storage files. We sell verified daily snapshots of your database and Storage together, starting at $19/month. If you need sub-24h recovery points, run both: they solve different problems.
A read-only backup_reader role (we give you the SQL to create it) and your Session Pooler connection string. We never ask for your service_role key or dashboard access. Credentials are sealed with envelope encryption.
We provision a temporary Postgres, restore your latest snapshot into it, verify table counts, row counts, and sampled checksums against the backup manifest, measure the wall-clock restore time, then destroy the instance. The report lands in your inbox or Slack.
Private beta opens soon. The first 30 people on the waitlist get the private beta free for 4 weeks — in exchange for honest feedback. We’re also open-sourcing our backup CLI (MIT) — the cloud service adds scheduling, drills, alerts, and reports on top.
Join the waitlist for the private beta. The first 30 get it free for 4 weeks — in exchange for honest feedback.