International fulfillment

Shopify Shipping per Region for Variants

A US buyer clicks add-to-cart on a personalized shirt. Fulfillment routes to Printful North Carolina, ships USPS Priority, arrives in 3 days. A UK buyer clicks the same product. Fulfillment must route to Printful UK (or Latvia), ship Royal Mail, arrive in 4 days — not fly the shirt across the Atlantic. Per-region shipping variants make that routing automatic, and the shipping rate quoted matches the actual carrier at the actual warehouse. Here is the full setup.

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

The routing problem

Shopify's native shipping is warehouse-centric: you set up shipping rates per shipping origin, and the buyer's destination determines which rate applies. Personalization stores using multiple POD partners face a variant-level routing problem: the same product SKU has different fulfillment origins depending on the buyer's region (US buyers = Printful NC, EU buyers = Printful Latvia, JP buyers = Gelato Japan). Native Shopify handles this via per-market shipping zones + fulfillment location assignment — but variants without proper metafield tagging default to the first-configured warehouse, which means Japan orders can accidentally ship from North Carolina.

The four regional fulfillment strategies

1. Single POD partner with regional warehouses

Use Printful or Gelato for their multi-region warehouses. Setup: one POD partner account, warehouses in US + EU + AU + JP, Printful/Gelato auto-routes to nearest warehouse based on ship-to address. Simplest, works out of the box, but locks you into one partner's product catalog + pricing.

2. Multiple POD partners per region

Printful for US, Gelato for EU, local POD for Japan. Best product catalog + pricing per region, but requires per-variant routing rules in your fulfillment layer.

3. In-house US warehouse + POD for international

US orders fulfill from your own warehouse (better margin), international orders route to POD (no capex on foreign warehouse). Common for merchants doing $1M+/year in US.

4. In-house 3PL with regional nodes

ShipBob, ShipHero, ShipMonk with US + EU + Australia nodes. For made-to-order personalization this only works if the 3PL supports the print-file API integration.

Regional POD partner warehouse footprint

POD partnerNorth AmericaEuropeAsia-PacificLatin America
PrintfulNC, LA, Dallas, TorontoLatvia, Spain, UKAustralia, Japan (limited)Mexico
Printify15+ US partnersUK, Germany, LatviaChina, AustraliaMexico
Gelato32 US states, CanadaUK, DE, FR, ES, IT, SEJP, SG, AU, NZBrazil, Mexico
GootenMulti-USUK (limited)Australia (limited)
CustomCatDetroit (only)

Per-variant warehouse metafield

Attach a fulfillment_warehouse metafield to each variant listing which warehouses can print it. A fulfillment webhook reads the metafield + the ship-to country and picks the correct warehouse:

// Fulfillment webhook: pick warehouse by ship-to country
const WAREHOUSE_ROUTING = {
  'US': ['printful-nc', 'printful-la', 'printful-dallas'],
  'CA': ['printful-toronto'],
  'GB': ['printful-uk', 'gelato-uk'],
  'DE': ['printful-latvia', 'gelato-de'],
  'FR': ['printful-latvia', 'gelato-fr'],
  'JP': ['gelato-jp'],
  'AU': ['printful-au', 'gelato-au'],
};

function pickWarehouse(shipTo, variantMetafield) {
  const eligibleWarehouses = WAREHOUSE_ROUTING[shipTo] || WAREHOUSE_ROUTING.US;
  const variantAllowed = variantMetafield.split(',');
  return eligibleWarehouses.find(w => variantAllowed.includes(w))
      || 'printful-nc'; // fallback
}

Per-region shipping rate at checkout

Shipping rates shown at checkout must reflect the actual warehouse. If a UK buyer sees "$18 international shipping" but their order actually ships from Printful UK for £4.99, you're overcharging (and losing the sale). Shopify's Carrier Calculated Shipping API can integrate with your fulfillment routing to show real per-warehouse rates:

// Shopify Carrier Service API — return real per-warehouse rate
POST /shopify/carrier_service/quote
{
  "rate_request": {
    "destination": { "country": "GB" },
    "items": [{ "variant_id": 40123, "quantity": 1 }]
  }
}
→ 200 {
  "rates": [
    {"service_name": "Royal Mail 48h", "total_price": "499", "currency": "GBP"},
    {"service_name": "DPD Next Day", "total_price": "999", "currency": "GBP"}
  ]
}

DDP vs DAP — duties at delivery

DDP (Delivered Duty Paid) — you calculate + collect duties at checkout, package clears customs without additional charges to the buyer. Best UX; requires you (or Shopify Markets Pro / a duty-calc partner) to compute correct duty rates per HS code per destination.

DAP (Delivered At Place) — buyer pays duties on delivery to the carrier. Cheaper for you to implement, but 15-25% higher refusal rates because buyers get sticker-shocked at the door. Not recommended for personalized goods (can't restock).

Regional carrier options

Frequently asked questions

How do I ship personalized products from different warehouses per region?

Attach a fulfillment_warehouse metafield to each variant listing eligible warehouses. A fulfillment webhook reads the metafield + ship-to country and routes to the correct warehouse. Print It My Way handles this natively.

Which POD partner has the widest global warehouse coverage?

Gelato — 32 US states + 6+ EU countries + Japan + Singapore + Australia + New Zealand + Brazil + Mexico. Printful is second. Printify varies by print partner. Gooten and CustomCat are US-heavy.

Should I use DDP or DAP for international personalized products?

DDP — you calculate and collect duties at checkout. Personalized goods can't be restocked if refused at customs, so DAP's 15-25% refusal rate is a cost you can't absorb. Shopify Markets Pro or a duty-calc partner handles DDP calculation.

How do I show real per-warehouse shipping rates at checkout?

Integrate with Shopify's Carrier Calculated Shipping API. Your fulfillment router receives the destination + variant list, computes which warehouse would print each item, and returns per-warehouse carrier rates.

Can I use one POD partner for all regions?

Yes if the partner has warehouses in all your target regions. Printful and Gelato both work as single-partner global solutions. The tradeoff is product catalog + pricing lock-in.

Does Shopify Markets Pro handle per-region fulfillment routing?

Not directly — Markets Pro handles merchant-of-record, currency, tax, and duty calculation. Fulfillment routing is your responsibility (via a POD partner's auto-routing or a custom webhook that reads variant metafields).

Best Shopify app for per-region personalization fulfillment?

Print It My Way for the variant-metafield routing + POD partner API integration + per-region carrier rate lookups. Combined with your chosen POD partner's global warehouse network.

How do I handle a variant that's not stocked in the buyer's region?

Two options: (1) filter the variant from the storefront for that market (see per-market variants), or (2) transfer stock from the nearest warehouse and show extended shipping time + higher shipping cost at checkout. Filtering is safer for personalized goods.

Related reading

Try it free on Shopify

Print It My Way's permanent Free plan includes per-variant fulfillment routing, POD partner API integration, and Carrier Service API support for real per-warehouse rates.

Install Print It My Way