Shahid Malla

WHMCS Multi-Currency Setup: Accept Payments Globally

Selling across borders means selling in customers' currencies. The working multi-currency setup — base currency, manual per-currency pricing, gateway-per-currency, IP-based detection, tax handling.

S Shahid Malla
· Jan 14, 2026 · 5 min read · 72 views
shahidmalla.com/blog/whmcs-multi-currency-setup-accept-payments-globally
WHMCS Multi-Currency Setup: Accept Payments Globally
On this page (11 sections)

Selling across borders means selling in your customers' currencies — not yours. A French customer seeing "$10/month" thinks "what's that in euros?" and bounces; a US customer seeing "9€/month" thinks "wait, am I in Europe?" and bounces. WHMCS supports multi-currency natively. Configured right, every customer sees their local price.

This is the working setup.

Step 1 — Pick your base currency

WHMCS tracks all revenue internally in your base currency. Other currencies are derived via exchange rates. The base currency you pick is permanent — don't change it after you have transactions.

Pick based on:

  • Where you bank (USD if US banking; EUR for EU; INR for India).
  • Your most common customer (operationally easier).
  • Your accountant's preference.

Configure: Setup → Payments → Currencies → Default Currency.

Step 2 — Add the currencies you'll accept

For each currency:

  1. Setup → Payments → Currencies → Create Currency.
  2. Set:
    • Code (USD, EUR, GBP, INR, etc.).
    • Prefix / suffix ("$", "€", "₹").
    • Format (decimal separator, thousand separator).
    • Exchange rate (relative to base).

WHMCS comes with a built-in exchange-rate updater. Enable it: Setup → Automation Settings → Update Currency Exchange Rates → Daily.

Step 3 — Configure pricing per currency

WHMCS can either:

  1. Convert automatically from base currency using current exchange rate. Simple but exchange-rate fluctuations show in prices.
  2. Manual per-currency pricing. You set "Pro Plan = $10/mo in USD, €9/mo in EUR, ₹699/mo in INR." Prices stable; cross-currency conversion is your accounting headache.

For each product: Setup → Products/Services → Products → edit → Pricing tab. Check "Override Currency Conversion" and enter per-currency prices.

Manual pricing is what real multi-currency operators do. Customers don't want their hosting price to fluctuate weekly with FX rates.

Step 4 — How customers pick currency

By default, WHMCS shows your base currency until the customer logs in. Three improvements:

  1. IP-based currency detection. Use GeoIP at first visit to default to a sensible currency. Cloudflare passes CF-IPCountry header you can read in a hook.
  2. Currency switcher in the header. Visible flag/code dropdown so customers can change.
  3. Sticky preference — store the chosen currency in cookie / localStorage, default to it on next visit.

Hook example for IP-based detection:

add_hook('ClientAreaPage', 1, function ($vars) {
    if (isset($_SESSION['currency']) || isset($_SESSION['uid'])) return $vars;

    $country = $_SERVER['HTTP_CF_IPCOUNTRY'] ?? null;
    $currencyMap = [
        'IN' => 4,   // currency ID for INR
        'GB' => 2,   // GBP
        'FR' => 3,   // EUR
        'DE' => 3,
        // ...
    ];

    if (isset($currencyMap[$country])) {
        $_SESSION['currency'] = $currencyMap[$country];
    }
    return $vars;
});

Step 5 — Gateway per currency

Some gateways only accept specific currencies, or charge less for some. Configure per-currency:

Setup → Payments → Currencies → edit a currency → Available Gateways:

  • USD: Stripe + PayPal + NowPayments.
  • EUR: Stripe + PayPal (PayPal Europe).
  • INR: Razorpay + (Stripe India if you have it).
  • GBP: Stripe + PayPal.

This ensures customers don't see "Stripe India" as an option when paying in USD.

Step 6 — Multi-currency invoice display

Customer's invoice should show in their currency. WHMCS handles this automatically when:

  • Your invoice PDF template uses {$currencysymbol}, not hardcoded "$".
  • Your invoice email uses currency variables: {$invoice_amount} and {$invoice_currency_symbol}.

Check both: send a test invoice to a EUR-currency customer; the PDF and email should show "€" not "$".

Step 7 — Tax / VAT per region

Currency and tax are related but distinct. A customer paying in EUR may be in Germany (19% VAT), France (20% VAT), or outside the EU (no VAT). Configure:

Setup → Payments → Tax Configuration:

  • Add tax rules per country.
  • EU VAT MOSS support — WHMCS has built-in.
  • India GST handled separately via custom logic (see my GST guide).

How to verify multi-currency works end-to-end

  1. Visit the order form from a US IP (or VPN). See USD prices, USD payment options.
  2. Switch to EUR via the currency switcher. Prices update; gateway options change.
  3. Place a test order in EUR. Pay. Invoice generated in EUR.
  4. Receive invoice email — currency symbol matches.
  5. Download invoice PDF — currency consistent.
  6. Admin sees the invoice in the customer's currency, with conversion to base currency shown for reporting.

Common pitfalls

"Customer chose EUR but paid via a USD-only gateway." Gateway-per-currency isn't configured. Force currency-gateway matching at the order level.

"FX rates drift, prices look weird (€8.74 instead of €9)." You're using auto-conversion. Switch to manual per-currency pricing for stable, round numbers.

"Customer paid in INR but invoice says USD." The invoice template uses base-currency variables. Replace with currency-aware ones: {$invoice_currency_symbol}{$invoice_amount}.

"Refunds in different currency than original payment." Some gateways refund at current FX rates, not the original. Customer may receive less than they paid. Refund through the gateway's UI, not WHMCS's, to ensure exact-amount refund.

My take — currency strategy

For hosting brands selling across borders:

  1. Pick 3-5 currencies that cover 90% of your customers (typically USD, EUR, GBP, INR + one regional).
  2. Manual per-currency pricing. Stable, customer-friendly.
  3. Currency picker prominent in the header.
  4. IP-based default but customer can override.
  5. Annual rebase: review per-currency pricing once a year to keep up with FX trends.

Going further


I set up multi-currency + multi-tax WHMCS deployments for hosting brands selling globally. Tell me your target markets and I'll send a quote in 24 hours.

Share this article

S

Written by

Shahid Malla

WHMCS expert, full-stack developer, technical lead at Fada.cloud. 10+ years building hosting platforms, custom modules, and automation that ships.

Trusted platforms

Prefer to hire through a platform?

Not sure about working directly? Hire me through Fiverr or Upwork instead - same me, same work, with the platform's buyer protection and escrow.

Got a project like this?

Tell me what you need - I'll send a real quote within 24 hours.