Payment and Subscription Planning for International Apps
A card-only checkout quietly loses half its revenue in markets where nobody pays with cards, and that is only the first of six decisions.
A checkout that converts at 80 percent in Chicago can fall to 40 percent in Amsterdam for one reason: there is no iDEAL button on the page. Nothing about the app changed. The customer simply does not buy that way, and a card-only form reads to them as broken.
Most international payment trouble looks like an engineering problem and is really a product decision that got deferred. Six of them cost real money when they land in the week before launch instead of the week before code.
Local methods move conversion before design does
Card penetration varies more than founders expect. In the Netherlands, iDEAL bank redirects carry the majority of online consumer payments. In Brazil, Pix went from a 2020 launch to the default way people move money. In India, UPI handles volumes that dwarf domestic card usage. Shipping a Visa and Mastercard form into those markets is not a compromise, it is a wall.
| Market | Method that matters | What it changes in the build |
|---|---|---|
| Netherlands | iDEAL | Bank redirect flow, near-instant confirmation, effectively no chargebacks |
| Germany | SEPA Direct Debit, PayPal | Settlement takes days and the payer can reverse for eight weeks, no reason required |
| Brazil | Pix, Boleto | Pix confirms in seconds, Boleto can take up to three business days |
| Poland | BLIK | Six-digit code from the banking app, expires in about two minutes |
| Japan | Konbini, JCB, carrier billing | Convenience-store payments confirm days after the order is placed |
| India | UPI, RuPay | Recurring debits sit under RBI e-mandate rules, not standard card rails |
Two entries in that table break an assumption buried deep in most codebases: that you know the payment succeeded at the moment the customer finishes. Boleto and direct debit do not work that way. If your code grants access on the redirect back from checkout, you will hand out product you never get paid for. Entitlement belongs to the settlement webhook, with an honest pending state in the interface in between.
Presentment currency and the price you actually publish
Charging in the customer's currency is not the same as converting your USD price at spot rate. A EUR price of 9.17 signals a foreign seller and a maths error. Build a price ladder per market instead: pick round local price points and check the resulting margin, rather than deriving prices from an FX formula at runtime. Most processors add roughly 1 to 2 percent for currency conversion on top of card fees, and if you settle everything into one account you pay that spread on every non-domestic sale. Multi-currency settlement accounts are worth opening once a market passes a few thousand dollars a month.
Store the presentment currency, the amount, the FX rate used, and the settlement amount on every transaction record. Rebuilding that from processor exports a year later is miserable work.
SCA: build for the exemption, not the challenge
Under PSD2, payments where both the customer's bank and the business sit in the European Economic Area or the UK generally require strong customer authentication. In practice that means 3D Secure 2, where the issuer usually approves silently using device and behavioural signals. The friction shows up in the exceptions.
- Low-value transactions can skip authentication, subject to running counters that reset after a handful of consecutive exempt payments or a cumulative amount.
- Transaction risk analysis exemptions scale with your acquirer's fraud rate, and the value ceiling rises as that rate falls.
- Subscription renewals count as merchant-initiated transactions and are exempt, but only if the first charge was authenticated on-session and stored with the correct network credential flags.
That last point is the one that breaks quietly. If the initial card save skipped 3DS, renewals months later start returning authentication-required declines, and you cannot challenge a customer who is nowhere near their phone. You need an off-session recovery path: an email and an in-app banner that deep-link to a hosted page where the customer re-authenticates the saved card. India adds another layer, with pre-debit notification requirements ahead of recurring charges and an additional-factor step above a threshold, so an Indian subscription is a separate flow, not a config flag.
Tax is a build requirement, not a year-end task
Selling digital subscriptions into the EU means charging VAT at the customer's location and filing through the One Stop Shop. To pick a rate you need location evidence, typically two non-contradictory signals such as billing country, IP geolocation, and card BIN country, and you need to keep them. B2B sales to a customer with a valid VAT number shift to reverse charge, which means validating that number against VIES at checkout rather than trusting whatever they typed.
Elsewhere the rules differ again: the UK sets no registration threshold for sellers with no UK establishment, Australia's GST registration threshold sits at A$75,000, Japan applies its own consumption tax rules to foreign digital sellers, and US state sales tax obligations follow economic nexus thresholds set state by state after the Wayfair decision. Tools such as Stripe Tax, Quaderno, or Avalara handle the calculation. Your database still has to store the rate, jurisdiction, and evidence per line item at the time of sale, because a rate change next year must not rewrite last year's invoices.
Involuntary churn is the cheapest revenue in the business
A meaningful share of monthly subscription cancellations are not decisions at all, they are failed cards. Expired credentials, insufficient funds, and generic declines behave differently, and treating them identically wastes recovery.
- Insufficient funds is a soft decline. Retry three to five days later, ideally near common payday cycles in that market.
- Expired card is solvable without contacting anyone: enrol in the card network account updater services so refreshed credentials arrive automatically.
- Do-not-honor is generic. Retry once, then move straight to asking the customer for a new card.
Give paying customers a grace period of three to seven days where access continues while dunning runs, and drive the whole state machine from webhooks. Stripe emits invoice payment failure and subscription update events; Apple sends App Store Server Notifications for renewal failure, grace period expiry, and billing retry outcomes; Google reports account hold. If entitlement lives in your own database keyed off those events, a customer who fixes their card at 11pm regains access immediately rather than at the next nightly job.
Store billing versus your own checkout
The line Apple draws is between digital content consumed inside the app and goods or services delivered in the real world. A booking app for a mobile detailer, a trades dispatch app, or a laundry pickup service can and should take payment through Stripe, and Apple takes no commission on it. A course library, an unlockable feature tier, or in-app credits fall under in-app purchase, at 30 percent, or 15 percent under the small business programme and for subscriptions past their first year.
Link-out and steering rules have shifted repeatedly through EU Digital Markets Act obligations and US litigation, so confirm the current storefront terms before you architect around them rather than relying on a blog post. One practical difference matters: with in-app purchase, Apple and Google act as merchant of record in many countries and remit consumption taxes for you. With your own processor, that paperwork is yours, along with the margin.
White-label Flutter apps, delivered in 30-60 days, from $2,500 - full source code included.
Get started