EU OSS VAT – GeoIP VAT-Included Prices (MaxMind)

Overview

The module adapts tax-inclusive prices to the visitor’s country, using a manual choice or local MaxMind detection. Every product keeps its own tax rules group. Rates shown in the selector are standard reference rates; reduced-rate products keep their own rates.

Features

Automatic country detection via GeoIP

The module identifies the visitor's country through their IP address using the MaxMind GeoLite2 database. Prices are instantly displayed with the corresponding VAT rate, without any action from the visitor. If detection fails, the default country configured in the module is used.

Automatic European tax creation

Preview the affected rates and tax groups, then confirm the changes. Every product keeps its own tax rules group.

Front-office country selector

Without a real address, the selected country estimates prices, including in the add-to-cart confirmation window. A valid cart tax address takes priority according to PrestaShop’s delivery/invoice tax setting. Logged-in customers can select an exact saved address and confirm “Use this delivery address”. Delivery costs and taxes are recalculated; an existing invoice address is preserved. No fictitious address is created.

Templates and display customization

Five predefined templates are available: Minimal (country name only), With flag (flag + name), Complete (flag + country + VAT), Compact (flag + ISO code), and Custom. Choosing a template pre-fills the options, but every detail remains fully customizable. A real-time preview lets you visualize your changes instantly.

Additional features

  • Customer group restriction: Limit the feature to specific groups (Visitor, Guest, Customer) or apply it to all by leaving the selection empty
  • Custom hook: Place the selector anywhere in your theme via Smarty ({hook h='displayWeprestaOSS'}) or Twig ({{ renderhook('displayWeprestaOSS') }})
  • Advanced country management: Enable only the countries you ship to, with tax status indicators
  • Configurable cookie: Set how long the visitor's choice is remembered (value 0 for session cookie only)
  • Responsive: Works perfectly on mobile and desktop

Installation

  1. Download the module from your WePresta customer area
  2. In the PrestaShop back office, go to Modules > Module Manager
  3. Click Upload a module and select the ZIP file
  4. Access the module configuration to set up your taxes

Configuration

General tab

Enable preview, choose available countries and the fallback country, and check eligible customer groups. Preview can be disabled without losing module settings.

Taxes tab

In the Taxes wizard, select groups already assigned to your products or plan new groups. Review the old and new rates, then confirm. Preview creates nothing. Products are never reassigned automatically. Groups shared between shops and regional or combined rules require review in native tax settings. Reduced-rate eligibility depends on the product category and territory.

Countries tab

Manage which countries appear in the front-office selector. A country is only displayed to visitors if it meets 3 conditions: active in the module (Countries tab), taxes configured (Taxes tab), and country enabled for delivery in PrestaShop (International → Localization → Countries).

Display tab

Fully customize the appearance of the country selector. Choose its position via a standard PrestaShop hook (displayNav1, displayNav2, displayTop…) or a custom hook. Select a base template from the 5 available options, then adjust every detail to your needs. The real-time preview on the right side of the screen instantly reflects your changes.

Advanced tab

Configure the cookie duration (in days) to remember the visitor's choice. A value of 0 creates a session-only cookie, deleted when the browser is closed.

Enter your MaxMind account ID and a key with GeoLite2 Country download permission. Download the database in Advanced and check its status. PHP needs cURL, Phar and zlib. Country detection then reads the local database. A failed update preserves the previous database. Leaving the key blank preserves the saved key. Configure trusted proxies only with their actual addresses or ranges; Cloudflare has a separate option.

VAT sales summary

Select a period and preview or download the CSV. Sales use the order date and credit notes their issue date, including credits for older sales. Historical amounts are separated by shop, currency, country, rate and component, including shipping. Ambiguous rows remain marked for review. This summary does not decide OSS eligibility or replace a declaration. Refunds without credit notes cannot be deducted automatically.

Updating

Back up the shop and install the new archive. Existing settings are preserved. Check a standard-rate and a reduced-rate product, then the cart and its addresses. Page caches and CDNs must distinguish visitor country and session.

Requirements

  • PrestaShop 1.7.8, 8.2 or later, 9.1 or later (8.0, 8.1 and 9.0 not supported); PHP 7.4 minimum, subject to the requirements of your PrestaShop release.
  • MaxMind account and GeoLite2 Country download key for GeoIP detection; PHP cURL, Phar and zlib extensions to download the database.

FAQ

Taxes are not being created

Make sure you clicked "Execute" at step 3 of the creation workflow. Check the PrestaShop logs to identify any errors.

GeoIP detection is not working

Ensure that GeoIP is enabled in the Advanced tab and that the GeoIP database is downloaded (status "OK"). Detection does not work in a localhost environment (local IP).

The country selector does not appear

Check 3 things: the selector is enabled in the Display tab, at least one country is active in the Countries tab, and the hook is correctly configured in your theme.

Prices don't change when I switch countries

Make sure taxes are configured for both countries, that your products are assigned to the correct tax rule groups, and clear the PrestaShop cache.

A country does not appear in the selector

A country only appears if it is active in the module (Countries tab), its taxes are configured (Taxes tab), and it is active in PrestaShop (International → Localization → Countries).

The customer sees a different price between browsing and checkout

Without a real address, the selected country estimates prices. A valid cart tax address takes priority according to PrestaShop’s delivery/invoice tax setting. Logged-in customers can select an exact saved address and confirm “Use this delivery address”. Delivery costs and taxes are recalculated; an existing invoice address is preserved. No fictitious address is created.

Is the module compatible with my theme?

Use standard hooks or the custom hook to position the selector. Check its display and the cart with your theme and extensions.

Support

Contact us through your WePresta customer area or by email for any questions or technical assistance.

Changelog

Version 2.0.1

  • Tax-inclusive price of the selected country also shown in the add-to-cart confirmation window
  • Tax-inclusive price of the selected country kept on the page of a product already in the cart

Version 2.0.0

  • More reliable tax-inclusive prices for each country and product VAT rate
  • Cart tax address takes priority when calculating prices
  • Delivery address selection with customer confirmation
  • Preview of tax rates and affected groups before applying changes
  • Updated reference VAT rates
  • Secure MaxMind downloads, keeping the previous database if an update fails
  • VAT summary and CSV export based on historical sales and credit notes, including shipping
  • Optimized country loading and VAT reports calculated on demand
  • Existing settings preserved during updates

Version 1.0.0

  • Initial release
  • Automatic country detection via GeoIP (MaxMind GeoLite2)
  • Automatic European tax creation in 3 steps
  • Front-office country selector with 5 templates
  • Customer group restriction
  • Standard and custom hook support
  • Multi-address logged-in customer management
  • Configurable cookie for visitor choice retention
Loading...