MerchantFlowMerchantFlow Docs
Profit & Loss

Country Fulfillment Rates - Per-Destination Quantity Tiers

Set per-country, per-unit fulfillment rates with quantity tiers in MerchantFlow. Covers the per-unit tier math, how rates are resolved on each order, and bulk setup via CSV.

Country Fulfillment Rates

Country fulfillment rates let you refine the flat per-unit fulfillment rate on each variant with overrides per destination country - and per quantity tier within each country. If your supplier charges $6.81 to ship one unit to the United States but only $8.00 total for two units, or charges different prices for the United States and Germany, country rates are how you model that accurately in your P&L. Orders shipping to a covered country use its rate; everywhere else falls back to the variant's default rate.

Note: In-app labels use the British spelling "Fulfilment" - this guide quotes them exactly as they appear on screen.

Prerequisites

Country rates extend the Per product fulfillment method, so all three of these must be true:

  1. Your fulfillment cost method is set to "Per product" on the Settings > Integrations > "Fulfilment Cost" card - see Fulfillment Costs
  2. No supported 3PL integration is connected (with a 3PL, carrier-reported costs own the fulfillment line)
  3. The "Country fulfilment rates" toggle is switched on (below)

How to Access

Enable in Settings

  1. Navigate to Settings > Financial Preferences and find the "Country fulfilment rates" card (it is only shown while the Per product method is active and no 3PL is connected)
  2. Select "On - set rates per country" (the default is "Off - one rate for all destinations")
  3. Click "Save Country Rates"

Note: Toggling this setting recomputes historical profit. Orders shipping to countries you cover will be re-costed with their country rates across your whole history, so expect past P&L figures to shift once rates are in place.

Set Rates per Variant on the COGS Page

  1. Go to Dashboard > P&L > COGS and expand a product to its variants
  2. Click the globe link labelled "Country fulfilment rates" next to the variant's fulfillment cost
  3. In the modal, click "Add country rate" and fill in:
    • Country - the destination country
    • "Cost per unit" - the per-unit rate for that destination
    • "Min quantity (optional)" - the quantity tier floor. The hint reads: "Applies when the line quantity is at least this value. Leave as 0 for all quantities."
  4. Save. Existing overrides are listed with their country and, for tiered rates, a "{n}+ units" label

Each variant manages its own set of country overrides - rates you add here apply only to that variant.

How Per-Unit Tier Math Works

This is the most important concept on this page: every rate is per unit, including tier rates. A tier does not set a total price for the order line - it sets a different per-unit rate once the line quantity reaches the tier's minimum.

To convert your supplier's parcel pricing into tier rates, divide the total shipping price at each quantity by that quantity:

Tier rate = Total shipping at that quantity / Quantity

Worked example. Your supplier ships one unit to the United States for $6.81 total, but ships two units together for $8.00 total:

Rate"Cost per unit"Min quantityAn order line books
Base rate6.8101 unit: 1 x 6.81 = $6.81
Quantity tier4.0022 units: 2 x 4.00 = $8.00

Without the tier, a 2-unit order would book 2 x 6.81 = $13.62 - nearly double the real cost. Add a tier for each quantity break your supplier offers (2+, 3+, 5+, and so on), always entering the average per-unit price at that quantity.

Note: If your fulfillment costs look inflated on multi-unit orders, this is almost always the cause: a per-parcel price was entered as a per-unit rate. Fix it with tiers, not by lowering the base rate.

How Rates Are Resolved

For each order line, MerchantFlow resolves the fulfillment rate in this order:

  1. Destination match - the order's shipping country is matched against your overrides (exact country match; an order with no shipping country skips straight to the default rate)
  2. Product identity - within that country's overrides, the variant is matched first, then the SKU, then the product
  3. Quantity tier - among matching rates, the highest tier whose minimum quantity does not exceed the line quantity wins. A 3-unit line with tiers at 0 and 2+ uses the 2+ rate; a 1-unit line uses the base rate
  4. Fallback - if the country is not covered, or no tier qualifies, the line falls back to the variant's flat default rate from the COGS page
  5. Unset - if there is no default rate either, the line contributes exactly 0 (never estimated)

The final cost is always resolved per-unit rate x line quantity.

Rates Apply per Line Item

