International commerce

Shopify Per-Market Variants

A t-shirt sold in the US comes in S/M/L/XL/2XL. The same shirt sold in the EU comes in 36/38/40/42/44 with different chest measurements. A jewelry pendant sold in Japan uses ring size 8-25 (Japanese scale) instead of US 4-13. Per-market variants let you show the right sizing, materials, or options to each market without duplicating the product 5 times. Here is the setup, the variant cap math, and the catalog exclusion rules.

Last updated: August 23, 2026~11 min readBy the Print It My Way team

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.

API pagination changed with the cap raise. Bulk operations on products with 500+ variants must use the paginated variant query — you can no longer fetch all variants in a single request. Update your Admin API integrations to page 100 variants at a time.

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

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