Dashboard

How to Add Multi-Currency Pricing to an AI-Built App

A worked guide to presentment vs settlement currency, why naive exchange-rate math breaks, and how Stripe and merchant-of-record tools actually handle multi-currency pricing.

Steve Jefferson
Steve Jefferson
Developer Advocate
12 September 20261 min read

How to Add Multi-Currency Pricing to an AI-Built App

Multi-currency pricing means a customer in Berlin sees a price in euros and a customer in Austin sees the same product priced in dollars, while your app still settles revenue in a single currency you control. For an AI-built app, the fastest path is not to write conversion logic yourself. It is to separate what the buyer sees, the presentment currency, from what lands in your bank account, the settlement currency, and let a payment processor own the split between them. The tempting shortcut, multiplying your dollar price by today's exchange rate, breaks quickly: rates drift, totals round oddly, and converted numbers rarely land on the price points buyers actually expect in that market. This guide works through the decision points, how a processor like Stripe handles the split at the API level, and two real ways builders wire it up.

This assumes you have already gotten a checkout flow live at all. If you have not, it is worth wiring up payments in an AI-built app first, and reading the broader playbook for building an app with AI if you are still shaping the rest of the product around it. Multi-currency support is a layer on top of that checkout, not a replacement for it.

Presentment Currency vs. Settlement Currency

Almost every mistake in multi-currency pricing comes from treating these as one setting instead of two independent ones. The presentment currency is whatever the buyer sees on the checkout screen and gets charged in. The settlement currency is what actually deposits into your bank account after the processor converts it, and it is typically fixed per payment account rather than chosen per transaction. Your app can present a price in ten currencies while settling all of them into a single currency, and that is in fact the normal setup.

Concept

What it means

Who sets it

Presentment currency

The currency shown and charged at checkout (EUR, GBP, JPY, and so on)

Chosen per transaction, often by locale, card, or a manual selector

Settlement currency

The currency that actually deposits into your bank account

Fixed on your payment processor account, usually one currency

Reference currency

The currency your internal pricing table is modeled in

Decided by you when you build the pricing logic

Why "Just Multiply by an Exchange Rate" Breaks

It is tempting to store one price in dollars and convert it on the fly using a live exchange rate API. That approach fails for three concrete reasons builders run into as soon as real customers show up.

  • Rate drift. Exchange rates move throughout the day. A price computed when a customer loads a pricing page can be stale by the time they actually check out, so two customers minutes apart can be charged different amounts for the same plan.

  • Rounding. Converting a clean $19.00 at a floating rate produces something like €17.43 or 2,847 JPY, numbers that don't round to anything a shopper recognizes as a normal price, and that look arbitrary sitting next to competitors' listed prices.

  • Psychological price points. A literal conversion almost never lands on the ending customers expect in that market. $19 in the US typically becomes a deliberately chosen €19 or £17 in Europe, not whatever the day's exchange rate spits out, because round numbers and familiar endings convert better than mathematically precise ones.

The fix is to stop treating price as a single number that gets converted, and start treating it as a small table: one deliberately chosen amount per currency, reviewed on a schedule instead of recalculated on every request. This is easiest on a flat-rate plan; if your app charges by consumption instead, usage-based pricing adds a second variable, since the per-unit rate has to be localized too, not just the plan price. It is worth deciding early which pricing model you are running, usage-based or flat-rate, since that choice changes how much currency logic you end up maintaining.

How a Payment Processor Handles Multi-Currency at the API Level

Stripe is the processor most AI-built apps end up wired to, largely because coding assistants have seen its docs and SDKs more than any competitor's, so it is a useful concrete example of how this works underneath the pricing page.

A Stripe Price object carries a base currency, but it can also carry a set of per-currency amounts attached to that same price rather than requiring a separate price object for every currency. When a Checkout Session is created against a price configured that way, Stripe can present the buyer's local currency automatically based on their location, using the specific amount you set for that currency rather than a computed conversion. If you have not configured per-currency amounts, the buyer is simply charged in the price's base currency and it is their card network or bank, not your app, that performs the conversion and applies its own markup. Either way, a PaymentIntent or charge object always carries a concrete currency field set at creation, and a refund has to be issued back in that same currency, which is worth remembering before you build reconciliation reports.

Settlement is a separate axis entirely. Payouts from your processor to your bank account are generally configured once per account, in one currency, regardless of how many presentment currencies you charge in. You can read more in Stripe's currency documentation and its guide to presenting local currencies at checkout.

