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.
After your trial: keep the Free plan, 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.
30 DAYS FREE$1/month × 2 monthsfull price
Full features during the trial · no credit card · your first 3 months cost $2 total
For side projects
$0/month
For products with real users
$19/month
First 30 days free, then $1/month for 2 months
For small teams
$49/month
First 30 days free, then $1/month for 2 months
For client work
$99/month
First 30 days free, then $1/month for 2 months
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.
Every new account gets 30 days of the full feature set — daily backups, weekly restore drills, and PDF reports — with no credit card. When the trial ends, an unsubscribed account simply moves to the Free plan: nothing is charged, and every snapshot stays in your own bucket. If you subscribe, your first monthly subscription is $1/month for the first 2 months, then full price (Solo $19/month, Team $49/month, Agency $99/month). Subscribing during the trial never starts billing early — your remaining free days stay free — and your selected plan's features apply from the moment you subscribe. Cancel anytime.
Sign up at app.backupdrill.com — no credit card, and your 30-day full-feature trial starts automatically. 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.
Backups to your own bucket, restore drills on a schedule, and a report that proves your data comes back. Start with 30 days of the full feature set — no credit card, and the Free plan is yours to keep after.