How we processed 60,000 records through an API in Bubble (no recursion, no backend workflows)

Most Bubble apps break the moment you try to process large lists.

You hit:

• API limits (100 items per request)

• Recursive workflows

• Backend scheduling chains

• Timeouts and fragile logic

We ran into this exact problem with a client:

:backhand_index_pointing_right: ~60,000 records

:backhand_index_pointing_right: External API allowed max 100 items per request

:backhand_index_pointing_right: Needed reliability, retries, and visibility

So we built Batchy Runner.

Use case:

Instead of looping workflows or scheduling backend jobs, Batchy Runner:

• Splits large lists into safe batches (e.g. 100 items)

• Sends requests sequentially from the browser

• Respects rate limits with configurable delays

• Retries failed batches automatically

• Exposes progress, current batch, and completion events

• Works entirely client-side

Result

:backhand_index_pointing_right: 60,000 records processed cleanly

:backhand_index_pointing_right: No recursive workflows

:backhand_index_pointing_right: No backend scheduling

:backhand_index_pointing_right: No crashes

:backhand_index_pointing_right: Full progress tracking in the UI

What surprised us most

The solution wasn’t “more backend logic”.

In Bubble, performance at scale often comes from processing smarter before you overload workflows or the database.

If you’re dealing with:

• Large lists (10k–100k+)

• APIs with strict request limits

• Imports, syncs, or bulk operations

Batchy Runner changes what’s possible — without making your app fragile.

Demo

Editor

Bubble verified and approved that Plugin at Hyper Speed.

Does the plugin expose api keys client side when running, either for the API provider fetching from or the bubble app saving to DB?

2 Likes

Batchy Runner does not expos or log your keys on its own, and it does not save anything to Bubble’s database. However because it runs in the user’s browser, any headers you send (including API keys or tokens ) are accessible via browser dev tools, exactly the same as Bubble’s built-in API Connector (client-side) or any frontend JS.

If your API requires a secret key that mus never be exposed , the correct pattern is still to proxy through a backend endpoint. Batchy Runner is ideal for APIs that are designed to be called client-side (scoped tokens, public keys, user-level auth…).

What are you doing with processed data, just keeping it in browser or saving to bubble db?

Batchy Runner processes everything in the browser only and sends it to the external API. It does not write to the Bubble database, and it does not persist results unless the developer explicitly chooses to do so in workflows. The only thing optionally exposed is last_response, which is meant for debugging or inspection and is overwritten on each batch. If a dev wants to save results to Bubble, they do it intentionally in a “Batch Success” or “Batch Finished” workflow . nothing is saved automatically or implicitly.