A Worked Example: Adding Multi-Currency Pricing Step by Step

  1. Decide which currencies to support first. Start with the two to four currencies matching where signups already come from, not every ISO currency code Stripe supports.

  2. Pick a settlement currency and leave it alone. This is usually whatever currency your business bank account already holds, and it rarely needs to change even as you add more presentment currencies.

  3. Model reference prices per currency, not conversions. Set a deliberate, clean number for each currency, such as $19, €19, and £17, instead of running $19 through the day's exchange rate. Revisit these on a fixed cadence, monthly or quarterly, rather than reacting to every rate movement.

  4. Attach the currencies to your pricing objects. In Stripe this means adding per-currency amounts to a Price, or creating separate Price objects tied to the same Product, then pointing your Checkout Session or Payment Link at the right one for that buyer.

  5. Decide how currency gets selected. Common options are automatic detection by locale or card, a manual dropdown, or both, with automatic detection as the default and a manual override link for anyone it gets wrong.

  6. Handle the edge cases before launch. Refunds must post in the original charge currency, tax or VAT is usually calculated in the presentment currency, and a subscription that renews after you update a listed price needs a defined rule for which price applies.

  7. Test with real test-mode cards from different countries. Not just a currency dropdown flipped by hand, since that skips the locale-detection and rounding behavior that only shows up on an actual checkout run.

Two Ways Builders Actually Wire This Up

In practice, teams tend to land on one of two patterns, and the right one depends on how much control over presentment prices you want versus how much currency and tax logic you want to own yourself.

Configuring currencies directly on a payment processor

This is the pattern platforms that bill directly through Stripe, Swarmz among them, typically follow: prices are modeled in a reference currency, a small set of additional presentment currencies are configured with their own deliberately chosen amounts, and settlement stays in a single currency regardless of what the buyer paid in. This gives you full control over the exact number shown in each market, at the cost of maintaining that pricing table yourself as rates and markets shift.

Using a merchant of record

Providers such as Paddle or Lemon Squeezy act as the reseller of record for the transaction. They handle currency conversion, local tax and VAT calculation, and settle funds to you in one currency no matter what the buyer paid in. You give up some control over exact presentment price points, since the merchant of record often manages localization rules for you, but you also give up almost all of the currency and tax logic described above.

Choosing per-currency amounts is close cousin work to setting regional pricing for a market, since both start from the same question: what does this plan actually need to cost in that market to look normal, rather than what does the raw conversion say.

Common Mistakes to Avoid

  • Converting on the fly with a live exchange-rate lookup at charge time, which produces inconsistent receipts and makes refunds harder to reconcile.

  • Ignoring currencies with different rounding rules, such as JPY, which has no minor unit and should not be priced with decimal cents.

  • Never revisiting reference prices as rates move over months, letting a market's price drift far from what looks normal there.

  • Assuming presentment currency and settlement currency are the same setting; they are independent and configured separately.

  • Skipping test-mode transactions in non-default currencies before launch, which is usually where rounding and locale-detection bugs show up first.

Multi-currency pricing is one of several "add X to an AI-built app" features that live or die on getting the underlying ledger right before the UI. Rewarding referrals has the same shape: see how to add a referral program to an AI-built app for how to structure the attribution and payout ledger so it can't be gamed.

Frequently Asked Questions

What is the difference between presentment currency and settlement currency?

Presentment currency is what the customer sees and is charged in at checkout. Settlement currency is what actually deposits into your bank account after your payment processor converts it. They are configured separately, and a single settlement currency commonly supports many presentment currencies.

Do I need multi-currency pricing for a small or early-stage app?

Not necessarily. Many apps launch charging in a single currency and let the buyer's card network handle conversion at its own rate. Adding presentment currencies usually becomes worthwhile once a meaningful share of signups come from a specific region and price sensitivity there starts affecting conversion.

Will Stripe convert my prices automatically?

Only if you configure per-currency amounts or enable local currency presentment on that price. Without that setup, Stripe charges in your account's default currency and it is the buyer's card issuer, not Stripe, that performs the conversion and applies its own rate and markup.

Should I price at a literal converted amount or choose a different number per currency?

Most builders choose a distinct, locally clean number for each currency rather than a literal converted amount, for the rounding and psychological-pricing reasons described above.

How often should exchange-rate-based reference prices be updated?

On a fixed review cadence, such as monthly or quarterly, rather than continuously. Constant recalculation produces the rate drift and inconsistent charges this guide opens with, and customers notice a price that moves week to week.

How did this land?

About the author

Steve Jefferson
Steve Jefferson

Developer Advocate

Steve builds something with Swarmz every week and writes up what worked, what broke, and what he'd do differently. Tutorials and hands-on guides are his lane.

Share

Get the next post in your inbox

One email a month. Product updates, engineering posts, and the best of Built with Swarmz.

I agree to receive emails about AI building tips and Swarmz product news. Unsubscribe any time.