International commerce

Shopify Currency-Specific Pricing on Options

Shopify Markets auto-converts base variant prices between currencies, but personalization option fees don't get the same treatment. A $5 engraving fee auto-converts to €4.63 in France — a price point no European merchant would ever choose. Currency-specific pricing lets you set psychologically anchored prices per currency (€4.99 in EUR, £3.99 in GBP, ¥600 in JPY) instead of algorithmic conversions. Here is the setup and the rounding rules that matter.

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

Auto conversion vs manual per-currency pricing

Shopify Markets auto-converts base variant prices using the previous-day spot FX rate, then applies your configured rounding rule. This works acceptably for base products where a $19.99 shirt becoming €18.51 is easily rounded to €18.99 or €19.99. It falls apart for option fees where a $5 add-on becomes €4.63, £3.94, ¥750, or ₹416 — none of which read as intentional prices. Manual per-currency option fees let you set the exact price point per currency.

Recommended price points per currency

Option (USD)EURGBPJPYAUDCADINR
$3.99€3.99£3.49¥500A$5.99C$4.99₹299
$4.99€4.99£4.49¥700A$7.49C$6.49₹399
$5.99€5.99£5.49¥900A$8.99C$7.99₹499
$7.99€7.99£6.99¥1,200A$11.99C$10.99₹699
$9.99€9.99£8.99¥1,500A$14.99C$13.99₹899

These aren't literal FX conversions — they're psychologically anchored price points per currency that align with local purchasing patterns. €4.99 feels the same to a French buyer as $4.99 does to a US buyer, even though the actual FX rate would put them ~15% apart.

Setting per-currency option fees

Use a Cart Transform Function to read the buyer's presentment currency and apply the matching fee:

const OPTION_FEES = {
  photo_upload: { USD: 5.99, EUR: 5.99, GBP: 5.49, JPY: 900, AUD: 8.99 },
  rush_production: { USD: 7.99, EUR: 7.99, GBP: 6.99, JPY: 1200, AUD: 11.99 },
  gift_wrap: { USD: 3.99, EUR: 3.99, GBP: 3.49, JPY: 500, AUD: 5.99 },
};

export function run(input) {
  const currency = input.cart.cost.totalAmount.currencyCode;
  const operations = [];

  input.cart.lines.forEach(line => {
    const optionKey = line.attribute?.value;
    if (!optionKey || !OPTION_FEES[optionKey]) return;
    const fee = OPTION_FEES[optionKey][currency] || OPTION_FEES[optionKey].USD;

    operations.push({
      update: {
        cartLineId: line.id,
        price: { adjustment: { fixedPricePerUnit: { amount: fee.toFixed(2) }}}
      }
    });
  });
  return { operations };
}

Rounding rules by currency

Shopify Markets' rounding rules apply to base variants only. Set your option fees to match the visual patterns customers expect in each currency:

Displaying the correct currency symbol

Shopify's {{ money }} Liquid filter respects the current presentment currency and formats it correctly. For personalization option prices rendered client-side (a "Photo upload +$5.99" badge), pass the presentment currency to your JS:

<script>
  window.SHOPIFY_CURRENCY = {{ cart.currency.iso_code | json }};
  window.SHOPIFY_MONEY_FORMAT = {{ shop.money_format | json }};
</script>

// JS
function formatMoney(amount) {
  return new Intl.NumberFormat(navigator.language, {
    style: 'currency',
    currency: window.SHOPIFY_CURRENCY,
  }).format(amount);
}

Tax-inclusive vs tax-exclusive display

EU countries require tax-inclusive pricing display. Your option fee shown on the product page as "+€4.99" must include VAT. If your Cart Transform stores the fee as €4.16 net and Shopify adds 20% VAT at checkout, the price the customer sees changes between product page and cart — which triggers cart abandonment. Store option fees as gross (VAT-inclusive) for EU markets and let Shopify's tax engine reverse-calculate the net for reporting.

FX rate refresh cadence

If you use auto-conversion for option fees (not recommended but supported), Shopify refreshes FX rates once per day at ~5am UTC. Merchants who set price points that only make sense at a specific FX rate get surprised when the daily refresh moves prices by 2-3%. Manual per-currency pricing eliminates this risk entirely.

Frequently asked questions

Does Shopify Markets support per-currency personalization option fees?

Not natively — Markets auto-converts option fees using yesterday's FX rate. To set psychologically anchored prices per currency (€4.99 instead of €4.63), use a Cart Transform Function that reads the presentment currency and applies matching per-currency fees.

Should I use auto FX or manual per-currency pricing for options?

Manual for anything customers see and evaluate — option fees, personalization add-ons, rush surcharges. Auto is fine for wholesale-only prices where FX precision matters more than psychological anchoring.

What rounding rule should I use per currency?

USD/CAD/AUD/GBP: .99 or .49 endings. EUR: .99 or .95 (regional preference). JPY: whole hundreds. INR: end in 99. SEK/NOK/DKK: whole tens. Match the local currency's cultural convention.

How do I display option prices in the correct currency symbol?

In Liquid, use the {{ money }} filter which respects presentment currency automatically. For client-side JS rendering, pass cart.currency.iso_code to the script and format with Intl.NumberFormat.

Does tax-inclusive pricing affect option fees in the EU?

Yes — EU regulations require product page prices to include VAT. Store your EU option fees as VAT-inclusive amounts in Cart Transform. Shopify's tax engine handles the net reverse-calc for reporting.

How often does Shopify refresh FX rates for auto-converted option fees?

Once per day, approximately 5am UTC, using the previous day's mid-market rate. This is why manual per-currency pricing is more predictable — auto-converted prices can shift 2-3% overnight.

Best Shopify app for per-currency option pricing?

Print It My Way — supports per-currency option fees via Cart Transform on all Shopify plans, no code required, VAT-inclusive display for EU markets.

Can I set different option fees for different markets (not just currencies)?

Yes — Cart Transform can read input.cart.buyerIdentity.market.handle and apply market-specific rules independently of currency. Useful when the same currency is used in multiple markets with different pricing (USD in US vs USD in international customers).

Related reading

Try it free on Shopify

Print It My Way's permanent Free plan supports per-currency option pricing, VAT-inclusive display for EU markets, and market-aware Cart Transform rules.

Install Print It My Way