The Adalo + Stripe space
Adding payments to an Adalo app is one of the most common - and most error-prone - integrations. Stripe is the go-to payment processor, but the integration involves multiple moving parts: test vs live keys, component configuration, post-payment action chains, and (critically) Apple's rules about in-app purchases that can get your entire app rejected.
Setup: Step by Step
1. Configure Stripe Keys
Get your API keys from the Stripe Dashboard. You need both:
- Publishable Key (starts with
pk_test_orpk_live_) - Secret Key (starts with
sk_test_orsk_live_)
Critical: Use test keys during development. Switch to live keys ONLY when publishing. Mixing test/live keys is the #1 cause of 'Payment Failed' errors.
2. Add the Stripe Component
Add the Stripe Purchase component from Adalo's marketplace. Configure: amount (in cents - $10.00 = 1000), currency, and your publishable key.
3. Build the Action Chain
The most common mistake: configuring the Stripe component but forgetting the post-payment action chain. After a successful payment, you must:
- Create a record in your 'Payments' or 'Subscriptions' collection
- Update the user's account status (e.g., set
isPaid = true) - Navigate to a confirmation screen
Without step 2, the payment goes through on Stripe's end but your app doesn't reflect it.
The Apple In-App Purchase Rule
This catches most Adalo builders off guard: Apple requires that digital goods and services sold within iOS apps use Apple's In-App Purchase (IAP) system. If your app sells digital content, subscriptions, or premium features through Stripe, Apple will reject it.
When Stripe Is Allowed
- Physical goods (e-commerce)
- Services performed outside the app (consulting, deliveries)
- Person-to-person services (tutoring, coaching)
When You Must Use Apple IAP
- Premium app features or content
- Subscriptions to digital services
- Virtual currencies or credits
- Removing ads
Common Integration Failures
1. Payment Succeeds on Stripe but App Doesn't Update
Cause: Missing or broken 'On Success' action chain. The Stripe charge went through, but no database record was created in Adalo.
Fix: Verify your On Success action chain includes a Create Record action. Check that all field mappings are correct. Test the entire flow with Stripe test keys.
2. Amount Displays Wrong
Cause: Stripe uses cents, not dollars. Entering '10' charges $0.10, not $10.00.
Fix: Multiply your dollar amount by 100. Use a formula or store prices in cents in your database.
3. Webhooks Don't Fire
Cause: Adalo doesn't natively support Stripe webhooks. Subscription renewals, refunds, and failed charges happen outside Adalo's awareness.
Fix: Use Make.com or Zapier to listen for Stripe webhook events and update your Adalo database via the Adalo API. This is essential for subscription-based apps.
Subscription Management
Adalo's Stripe integration handles one-time payments well but struggles with subscriptions. For recurring billing, you need:
- Stripe Customer Portal for users to manage their subscription
- Webhook listener for renewal/cancellation events
- Automated status updates in your Adalo database
This goes beyond what Adalo can handle natively and is a common trigger for migration to a custom solution.
Rehost builds payment systems - from simple Stripe in Adalo to full subscription management with webhooks and customer portals. Get Expert Rescue →
FAQ
Can I use Stripe in an Adalo iOS app?
Only for physical goods and real-world services. Digital goods, premium features, and subscriptions must use Apple's In-App Purchase system. Violating this rule results in App Store rejection.
How do I handle refunds in Adalo?
Process refunds directly in the Stripe Dashboard. Adalo has no built-in refund mechanism. To update the user's status automatically, set up a Stripe webhook that triggers a database update via Make.com or the Adalo API.
Why does my Adalo Stripe payment show 'Failed'?
Most common causes: using test keys with a live card (or vice versa), amount set in dollars instead of cents, or the Stripe component's publishable key doesn't match the secret key environment. Check the Stripe Dashboard → Payments → Logs for the specific error.