StockSweep StockSweep | Help Center

Markets — multi-currency, FX & margin policy

How per-market margin policy overrides your global floor, where exchange rates come from, and why a stale rate blocks a consolidated roll-up instead of guessing.

Selling into more than one market means the same product carries different prices, different margins and different competition. Markets lets you set policy per market instead of forcing one global rule onto all of them. It is also the area where we have shipped bugs ourselves more than once — which is a fair signal that the mechanism is worth reading about before configuring it.

Estimated time: 5 minutes

What you'll accomplish

  • Understand the two-step cascade that decides which margin policy applies
  • Know where exchange rates come from and how fresh they are
  • Understand why a consolidated report can refuse to produce a number
  • Know which figures are converted and which are shown natively

Requirements

  • Plan: Enterprise for unlimited markets. Free, Growth and Pro track 1 market.
  • Found at Settings → Markets.

The margin policy cascade

When a discount is evaluated for a product in a specific market, the policy is resolved in strict order:

  1. A per-market margin policy for that (merchant, market) pair, if one exists and is active → use it.
  2. Otherwise, your global margin policy → use that.

There is no third step and no blending. An inactive per-market policy is the same as no policy — the global one applies. This is worth stating because "I set a policy for Germany and nothing changed" is almost always an inactive row rather than a broken cascade.

Everything in Margin Protection — the floor, the clamping behaviour, the outcomes — then applies exactly as normal, just against whichever floor the cascade selected.

Where exchange rates come from

Rates are sourced from the European Central Bank's published feed and refreshed on a daily schedule. They are reference rates, not the rate your payment processor gave you on any individual order — a distinction that matters if you reconcile to the cent against your bank.

Why a roll-up can refuse to answer

Consolidated, cross-market figures need a conversion, and a conversion is only as good as the rate behind it. Two freshness rules apply:

  • Rates older than 36 hours are flagged as stale in Settings → Data & Sync, so you can see a feed problem before it affects anything.
  • A rate more than 7 days stale will not be used for a consolidated roll-up at all. Instead of quietly converting at a week-old rate, the roll-up declines and tells you which currency pair is the problem.

This is deliberate. A report that silently used a stale rate would be wrong in a way nobody could see; one that refuses is wrong in a way you can fix.

Converted versus native figures

  • Consolidated views (all markets together) convert to your base currency using the rate stamped at the time of attribution, not today's rate. This is why a closed period's numbers never move afterwards — see ROI Dashboard Methodology.
  • Single-market views show that market's own currency, with no conversion at all.

If a number looks different between the two views, that is the expected behaviour, not a discrepancy: one is your base currency, the other is local.

Market-gap bounds

Markets can also carry market-gap bounds — do not undercut the local market by more than X% and do not stay more than X% above it after discounting. These interact with your margin floor, and the resolution is not negotiable: the margin floor always wins. A market ceiling can deepen a discount, but never past the floor.

Verify it is working

  • Open Settings → Markets and confirm each market you sell into is present and its policy is marked active.
  • Open Settings → Data & Sync and check FX freshness — anything past 36 hours is flagged there.
  • Apply a test discount to a product in a market with an override and confirm the preview uses the override's floor, not the global one.

Troubleshooting

My per-market policy has no effect

Check that the policy row is active. An inactive override falls through to the global policy silently by design.

A consolidated report will not load

Read the message — it names the currency pair whose rate is more than 7 days stale. The fix is the FX feed, not the report.

Numbers do not match between the consolidated and single-market views

Expected. The consolidated view is converted to your base currency at attribution-time rates; the single-market view is native.

FAQ

How many markets can I track?

Enterprise is unlimited. Free, Growth and Pro track one market. See Plan Limits & Usage.

Can I set a different price per market?

Pricing is set on your commerce platform. StockSweep applies discounts and enforces margin policy against the price the platform holds for that market.

Does changing my base currency rewrite history?

No. Historical figures keep the base amount stamped when they were attributed.