Margin by Region - Country-Level Profitability and CAC
Break your P&L down by destination country in MerchantFlow. See revenue, COGS, ad spend, CAC, POAS, net margin, and period-over-period deltas per region.
Margin by Region
The Markets page in MerchantFlow breaks your P&L down by destination country, so you can see which regions are pulling their weight, which are leaking margin, and which are above the break-even floor on paid spend. Every row carries its own revenue, ad spend, ROAS, cost ratios, net profit, net margin, and POAS, with period-over-period deltas.
What Does This Page Show?
For each country with orders (or geo-tagged ad spend) in the selected timeframe, the All markets table reports:
- Market - the destination country
- Orders - paid, non-cancelled orders
- Revenue - net revenue: order subtotal plus shipping charged plus tax (tax-exclusive stores), minus refunds
- Ad spend - the platform's own country-level spend where it reports one, plus this market's share of any spend that has no country data, and labelled Platform geo, Blended, or Geo + blended so you can see how it was attributed
- ROAS - revenue divided by ad spend
- COGS % - this market's cost of goods as a percentage of its revenue, with a small second line naming the basis: "Measured per market ({n}% cost coverage)" or "Allocated from store-wide COGS". Read the percentage together with that line -- see Measured and Allocated COGS
- Shipping % - the market's allocated fulfillment cost as a percentage of its revenue, despite the column's label
- Net profit - revenue minus COGS, fulfillment, payment fees, ad spend, and allocated overhead (and tax when "treat tax as cost" is enabled)
- Net margin - net profit divided by revenue
- POAS - Profit on Ad Spend, calculated as net profit / ad spend
- vs prev - net profit change versus the comparison period
How to Access
Navigate to Profit > Markets (/dashboard/pnl/markets) from the main navigation.
The page respects the global timeframe selector. The comparison delta is always computed against the immediately preceding window of the same length -- custom ranges included.
Headline KPIs
Four KPI tiles summarise regional health:
- Markets - countries you sell to or advertise in
- Revenue - net revenue across all markets
- Net profit - bottom-line profit across all markets
- Ad spend - total ad spend in the period
Ad Spend Coverage Banner
Above the tiles, a banner reports what share of your ad spend could be matched to a specific market: "{n}% of ad spend is matched to a market". Platforms with no country-level reporting are named explicitly - "Spend from {platforms} has no geo breakdown, so it is shown blended across markets." MerchantFlow never claims exact per-country spend it does not have.
Top Regions Chart
A horizontal bar chart ranks the top 10 markets by net profit. Loss-making markets are drawn in rose. It skips the "Unknown" country bucket so it never dominates the view, and also skips markets that have ad spend but no orders.
Reading the Table
Measured and Allocated COGS
The COGS % column carries a second line telling you where the number came from, because the two bases mean very different things:
- "Measured per market ({n}% cost coverage)" - the figure is built from what this market's own orders actually cost. Markets are genuinely comparable on it, so a market with a worse product margin shows a higher COGS % than one with a better margin. The percentage in the label is the share of that market's orders carrying a cost.
- "Allocated from store-wide COGS" - your store-wide COGS total split across markets in proportion to revenue. Under this basis every market reports the same COGS % by construction. It is a store-wide average wearing a per-market label, not a finding about that country.
MerchantFlow measures per market only when both of these hold for the selected period:
- Market costs is switched On in the Cost settings card on the COGS page. It is Off by default, and while it is off there is only one cost per product regardless of destination, so a per-market spread would carry no information the revenue-share split does not already have.
- At least 90% of the period's orders carry a non-zero cost. Below that threshold the measured mix would be dominated by uncosted orders, and a mostly uncosted market would read as wildly cheap rather than as under-costed.
Either way, the market rows still sum back to the COGS total on your headline P&L. Measuring changes how the total is divided between countries, never the total itself.
The same line appears under Cost ratios on a market's own page.
POAS (Profit on Ad Spend)
POAS measures net profit per dollar of ad spend, where ROAS measures revenue per dollar of ad spend. POAS is the more honest signal for media scaling because it accounts for every cost, not just COGS:
POAS = Net Profit / Ad SpendThe in-app tooltip reads: "Profit on Ad Spend = net profit / ad spend. >1.00x means each ad dollar returned more in profit. Below 1.00x means ad spend is eroding margin."
- 1.0x or higher (emerald) - each ad dollar returned more than a dollar in profit
- 0.0x to 1.0x (amber) - the region is still profitable, but returns less than a dollar of profit per ad dollar
- Below 0.0x (rose) - the region is losing money, so paid spend is destroying margin
A country with no ad spend shows a dash for POAS.
CAC
CAC is not a column in the All markets table -- it lives in the Customer acquisition block on a market's own page. It is that country's ad spend divided by the number of new customers acquired there during the timeframe - a customer whose first-ever order was in that region within the selected dates. Countries with no attributable new customers show "No new customers" rather than an infinite value. The per-region new-customer counts are deduplicated so they sum back to the tenant-wide count behind your blended CAC.
Net Profit Colour
Net profit cells are colour-coded: emerald for positive net profit, rose for negative (the region is losing money this period), and neutral slate for zero.
Period Delta
The vs prev column shows the percent change in net profit versus the previous period of the same length. It reads - when there is no comparable prior window.
Market Detail Page
Click a market to open its own page at /dashboard/pnl/markets/{countryCode}. It includes:
- KPI tiles - Revenue, Net profit (with net margin), Ad spend (labelled with its geo/blended source), and ROAS
- Volume - orders, average order value, share of orders, share of revenue
- Customer acquisition - new customers and CAC, with the CAC definition spelled out
- Per order economics - COGS, average ad spend per order, fulfillment per order, and payment fees per order
- Margin waterfall - Revenue -> COGS -> Gross profit -> Ad spend -> Fulfillment -> Payment fees -> Contribution margin -> Other allocated overhead -> (Tax treated as cost) -> Net profit, closing with net margin and POAS
- Cost ratios - COGS, Shipping and Ad cost as a percentage of this market's revenue, with the same measured-or-allocated line underneath that the table shows. The Shipping ratio is the market's allocated fulfillment cost over its revenue, the same figure the Shipping % column shows in the table
- Most profitable variants and Most profitable bundles - ranked by contribution margin in that market
Use "View all orders in {market}" to jump to the Orders page filtered by that country.
Unknown Country Banner
If MerchantFlow has orders whose destination country is not known (typically older orders before the country backfill ran), an amber banner appears at the top of the page: "{n} orders are missing country data", with the revenue that could not be assigned. Resyncing your orders fills in the shipping addresses. The banner is the only place unattributed orders surface as their own line: the Unknown bucket is not listed as a row in the table and is not charted. Its revenue and profit are still inside the headline Revenue and Net profit tiles, so the market rows sum to slightly less than the tiles until the countries are backfilled.
How Costs Are Allocated to a Region
Only some figures are genuinely per-country; the rest are allocated so that the regional rows reconcile back to your headline P&L:
| Figure | How it is derived |
|---|---|
| Revenue, refunds, orders, tax | Per-country, directly from the orders shipped there |
| Payment fees | Per-country, summed from each order's own value |
| Ad spend | Platform-reported per-country spend is kept exactly as reported. Only spend with no country data is spread across markets, weighted by each market's order-allocated ad spend (or by revenue share when no market has any) |
| Fulfillment | Starts from the actual per-country order fulfillment cost. When the P&L snapshot total is higher, the surplus is allocated by revenue share; when it is lower, each country's actual is scaled down pro rata. With no per-order cost at all, the whole snapshot total is allocated by revenue share |
| COGS | Measured from each order's own cost when Market costs is on and at least 90% of the period's orders carry a cost, then reconciled so the countries still sum to the P&L COGS total: where the snapshot total is higher the surplus goes by revenue share, where it is lower each country's actual is scaled down pro rata. Otherwise allocated in proportion to net revenue share, which makes the COGS ratio identical on every row |
| Shipping cost, OPEX, amortised expenses, variable costs | Allocated across countries in proportion to net revenue share |
Two settings change the waterfall and the net profit number:
- Treat tax as cost - controlled per tenant in Settings > Tax Rules. When enabled, effective sales tax (platform-reported plus any rule-estimated tax) is deducted before net profit. When disabled - the common case for stores collecting VAT on behalf of the buyer - tax is shown for reference only.
- Overhead allocation - OPEX, amortised expenses and variable costs are applied per region in proportion to revenue share, and shown on the "Other allocated overhead" line.
Frequently Asked Questions
How is a customer attributed to a country?
Customers are attributed to the destination country of their order, not their billing country, IP, or store domain. A customer can therefore appear in more than one country if they ship to different addresses over time.
Why does every market show the same COGS %?
Because that period is on the allocated basis, where your store-wide COGS total is split by revenue share -- which makes the ratio identical on every row by construction. The line under the column says "Allocated from store-wide COGS" when this is happening. To get a COGS ratio that actually differs by country, switch Market costs on in the Cost settings card on the COGS page and keep per-market costs on your SKUs. A market with no cost of its own falls back to the default cost.
I turned Market costs on, so why is COGS still allocated?
The measured basis also needs at least 90% of that period's orders to carry a non-zero cost. Below that, the mix would be driven by which orders happen to be costed rather than by real cost differences, so MerchantFlow falls back to allocation rather than presenting a number it cannot stand behind. Fill the gaps from COGS Management -- the coverage percentage in the "Measured per market" label tells you where each market stands once you are over the line. Note that the threshold is judged per period, so an older timeframe can be allocated while a recent one is measured.
Why is the CAC for a country higher than my blended CAC?
Blended CAC averages across the entire tenant. A single country's CAC may be much higher because ad targeting is regional, supply costs vary, or the region acquired fewer customers per ad-spend dollar. Use the per-region CAC to decide which countries to scale.
How is POAS calculated?
POAS is net profit divided by ad spend for orders shipped to that country. It is fundamentally different from ROAS (revenue / ad spend) and is the correct signal for sustainable scaling, because it prices in COGS, fulfillment, fees and allocated overhead rather than just revenue.
Why does the comparison column show a dash?
The prior window is always the same length as your selected timeframe, so the dash is never about the timeframe itself. It appears when that market had no orders in the prior window, when the market has ad spend but no orders, or when its prior net profit was exactly zero (a percentage change against zero is undefined). MerchantFlow omits the delta rather than estimating one. A change smaller than 0.5% reads as flat instead of a percentage.
How accurate is the per-region ad-spend allocation?
Where a platform reports country-level spend, that real figure is used as-is and the row is labelled Platform geo. Where it does not, the unattributed remainder is spread across markets using each market's order-allocated spend as the weighting, and the row is labelled Blended (or Geo + blended when a market gets both). Geo-reported spend is never double-counted against a second blended allocation, so the aggregate always matches what you actually spent. The coverage banner at the top of the page tells you what proportion is geo-matched.
What about the fulfillment cost estimate?
When fulfillment cost is not yet pulled from a 3PL like Speedfulfill, MerchantFlow uses your configured fulfillment cost method - a percentage of product cost, or per-unit rates per product (optionally varied by destination country with country fulfillment rates). With the optional estimation setting enabled, recent orders missing carrier data receive an estimated cost, clearly disclosed. Once you connect a real 3PL, actual shipping cost per order takes over.
Related Guides
- P&L Overview - the headline waterfall
- Ad Spend - ad cost across all connected platforms
- COGS Management - keep gross profit honest
- Fulfillment Costs - how the fulfillment figure is produced
- Country Fulfillment Rates - per-destination rates and quantity tiers
- Orders - per-order detail filterable by country
- Attribution - how channels are assigned
- Unit Economics - blended CAC, LTGP, and break-even floor
Last updated: September 9, 2026
Last updated on
Manual Orders - Record B2B and Wholesale Revenue
Enter wholesale, B2B, and off-platform orders into MerchantFlow by hand so revenue that never touches your storefront still reaches your P&L, with full COGS and fulfillment cost attribution.
Profit Margins - Gross, Contribution & Net
Analyze e-commerce profit margins at the product and business level in MerchantFlow. Understand gross margin, contribution margin, and net margin with daily P&L.