Tiers look at each order line's quantity, not the total units in the order. An order with 2 units of Product A and 1 unit of Product B resolves A at its 2+ tier and B at its base rate - the three combined units do not push B into a higher tier. If your supplier prices parcels across mixed products, per-line tiers can only approximate that; enter tier rates that reflect your typical order mix.

Bulk Setup via CSV

For many products or countries, load rates through the COGS CSV importer instead of the modal. The importer accepts these columns (header names are case-insensitive):

FieldAccepted headers
SKU (required)sku
Per-unit ratefulfillment_cost, fulfilment_cost, fulfillment, fulfilment
Destination countrycountry_code, country, destination_country, ship_country
Quantity tier floormin_quantity, min_qty, quantity_tier, tier_qty
  • A row with a country column writes a country override; the same row can also carry a cost column to update COGS independently.
  • A country-rate-only file (just sku, country_code, and fulfillment_cost) is valid - no cost column needed.
  • Omitting the quantity column (or using 0) writes the country's base rate.

See Importing COGS for the full importer reference.

Currency and Historical Recompute

  • All rates are entered and stored in your store currency - a rate for Germany is not entered in euros unless your store currency is EUR. MerchantFlow does not convert country rates from local currencies.
  • Every rate you add, change, or delete triggers an automatic recompute of historical profit, because the earliest configured rate also backfills orders that predate it. Recent P&L views update quickly; product-level figures may lag a few minutes on large stores.

Best Practices

1. Derive Tiers from Real Supplier Invoices

Take actual parcel prices at each quantity from your supplier's rate card or invoices and apply the divide-by-quantity rule. Guessing tier rates defeats the purpose of the feature.

2. Cover Your Top Destinations First

Add rates for the countries that drive most of your volume, and let the flat default rate catch the long tail. You do not need every country covered for the P&L to improve materially.

3. Keep a Base Rate at Min Quantity 0

Always give each covered country a rate with minimum quantity 0 (or 1). If every tier has a higher floor, single-unit orders fall back to the flat default rate, which may not match that country at all.

4. Bulk-Load Large Catalogs

For more than a handful of variants, maintain rates in a spreadsheet and import via CSV. The modal is best for spot corrections.

Troubleshooting

My country rates are being ignored

Cause: One of the prerequisites is not met - a 3PL is connected, the fulfillment method is not "Per product", or the "Country fulfilment rates" toggle is off. Individual orders that already carry a carrier-reported cost (for example, from a previously connected 3PL) also keep that stored value and never consult country rates. Solution: Check Settings > Integrations for the method and Settings > Financial Preferences for the toggle. With a 3PL connected, carrier costs are used by design.

Costs balloon on multi-unit orders

Cause: A per-parcel price was entered as a per-unit rate. Solution: Apply the tier math above - enter total shipping at that quantity / quantity as the tier's "Cost per unit".

A destination is not picking up its rate

Cause: The order's shipping country does not exactly match the override's country, or the rate was added on a different variant than the one ordered. Solution: Confirm the override exists on the ordered variant and for the exact destination country. Unmatched lines silently use the flat default rate.

Historical profit changed after I toggled the setting

Cause: Enabling or disabling country rates recomputes past orders against the new configuration. Solution: This is by design - the P&L now reflects the rates you configured. If the change looks wrong, review the rates themselves rather than the toggle.

Frequently Asked Questions

Do quantity tiers look at the whole order?

No. Tiers use each order line's quantity independently. Two different products in one order each resolve their own tier.

What happens for a country I have not covered?

The line falls back to the variant's flat default rate from the COGS page. If that is unset too, the line contributes 0 fulfillment cost.

Can I use country rates with the Percentage method?

No. Country rates refine the Per product method only. The Percentage method applies one ratio of product cost regardless of destination.

Can I mix a flat default rate with country overrides?

Yes - that is the intended setup. The flat rate on the variant is the catch-all; country overrides supersede it for covered destinations.

Are rates converted from local currencies?

No. Every rate is in your store currency. Convert your supplier's local-currency pricing before entering it.

Does deleting a rate also recompute history?

Yes. Adding, editing, or deleting any rate triggers the same historical recompute so past orders always reflect the current configuration.

Related Guides


Last updated: July 31, 2026