Adaptive Pricing
Regional considerations
Adaptive Pricing is available to businesses in the following regions:
Adaptive Pricing lets your customers pay in their local currency in more than 45 countries.
With Adaptive Pricing, Stripe automatically calculates the localized price and handles all currency conversion, so you receive the same amount (in your default currency) no matter what currency the customer chooses. Enabling Adaptive Pricing can increase conversion rates from global buyers. Businesses have had on average a 17% increase in international revenue.
Use Adaptive Pricing to:
- Display pricing in local currencies based on location
- Calculate prices in real-time using an exchange rate guaranteed for 24 hours
- Unlock payment methods that require local currency
- Ensure regulatory compliance in all supported currencies
Enable Adaptive Pricing
Enable Adaptive Pricing in your payment settings. You can enable Adaptive Pricing in test mode and live mode. Disabling Adaptive Pricing doesn’t affect Checkout Sessions that have already been converted.
Adaptive Pricing works with Checkout, Payment Links, Pricing Table, and local payment methods.
Webhooks and reporting
Caution
Enabling Adaptive Pricing can affect some parts of your integration, like webhook handling and reporting. Review your integration to make sure it can handle webhooks and PaymentIntent objects with local currencies.
- Use the currency_conversion hash on the Checkout Session object to determine what your customer would have paid in the default currency.
- Use the BalanceTransactions API to determine how much you receive after fees.
Supported currencies
Merchants in supported regions can automatically convert prices to the local currencies of their customers in the following markets:
- Austria (EUR)
- Australia (AUD)
- Belgium (EUR)
- Brazil (BRL)
- Bulgaria (BGN)
- Canada (CAD)
- China (CNY)
- Croatia (EUR)
- Cyprus (EUR)
- Czech Republic (CZK)
- Denmark (DKK)
- Estonia (EUR)
- Finland (EUR)
- France (EUR)
- Germany (EUR)
- Greece (EUR)
- Hong Kong (HKD)
- Hungary (HUF)
- India (INR)
- Ireland (EUR)
- Israel (ILS)
- Italy (EUR)
- Japan (JPY)
- Latvia (EUR)
- Lithuania (EUR)
- Luxembourg (EUR)
- Malaysia (MYR)
- Malta (EUR)
- Mexico (MXN)
- Netherlands (EUR)
- New Zealand (NZD)
- Norway (NOK)
- Philippines (PHP)
- Poland (PLN)
- Portugal (EUR)
- Romania (RON)
- Saudi Arabia (SAR)
- Singapore (SGD)
- Slovakia (EUR)
- Slovenia (EUR)
- Spain (EUR)
- Sweden (SEK)
- Switzerland (CHF)
- Taiwan (TWD)
- Thailand (THB)
- United Arab Emirates (AED)
- United Kingdom (GBP)
- United States (USD)
Local payment methods
You can configure which payment methods you accept in your payment methods settings.
Adaptive Pricing can increase usage of local payment methods significantly (up to 6.5x on some merchants) by ensuring customers have the option to pay in their currency and with payment methods most relevant to them. As an example, iDEAL is used by 70% of all e-commerce transactions in the Netherlands, but only works with EUR.
Adaptive Pricing enables the following payment methods:
- Alipay
- Bancontact
- EPS
- Giropay
- iDEAL
- P24
- SEPA Debit
- Sofort
- WeChat Pay
Restrictions
Adaptive Pricing does not yet work with Connect or Elements.
Additionally, Adaptive Pricing requires the currency for your prices to be the same as your default settlement currency. Prices automatically convert during checkout. This applies to prices you create and reference with a price ID and prices you create inline with price_data when you create a Checkout Session.
Adaptive Pricing does not apply for Checkout Sessions that:
- Contain manually defined multi-currency prices.
- Are in
subscription
mode. - Use Connect parameters like
application_fee_amount
,on_behalf_of
, andtransfer_data
. - Use
capture_method
asmanual
. - Set the currency value on creation.
In Sessions that aren’t supported by Adaptive Pricing, Checkout presents prices in the original currency that you’ve set your prices in.
Exchange rate
Stripe uses the mid-market exchange rate and applies a margin to guarantee the rate for the duration of the Checkout Session (up to 24 hours) through settlement. If the exchange rate changes by more than 2% in that time, Stripe might use the updated exchange rate to calculate your payout.
Learn more about how Stripe handles currency conversions and Adaptive Pricing fees.
Refunds
Stripe pays out refunds in the currency your customer pays in using the latest Stripe-provided exchange rate. This means that you might pay more or less to cover the refund depending on how the exchange rate changes.
Example refund
We ignore Stripe fees in this example for simplicity. Suppose:
- You’re a US business that uses Checkout to sell a product for 100 USD and have activated Adaptive Pricing.
- A customer in Canada views your Checkout page, sees the localized price of 137 CAD at an exchange rate of 1.37 CAD per 1 USD, and completes the purchase.
- Stripe processes the payment, converting the 137 CAD to 100 USD to pay you in your settlement currency.
- Later, when the exchange rate has changed to 1.40 CAD per 1 USD, you issue a full refund to the customer.
- Stripe deducts 97.86 USD from your account, exchanging it at 1.40 CAD per 1 USD to pay out the 137 CAD refund.
Learn more about how Stripe helps you manage refunds.
Webhooks and reporting
Depending on the user-selected currency, both the Checkout Session and the underlying PaymentIntent objects update automatically to reflect the selected currency and amount. After a user pays in local currency, the Checkout Session object’s currency and total amount is in local currency and contains a currency_conversion
hash to reflect what the user would have paid in the default currency. Learn more about what’s deposited in your account after fees.
The checkout.session.completed webhook event contains a currency_conversion
hash that includes the amount_total
and amount_subtotal
in the source_currency
. The amounts reflect what your customer would have paid in the source currency.
{ "id":
, "object": "event", "type": "checkout.session.completed", "data": { "object": { "id":'{{EVENT_ID}}', "object": "checkout.session", "currency": "cad", "amount_total": 2055, "amount_subtotal": 2055, "currency_conversion": { "amount_subtotal": 1500, "amount_total": 1500, "source_currency": "usd", "fx_rate": "1.37" } } } }'{{SESSION_ID}}'
Testing
To test local currency presentment for Checkout, Payment Links, and the pricing table, pass in a location-formatted customer email that includes a suffix in a +location_XX
format in the local part of the email. XX
must be a valid two-letter ISO country code.
For example, to test currency presentment for a customer in France, pass in an email like test+location_FR@example.com
.
When you visit the URL for a Checkout Session, Payment Link, or pricing table created with a location-formatted email, you see the same currency as a customer does in the specified country.
Checkout
When you create a Checkout Session, pass the location-formatted email as customer_email.
You can also create a Customer and specify their email that contains the +location_XX
suffix.
When it’s possible to present the customer’s local currency in Checkout, the Checkout Session object changes. Fields like currency
, payment_method_types
, and amount_total
reflect the local currency and price.
Payment Links
For Payment Links, pass the location-formatted email as the prefilled_email
URL parameter to test currency presentment for customers in different countries.
Pricing table
For the pricing table, pass the location-formatted email as the customer-email attribute to test currency presentment for customers in different countries.