Money apps

Base44 Stripe Payments

Short answer: selling on a Base44 app splits your money system in two. Your products, prices, customers, subscriptions, and payout history live in Stripe — and were never inside Base44, so they are not trapped. But the wiring that makes payments work — the webhooks, the live API keys Base44 created for you, the backend logic that grants access when someone pays — lives in Base44 and does not export. Migrating a money app is a re-wiring job, not a data rescue. This page maps what moves on its own, what breaks, and the order to rebuild it in.

The setup

How Base44 + Stripe actually works

Stripe on Base44 is set up the way everything on Base44 is set up: by asking the AI chat. You tell the chat to set up payments, click Install Stripe, and Base44 wires up a Stripe integration for your app in a test environment first — no real charges while you build. You test the checkout with Stripe's test card from Dashboard → Integrations → Stripe (“Try a test payment”), and only when the flow works do you claim your sandbox by connecting your own Stripe account or creating a new one (“Claim & Go Live”). Base44's own docs walk this flow step by step, and it is genuinely smooth: most builders go from no payments to a working test checkout in one sitting.

Two details in that setup matter enormously for migration. First, your products and prices are created directly in Stripe. You ask the chat to create products; Base44 creates them as Stripe products and prices, which you then see and manage from your Stripe Dashboard. Base44 does not keep a separate product database for you. Your catalog was always a Stripe catalog that your app reads — the app never owned it. Second, Base44 creates your live API keys for you automatically. Once your Stripe account finishes activating, the live keys appear in the integration without you ever copying a key from Stripe. Convenient — and it means you may never have held the keys your app runs on.

There is a third detail worth quoting, because it comes from Base44's own documentation: when building payment flows, they recommend sending the buyer to Stripe Checkout and, on the success page, confirming the payment and updating their account while they are still logged in, instead of relying on webhooks alone. Even Base44's docs treat webhooks as the fragile part of the setup. Remember that line — it becomes the whole migration story.

The surprise

Selling on a Base44 app: where the money actually lives

Here is the good news, and it is real: the money data is the least trapped part of a Base44 app. Products, prices, customers, payment methods, subscriptions, invoices, payouts, disputes, refunds — all of it lives in your Stripe account, independent of Base44. Close your Base44 account tomorrow and your Stripe dashboard still shows every customer and every subscription, still billing on schedule. Nothing about the money needs to be “exported” from Base44, because it was never there. A migration that keeps the same Stripe account never asks a single customer to re-enter a card.

So what is actually at stake? Everything around the money. The live API keys Base44 auto-created — keys you likely never saw, stored on Base44's side. The webhook endpoints pointed at your Base44 app's URLs and the webhook secrets stored in Base44's secrets, which tell your app that a checkout completed or a renewal failed. The backend functions that ran when those events fired — upgrading the user's account, recording the sale, sending the receipt. And the revenue view in the app dashboard, where you tracked transactions and subscriptions without opening Stripe.

This split is also why money apps have the hardest migration of any Base44 app — and why builders feel it in their gut before they can name it. A content app's migration is mostly files and records. A money app's migration is a live financial system: subscriptions that renew at 3am, failed payments that need retries, customers whose access depends on a webhook arriving. You cannot pause billing while you move. The data is safe; the plumbing has to be rebuilt while the water is still running. Who owns the Stripe account matters as much as who owns the app — if the account was created through Base44's claim flow, confirm you hold full owner login at stripe.com before anything else.

The migration problem

What breaks when your payments leave Base44

Walk the checklist the way a migration actually runs it. Webhooks first. If your app upgrades accounts on checkout.session.completed, handles renewals on invoice.paid, or chases failed payments on invoice.payment_failed, every one of those endpoints pointed at a Base44 URL and every signing secret lived in Base44's secrets store. None of it is in the export — integrations and API keys are explicitly on the “leaves behind” list. On the new host, each endpoint is recreated against the new domain, each secret is regenerated in your Stripe account, and each event is re-tested end to end before the old endpoints are deleted. Delete the old ones too early and renewals fire into the void; leave both live and you double-grant access.

Live API keys second. Base44's auto-created keys die with the integration. On your own infrastructure you generate your own keys — ideally restricted keys with only the permissions the app needs — and you hold them in your own secrets management from day one. This is one of the quiet upgrades of leaving: the keys your money runs on stop being something a platform created for you and started being something you issued and can rotate. Backend payment logic third. The functions that confirmed a payment on the success page, updated the user's plan, recorded the transaction in your database — backend functions don't export, so each one is rebuilt against the new stack and the migrated database, in the same order the money flows: checkout, confirmation, access update, receipt.

Subscription renewal handling fourth. This is the one that keeps founders up at night, so say it plainly: Stripe keeps billing. The subscription records, the stored payment methods, the renewal schedule — all Stripe-side, all untouched by the app's migration. What you are rebuilding is your app's reaction to those events: granting continued access on renewal, suspending on repeated failure, prorating on plan changes. Test the failure paths, not just the happy path — a renewal webhook that silently stops arriving looks exactly like a customer who cancelled. For SaaS founders, the billing edges are part of a bigger question — can you build a SaaS on Base44 — where flat subscriptions work but metered billing, per-seat proration, and mid-cycle changes need custom backend functions.

