Allocating International Card & Amex Surcharges To The Right Order

Metricuno
August 13, 2026
6 min read
Allocating International Card & Amex Surcharges To The Right Order — How to allocate the extra 1-1.5% Shopify Payments charges on international cards and Amex to the right order — so cross-border CM isn't hidden in the average.
Quick answer

The extra 1.0-1.5% Shopify Payments takes on international cards and Amex belongs on the orders that incurred it — not smeared across your domestic-card contribution margin.

Quick answer

Book the extra 1.0-1.5% Shopify Payments charges on international-card and Amex orders against those specific order IDs, not as a blended rate. Match the per-order fee from your Shopify Payments payout CSV to the order, subtract your baseline domestic-card rate, and store the delta as an `intl_amex_surcharge` field on the order. Otherwise your cross-border and premium-card orders quietly eat 100-300 bps of margin that shows up as a lower average CM across the whole store.

Definition
Contribution Margin

International Card & Amex Surcharge Allocation

Booking the extra Shopify Payments fees on international cards and Amex to the specific orders that incurred them, so cross-border CM isn't hidden in the average.

Shopify Payments charges a baseline rate on domestic Visa/Mastercard (roughly 1.5-2.9% depending on plan and country) and adds a surcharge — typically +1.0% on international cards, +0.5-1.0% on Amex, sometimes both — for orders that use those payment methods. If you use a single blended processing rate in your contribution margin calc, those extra basis points get smeared across every order, making US-to-EU and Amex-heavy orders look artificially profitable and domestic orders look artificially weak.

Allocating the surcharge means recording the actual fee Shopify deducted for each order and attributing the delta above your baseline to that order specifically.

Also known as
cross-border fee allocation
per-order Amex fee attribution
international card surcharge accounting

Most Shopify finance stacks treat payment processing as a flat percentage in the CM formula — a legacy of the pre-payout-CSV era, when per-order fees weren't easily accessible. That shortcut costs you visibility into which countries, card brands, and price points are actually profitable.

Why the surcharge silently distorts CM

Take a UK-based apparel store on Shopify Payments. Domestic UK Visa clears at ~1.5% + 25p. A US customer paying with a US-issued Visa on the same store pays 1.5% + 1.0% international + 25p — a 100 bps hit. If that US order is €180, you've lost €1.80 of margin that never appears in the fee line.

Amex is worse. On a UK Shopify Payments account, Amex typically runs 2.5-3.0% versus 1.5% for Visa/Mastercard — a 100-150 bps premium. On a €200 order with 45% gross margin, that's roughly 1% of revenue and ~2-3% of contribution margin, silently reallocated.

The averaging trap

If 12% of your orders are international and 8% are Amex, a blended 2.1% processing rate looks reasonable on the P&L — but it's masking a ~90 bps overcharge on those 20% of orders and a ~15 bps undercharge on the domestic 80%. Cohort CM by country or card brand will look wrong until you allocate.

How to detect the leak in your own data

Pull two months of Shopify Payments payouts and join them to orders on `order_id` — the same join you'd use to pull per-order fees from Shopify payouts versus PayPal reports. Compute fee-as-percent-of-gross for each order, then group by billing country and card brand.

If your domestic Visa/Mastercard rows cluster around 1.5-1.9% and your US-billing rows sit at 2.5-3.0%, that gap is the international surcharge. Amex rows will show a similar step up. Anything above the baseline is what you need to allocate.

How to fix the allocation

Store three fields on every order in your warehouse: `processing_fee_actual` (from the payout CSV), `processing_fee_baseline` (your domestic-card benchmark, e.g. 1.6% + 25p), and `intl_amex_surcharge` (the difference). Your CM formula then subtracts the actual fee, not a blended assumption.

This is the same pattern used in allocating Shopify Payments and PayPal fees per order for CM — you're just splitting the fee into a baseline component and a surcharge component. The surcharge column is what makes country- and card-level cohorts honest.

