FluentCRM Integration
Automatically tag contacts by currency, sync custom fields on every switch and purchase, and segment your audience by what money they think in.
If you're running FluentCRM alongside FluentCart, Multi-Currency feeds currency data straight into your CRM — automatically. Every time a visitor picks a currency or pays for an order, their FluentCRM contact gets updated. No manual tagging, no CSV imports, no guesswork.
Only When FluentCRM Is Active
No FluentCRM? No problem. The plugin detects whether FluentCRM is installed and simply skips all CRM work if it's not there. Zero errors, zero overhead.
What Happens Automatically
Two things trigger CRM updates:
When Someone Switches Currency
A logged-in visitor picks EUR from the currency switcher. Behind the scenes:
- Their FluentCRM contact gets a tag — like
currency:EUR— so you can find them later - Their preferred currency custom field updates to
EUR
That's it. Instant. If they switch again to GBP tomorrow, they get a currency:GBP tag too, and the preferred currency field updates. Tags accumulate (showing every currency they've ever used), the field always reflects the latest pick.
Guest visitors are skipped — there's no FluentCRM contact to update for someone who isn't logged in.
When Someone Pays for an Order
If a customer was browsing in a different currency when they paid, two more custom fields update on their contact:
- Last order currency — which currency they were viewing (e.g.
EUR) - Last order FX rate — the exchange rate at the time of payment (e.g.
0.92140000)
This only fires when the customer was viewing a non-base currency. If they were already in your base currency, there's nothing to record.
Setting It Up
Everything's on the CRM tab in your Multi-Currency settings.
| Setting | Default | What It Does |
|---|---|---|
| FluentCRM Sync | Enabled | Master switch — turn this off and nothing syncs |
| Auto-create Tags | Yes | Creates tags like currency:EUR automatically when a new currency is detected |
| Tag Prefix | currency: | What goes before the currency code in the tag name |
| Preferred Currency Field | preferred_currency | Custom field that stores what currency the visitor is browsing in |
| Last Order Currency Field | last_order_display_currency | Custom field that stores what currency they last paid in |
| Last Order FX Rate Field | last_order_fx_rate | Custom field that stores the exchange rate from their last order |
Create Your Custom Fields First
The custom field keys need to exist in FluentCRM before the plugin can write to them. Go to FluentCRM → Contacts → Custom Fields and create text fields matching the key names above. If the fields don't exist, the sync just silently skips — no errors, but no data either.
What You Can Do With This
Once currency data is flowing into FluentCRM, the interesting stuff starts:
- Currency-specific email campaigns — filter contacts by
preferred_currency = EURand send promotions with prices in euros. No more "starting at $49" to someone who thinks in pounds. - Tag-based automations — trigger a welcome email when the
currency:GBPtag is first applied. "Welcome, looks like you're shopping in pounds — here's what's popular in the UK." - Order currency insights — use
last_order_display_currencyto see which currencies people are actually buying in, not just browsing in. - Segment by region — currency preference is a surprisingly good proxy for location. EUR visitors are mostly European, GBP mostly UK, JPY mostly Japan. Use it for targeting without needing IP geolocation.
Error Handling
If something goes wrong with the CRM sync — FluentCRM throws an error, a custom field doesn't exist, tag creation hiccups — the plugin logs it and moves on. The currency switch still works. The order still completes. CRM sync is always a best-effort background operation, never a blocker.
Technical Details
The FluentCrmSync class hooks into two events (only when FluentCRM is active):
fchub_mc/context_switched— fires on currency switch, updates preferred currency field and creates/attaches tagfluent_cart/order_paid_done— fires on order payment, updates last order currency and FX rate fields
Tags are created via Tag::firstOrCreate() — existing tags are reused, no duplicates. Custom fields are synced via $contact->syncCustomFieldValues() without overwriting other fields on the contact.
See the Developer Reference for the full hook list and REST API.