The dashboard view last. Base44's app-dashboard revenue and subscription tracking goes away with the app. The underlying records are all in Stripe, so nothing is lost — but if anyone on your team ran the business from that dashboard, plan their new workflow (Stripe's dashboard, or reporting you rebuild on your own stack) before the migration, not after. And if your app kept its own transaction ledger in its database, those tables migrate with the database — lead the whole migration with the database, the way every OffRamp migration runs.

The way out

How OffRamp rebuilds payments on infrastructure you own

The migration order for a money app is the same OffRamp order as every Base44 migration — database and app first, onto Supabase, Vercel, and GitHub accounts in your name — with the payment layer rebuilt deliberately on top, in money-flow order. First, the Stripe account is pinned down: confirmed as yours, with direct owner login, business and banking details verified, and the same account that holds your products, customers, and subscriptions designated as the account the new app will use. If the account was created through Base44's claim flow and anything about its ownership is ambiguous, that gets resolved before a line of payment code is written.

Then the keys: fresh live API keys generated by you in your Stripe account — restricted to what the app needs, stored in your own secrets management, rotatable by you at any time. Then the checkout and confirmation logic, rebuilt from the migrated app against the new stack: Stripe Checkout sessions created server-side, the success page confirming payment and updating access while the buyer is logged in, the database recording each transaction. Then the webhooks, re-registered against the new host with fresh secrets, every event you rely on re-tested — including the failure events, because a migration that only tests successful payments hasn't tested the migration.

What you end up with is the same money system with a different owner: same Stripe account, same products, same customers, same subscriptions billing on the same schedule — but the keys, the endpoints, the access logic, and the records all live on infrastructure in your name. No auto-created keys you never saw, no webhook secrets in someone else's vault, no renewal logic running on a runtime you can't export from. Billing never stops, customers never re-enter a card, and the next time you need to move, the whole payment layer moves with the app — because for the first time, you hold all of it. That's the OffRamp thesis applied to money: migrate off Base44 once, and own everything the payments touch.

FAQ

Questions, answered honestly

Do my Stripe products and prices move when I leave Base44?

They do not need to move, because they were never inside Base44. Base44 creates your products and prices directly in Stripe, and you manage them from your Stripe Dashboard — Base44 keeps no separate product database. As long as your new app connects to the same Stripe account, every product, price, and customer record is exactly where it was. The migration job is re-wiring the app to that account, not moving money data.

Will my subscriptions keep charging customers after I migrate off Base44?

The billing does. Subscription records, payment methods, and renewal schedules live in your Stripe account, independent of the Base44 app — Stripe keeps charging on schedule regardless of what happens to the app. What must be rebuilt is your app's side of the deal: the logic that grants, renews, or suspends access when a payment succeeds, renews, or fails. That logic lived in Base44 backend functions, which do not export.

I created my Stripe account through Base44. Do I own it?

Claiming your Base44 Stripe sandbox with “create a new account” produces a standard Stripe account, but make sure you can log into it directly at stripe.com with full owner access — do not treat Base44's Integrations tab as your only route to your money. Before any migration, confirm the account email, the business and banking details, and that you can generate your own API keys there. If the account was claimed through a business partner's login, sort that out first.

What happens to my Stripe webhooks when I leave Base44?

They stop working, and they do not come with the export. Webhook endpoints that pointed at your Base44 app's URLs, plus the webhook signing secrets stored in Base44's secrets, live on Base44's side. On the new infrastructure you recreate the endpoints pointing at your new host, generate fresh webhook secrets in your Stripe account, and re-test every event you rely on — checkout completion, subscription renewal, payment failure — before going live.

Do I lose my payout history and revenue records?

The money history is safe: payouts, transactions, refunds, and disputes live in your Stripe account and stay there. What disappears is Base44's app-dashboard view of that data — the revenue and subscription tracking inside the app editor. If your app kept its own transaction records in its database, those tables migrate with the database; if the only record of a sale was the Base44 dashboard, export what you need before the account goes.

How does OffRamp rebuild payments on infrastructure I own?

Onto Supabase, Vercel, and GitHub accounts in your name, with your own Stripe account at the center: fresh live API keys generated by you (not auto-created by a platform), webhooks re-registered against your new endpoints, checkout and access-update logic rebuilt from the migrated app, and subscription handling recreated so renewals keep granting access. Stripe billing continues uninterrupted because the Stripe account never changes — your customers never re-enter a card.

Your payments shouldn't die with your Base44 account.

Rebuild the webhooks, keys, and renewal logic on infrastructure you own: migrate your Base44 money app off the platform onto Supabase, Vercel, and GitHub accounts in your name, with your own Stripe account at the center. Connect the Base44 account from the OffRamp home page. The free analysis takes about a minute, and your fixed quote comes with it.

Start your free analysis