How to Export Your Data from Bubble

How to export every record, file and user from Bubble into your own database. CSV exports, the Data API's 100-record pages, relationships and reconciliation.

2 min readUpdated

Bubble won’t export your app, but it will let you export your data. Since that’s the part your customers actually care about, it’s worth doing carefully.

This is Step 5 of the full Bubble migration guide.

What you can export, and what you can’t

Asset How it comes out Watch out for
Records CSV per data type from the Data tab Only one type at a time
Records (large) The Data API, 100 per request with a cursor Must be enabled per data type
Files Download from their hosted URLs URLs in your data still point to Bubble
Users User records with your custom fields Password hashes can’t be exported
Relationships As Bubble unique IDs in each record You rebuild them as foreign keys
Workflows & logic Not exportable Rebuilt as code

Option A: CSV from the Data tab

For each data type, open Data → App data, select all records and export as CSV. It’s simple and works well for small and medium tables. Two cautions:

  • References to other types come out as Bubble unique IDs. Keep them. You’ll need them to rebuild relationships.
  • List fields come out as comma-separated values in a single column. Split them into join-table rows during transformation.

Option B: The Data API

For large tables, or to script repeatable exports, enable the Data API for each data type in Settings → API. Then page through each type with the cursor and limit parameters. Bubble returns at most 100 records per request, so a 250,000-row table means 2,500 requests. Throttle politely, and log the cursor so you can resume if something fails.

Keep API tokens out of your code and revoke them once the migration is done.

Rebuilding relationships

Load your tables into staging tables that keep Bubble’s unique ID in a bubble_id column. Then:

  1. Insert parent tables first and record the mapping from bubble_id to the new primary key.
  2. Insert child tables, swapping each referenced bubble_id for the new key.
  3. Expand list fields into join tables.
  4. Add foreign key constraints last, so any broken references show up as errors, not silent data loss.

Files

Every file field holds a URL to Bubble’s file storage. Download each file, upload it to S3 or R2, and write the new URL back. Keep an old-URL → new-URL table so the job is safe to re-run.

Users

Export the User data type like any other, including emails, roles and your custom fields. Passwords stay behind, so plan a welcome email with a reset or magic link and keep each user’s old ID linked to their new account.

Prove nothing went missing

Check How
Row counts Every data type, Bubble vs. new database
Relationships Query for orphaned foreign keys
Lists Compare list lengths for a sample of records
Files Count files, then open a random sample
Users Sign in with test accounts of every role

Run the final export during a short write freeze, so the last sync is complete before you switch the domain.

Ready to migrate off Bubble?

Tell X & Company about your app. You’ll get a straight answer on scope, timeline and cost, and a plan to own your whole stack.