Founder's guide

Move off Bubble without starting from scratch

Recommendations from an 8-year Pro Bubbler with 100+ apps built, who has been coding for 15 years. What actually breaks, what it costs, and what you keep.

~18 min read 10 sections
TL;DR

Migrating off Bubble is more of a rebuild than a migration. None of your hard work so far is wasted. In fact it is the strongest reference for a good and reliable rebuild.

Moving from Bubble to custom code costs $4,000 to $15,000. It takes three weeks for a normal app. Five weeks for a complex one.

Your Bubble data can get exported almost intact. Your pages and workflows can't. There is no code to download.

What you really keep is everything you have learned about what your product can and should do.

Advice from 8 years on Bubble - and moving apps off it.

15

years building

100+

products shipped

$10M+

raised by clients

Can you export your Bubble app? Yes. But not as code.

There is an export button on Bubble. Most founders never find it, and it does not do what they hope.

App file management

Bubble apps can contain unused items that make the app bigger over time. Click here to clean unused properties for better performance.


Optimize application
Export application
Import application
Bubble's export button lives under Settings → General → App file management.

Go to Settings, then General, and scroll to the bottom. You can download your whole app as a JSON file. Pages, workflows, settings, all of it. You need a Growth plan or above.

Open that file and you will find a complete description of your app in a proprietary format that Bubble has defined.

You will not find real code here. And that is because...

Your Bubble app is not code. It is a list of settings.

Bubble stores your settings. Someone opens your app. Bubble reads those settings and builds the page, right then. It does this every time.

That JSON file is the list of settings. There is no HTML in it. No JavaScript. Nothing that can just run out of the box.

So if you hand that file to a developer, they can't start your app.

It does let a developer read exactly what your app does though, exactly as specified on the Bubble editor. That difference is the whole point.

What you can take out
  • Your app structure, as that JSON file. Covers pages, workflows, settings, option sets, app texts.
  • Your data. Every table exports to a CSV file.
  • Your uploaded files.
What you cannot take out
  • Anything that runs without Bubble.

This is not Bubble being unfair to you or hiding your IP. There was never a working copy of your app to hand over. The settings and the Bubble runtime are the same product.

