
How to add regional pricing to Stripe Checkout
You sell with Stripe. Your $49 course gets visits from India and Brazil, but almost no sales from there. You'd happily sell it for less in those places. So you open the Stripe dashboard and look for a "price by country" setting.
There isn't one. Stripe can show prices in local currency, and it has solid coupons. But nothing in Stripe decides that India gets 40% off and Germany doesn't. You build that from a few parts.
What Stripe does, and what it doesn't
Start with the feature most people find first. Adaptive Pricing lets customers pay in their local currency in more than 150 countries. It converts your price at Stripe's rate, and the customer pays a 2 to 4% conversion fee on top. A $49 course still costs the equivalent of $49 in India. Just in rupees.
Manual currency prices go one step further. You can set a different amount for each currency. That helps when a currency maps to one country. It breaks down when it doesn't: dozens of countries pay in USD or EUR, and they don't all need the same price.
| Stripe feature | What it changes | Knows the buyer's country? |
|---|---|---|
| Adaptive Pricing | Currency, at the same price level | Yes, for currency only |
| Manual currency prices | Price per currency | No, per currency |
| Coupons and promotion codes | The amount the buyer pays | No |
So the lower price has to come from a coupon. And since coupons don't check location, the country part has to happen before checkout. If you want the longer version of this difference, see regional pricing vs currency conversion.
Three pieces make a country discount work in Stripe
A coupon per country group
For example 40% off, limited to the products you choose.
A promotion code on top
The code a buyer types or receives, with optional limits and an expiry.
Show the code by location
Your site shows each visitor the code for their country, or nothing.
Set it up by hand
First, group countries by how much you want to discount. Three or four groups is plenty to start. Our guide to choosing PPP discount percentages walks through picking the numbers.
Next, create a coupon for each group in the Stripe dashboard. Choose percent off or a fixed amount. Use applies_to to limit it to the products that should get the discount, so a code for your course doesn't also discount your coaching package.
Then add a promotion code to each coupon. That's the text a buyer enters, likeINDIA40. Promotion codes can carry their own limits: a maximum number of redemptions, an expiry date, or first-time customers only. Stripe's discounts guide lists every option.
Last, make sure checkout accepts codes. Stripe Checkout only shows the code field when the session has allow_promotion_codes turned on. Payment Links have their own "allow promotion codes" setting.
Get the code to checkout
Asking buyers to copy a code works, but every extra step loses a few people. Two ways to skip it:
- Payment Links: add
?prefilled_promo_code=INDIA40to the link. Promotion codes must be enabled on that link, and the code can only use letters and numbers. - Checkout Sessions: if your server creates the session, pass the promotion code in
discounts. Your server then needs to know which code this visitor should get.
Either way, the buyer still sees the discount line in Stripe's checkout before paying. No surprises.
Decide what happens at renewal
For subscriptions, the coupon's duration matters more than the percentage. Stripe offers three options: once, for a set number of months, or forever.
"Once" means a buyer in Brazil pays the regional price for the first month, then your full price. That can feel like a bait and switch if you didn't say so. "Forever" keeps the regional price on every renewal. Pick one on purpose and write it in your offer. Our post on regional pricing at renewal covers the tradeoffs.
Keep the code from spreading
A code shown only to visitors in India still works for anyone who types it. Stripe doesn't check where the buyer is. Once a code lands on a coupon site, people from anywhere can use it.
The fixes are boring and they work. Limit each code to the right products. Cap redemptions. Replace codes on a schedule, so an old one stops working. Our guide to reducing coupon abuse goes deeper.
Or let Evendeals run it
Doing this by hand for 100+ countries is a lot of bookkeeping. Evendeals connects to Stripe through Stripe's own sign-in, so there are no API keys to copy. Then:
- You set a discount for each country group, as a percentage or a fixed amount.
- Evendeals creates the coupons and promotion codes in your Stripe account, limited to the products you pick.
- A banner on your site shows each visitor the code for their country.
- On paid plans, codes rotate by time, redemptions, or views, so a leaked code expires.
Your existing Stripe coupons stay untouched. Evendeals marks its own with a recognizable prefix.
Test before you share it
Run one full purchase in Stripe test mode for each country group. Check that the right code shows, checkout accepts it, the total matches, and the receipt is right. For subscriptions, check the second invoice too. That's where duration mistakes show up.
Want the shortcut? Connect Stripe to Evendeals and set your first country group in a few minutes.