How to sell internationally with a single Shopify store and Commerce Layer.
Shopify is an effective ecommerce platform that helps merchants grow their businesses, until it comes to expanding internationally. Then merchants start hitting roadblocks. Selling in multiple countries from a single Shopify store does not scale. You get limited capabilities, risk costly currency fluctuations, and have to absorb conversion fees. That's why many international brands opt for a multi-store architecture, creating separate Shopify instances for each market. This solution gives merchants more localization flexibility compared to a single store but it's also non-ideal, as it introduces data duplication, complicated store management, and higher infrastructure costs.
In this article, we'll introduce an option that lets you utilize your current Shopify investment while avoiding its inflexible multi-market management. We'll show you how to build a multi-language, multi-country website on a single Shopify store and integrate Commerce Layer — a natively multi-market commerce API — to localize prices, inventory, shopping cart, and checkout for each country. We’ve created a simple Shopify theme to show you how easily this works. You can find the resulting demo website here (PWD:
For a personalized demo, complete the contact form below and we’ll be happy to discuss your use case.
Selling internationally with Shopify
Brands that have successfully cultivated a loyal customer base in their home country have the right market conditions and tools to build a global presence. Today, more than 2 million merchants run their ecommerce websites on Shopify. When it comes to expanding internationally, Shopify provides two options:
- Set up a single Shopify store with currency conversions.
- Create a separate Shopify store per currency.
Option 1 — A single Shopify store with currency conversions
From a site management perspective, the simplest way to go international with Shopify is to use a single store and leverage Shopify Payments' multi-currency support. With this option, merchants define a base currency for their store and set prices in the local currency of a foreign market. When a customer places an order, Shopify converts the order amount from the market's local currency to the store's base currency. Shopify applies the current FX rate and charges merchants a currency conversion fee in addition to the standard Shopify Payments' processing fee.
In September of 2021, Shopify announced Shopify Markets, a cross-border management tool that would address some of these shortcomings and let brands continue to manage international markets from a single store versus going to option 2. While it’s a step in the right direction, this solution is not ideal for the reasons listed below:
1. The currency used to pay for an order is not fully predictable
Shopify Markets lets you define customized pricing for a market. At checkout, the customer's shipping address is used to determine which market they belong to. If a customer chooses to ship to a country that differs from the one that they selected on the storefront, their prices will change to match their shipping destination. This checkout behavior takes the name of checkout restrictions.
Not all payment methods support checkout restrictions. If a customer chooses a payment method that doesn't support checkout restrictions, then they are able to check out in any currency that you have enabled for your store, even if it doesn’t match their shipping address. For example, Apple Pay and Google Pay don't support checkout restrictions, so customers that choose these payment methods can pay in any currency, regardless of their shipping country. Moreover, checkout restrictions only apply to physical goods that require a shipping address. Customers can choose to pay for digital goods in any currency.
Adding up all these possible cases, merchants don't have full control over the currencies that will be used to pay for an order in a foreign market. This behavior can result in confusing checkout experiences and financial unpredictability.
2. Merchants are required to solely use Shopify Payments
To enable multi-currency for your store, Shopify Markets requires you to choose Shopify Payments as your payment gateway, which is only available in 17 countries. Merchants that operate their business in one of the unsupported countries, such as France, Portugal, and Norway — just to name a few — can't use this solution.
Even if your home country is supported, Shopify requires you to use Shopify Payments as your unique payment gateway worldwide. Some types of businesses and services are not permitted to use Shopify Payments so your business could be prohibited in some countries unless you use a different payment gateway.
On top of that, Shopify Payments has limited support for local payment methods that instill customer trust and impact conversion. This can slow down your international expansion. For example, through Shopify Payments, Klarna is only available for merchants in Austria, Sweden, and Germany. A merchant in the U.S. or U.K. can't offer Klarna to their customers.
Lastly, not being able to connect different payment gateways by market, merchants can't sell in different countries under different legal entities (e.g., local distributors) and can't optimize their transaction fees by comparing alternative gateways.
3. Merchants must carry all currency risk
For every transaction in a currency that is different from the store's base currency, a currency conversion occurs. Each currency conversion applies the foreign exchange (FX) rate at the time of the payment capture. FX rates are always fluctuating. Moreover, the FX rate may also change multiple times during the lifecycle of an order, in particular during the gap between:
- Authorizing and capturing a payment.
- Capturing and refunding a payment.
- Capturing a payment and paying a chargeback.
- A chargeback resolution win and a new capture.
Depending on the fluctuation, you will either gain or lose money. Regardless, there are currency risks associated with every transaction, a risk that Finance would want to avoid.
4. Merchants must absorb currency conversion fees
For each payment in the customer's local currency, Shopify charges a currency conversion fee in addition to the standard Shopify Payments processing fee. If your business has a high average order value or large volumes, these fees can have a meaningful impact on your business’s P&L. It becomes a growth tax.
5. Merchants can't offer market-specific promotions
When you sell in multiple currencies with Shopify Markets, you can offer percentage-based and fixed-amount discounts to customers. Fixed-amount discounts are set in the base currency of your single store. Shopify doesn't allow you to offer currency-based discounts; when a customer's local currency is different from the base currency, the discount is converted. As a result, the amount of the customer-facing discount can fluctuate day-to-day based on the currency exchange rates. Percentage-based discounts don't have a currency attached to them, so they behave as expected. It’s important to note that all your markets must share the same discount rules and it’s not possible to schedule promotions, as Launchpad is not supported by Shopify Markets.
6. Multi-market gift cards provide an unacceptable customer experience
Gift card values and balances are set in the base currency of your Shopify store. When customers purchase or redeem a gift card in their local currency, the gift card amount is converted. When customers check their gift card balance, it is reported in the store currency, not in their local currency. This is a lose-lose situation for both the customer and the merchant.
7. Shopify POS and other channels don't support multi-currency
Selling in multiple currencies with Shopify Markets is supported in your online store and in a headless environment using the Storefront API. Shopify POS supports your base currency only. You can't sell in multiple currencies in any other sales channels, including the Wholesale channel.
8. You can't restrict user access by market
Selling in multiple markets with a single Shopify admin dashboard doesn't allow you to restrict access to your users by market. For example, you can't create a user that can only see or manage data for a specific country or region. All users in your organization have access to all data. This can create security risks, especially for larger organizations.
Option 2 — A separate Shopify store per currency
Given all the limitations of selling in multiple markets from a single Shopify store, brands and agencies often adopt a different approach: they clone their primary store and create a separate Shopify instance for each market, with each store hosted on a different URL.
This workaround has become so prevalent amongst merchants that Shopify Plus includes nine expansion stores for internationalization under a single account. By using different stores for different markets, the limitations of the single store setup are removed:
- Merchants have full control over the currency used to pay for an order.
- Merchants are not required to use Shopify Payments and can — in theory — connect different gateways to different markets.
- Each store has a different base currency. There are no currency conversions and consequently, there are no FX risks.
- Since no currency conversions occur, there are no conversion fees to pay on top of the standard payment processing fees.
- Merchants can offer market-specific promotions.
- Merchants can offer market-specific gift cards.
- Merchants can use Shopify POS and other channels for each store, using the store's base currency.
- Having multiple Shopify stores, you can decide which users can access which stores.
Seems like this workaround fixes all limitations, right? The drawback of this solution is that you need to maintain and synchronize several instances of your store.
This architecture leads to resource demands and infrastructure costs:
- All content is duplicated across all instances and must be kept in sync after each refresh.
- Users need to log into multiple backends to manage all markets.
- You need to carry through any design or feature changes to all stores.
- You need to synchronize stock across all stores.
- You need to replicate all your store integrations.
- You need to install and pay for the same apps on all stores.
- Infrastructure costs can grow significantly.
In addition to data duplication issues, connecting different payment gateways to different markets is often not a viable option. When using a third-party payment gateway, Shopify charges transaction fees and does not provide native compliance with the PSD2 regulation, which requires additional payment authentication flows — namely 3DS2 and Strong Customer Authentication (SCA) — for all electronic payments in Europe and the UK. To be compliant with PSD2, Shopify merchants have to integrate Cardinal, a third-party 3-D Secure provider which adds another layer of complexity and costs.
In the end, the multi-store option is as suboptimal as the single-store one. Neither option in the Shopify ecosystem lets merchants scale internationally without substantial trade-offs or compiling technical debt.
What if you could leverage the simplicity of a single Shopify store and integrate a multi-store transaction architecture that eliminates currency woes and sets you on the path towards true localization? Enter Commerce Layer — a purely transactional API that’s been built multi-market from the ground up, enabling true localization in the checkout experience.
How Commerce Layer enables brands to scale internationally with a single Shopify store, without the trade-offs
Back in 2016, our Market model and API was one of the first commits we pushed to our Github repository. Within Commerce Layer, a Market can be a region, a country, a group of customers, or any other aggregation that shares the same business model. Unlike Shopify, the concept of "primary market" or "base currency" does not exist in Commerce Layer. There's no currency conversion. Price lists, inventory models, payment methods, promotions, shipping options, and any other resource can be natively localized by market, enabling maximum flexibility.
Given this architecture, Commerce Layer Markets offers a third, more scalable solution to sell internationally with Shopify, one that eliminates the trade-offs AND avoids the need to replatform:
- Build a multi-language, multi-country website on a single Shopify store, leveraging Shopify to manage catalogs, content, and hosting.
This solution lets you get the best of both worlds: (a) a flexible site builder and content management system provided by Shopify, (b) a native multi-market checkout provided by Commerce Layer, empowering developers and merchants with unparalleled flexibility. And since Commerce Layer is 100% transactional, it doesn’t overlap with Shopify’s CMS and themes.
Specifically, Shopify provides you with:
- Flexible themes architecture with Online Store 2.0.
- Market-specific catalogs (coming soon)
- Market-specific storefront content (coming soon)
- Simple hosting with fully managed site performance and security.
- SEO-friendly URLs with country/language support.
- An extensive ecosystem of agencies and developers.
Commerce Layer adds:
- Multi-market shopping cart.
- Multi-market, fully customizable checkout experience.
- Multi-market subscriptions.
- Market-specific price lists (with no currency conversions).
- Market-specific promotions (with flexible rules).
- Market-specific payment gateways (any local payment method).
- Market-specific inventory models and sourcing strategies.
- Market-specific user roles & permissions.
- A developer-first architecture with hundreds of APIs and webhooks.
The possibility to integrate different payment gateways in different markets lets merchants get paid in local currencies with no currency conversion risks or fees.
Each payment gateway integration provided by Commerce Layer (Stripe, Adyen, Braintree, Klarna, etc.) is fully compliant with the European PSD2 regulation, providing out-of-the-box support for 3DS2 and SCA.
How it works
The demo homepage is a country selector. To build this page, we've defined 36 countries in Shopify and 3 markets in Commerce Layer. Each market in Commerce Layer has a unique number. The association between the Shopify countries and the Commerce Layer markets is done by associating a market number to one or more country codes. The association is stored as a JSON metafield in Shopify.
When you select a country, the Drop-in library uses the connected market number to populate the Commerce Layer configuration HTML element, putting that market in scope.
To manage the products catalog, we've created a collection of six t‑shirts on Shopify. For each t‑shirt, we've defined four size variants: S, M, L, and XL. Then we've associated a unique SKU code to each variant. When rendering the page, the SKU codes are stored as HTML data attributes.
In Commerce Layer, we've created 24 SKUs, one for each product variant, using the same SKU codes that we've added in Shopify. For each SKU, we've defined different prices and inventory levels for each market. The Drop-in library uses the market in scope and the page's SKU codes to populate country-specific prices for those SKUs.
When you change country, a new market is selected. The page displays different prices for the same SKUs, as defined in Commerce Layer. Soon, Shopify will also allow you to customize catalogs and storefront content by market.
When you select a product variant, the Drop-in library updates the selected SKU price and the availability message, fetching the delivery lead time and shipping cost from Commerce Layer. If the variant is available, the library enables the "Add to cart" button.
If the selected variant is not available in any of the markets' stock locations, the customer is informed with a message and the "Add to cart" button is disabled.
When you add a variant to the shopping cart, you are redirected to the Shopify cart page. The Drop-in library fetches the shopping cart summary from Commerce Layer, which is entirely rendered client-side. Each shopping cart is persistent by country.
If you have some items in your cart and change country, you get a new shopping cart. If you go back to the previous country, the previous shopping cart is recovered. This behavior is determined by the Drop-in library, not by the Commerce Layer API, which is stateless. You can implement any behavior by interacting with the API directly.
The Drop-in library populates the checkout button with a link to a hosted checkout page, powered by Commerce Layer APIs. The checkout application is fully customizable, as described here.
After an order has been placed, Commerce Layer can orchestrate any fulfillment workflow, either through its admin UI or by integrating a third-party fulfillment service.
Get started with Shopify and Commerce Layer today
Following the same approach that we used to build our demo, developers can readily transform any Shopify theme into a multi-country ecommerce website. Keep in mind that using the Drop-in library is completely optional. You can work with the Commerce Layer's JS SDK and build a custom integration, gaining maximum flexibility.
Which stage are you at?
- If you sell internationally with a single store — with or without Shopify Markets enabled — you can keep your store and swap prices, product availability messages, shopping cart and checkout with Commerce Layer.
- If you sell internationally with a multi-store architecture, you can remove all expansion stores, keeping only your base store and add Commerce Layer.
- If you are not yet selling internationally, start on the path to true localization that will benefit your business and deliver a better experience for your customers.
Beyond its multi-market capabilities, Commerce Layer extends your Shopify store into a flexible commerce engine, unleashing your brand's potential. For a personalized demo or to discuss your use case, we invite you to complete the contact form below: