afterbuild/ops
ERR-645/Bubble · Performance
ERR-645
Why is my Bubble app slow and why are capacity units exploding?

Why is my Bubble app slow and why are capacity units exploding?

Last updated 18 April 2026 · 11 min read · By Hyder Shah
Direct answer

Bubble apps slow down and capacity bills spike for three predictable reasons: workflows that run on every page load and should be deferred or batched, Do a Search queries without indexes or tight constraints that scan every row in a growing table, and repeated API Connector calls for data that rarely changes. The fix is measurable: audit the workflow list, rank by capacity consumption, add indexes where Bubble lets you, cache repeated calls, and batch analytics beacons. Typical results: 3×–10× speedup and a 30–60% capacity bill reduction in a 2-week optimization pass.

Quick fix for Why is my Bubble app slow

Start here

Step 1 — Open the capacity graph and find the hot workflows

Bubble’s app metrics show capacity consumption over time. Open the last 30 days, sort by workflow, and list the top 10 capacity consumers. These are your optimization targets. Most apps have two or three workflows that dominate the list — fix those and the bill drops measurably.

Deeper fixes when the quick fix fails

  1. 02

    Step 2 — Audit every Do a Search for constraints and indexes

    For each Do a Search in a hot workflow, verify: (a) there’s at least one constraint narrowing the scan to <1,000 rows, (b) the constraint field is a good candidate for an index. In Bubble, add database constraints on high-cardinality search fields — user IDs, date ranges, status enums. Uncontrained searches on growing tables are the #1 performance killer.

  2. 03

    Step 3 — Defer or batch analytics and beacon workflows

    Most page-load workflows don’t need to run synchronously. Identify workflows whose output isn’t needed to render the page (analytics beacons, last-seen timestamps, feature-flag refreshes). Move them to backend workflows fired by a single “page view” event, batched together. This alone cuts capacity on trafficky pages by 30–50%.

  3. 04

    Step 4 — Cache repeated API Connector calls

    For any external API call returning data that changes slower than your page-view rate, cache the result. Bubble lets you store API responses in a data type with a timestamp; read from the cache, refresh asynchronously when the timestamp is stale. A 5-minute cache on a call that’s made 400 times per minute cuts the load by 99%.

  4. 05

    Step 5 — Move heavy work to scheduled off-peak workflows

    Reports, data exports, bulk recalculations — none of these should run during peak traffic. Bubble supports scheduled workflows that run at specified times. Move heavy periodic work to 2am user-local-time, and serve cached results during the day.

  5. 06

    Step 6 — Measure after, and set up a capacity alert

    Re-run the capacity graph after each change. Expect the hot workflows to drop out of the top 10 and the overall bill to decrease 30–60%. Set up a capacity alert that emails you if usage spikes above your baseline — that’s your early warning for the next regression.

When to upgrade capacity vs. migrate

If after a full optimization pass your capacity bill is still >$1,000/month and still climbing, the decision shifts from “optimize” to “migrate vs. upgrade.” Higher-tier Bubble plans are expensive; a Next.js + Postgres stack on Vercel + Supabase usually costs $100–$500/month at the same traffic level. See our migration comparison to see the numbers at your scale.

Why AI-built apps hit Why is my Bubble app slow

Capacity units are Bubble’s unit of compute — a composite of CPU, memory, and concurrency allocated to your app. Every workflow tick, every Do a Search, every API Connector call, and every page render consumes capacity. At low traffic, capacity is plentiful and cost is a flat monthly fee. As traffic scales, capacity consumption grows non-linearly if workflows aren’t optimized, and the cost curve catches founders by surprise.

The three root causes:

Workflow bloat.Every element on a page can trigger workflows on load. Analytics beacons, feature flag checks, role lookups, notification counts — each is cheap alone but expensive in aggregate. A typical un-optimized Bubble page runs 15–40 workflows on every render; the same page after optimization runs 3–6.

Unindexed search. Bubble lets you search any field on any data type. Without tight constraints (filters that narrow the scan to a small subset of rows), a Do a Search walks every row every time. A table that was fast at 1,000 rows crawls at 100,000 rows.

Repeated API calls.Every page that calls an external API through Bubble’s API Connector pays for that call in capacity and in latency. Data that changes hourly is often fetched every page load — which is almost always wrong.

The dashboard loaded in 8 seconds. Customers were complaining. Turned out every load ran five nested searches the same dashboard did. Cache one, 380ms.
Afterbuild Labs rescue log, February 2026

Diagnose Why is my Bubble app slow by failure mode

The capacity graph will tell you where the cost is. The workflow editor will tell you why. The table below maps what you’re seeing to the specific fix.

SymptomRoot causeFix
Page loads slowly for everyoneWorkflow bloat on page loadDefer non-critical workflows
Search page slow as DB grewDo a Search without tight constraintsAdd constraints; add database index
Capacity bill spiked this monthOne workflow running on a loopFind the hot workflow in capacity graph
API-backed pages slowExternal API called on every viewCache API result; refresh async
Background jobs crowding trafficScheduled workflows running in peak hoursMove heavy jobs off-peak
Same workflow spiking unpredictablyN+1 query inside workflowRewrite to batched search

Related errors we fix

Still stuck with Why is my Bubble app slow?

Emergency triage · $299 · 48h turnaround
We restore service and write the root-cause report.

If your app is slow and the bill is climbing:

  • Capacity spend is above $500/month and still growing
  • Page load times exceed 3 seconds for any critical page
  • Customers are complaining about slowness
  • You're considering an expensive Bubble plan upgrade
start the triage →

Why is my Bubble app slow questions

What are Bubble capacity units?+
Capacity units are Bubble's measure of compute — CPU, memory, and concurrency combined. Each workflow, search, and API call consumes capacity. Your plan allocates a base amount; going over costs more. Most performance work is really capacity optimization.
Why did my Bubble capacity bill triple this month?+
One of three things usually: (1) a traffic spike (marketing push, organic growth), (2) a workflow regression deployed in the last release that now runs more often than intended, (3) a growing table hit a size threshold where an unindexed search became expensive. Capacity graph will tell you which.
How do I add an index in Bubble?+
Bubble calls them 'database constraints' rather than indexes in the traditional sense. In the data type editor, add constraints on fields used in searches. For high-cardinality fields (user ID, date, status), constraints produce near-index performance. See Bubble's docs for current options.
Can I cache API results in Bubble?+
Yes. Create a data type to store cached results with a timestamp field. Read from the cache; if the timestamp is older than your TTL (e.g., 5 minutes), fire an async backend workflow to refresh. This is the single highest-impact optimization for API-heavy apps.
Should I upgrade my Bubble plan or optimize?+
Optimize first. Upgrading without optimizing is paying more for the same inefficiency. Our capacity optimization typically pays for itself in 2–4 months of reduced capacity spend. Upgrade only if after optimization you still need more headroom.
At what point is migrating off Bubble cheaper than staying?+
When monthly capacity spend exceeds $500–2,000 with no proportional revenue, or when a dedicated engineer can't further reduce it. A Next.js + Postgres stack typically costs $100–500/month at the same traffic. Migration ROI breaks even in 8–18 months at that scale.
Next step

Ship the fix. Keep the fix.

Emergency Triage restores service in 48 hours. Break the Fix Loop rebuilds CI so this error cannot ship again.

About the author

Hyder Shah leads Afterbuild Labs, shipping production rescues for apps built in Lovable, Bolt.new, Cursor, Replit, v0, and Base44. our rescue methodology.

Why is my Bubble app slow experts

If this problem keeps coming back, you probably need ongoing expertise in the underlying stack.

Sources