How to sell in multiple countries from one ecommerce backend

Type
Concept
Applies to
Medusa v2.x
Updated

Short answer

Medusa sells in multiple countries from one backend without running separate stores. You create a region per market with its own currency, countries and payment providers, set prices per currency or region, configure tax regions with tax-inclusive pricing for the UK and EU, and limit shipping options to service zones. Duties and automatic currency conversion need custom integrations.

How Medusa runs several countries from one backend

Medusa v2 sells in multiple countries from one application, without running separate stores. Each country maps to a region, and prices, taxes, shipping and stock are resolved per request from the customer's region, country and cart. The Multi-Region Store recipe describes the full setup.

TermWhat it means in MedusaStatus
Market or regionA region has one currency, a list of countries, payment providers and a tax-inclusive setting. Several regions can share a currency.Native
Prices per countryA variant's price set holds one price per currency, plus optional prices with a region_id ruleNative
VAT and sales taxTax regions per country with a default rate, overrides by product type, and state or province sublevelsNative
Tax-inclusive pricesEnabled per region or per currencyNative
Shipping per countryShipping options are limited to service zones made of countries, provinces, cities or postal codesNative
Multi-warehouseStock locations with inventory levels per locationNative
Tax engineAvalara tax providerOfficial guide
Duties, landed cost, merchant of recordNot built inCustom

Worked example: US, UK and EU settings

The table shows one way to configure a store that sells in the United States, the United Kingdom and the EU. You enter tax rates in each tax region, or a tax provider returns them.

SettingUnited StatesUnited KingdomEuropean Union
RegionUnited States, country usUnited Kingdom, country gbEurope, countries such as de, fr, nl
Currencyusdgbpeur
Tax-inclusive pricingOff (sales tax added at checkout)On (VAT included)On (VAT included)
Tax regionsus with state sublevels, or Avalara as the providergb with a default rate (standard VAT is 20%)One tax region per country, each with its own rate
Example variant price40 usd35 gbp39 eur
Shipping optionsService zone for us, fulfilled from a US warehouseService zone for gbService zone for EU countries, fulfilled from an EU warehouse
Payment providersChosen per region, for example StripeChosen per regionChosen per region

UK VAT rates come from GOV.UK. Each EU country sets its own VAT rate, with a standard rate of at least 15% (Your Europe).

Example API calls for a multi-region setup

You create a region with the Admin API, here through the Medusa JS SDK. The fields below are part of the Create Region API route:

await sdk.admin.region.create({
name: "Europe",
currency_code: "eur",
countries: ["de", "fr", "nl"],
automatic_taxes: true,
is_tax_inclusive: true,
payment_providers: ["pp_stripe_stripe"],
})

In the storefront, you pass the customer's region and country when you fetch products. Medusa returns each variant's Copy to clipboardcalculated_price in the region's currency, with and without tax (Retrieve Product Variant's Prices):

const { product } = await sdk.store.product.retrieve(id, {
fields: "*variants.calculated_price",
region_id: region.id,
country_code: "de",
})

At checkout, customers only see the payment providers enabled for their region and the shipping options that can deliver to their address.

Medusa compared with Shopify Markets, BigCommerce and commercetools

All four platforms can sell to several countries from one catalog. They differ in how currencies are priced and in who handles duties and compliance.

CapabilityMedusaShopify MarketsBigCommercecommercetools
Unit of setupRegions in one backendMarkets in one storeMulti-Storefront channels, each with its own currencyStores with their own countries, languages and channels
Price per currencySet a price per currency or per regionConverted automatically at the exchange rate by default, or fixed per market through catalogsAuto-converted at a merchant-set exchange rate (updated manually or through the API), or set per currency with price listsPrices scoped by currency, country, customer group and channel
Automatic FX conversionNoYesYes, at a merchant-set rateCheck vendor docs
Duties and merchant of recordCustom integrationManaged Markets: Global-e is the merchant of record and handles dutiesCheck vendor docsCheck vendor docs

Shopify facts come from its international selling and Managed Markets help pages. BigCommerce facts come from How Currencies Work.

What Medusa does not do for international selling

Medusa leaves three cross-border jobs to you or to an integration:

  • Duties and landed cost. Medusa has no duty calculation. Call a landed-cost service from a custom workflow or a fulfillment provider's price calculation.
  • Merchant of record. Medusa does not act as the seller of record. You sell under your own entity and handle tax registrations, or integrate a merchant-of-record service as a custom provider.
  • Automatic FX conversion. Medusa does not convert prices by exchange rate. Set a price for each currency, or write a scheduled job that updates prices from a rate feed.

For tax calculation beyond fixed rates, the Avalara guide builds a tax provider that returns rates per address.

When Medusa is not the right choice

  • You have no developer and want multi-currency selling configured from an admin screen. Shopify Markets covers that.
  • You want a provider to act as merchant of record, collect duties and hold tax registrations for you without engineering work. Shopify Managed Markets does this for eligible merchants.
  • You sell in one country with one currency. A multi-region backend adds setup you will not use.

Common questions

Does Medusa convert prices between currencies automatically?

No. Medusa selects a price you set for each currency or region and does not convert prices by exchange rate. You can write a scheduled job that updates prices from an exchange-rate feed.

Can one Medusa store use different payment providers per country?

Yes. Each Medusa region has its own list of payment providers, and customers only see the providers enabled for their region at checkout.

Does Medusa calculate customs duties or act as merchant of record?

No. Medusa has no built-in duty or landed-cost calculation and does not act as merchant of record. You integrate a landed-cost or merchant-of-record service through a custom workflow or provider.

Can Medusa show different stock per country?

Yes. Medusa's Stock Location and Inventory Modules track inventory per location, and shipping options are tied to the service zones of each location's fulfillment set.

Is Medusa an alternative to Shopify Markets?

Medusa covers multi-region pricing, taxes, shipping and payments from one backend, but it needs a developer and has no built-in merchant-of-record service like Shopify Managed Markets.