app.bubble
{"pages":{"AAW":{"elements":{"bTGyy0":{"properties":
{"height":720,"left":0,"top":0,"width":1080,"zindex":2,
"order":1,"row_gap":32,"use_gap":true,"column_gap":0,
"fit_height":true,"margin_top":100,"margin_left":20,
"margin_right":20,"single_width":false,"margin_bottom":100,
"single_height":false,"min_height_css":"0px",
"horiz_alignment":"flex-start","container_layout":"column",
"container_horiz_alignment":"center"},"type":"Group",
"id":"bTGyM0","current_parent":"AAL.elements",
"default_name":"Group D","elements":{"bTHDD":{"properties":
{"height":293,"left":330,"top":8,"width":420,"zindex":11,
"order":2,"row_gap":24,"use_gap":true,"fit_height":true,
"padding_top":24,"padding_left":24,"single_width":false,
A slice of an exported .bubble file - your app described in Bubble's own format, not runnable code.

We do not use this file for rebuilds, and here is why

Founders sometimes offer it to us. We say no.

That file is written in Bubble's own format. It describes one thing: how somebody chose to build this app inside Bubble. Every workaround. Every compromise. None of it tells us what your product is supposed to do - it only tells us how you decided to implement that on Bubble. And everyone who builds on Bubble has their own style of getting things to work.

But there is a bigger problem. What sits in your Bubble app is often not what you wanted in the first place. It is what you managed to build. Working from that file means copying a copy of your original idea, and each copy loses valuable information.

So we ask you instead. That is what stages 1 and 2 below are for.

One caution before you send that Bubble file anywhere.

Bubble's terms cover what you may do with it. Opinions differ on whether using it to rebuild your app elsewhere is allowed, and none of them quote the actual clause from the TnC. Terms change constantly, so check out the latest ones from Bubble. If a company asks you to hand it over, read the terms first, and take legal advice if the answer matters to you. Our process does not touch that file, so it never comes up.

Some companies will read that JSON file and write code from it. This costs around $1,500 to $5,000.

Be clear about what you get. They blindly copy what your app does today inside Bubble. That includes all the odd things you built to get around Bubble's limits. Those limits are irrelevant when you leave Bubble. And often they lead to unexpected behavior when moved to custom code.

More on why that matters below.

Should you move off Bubble?

Two questions decide this.

Can Bubble do what your product needs? And is your bill a Bubble problem or a build problem?

First, how Bubble charges you

Bubble charges for server work in workload units (WUs). Every search, every page load, every workflow consumes some.

The Growth plan includes 250,000 WUs a month. After that you pay $0.30 per 1,000 WUs.

This bill does not grow with your revenue. It grows with your traffic. And it grows much faster if your app was built inefficiently (which is very often the case).

That last part matters. A high bill is often a build problem, and build problems are cheap to fix.

Signs it is time to leave

1. Your app uses a lot of data or frequent polling.

Think of a dashboard for IoT devices - fleet management for example. Or hardware sending data back to your app every few minutes. Each one of those are API calls that cost workload units. You cannot optimise this away. Bubble just isn't the right place to build this.

2. You move large files.

Bubble caps API responses at 50MB. If your product moves video or large images around, you will meet that limit quickly.

3. You need something Bubble cannot do.

Tasks that run for several minutes or more. Socket connections that stay open. Live updates between users. Complex custom scripts. Cache management. Offline functionality. And a lot more.

4. You are near your storage limit.

Every plan has one. Apps with lots of images or video reach it fast.

5. You cannot control your own injected code.

You can write a plugin for almost anything. But Bubble decides where your code goes and how it runs. You do not.

6. You are tired of fixing the same things.

Bubble apps get slower and messier with age. If you are already spending money or time every month keeping yours healthy, that cost does not go away. It grows. See what it costs to keep running, below.

None of these are bugs. None of them get better if you try harder. This is just how the platform works.

Signs it is too early

1. You want lower running costs, and your app is very inefficiently built.

4 common culprits for high WU consumption:

  1. A search inside the filter of another search.
  2. Long lists shown on one page, with no pagination.
  3. A database designed without thinking about the searches that run against it.
  4. Advanced filters on searches (usually because of #3)

These are fixable inside Bubble, for less than the cost of migrating to custom code. Check this before you do anything else.

2. Your app works but nobody uses it.

Then it is a prototype, whatever you paid for it. Spend the money finding out if people want it.

3. You are happy to maintain it yourself.

Bubble apps get slower and messier as they age. Some founders are fine with that and will fix the basics themselves as they appear. If that is you, stay. The cost section below explains what you are signing up for.

We would rather tell you this now than watch you regret it in four months.

Not sure which one you're dealing with?

A quick app audit tells you whether your bill is a build problem or a Bubble problem, before you spend anything on a rebuild.

Quick app audit

What a rebuild costs and how long it takes

Range Factors that affect it
Rebuild (migration) $4,000 to $15,000 Users you plan for, number of features, outside services, testing
Time to launch 3 weeks normal, 5 weeks complex Same, and testing is the biggest factor
Monthly retainer after launch $300 to $500 How fast you need answers, how complex the app is

Not included: your hosting and database costs after launch, other infrastructure to run it, any paid APIs you use, and anything outside the agreed spec. Running costs are usually much lower post migration.

Complexity is not just the number of pages

Two apps can have the same feature list and cost very different amounts.

What changes the price is how many users you are building for. An app for 5,000 users and an app for 100 million are different engineering problems with the same description.

And the thing that stretches a timeline is not writing features. It is testing them properly, from start to finish.

What it costs to keep running

Most comparisons stop at the build price. The bigger number is what you pay over the next three years.

We have delivered more than 120 projects, on Bubble and on custom code. Custom code costs less to keep running. Here is the mechanism.

The same fix takes longer on Bubble.

A problem that takes thirty minutes to find and fix in code will often take a Bubble developer two to three hours. Four to six times the work, for the same result (except on Bubble, this issue might resurface soon).

Decent Bubble developers charge on average $40 an hour. So the lower rate does not save you money. You are simply buying more hours.

And one fix is rarely one fix.

Here is a real example. An AI feature on a Bubble app of mine stopped working correctly. Took 3 hours to sort out.

Some of that was a Bubble quirk. Bubble will not accept line breaks in the body of an API call sent from a workflow, and that is the sort of thing you find by hunting rather than by reading an error message.

The rest was the expensive part. The API integration needed to be reconfigured for a new use case. That same API was called in several places around the app. Each instance had to be found and changed by hand, one at a time.

In code, that logic lives in one function. You change the function once. Then you check the places it gets called, which takes minutes.

On a small app the difference is small. It grows with every feature you add.

Bubble apps also get worse as they age.

Your database fills up with redundancies (described in the next section). Every new feature adds more of them. Searches that were fine at 5,000 rows are painfully slow at 500,000. Your workload unit bill climbs in months even when your traffic does not.

Nocode is inherently prone to compounding tech debt by definition. You have to revisit the app at an architecture level at very frequent intervals of scale to keep the app efficient.

A custom app is closer to set and forget.

It still needs someone who knows what they are doing, now and then. Now and then is a huge difference.

This is what founders miss when they compare a $5,000 Bubble build against a $5,000 rebuild for example. You are not comparing two prices. You are comparing one price against a price, plus a subscription, plus somebody's hours every month (potentially yours), for as long as the app exists.

About the $50,000 agency quote

If someone quoted you $50,000 and seven months for an app that is not truly complex, please get a second opinion.

That is not what software costs in 2026. Almost all of what founders bring to us gets built well in under $15,000. And these are usually builds for approximately 1,000 to 100,000 users and average complexity. There are outliers of course, so those should be discussed separately.

There is one exception here. Some work carries real safety or massive potential legal liabilities. That spend is fair in such cases, and honestly, that's something you should hire a big agency for.

What gets reused, and what gets rebuilt

Part of your app What happens How difficult
DataExport to CSV, then load into the new databaseEasy for small data. A little more work above ~200,000 rows.
FilesDownload, then upload to new storageEasy, just takes patience
User accountsAccounts move. Passwords cannot.Easy, but your users must re-define passwords
Business logicRebuilt from the specThis is the real work
Pages and designRebuilt, almost always improvedMedium
PluginsReplaced with code or librariesDepends on complexity
Privacy rulesRewritten as database RLS rulesMedium, and the interesting part

Your users will all have to reset their passwords

There is no way around this. Plan for it now.

Bubble scrambles passwords so they cannot be turned back into the original. This is a correct security measure. It also means nobody can read them. Not you. Not Bubble. Not us.

So passwords cannot be exported, because they cannot be recovered.

Anyone who tells you they can move your passwords has not done a migration.

What happens in practice: accounts move across normally. On the day of, each user sets a new password.

So we recommend sending an email to users informing them of this. Write it carefully. A confused user is a user who leaves.

This risk of losing users grows with your user count. It is one of the few honest reasons to move sooner rather than later.

Moving your data: simple under 200k rows, batched beyond it

We have run migrations where the data was small. We exported CSV files, ran one script, and loaded everything in one go. It was smooth because it was small.

For migrations above 200,000 rows it changes. You load in batches, or split the export into smaller files. More time, more care, all depending on the actual nature of the data.

But data is rarely the risky part. If someone tells you data movement is the big risk, they are either working at huge scale or selling you something.

The database problem nobody talks about

In short: a big part of an old Bubble database is not your business at all - it is copies of data, added only to work around Bubble. Custom code lets you delete them.

This is the part that decides whether your rebuild is worth doing. Almost nobody writes about it.

On Bubble, the mess ends up in your database.

Here is why. Say you run a marketplace. You have sellers. Sellers have products. Products have reviews.

Normally a review links to a product. The product links to a seller. To find out which seller a review belongs to, you follow the links.

Bubble cannot do this safely.

Bubble's privacy rules protect one record at a time. A rule on a review can look at that review. It cannot follow the link to the product and then to the seller. So you copy the seller onto the review. Now the rule can see it. Then you do it again. And again. On every table.

A Bubble privacy rule editor showing that rules referencing a linked record - This company's X's Y - cannot grant search access
A Bubble privacy rule can only see the current record. As the note admits, a rule about a linked record ("This company's X's Y") can't grant search access - which is exactly why data gets copied across tables.

There is a second reason too. Searching across two links is slow in Bubble. So you shape your data around your screens instead of around your business.

On Bubble

Privacy rules force a top-down hierarchy - the seller gets copied down into every table below it.

Sellers
name payout details
Products
name seller (copied)
Reviews
rating product seller (copied)
In custom code

Each table links to the next. No copies. The rule follows the link.

Reviews
rating → product
Products
name → seller
Sellers
name payout details
After two years, a large part of your Bubble database is no longer about your product. It is about working around Bubble.

Bubble forces the complexity into your database. Postgres lets it live in your security rules.

In custom code, your security rules are simple to read and change

In short: your security rules move out of your database and into one place you can actually read and test, instead of being copied across dozens of tables.

Postgres is the database foundation most custom apps use. We use Supabase a lot, and they use it as well.

In Postgres, following links is cheap. So you delete the copies. Your database goes back to describing your actual business.

Your security rules move too. In Postgres they sit in one place, next to the data. You can read them. You can test them. You can change one rule instead of hunting through twenty tables.

So you'll see RLS rules replacing Bubble Privacy Rules. Here's an example:

See the actual security rule →
policy.sql
CREATE POLICY "Sellers can view their own product reviews"
ON reviews
FOR SELECT
USING (
  EXISTS (
    SELECT 1 FROM products
    WHERE products.id = reviews.product_id
    AND products.seller_id = auth.uid()
  )
);

Why a clean database is cheaper to maintain

A database that describes your business is cheaper to change.

New features stop requiring you to update the same fact in six places. Bugs stop hiding in copies that fell out of sync. A developer you hire in two years can read it and understand your business in minutes.

This is also why the $1,500 copy service is the wrong tool for most apps. It copies your database exactly as it is today. Every workaround comes with it. You pay to carry Bubble's problems into a system that never had them - and in fact these workarounds lead to bugs and avoidable tech debt.

We do not copy your Bubble app. We rebuild your product.

Your Bubble app becomes the most detailed spec we could ever ask for.

Case study

We built the same app three times. Here's what we learned.

An AI image-processing app. Users upload photos and the app runs AI jobs on them in batches. It has been built three times over the last year.

Built on Time Cost
Version 1Bubble4 months$6,000
Version 2Bubble, rebuilt and redesignedabout 3 months$4,500
Version 3Next.js, Supabase, Vercel3 weeks~$4,000

The honest comparison: ~14 weeks on Bubble v/s 3 weeks with code

Three weeks against three months looks like four times faster. It is not that simple, so here's the math.

Version 3 was quicker partly because two versions already existed. Discovery and design took three days instead of weeks. The design was already settled.

But version 3 also shipped more features than version 2. Admin controls for the AI prompts. Deeper analytics. Caching. Crash logging. Building those in Bubble even with inherent limitations would have added at least two more weeks.

So the fair comparison is about fourteen weeks of Bubble work against three weeks of custom work. Call it five times.

Add up all three versions and the raw number is closer to eleven times. That is also true, and we do not use it, because it counts everything we learned along the way as if it were free.

Running cost drops: ~$625/mo on Bubble vs ~$350 custom code

Bubble version Custom version
Platform$134 plan, plus overages, about $200Vercel $25 and Supabase $25, so $50
Storageclose to the plan ceilingincluded
AI provider~$450~$300
Totalabout $625 a monthabout $350 a month

The AI bill fell while we were testing the custom code version. Better caching, smaller images sent to the model, and a check that only re-runs a job when the first result is poor.

Those two totals move in opposite directions from here. The Bubble bill climbs as usage grows. The custom bill doesn't move much.

A real Bubble bill: Growth Plan $134/mo, 750K workload units $99/mo, 200GB storage $6/mo, total $239.00 a month
A real Bubble bill - the monthly cost climbs with workload, not revenue.

The transition: no downtime, data moved in one shot

About 50 users, in beta at the time.

Version 2 stayed live while version 3 (the custom code one) was built. We moved the domain across. No downtime. Users opened the app the next day and found a better product.

The data was small enough to move in one go. A larger app takes more care, as the section above explains.

How we rebuild apps

8 stages. Three weeks from the first call to your users seeing the new app. Ten of those days are writing code. The other eleven days are what makes it possible to write the app in 10 days.

  1. 1
    Discovery
  2. 2
    Spec & prototype
  3. 3
    Stack
  4. 4
    Foundations
  5. 5
    Build · 10 days
  6. 6
    Transition day
  7. 7
    Support · 2 wks
  8. 8
    Handover
Stage What we do What you do
1. DiscoveryOne call about your product and your businessTalk to us
2. Spec and prototypeWrite the requirements, build a clickable versionReview it, three or four rounds
3. StackChoose the framework, hosting, database and storageNothing
4. FoundationsDesign the database and the serverCreate your accounts together, add us as collaborators
5. BuildWrite the app. Ten days.Help us test once the build is complete
6. Transition dayMove your data, point your domain at the new appInform existing users
7. SupportFix any issues that users find. Two weeks.Test it, tell us
8. HandoverHand over the codebase and set up the tools for youNothing

What this asks of your time.

Not much. About an hour for the discovery call, roughly two hours total across reviewing the prototype and the requirements and giving us feedback, half an hour on a call to set up your accounts, and about two hours of testing near the end. Call it a working day, spread across three weeks.

Stages 1 and 2: from a first call to a clickable prototype

Stage 1. Discovery

One call. We talk about your business as much as your product.

Founders often describe the thing they think they need. It is usually a little different from the thing they want. Finding that difference is the most valuable part of the whole project.

For a rebuild this call can be slightly shorter, because your Bubble app already answers most of the questions.

Stage 2. The spec and the prototype

Two things come out of this stage.

A requirements document. What the app must do. The rules and logic behind the visuals. How payments work. The things that happen behind the scenes.

A clickable prototype. A real HTML file with mock data you open in your browser and click through. Not wireframes. Real text. Real colours. Real branding. The actual screens, with the actual UX. This is a standalone offer too - our spec and prototype package.

A clickable prototype's role switcher overlay, letting you view every screen as a logged-out learner, member, expert, admin and more
Our prototypes ship with a role switcher - view every screen as each kind of user before any production code is written.

For a rebuild we start with your Bubble app's flows and improve it. Most founders build for function first, which makes sense when you are proving an idea - and it is a great reference. This prototype stage in our process is where your product finally gets to look good.

This takes three or four rounds on average. We stop when you say yes, that is it. The spec and prototype get locked in.

Why we spend this long here. Once you have approved a prototype and a spec, there is nothing left to argue about while we build. That is the reason stage 5 only takes ten days. We have a reliable source of truth and everything going forward makes use of it.

Stage 3: choosing your stack

Most of our rebuilds end up on Next.js, Supabase and Vercel. That's because of the nature of most apps we happen to work with, not a blind preference.

Next.js

The framework the app is built with. (What canvas and workflows do on Bubble)

Supabase

The database. It stores your data, handles logins and holds your files. (What database and option sets do on Bubble)

Vercel

Where the app runs. (The actual deployment)

But this stack is where we usually land. We never start with this in mind. Sometimes we land on other options for the stack - Cloudflare, Render, Railway, Redis, etc. There are unlimited options (a blessing and a curse!).

The real question is what happens on your server. Vercel is cheap and fast for apps that do short jobs. If your app runs a task for ten minutes before it finishes, Vercel is the wrong home. Then we look at Railway, Render and their equivalents instead.

Storage follows that same approach. We have used Supabase storage on some builds, Cloudflare R2 on others, AWS S3 on some and so on. What matters is which one fits the rest of your setup.

Your database is usually Postgres, through Supabase. Sometimes we add Redis. Sometimes we use whatever database your host already offers, to keep the number of moving parts low.

We decide all of this against how many users you expect, the nature of your build, and what you can afford to run each month. Then we write it down, before anyone opens a code editor. Sometimes this decision requires us to run some tests and make a final decision with the results we find. But what gets decided here stays decided throughout.

If a studio names your stack before they understand your app, they are selling you their template.

Stages 4 and 5: foundations, then ten days of building

Stage 4. Foundations

Three pieces of work, and they happen together.

  1. Design the database. The tables, the links between them, the security rules.
  2. List every server endpoint. An endpoint is one job the server can do. Save a booking. Send a message. Charge a card.
  3. Map each screen to the endpoints it calls.

This goes back and forth a few times. The screens have to fit the server. The server has to fit the screens. You only find the mismatches by trying.

When this stage ends, we know exactly what every part of the app must do. What goes in. What comes out. What happens when it fails.

This is also where you set up your accounts. Another call, and we set things up together. Supabase, Vercel, GitHub, Stripe, and/or whatever else your app needs. You create every account, and add us as collaborators.

Every line of code we write from here lives in accounts you own. Not ours. This is the point of the whole project and it happens before we write anything.

Stage 5. The build

Ten days. We write the functions, one at a time, against the plan from stage 4.

Shared code gets pulled out the second time we need it, rather than planned in advance. Outside services get connected when the screen that uses them is ready to test. Each one sits behind our own wrapper, so swapping a provider later is a small change instead of a rewrite.

Where AI helps us, and where it does not

The prototype in stage 2 is almost entirely written by AI. It is one HTML file that shows a flow. There are no meaningful architecture decisions inside it. So the speed gain is large and the risk is basically zero.

It makes a difference that we create the prototype rather than have a ready-made one handed to us. The process of creating it lets us understand the product a lot more than just the discovery call.

Stage 5 is different. Every decision that shapes the app is made by a person. The database. The endpoints. The screen map. The error handling. All of that is stages 3 and 4, and all of it is human.

By the time we write code, each function already has a written job. The AI just does the writing. It's doing the typing we would have done manually, and it types far faster than any person we know!

That is the whole difference, and it is why we can say ten days without claiming magic.

We usually have a few days for testing at the end of the build sprint. We run code tests, automated end-to-end testing as well as manual end-to-end testing. It really helps to have you help us with some testing of your own at this point. And we wrap up any loose ends on the build.

Note: this is NOT vibe coding.

Not even close. Vibe coding means describing what you want and asking the AI to decide the architecture and then build it accordingly. Then you do it again the next day, on top of a structure you cannot see or understand. Every change adds problems you have no way to spot.

If your app is going to real users, DO NOT build that way. There are countless horror stories of vibecoded apps that have security and data leaks leading to lawsuits. We want you to build a great business, so let's build assets and avoid potential liabilities!

Stage 6: transition day

Your old app stays live and untouched during the entire build. The new one is built alongside it, on totally separate infrastructure.

Transition day goes like this:

  1. We copy your data across.
  2. We point your domain at the new app.
  3. Your users open it and see a better product. You may get some customer complaints with caching issues for 48h post-transition (which is expected).
  4. Your Bubble app stays up, with its data and logins, until you are happy. Then you delete it.

There is no downtime.

To go back to the old app, you point the domain at Bubble again. That takes minutes.

Your SEO pages carry over.

We keep any SEO pages worth keeping, and we hold the exact same URL paths for them. So after the transition there are no broken links, and you keep your search rankings.

A warning: switch back, and you lose new data.

Going back protects your app. It does not protect the completeness of your data. Anything a user does after the transition only exists in the new app. Go back, and you lose it. You can do a reverse migration though subject to feature compatibility. So it's not all bad, it's just a bit limited.

Your new features will have no history

A rebuild usually adds data your old app never held. New tables, new columns, new fields.

So when a newly transitioned user looks back at their activity on the rebuilt app - a dashboard, a history page, a list of past orders - they may see a gap. Again, that is expected. Every real migration has this. Almost nobody writes about it.

Programmatically filling in all that history is potentially expensive and mostly wasted. Users only care about a small part of it.

A better approach: give people a button to run the new features on the old records they care about. It costs less, it is honest, and it turns a gap into a tour of what is new.

Stages 7 and 8: support, then the handover

Stage 7. Two weeks of support

Real users find things that testing does not. We stay with you for two weeks after you go live.

Small changes are included. Anything that goes well beyond the agreed spec becomes its own mini project, separately quoted and worked on asap.

Stage 8. Handover, and why we set it up this way

There is no big handover moment, because there is nothing to hand over. Your accounts were created at stage 4. Everything has been built inside them from the first line of code.

What happens instead: we connect the codebase to your PC/workstation, then hook up Claude Code or Cursor to it, and show you how to make small updates and push them to the live codebase. Text, colours, button labels, a new marketing page. None of that touches the architecture, and you should not have to pay anyone to do it.

We stay available for the bigger things. Some clients take our retainer, some come back for one maintenance project at a time.

Why this matters. Think about why you are leaving Bubble. Your product lives in someone else's account, on someone else's terms. Swapping that for an agency who holds your code is not an improvement. If you fired us halfway through the build, you still keep everything.

Want to see what your own rebuild looks like?

We'll scope your app, your timeline and your number on one call.

Book a call

When we are the wrong choice

If you want to be the builder

Some founders want to own the product. Some want to build it themselves, every day, for years.

If you are the second kind, we recommend staying on Bubble. As long as you study its best practices properly first.

Bubble gives you good building blocks and leaves you to join them together. That is a skill you can learn without looking at code, and there is a limited number of right answers.

Writing code with AI gives you unlimited options and no guardrails. And you don't have the ability to make the right choices for your specific scenario. The common failure is asking the AI to decide how to build something and then build it, in one step, when you have no way to judge the answer.

It's like the time I hired a marketing head in my early years without knowing what good work looked like. They worked hard and I paid them but the results were basically zero. Avoid that mistake with AI.

A small set of known choices beats an unlimited set of invisible ones.

To be clear, changing text and colours is not building. You get that on custom code too, as stage 8 explains.

If you are building for a million users or more

We are not the right team (yet), and we will say so on the first call. Then we will point you at someone who is.

That is a multi-million dollar engineering project and you deserve a team with experience doing that.

Honestly ranking your options

If you're choosing how to build a product that real people will use, this is my honest recommendation in order of preference:

  1. 1Hire world-class developer(s) into your team.
  2. 2Work with us.
  3. 3Bubble, only after you study its best practices properly.
  4. 4Vibe coding.
  5. 5Bubble's AI features. The worst option, because you are giving instructions to a system you cannot inspect, inside a platform you cannot leave.

Everything after #3 here is a bad idea. I'm still leaving it in the list because you've probably heard of it, and I want to show you where it stands.

No-code did not lose to vibe coding. No-code lost to AI-assisted coding done by people who really know how the app is built.

AI on Bubble

AI runs inside Bubble. The parts of AI that reach beyond what Bubble allows (in red) get cut off.

Bubble
AI
Code
AI + a skilled human

A human who knows the build directs it. Often they make full use of AI, so nothing gets cut off.

Skilled Human
AI
Code
Bubble (nocode in general) is an abstraction over code that is inherently limiting. AI is an abstraction layer that isn't limiting. But AI on Bubble stacks these layers in a way that limits AI to only what Bubble can allow. That's a lot of redundancy. Either use AI or use Bubble.

Common questions

Can I export my Bubble app as code?

You can export it, but not as code. Go to Bubble Settings -> General, and download the JSON (.bubble) file of your pages, workflows and settings, on a Growth plan or above. It contains no HTML and no JavaScript, so nothing in it can run. It describes your app in a format that Bubble understands and can reproduce from. It is not your app.

How long does a rebuild take?

Three weeks from the first call to launch, for most apps. Five weeks for a complex one. The second half this time is spent writing code. The first half is discovery, the prototype and the plan. Then two weeks of support after this period is over.

How much does a rebuild cost?

$4,000 to $15,000, depending on complexity and how many users you are planning for. Many quotes in the market are much higher. If you were quoted $50,000 for a seemingly standard app, get a second opinion.

Will my users lose their accounts?

Their accounts move across. Their passwords cannot, because Bubble scrambles them in a way nobody can reverse. Every user sets a new password on transition day. Plan to inform your transitioning users accordingly.

Is there downtime?

No. Your old app stays live during the whole build. The new one runs beside it. The transition is a domain change, and switching back takes minutes.

What happens to my data?

It moves. Export to CSV, adjust the format, load into the new database. Simple for small datasets. Above 200,000 rows it needs batching and more care. But it's a straightforward process overall.

Should I use Bubble's AI features instead?

We advise against it. You are giving instructions to a system you cannot inspect, inside a platform you cannot leave. When it makes a mistake, that mistake lands inside Bubble and is expensive to undo by hand.

Can I just fix my Bubble app instead?

Often, yes, and you should check before spending on a rebuild. Most surprise bills come from nested searches, long unpaged lists and a badly shaped database. But if your usage comes from machines rather than people, fixing will not help. Fixing it also keeps you on a platform you cannot see inside and cannot leave easily. You are spending money to improve something you do not control. So fixing it is effectively just delaying an inevitable rebuild.

Ranjit Bhinge, founder of Blur Studio

I've spent 15 years learning what breaks, so you don't have to.

8 years on Bubble 100+ products built 120+ projects delivered 15 years coding

I'm Ranjit. I've spent eight years building on Bubble and fifteen years writing code, across 100+ products. I know exactly where Bubble is the right tool and where it quietly starts working against you.

I've moved a lot of apps off Bubble and onto custom code the founder actually owns. Faster, more secure, and far cheaper to run. If you're weighing that move, I'll give you a straight answer on whether it's worth it for you - even when the answer is "stay on Bubble for now".

Wells

Wells

Founder, July

Janvi

Janvi

Founder, Taboo Venture Studio

Sam

Sam

Founder, Pro Studio Time

Kelsey

Kelsey

Founder, Evolvique

D

Donna

Founder, Ellustro

R

Robert

Founder, BestEverPics

T

Troels

Founder, Didu

N

Ness

Founder, Elysian Blue

Chris

Chris

Founder, Zuka

Ricky

Ricky

Founder, Don't Bother The Bride

D

Dawn

Founder, Styling Pearls

J

Jon

Founder, Adralis

D

Dave

Founder, Readi-Watch

Thinking about moving off Bubble?

Get a straight answer on whether a rebuild is worth it for you - and what it would cost.

Book a rebuild call

Get your quick app audit

Tell us where to send it. We'll be in touch shortly.