Field notes on what Shopify Markets does to product data, one language at a time.
Turn on a new market and the admin doesn't blink. Same product list, same counts, same dashboard. Nothing about the store looks bigger.
That's the trick. Everything just got bigger except the number.
The copy-job theory
We used to file internationalization under copywriting. Hand the catalog to a translator, get the strings back, paste them in, ship the market. A project with an end date.
That theory survives right up until you read what Shopify actually multiplies. One store can run up to 50 markets and publish up to 20 languages. Each published language is a shadow copy of every translatable field on every product: the title, the description, the URL handle if you localize it, plus any metafield you expose to the storefront.
Twenty shadow copies, kept current forever. The end date was imaginary.
The fields that refuse to travel
Then the exceptions start stacking. Tags can't be translated at all, so anything hanging on tags stays monolingual in every market you open. Metafields translate only if they're publicly accessible. Policies won't auto-translate; a human writes the legal text in every language.
And Shopify's Translate & Adapt app auto-translates a maximum of 2 languages. From the third language on, the strings are your problem. Somewhere around there, the copy job quietly becomes a data job.
Adapt is the part people miss. Same language, different market: "Sweaters" on one side of the Atlantic, "Jumpers" on the other. The same language argues with itself across an ocean, and you own both sides of the argument.

Every market does its own arithmetic
Prices fork the same way. Each market either converts your base price at the current exchange rate, with rounding rules you choose and the option to pin rates manually, or runs a price list of its own: a percentage adjustment up or down, or fixed prices per variant. Fixed prices take precedence over everything else.
When a customer qualifies for more than one catalog, Shopify hands them the lowest price it can find across all of them. The customer always wins that argument.
Availability forks too. A catalog decides what exists in each market, and a product left out of that market's publication is hidden from the storefront, omitted from search results, and blocked from the cart. To a shopper standing in that market, it was never made.
The fork
The realization, eventually: Markets doesn't translate your store. It forks your catalog. One catalog in five countries is the same SKUs wearing five sets of data, strings and prices and availability, each drifting on its own schedule.
Shopify quietly agrees. Every translation is registered against a digest of the source content, a checksum of the exact text it was written for. Edit the source title and the translation you shipped is keyed to text that no longer exists. Nothing breaks. Shopify's own help docs call those translations out of sync, and the remedy they offer is manual: run the translation again.
Handles have the same property with worse manners: change a product's handle and the language-specific URLs don't get redirects.

Locales are environments
What changed for us is the job description. Translation is catalog ops; the copywriting is the smallest part of it.
We stopped treating locales as deliverables and started treating them as environments. Every check our pipelines run against a primary catalog now runs against every published language, and drift shows up in a diff instead of a customer email we'd need translated before we could worry about it (we learned that distinction on a language nobody in the room could read).
Our pipelines already move ~5,000 products a day. Every published language multiplies the surface those products carry, and none of that surface appears in the product count.
What went on the wall
- Count surfaces, not SKUs: products times published languages, plus every market running its own price list.
- Don't hang market logic on tags. Tags stay monolingual everywhere.
- Treat translations like builds: keyed to a source version, and the source moves.
- Before opening market five, name the person who owns drift in markets one through four.
The admin will keep showing you one product count, and it isn't wrong, exactly. It's counting the only copy that has a number.
Count the surfaces.
If you'd rather map your catalog's real surface before your markets do it for you, OKART's Infrastructure Stress-Test counts them, read-only, in a few days.
Sources
- About Shopify Markets: market structure, the 50-market limit, price adjustments, and catalog-based product availability (hidden from storefront, search, and cart).
- Manage translations of merchant-provided content: translatable resources, the 20-locale limit, translatableContentDigest registration, untranslatable tags, and the handle-redirect limitation.
- About catalogs for different markets: catalogs as publication plus price list, fixed prices taking precedence, and the lowest-price rule across multiple catalogs.
- Add language translations using the Translate & Adapt app: the 2-language auto-translation maximum, manual-only policies, metafield localization, and per-market content adaptation.
- Shopify Markets international pricing: automatic conversion at current exchange rates, manual exchange rates, and per-market price rounding.





Share:
The new buyer never sees your homepage. It can already check out.
642,000 SKUs later, every catalog has the same seven problems