Supabase backup options: what each one covers and misses
Supabase includes daily database backups on paid plans and point-in-time recovery as an add-on. The free plan has neither. No database backup contains your Storage files or Edge Functions, so a complete backup needs a separate copy of those. Below is every option, what it covers and what it leaves out.
What Supabase includes per plan
Supabase makes the daily backups itself and keeps them with the project. They are database backups: Storage metadata is included, the files themselves are not.
| Plan | Daily backups | Point-in-time recovery |
|---|---|---|
| Free | None | Not available |
| Pro | Kept 7 days | Add-on, $100 to $400 a month |
| Team | Kept 14 days | Add-on, $100 to $400 a month |
| Enterprise | Kept up to 30 days | Add-on, $100 to $400 a month |
From the Supabase backup and PITR documentation. PITR also needs at least a Small compute add-on. database backup documentation
Downloading a backup from the dashboard
Daily backups are listed in the dashboard under Database, then Backups. Newer projects use physical backups, and Supabase documents that those restore inside the platform but cannot be downloaded as a file.
For a copy you can keep somewhere else, you need a logical export: pg_dump or the Supabase CLI.
How to download a Supabase database backupPoint-in-time recovery
PITR restores the database to any second within its retention window, with a worst-case recovery point of about two minutes. It costs about $100 a month for 7 days, $200 for 14 days and $400 for 28 days, on top of the plan and compute. Like the daily backups, it covers the database only and restores into the same project.
Supabase PITR pricing, explainedBack up yourself with the Supabase CLI
This is the free route, and the one Supabase recommends for projects on the free plan. Export roles, schema and data as three files, with the session pooler connection string in an environment variable:
supabase db dump --db-url "$SUPABASE_DB_URL" -f roles.sql --role-only
supabase db dump --db-url "$SUPABASE_DB_URL" -f schema.sql
supabase db dump --db-url "$SUPABASE_DB_URL" -f data.sql --use-copy --data-onlyRun it on a schedule, store the files outside Supabase and alert when a run is missing. The export covers the database and Auth. It does not contain Storage files.
What no database backup contains
- Storage files
The database keeps a row for each file, not the file itself. After a database-only restore, the Storage UI lists every file while every download fails. Copy the bytes separately through the S3-compatible endpoint.
Do Supabase backups include Storage files?- Edge Functions
Function code lives outside Postgres. If you deploy from git with CI, your repository is the backup. If you deploy from the dashboard or a tool such as Lovable, the deployed version is the only copy.
How to back up Supabase Edge Functions- Settings and secrets
Bucket settings, Auth configuration and API keys live in the platform, not the database. Secret values cannot be exported at all, so keep them in your own secret store.
Every option side by side
| Component | Supabase backups / PITR | Your own backup job | ReviveDB |
|---|---|---|---|
| PostgreSQL database | Included | Usually included | Restored and compared |
| Auth users and identities | Included | Depends on dump scope | Provider-specific restore |
| Storage object bytes | Not in database backups | Separate job or add-on | Included and hash-verified |
| Edge Function bundles | Separate from database backup | Separate job or add-on | Bundles captured and verified |
| Project configuration | Separate recovery work | Usually exported separately | Bucket and Function settings |
| Restore-tested automatically | Not reported | Depends on setup | Restored and compared |
| Copy survives project deletion | Does not survive project deletion | Depends on setup | Included |
| Secret values | Manual | Depends on setup | Checklist generated; values never copied |
Supabase documents that its database backups exclude Storage object bytes and that restoring to a new project requires separate work for several platform components. See the official database backup documentation and new-project restore documentation.
Test the restore, not the backup
A backup job that finishes without errors proves a file was written. It does not prove the file restores. Check it regularly, or after every backup if you can automate it:
- Restore into an empty, isolated database, with errors treated as fatal.
- Compare tables, row counts and Auth users with the source.
- Download a few Storage files through the restored project.
- Time it, so you know how long a real recovery takes.
Which option fits your project
- A side project on the free plan
- Run the CLI export weekly and copy Storage with aws s3 sync. It costs nothing except the time to keep it running.
- A paid plan, with only database data
- The daily backups cover it. Add PITR when losing up to a day of writes is not acceptable.
- Users upload files
- Add a separate copy of Storage, whichever tool makes it. Neither the daily backups nor PITR include files.
- Project deletion is a risk you plan for
- Supabase removes a project's backups when the project is deleted. Keep a copy outside Supabase that includes Storage and Edge Functions, and test that it restores.
How ReviveDB covers the whole project
ReviveDB runs these steps for you. Each run makes one recovery point with the database and Auth, Storage files and Edge Functions, stored in the EU. It is free for one project.
- 1
Back up each project component
Database, Storage files, Edge Functions in one pass.
- 2
Check the database, Storage files and Edge Function bundles
Restore and compare the database; hash-check files and function bundles.
- 3
Recover in the right order
Safety backup first, then database and Auth, Storage and Edge Functions.
Authorize the project with Supabase OAuth
OAuth creates and removes a temporary Postgres login for each backup. Supabase labels that action Database write; the backup login itself is read-only. Your production password is not used.
Read the implementation notes- Created per run
- A random password expires after one hour. Cleanup removes the role after every run.
- Complete read access
- The backup role reads every table, including Auth and RLS-protected rows. It cannot write, create roles, replicate or act as superuser.
- Verified before setup
- Onboarding checks table access and a schema-only dump before accepting the project.
Supabase backup guides
Supabase backup questions
- Backup verification
- Disaster recovery plan
- Security
- Set up Supabase backups
- Supabase PITR costs
- Back up Supabase Storage files
Start with a checked backup of one project
One Supabase project, up to 1 GB, no card required.