Recomputes per-market prices when the exchange rate drifts past your threshold, keeps charm endings intact, and holds every new price in the dry-run diff for your approval.
async def run(ctx): drift = ctx.params.get("max_drift", 0.03) for market in await ctx.markets.list(): rate = await ctx.http.get_json(FX_API, base=ctx.shop.currency, to=market.currency)
How do you keep international prices honest on Shopify Markets?
To keep international prices honest on Shopify Markets, this template compares the live exchange rate to the rate your per-market prices were built on and recomputes them once drift crosses your threshold, 3% or whatever you set. Charm endings survive the recompute, so a Swedish price stays at 199 rather than landing on 203.17. Fixed manual prices are the right call for clean per-market pricing, but they quietly detach from reality as currencies move.
Most stores discover FX drift in a margin report months later, one market at a time. The guard checks every market on schedule and proposes a reprice only where drift crossed the line. Each proposal arrives as a diff: old price, new price, the drift that triggered it. You release it market by market, and small drift never triggers churn.
Last updated August 24, 2026
If you run a sharper version of this template, or something it inspired, send it in. We review every application and publish the good ones, credited to you or your agency.
AI writes real Python or TypeScript, a dry run rehearses it, you approve, it deploys.
Free plan · no card · 🇪🇺 EU data residency