In short
Shopify treats manual payment methods like bank transfer or cash on delivery as “on” or “off” for the whole store — every shipping country the same. There’s no built-in condition for “domestic only” or “not for international orders”, and even Shopify’s own Checkout Blocks list this as a Plus-only feature. The fix is a payment customization: a rule that checks the customer’s shipping country and hides the payment method for every other case. These rules run as a Shopify Function directly at checkout — on any plan, but only through an app from the App Store.
The problem, in merchants’ words
Merchants keep asking variations of the same question in the Shopify Community: “How to change the payment method by country”, “How to allow only certain payment gateways in certain countries?”, “Different Payment Method for Different Customers Based on Geolocation”. The reason is usually practical: bank transfer is easy to reconcile for domestic orders but adds friction and fraud risk once it crosses a border, and cash on delivery is a service some couriers only offer within one country.
The native way in Shopify
Set up the manual payment method: Settings › Payments › “Manual payment methods”. Create bank transfer or cash on delivery with a name and payment instructions, then activate it.
That’s as far as the admin goes. Once the method is active, every customer sees it — no matter which country they’re shipping to. There’s no country field on an individual payment method.
The one native exception is local payment methods through Shopify Payments (Klarna, iDEAL, Bancontact and others): they show up automatically only for customers in eligible countries and currencies. That’s provider-side logic built into Shopify Payments, not something you can apply to your own manual methods.
Where Shopify stops
- Manual payment methods have no country condition. Active means visible to every customer, whichever country they’re shipping to.
- Shopify Markets doesn’t cover it. Markets controls language, currency, pricing and product availability per region — not which payment method appears at checkout. That’s a common source of disappointment in the Community.
- Shopify’s own fix is Plus-only. Checkout Blocks can hide payment methods by shipping destination or market, but only on the Shopify Plus plan.
- The usual workaround is a note in the payment description (“Domestic orders only”) — it informs the customer but doesn’t stop someone shipping abroad from selecting the method anyway.
How a payment rule solves it
The rule checks the customer’s country and hides the payment method for every other case:
| Goal | Rule |
|---|---|
| Bank transfer for domestic orders only | customer’s country is not the home country → hide bank transfer |
| No cash on delivery once shipping abroad | customer’s country is not the home country → hide cash on delivery |
| Invoice only for a short list of countries | customer’s country is not in the allowed list → hide invoice |
What the customer sees: checking out from the home country shows bank transfer as usual; checking out from abroad doesn’t show it at all — only the payment methods cleared for that country remain.
Technically the rule runs on Shopify’s Payment Customization Function: at checkout, Shopify passes the function the buyer’s localization country (localization.country.isoCode — the country the checkout is localized to), and the function responds with “hide”. That runs on Shopify’s own infrastructure, with no detour through third-party servers and no theme changes. Uninstall the app and checkout goes back to how it was.
Things to watch
- It’s the checkout’s localization country, not necessarily the billing address. The function reads
localization.country.isoCode— the country the checkout is localized to — so check how that lines up if a customer’s billing country differs. - Local payment methods stay independent. Klarna, iDEAL and similar keep following their own country logic through Shopify Payments; a payment rule only affects the methods you explicitly target.
- Limit: Shopify allows up to 25 active payment customizations per store, across all apps combined. This rule needs one.
- Combinable: The same mechanism works for any manual payment method — bank transfer, cash on delivery, invoice — and can be combined with other conditions like customer tag or cart total.
Frequently asked questions
Can I change which payment method shows up by country?
Not with built-in settings. A manual payment method like bank transfer or cash on delivery is either active for every country or for none — Shopify has no country condition for it. A payment customization (an app from the App Store) hides the method for every country except the ones you choose.
How can I allow only certain payment gateways in certain countries?
Only through an app. Merchants ask for this regularly, and the honest answer from Shopify support is usually that there's no native way to restrict a payment method to selected countries — a payment rule checks the customer's country and hides the method everywhere else.
Can I show different payment methods to different customers based on their location?
Yes, but the built-in "local payment methods" only cover methods tied to Shopify Payments, such as Klarna or iDEAL — they appear automatically for eligible countries and currencies. For your own manual methods, a payment rule based on the customer's country does the same job.
Does Shopify Markets solve this?
No. Markets controls language, currency, pricing and product availability per region — not which payment method a customer sees at checkout. That gap is exactly what merchants keep asking about.
Do I need Shopify Plus to restrict a payment method by country?
No. Public apps built on Shopify Functions run on every plan. Shopify's own Checkout Blocks can hide payment methods by market too, but that feature is limited to the Shopify Plus plan.
Is this the same as Shopify Payments' local payment methods?
No. Klarna, iDEAL or similar appear automatically through Shopify Payments only for matching countries — that's provider-side logic. Your own manual methods, like bank transfer or cash on delivery, don't get that automatically; they need a rule.
Sources
- Shopify Help Center: Customizing checkout
- Shopify Help Center: Checkout Blocks — payment methods (market condition, Plus only)
- shopify.dev: Payment Customization Function API (localization.country.isoCode, "Hide payment methods based on customer location")
- Shopify Changelog: 25 active functions per API (May 2025)
- Shopify Help Center: Manual payment methods
- Shopify Help Center: Local payment methods with Shopify Payments
- Shopify Community: "How to change the payment method by country"
- Shopify Community: "How to allow only certain payment gateways in certain countries?"
- Shopify Community: "Different Payment Method for Different Customers Based on Geolocation"