Multi-Currency / Geo Pric
Show shop prices in the visitor's currency with geo VAT and rounding rules
International shoppers abandon carts when prices appear in the shop's home currency with the wrong VAT treatment and odd-looking conversions. Maintaining a separate pricelist per currency is tedious and quickly goes stale. This module lets you define geo zones by country, each with a display currency, a VAT-inclusive or exclusive mode and a psychological rounding rule, then delivers converted prices via a JSON storefront API and a reusable QWeb pricing helper - using Odoo's live FX rates. Settings let you enable/disable the feature, switch country detection between visitor GeoIP and logged-in partner country, and optionally return the original catalogue price alongside the converted one. Per-product opt-out lets specific items always show their unmodified catalogue price. Built for UK and international eCommerce shops on Odoo.
Key Features
Country-Mapped Geo Zones
gb.geo.zone maps a set of res.country records to a display currency_id, a VAT mode and a rounding rule. zone_for_country resolves the visitor's country to the right zone, and a single is_default fallback zone (constraint-enforced as unique per company) covers everyone else.
Live FX with Markup
The gb.geo.pricing.service abstract model converts the catalogue price into the zone currency using Odoo's own _convert live rates, then apply_markup adds an optional fx_markup percentage per zone to absorb exchange spread, all validated to a sensible range.
VAT-Inclusive or Exclusive Display
Each zone sets vat_mode inclusive (B2C) or exclusive (B2B) with a display vat_rate. apply_vat grosses prices up by the rate for consumer-facing zones so the shopper sees the all-in price required by UK/EU consumer law, while B2B zones stay net.
Psychological Rounding Rules
gb.geo.rounding offers reusable strategies — none, nearest whole, end in .99, end in .95, round up to .00 and charm rounding — applied by round_value after conversion and VAT. A price_suffix like 'inc. VAT' can be appended to the formatted string.
Storefront JSON Endpoints
POST /geo_price/quote returns a converted, VAT-adjusted, rounded and formatted price for any product. Country detection honours the Detect Country By setting (GeoIP or partner). When Enable Geo Price Display is off it returns the catalogue price unchanged; when Show Original Price Too is on it also returns original_amount/original_formatted for dual-price display. /geo_price/zones lists configured zones for front-end JS. Storefront developers call these endpoints from JavaScript to render live geo prices on any page.
Reusable Pricing Service
compute_display returns a structured dict with raw, net and final amounts, currency symbol, VAT mode and a formatted string, callable from QWeb via product.template.geo_display_price or any backend code without duplicating conversion logic.
Per-Product Opt-Out
A Geo Pricing tab on every product form exposes an Exclude from Geo Pricing toggle. When enabled, geo_display_price and the /geo_price/quote endpoint return the product's original catalogue price in its home currency, bypassing conversion, VAT grossing and rounding entirely. Ideal for fixed-price or regulated items.
Configurable Detection & Settings
res.config.settings exposes three knobs stored as ir.config_parameter records: Enable Geo Price Display (gates all conversion - the /geo_price/quote endpoint returns the catalogue price unchanged when disabled), Detect Country By (switches between visitor GeoIP and logged-in partner country for country resolution), and Show Original Price Too (makes the quote endpoint also return the untouched catalogue price and currency so the storefront can display both). No code changes needed.
Use Cases
Screenshots
Geo Pricing Settings
Rounding Rules
Geo Zones
Why Choose This Module
International shoppers get confused when prices show in the shop's home currency with the wrong VAT treatment. Define geo zones by country that pick a display currency, a VAT-inclusive / exclusive display mode and psychological rounding rules, then convert catalogue prices into the visitor's currency on the fly — no hand-maintained pricelists per currency.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: website, product, account
- Support: support@pokutsoft.com
Update date: 2026-07-02