What the surcharge column unlocks

Once you can filter CM by `intl_amex_surcharge > 0`, three things become possible: (1) pricing tests on international AOV thresholds to recover the 100 bps, (2) an honest read on whether Amex-heavy segments (higher AOV, older customers) still out-earn their fees, and (3) accurate ROAS floors per market, since paid acquisition to a US audience needs a higher CM to break even than the same spend to a domestic audience.

Experiment ideas once allocation is clean

Test a small international shipping-price uplift (€2-4) on markets where the surcharge is eroding CM below your floor — most stores find price sensitivity is lower than they assumed at those thresholds. Measure incremental CM, not just conversion rate, so the surcharge shows up on the right side of the equation.

Second: run a paid-channel budget reallocation test. If US traffic converts at the same rate as UK traffic but delivers 90 bps less CM, your allowable CPA should be proportionally lower. Feed the allocated CM back into your bidding as a market-specific target and measure blended CM over 6-8 weeks.

Frequently asked

Frequently asked questions

Rates vary by country and plan, but as a rule of thumb: +1.0% for international cards on top of the domestic Visa/Mastercard rate, and Amex runs 100-150 bps above Visa/Mastercard where Shopify Payments supports it. Some markets add EEA/non-EEA distinctions. Always confirm against your current Shopify Payments agreement — the surcharges have changed twice in the last three years.

The Shopify Payments payouts export (Finances → Payouts → Export) gives you `fee` per transaction, joinable to orders on the transaction ID. The Orders API also exposes `payment_details` and `transactions[].fee` per order. The payout CSV is more reliable for reconciliation because it matches what actually hit your bank.

Yes, and PayPal's cross-border surcharges are typically higher (1.5% international + a currency conversion spread). PayPal reports the per-transaction fee in the transaction detail export, but the format is different from Shopify Payments payouts — see the guide on pulling per-order fees from Shopify payouts vs PayPal reports for the join logic.

Neither directly — use the card's issuing country, which Shopify exposes on the payment method. A US tourist ordering to a UK address on a US card still triggers the international surcharge. Billing country is a decent proxy but misses cases where the card country differs from the address.

If your international + Amex mix is 15-25% of orders (typical for a European DTC brand shipping globally) and the average surcharge is 100 bps, you're mis-attributing roughly 15-25 bps of revenue across your store. That sounds small until you realise it lands entirely on ~20% of orders — meaning those cohorts are 75-125 bps lower CM than your reports show.

Per-order is enough. The surcharge is a percent of order total, so it's already proportional to basket size. Only allocate to SKU if you're building product-level CM and need to distribute proportionally — in which case allocate on line-item revenue share, not equally per unit.

Shopify Payments charges a separate currency conversion fee (typically 1.5-2%) when the customer pays in a currency different from your payout currency. This is a third bucket: baseline processing, international surcharge, and conversion spread. Store all three separately if you sell in multiple currencies via Shopify Markets.

You can, and it fixes the P&L average, but it doesn't fix cohort CM. A blended 2.1% assumption still shows every order taking a 2.1% hit — so US orders look 40 bps too profitable and UK orders look 60 bps too weak. If you only ever look at store-wide CM, blended is fine. If you make market or channel decisions, allocate.

Quarterly is sufficient for most stores. Shopify adjusts rates on plan changes, country expansions, and occasionally as blanket updates. Set an alert if your fee-as-percent-of-gross for domestic Visa/Mastercard drifts more than 10 bps quarter over quarter — that's your signal to refresh the baseline.

Warehouse. Payout CSVs are messy, and joining them to orders reliably needs SQL. A simple dbt model with orders, payouts, and a `fees_allocated` table gives you the three fields (actual, baseline, surcharge) as columns on every order. Spreadsheets break past ~50k orders and can't feed your CM dashboard reliably.

Get an AI expert review of your site

Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.