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: a restore hands you pointers to files that no longer exist.
DISASTER RECOVERY FOR SUPABASE
Database restores only bring back storage.objects metadata — the actual files live elsewhere. BackupDrill snapshots your database and Storage files together (Storage joins once you add its S3 keys) into your own bucket, then runs restore drills that prove your database comes back.
Free plan with weekly backups and a restore drill, or subscribe from $19/month — a fifth of Supabase PITR.
$ backupdrill drill --verify-all-files --check-cmd …
✓archive sha256matches manifest ✓
✓storage files250/250 sha256 ✓
✓temp postgres 17provisioned
✓pg_restore13 tables, 1,495,250 rows
✓table count13 = manifest, none missing ✓
✓populated tablesall restored non-empty ✓
✓app checksexited 0 — invariants hold ✓
RESULT: RESTORABLE ✓restore time 2.3s
report written → hosted drills email it
Why this exists
Restoring a Supabase database only restores storage.objects — the metadata. The actual files live in a separate object store: a restore hands you pointers to files that no longer exist.
Pro-plan backups keep 7 days, can’t be downloaded on the current physical backup process, and vanish with the project. The official fix — PITR at $100/month per project — still skips Storage files.
Truncated dumps, schemas that no longer restore, a snapshot that quietly shrank 40% — you only find out during a real outage. Your first restore test shouldn’t be the day you need it.
How it works
Click Connect Supabase and pick the project — we create a dedicated read-only backup role in it. No database password, and we never ask for your service_role key. Prefer not to authorize? Run a three-line SQL snippet instead. Your first backup starts within minutes.
pg_dump plus a checksummed manifest — and a full Storage file sync once you add its S3 keys — written straight to your own S3, R2, or B2 bucket. Bytes stream through us; nothing lands on our disks.
A temporary Postgres restores your latest snapshot and verifies it against the manifest — checksums, table counts, populated tables restored non-empty, plus sampled sha256 checks on Storage files when the snapshot includes them. You get a graded report with the measured restore time; failures or >30% size drops alert you within 15 minutes.
Open source
The exact backup engine the hosted service runs is an open-source CLI. Your disaster-recovery tool shouldn't be a black box.
npm install -g backupdrill
backupdrill backup # your database (+ Storage files, once configured) → your bucket
backupdrill drill # prove the latest snapshot actually restoresDIY covers one-off backups. The hosted service runs this same engine on a schedule, drills every restore, and emails you when something is wrong — nothing for you to babysit.
Pricing
Supabase PITR: $100/month per project, Storage files not included.
FIRST MONTH $1full price from month 2
Any monthly plan, first subscription · cancel anytime · or stay on the Free plan with no card at all
For side projects
$0/month
For products with real users
$19/month
First month $1, then $19/month
For small teams
$49/month
First month $1, then $49/month
For client work
$99/month
First month $1, then $99/month
Every plan: database + Storage files in one snapshot (Storage joins once you add its S3 keys), to your own S3/R2/B2 bucket, with failure and size-anomaly email alerts. Snapshot history counts console records — objects in your bucket stay yours (add a lifecycle rule to expire old ones).
Annual billing: pay for 10 months.
FAQ
In your own S3, R2, or B2 bucket — you bring the bucket, you hold the keys. During backups the bytes stream through our workers and are never written to our disks; a restore drill downloads your snapshot into an isolated temporary sandbox that is destroyed as soon as verification finishes. 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 files together — Storage joins the same snapshot once you add its S3 keys — starting at $19/month. If you need sub-24h recovery points, run both: they solve different problems.
For backups and drills: click Connect Supabase and authorize two scopes on the organization you pick — Database (read + write) and Projects (read). We use them once, to list your projects and create a read-only backup role named backupdrill_… (with BYPASSRLS, so pg_dump can read RLS-protected tables); the authorization token is held only in a short-lived browser cookie (at most 10 minutes), deleted after the connection is set up successfully (otherwise it expires within 10 minutes), and never persisted on our servers; only that role’s connection string is stored, sealed-box encrypted. Prefer not to authorize? Run the same three-line SQL yourself, or paste a Session Pooler connection string. We never ask for your service_role key or dashboard access. Recovery is the one exception: uploading Storage files back into a fresh project needs that project's service-role key, which you supply at restore time and we never store. Credentials are stored sealed-box encrypted.
We download your latest snapshot into an isolated temporary sandbox, provision a temporary Postgres, restore into it, and verify it against the backup manifest: archive sha256, pg_restore completes, table count matches with no missing tables, populated tables restored non-empty, and — when the snapshot includes Storage files — sampled sha256 checks on them. We measure the wall-clock restore time, then destroy the sandbox and the instance. The report lands in your inbox.
The Free plan, with no credit card and no time limit: one project, weekly backups into your own bucket, three snapshots of console history, and one restore drill on your first backup — the same drill paid plans run, so you see the proof before you decide anything. Every snapshot stays in your bucket whether you ever subscribe or not. Paid plans add daily backups, a restore drill every week, longer history, and more projects; your first monthly subscription is $1 for its first month, then full price (Solo $19/month, Team $49/month, Agency $99/month). Cancel anytime.
Sign up at app.backupdrill.com — no credit card. Click Connect Supabase, pick the project, and point us at your own S3, R2, or B2 bucket — no database password needed (that path needs Postgres 16 or newer; older projects can paste a connection string instead). Your first backup runs automatically within a few minutes of connecting, and the free restore drill follows it.
Backups to your own bucket, restore drills on a schedule, and a report that proves your data comes back. Start on the Free plan — no credit card — and see a drill pass before you decide anything.