What Shopify Markets natively supports (and doesn't)
Shopify Markets (all plans, upgraded features on Plus) natively supports per-market pricing, per-market currency, per-market publishing (hide products from specific markets), and per-market translations. What it does not support natively: per-market variant sets. Every variant on a product is available in every market unless you exclude it via catalog rules — which are Plus-only. Non-Plus stores must handle per-market variant filtering client-side.
The three patterns for market-specific variants
1. Duplicate product per market (simplest, worst SEO)
Create "T-Shirt (US)" and "T-Shirt (EU)" as separate products. Each has its own variants. Trivially simple; produces duplicate content and doubles your product catalog.
2. Unified product + market-tagged variants + client-side filter
Single product with variants tagged by market metafield. Storefront filters visible variants based on localization.market.handle. Preferred pattern for non-Plus stores.
3. Native Shopify catalogs (Plus only)
Create a catalog per market. Assign products/variants to catalogs. Shopify handles filtering natively. This is the clean solution but requires Plus ($2,300/month).
The 2,048 variant cap and why it matters now
Shopify raised the per-product variant cap from 100 to 2,048 on October 15, 2025. This is the change that makes true multi-market variants feasible without workarounds. Before: a shirt with 4 colors × 5 US sizes × 5 EU sizes = 100 variants, exactly at the old cap and blocking further options. After: same shirt with 4 colors × 5 US sizes × 5 EU sizes × 3 fabric weights × 8 print positions = 2,400 variants — over the new cap, but for most personalization stores you're now nowhere near it.
Client-side variant filtering pattern (non-Plus)
// theme.liquid — expose market handle to JS
<script>
window.SHOPIFY_MARKET = {{ localization.market.handle | json }};
</script>
// product-form.js — filter variants by market metafield
document.querySelectorAll('option[data-variant-id]').forEach(opt => {
const variantId = opt.dataset.variantId;
const variant = window.PRODUCT_VARIANTS.find(v => v.id === variantId);
const availableMarkets = variant.metafield_market_availability?.split(',') || [];
if (availableMarkets.length && !availableMarkets.includes(window.SHOPIFY_MARKET)) {
opt.remove();
}
});
Set the market_availability metafield on each variant to a comma-separated market list ("us,ca,mx"). Variants without the metafield show in every market. Simple, no app required, no Plus required.
EU vs US sizing — the real conversion killer
A US customer shopping the same shirt sees "S / M / L / XL / 2XL" — 5 variants. Show that same US customer 20 variants ("S US / M US / ... / 36 EU / 38 EU / ...") and drop-off jumps 40-60%. Filter by market religiously; a bloated variant selector kills conversion faster than almost anything else on the product page.
Fulfillment routing
Per-market variants often tie to per-market fulfillment. Print It My Way's variant metafield can carry both market availability and fulfillment location, so an EU-market variant automatically routes to your EU POD partner (e.g., Printful's Latvia warehouse) instead of the US-default fulfillment location.
Catalog rules on Shopify Plus (the clean way)
Plus merchants use Shopify catalogs to assign specific variants to specific markets natively. No client-side JS, no metafield hacks. Setup:
Settings → Catalogs → Create catalog
→ Name: "EU"
→ Add products / variants
→ Assign to market: European Union
Settings → Markets → EU → Catalog: "EU"
Currency + tax per market
Per-market variants often mean per-market pricing. Shopify Markets handles currency conversion natively, but for personalization option fees, apply market-aware pricing via Cart Transform that reads input.cart.buyerIdentity.market.handle. EU markets require VAT-inclusive display; US markets show tax at checkout. Wire this into your option-fee display or you'll misrepresent prices in the EU (which is regulated).
Frequently asked questions
What are per-market variants on Shopify?
Variants that are visible or purchasable only in specific markets — a size 44 EU variant that's hidden from US shoppers, or a photo-upload option available only in markets where your POD partner supports high-DPI processing. Shopify Plus supports this natively via catalogs; non-Plus stores implement it via variant metafields + client-side filtering.
What's the Shopify variant cap in 2026?
2,048 variants per product, raised from 100 on October 15, 2025. This means true multi-market variant matrices (US + EU + JP sizing on the same product) are feasible without workarounds.
How do I show different sizes to different markets?
Two approaches: (1) native — Shopify Plus catalogs assign specific variants to specific markets, (2) non-Plus — set a market_availability metafield on each variant and filter client-side in theme JS based on the current market handle.
Does Shopify Markets handle per-market variant pricing?
Yes for variant prices (native per-market pricing). No for personalization option fees — those need a Cart Transform rule that reads the buyer's market handle and applies market-specific option pricing.
How do I hide variants from specific markets without Shopify Plus?
Set a metafield like market_availability = "us,ca" on each variant. In your theme JS, filter the variant selector to remove variants whose market_availability doesn't include the current market handle (available in Liquid as localization.market.handle).
Best Shopify app for per-market personalization variants?
Print It My Way for market-aware option filtering, per-market fulfillment routing, and per-market Cart Transform pricing rules — works on all Shopify plans, not just Plus.
How does the 2,048 variant cap affect Admin API pagination?
You can no longer fetch all variants in a single GraphQL request. Use the paginated variants connection (variants(first: 100, after: $cursor)) and iterate through pages until hasNextPage is false.
Can I route per-market variants to different POD partners?
Yes — attach a fulfillment_location metafield to each variant. A fulfillment webhook reads the metafield and routes to the correct POD partner (Printful US, Printful EU, Gelato Japan, etc.). Print It My Way includes this routing out of the box.
Related reading
- Multi-currency variants — per-currency pricing
- Shipping per-region variants — fulfillment routing
- B2B multi-region catalog — corporate multi-market
- Hreflang variant URLs — SEO across markets
Try it free on Shopify
Print It My Way's permanent Free plan includes market-aware option filtering, per-market fulfillment routing, and market-specific Cart Transform pricing.
Install Print It My Way