Email-Marketing Sync — Ma
Two-way contact/segment sync with Mailchimp & Brevo (bring your own API key)
Marketing teams running Mailchimp or Brevo alongside Odoo CRM bleed time on manual CSV exports, and worse, risk emailing contacts who unsubscribed elsewhere, a direct UK PECR compliance breach. Keeping audiences, segments and consent aligned by hand simply does not scale. This BYOK connector keeps Odoo contacts and dynamic segments in sync with Mailchimp or Brevo using your own API key: credentials stay in your database and calls go straight to the provider's official REST API. It pushes consented contacts, pulls engagement back, and syncs unsubscribes both ways. It is a connector, not a sender; it formats and transports data and does not send email itself.
Key Features
BYOK Provider Accounts
A gb.email.sync.account stores a Mailchimp or Brevo API key (restricted to system group) and routes calls through a single _request layer with provider-specific auth and base URLs. action_test_connection pings the provider and Mailchimp data centres are auto-detected from the key, so setup is one record and a test click.
List Import & Contact Push
action_fetch_lists imports the provider's audiences as gb.email.sync.list records, and action_push upserts each selected partner via Mailchimp's PUT members or Brevo's POST contacts. Subscription status is set from consent, keeping Odoo the source of truth for your marketing audience.
Engagement Pull-Back
action_pull_engagement reads list members from the provider and writes gb_open_rate and gb_click_rate onto each matched res.partner, while members marked unsubscribed or cleaned are flagged unsubscribed in Odoo. Sales and marketing see real engagement metrics directly on the contact.
Dynamic Segments
A gb.email.sync.segment is a saved Odoo domain layered on top of a list's filter, letting you push a slice like UK customers active in 90 days. action_push_segment sends just that subset, with a live contact_count and a preview action so you target precisely before pushing.
Field Mapping
gb.email.sync.field.map rows map dotted res.partner paths (validated against real fields) to Mailchimp merge tags or Brevo attributes. _map_partner resolves each path per contact, so first name, country and any custom field land in the correct provider field automatically.
PECR Consent Enforcement
res.partner gains gb_marketing_consent and gb_email_unsubscribed with consent date stamping; granting consent clears unsubscribe and an unsubscribe revokes consent. When consent_required is on, only opted-in contacts are pushed, helping you respect UK PECR by construction.
Two-Way Unsubscribe Sync
Unsubscribes propagate in both directions: an Odoo unsubscribe pushes as unsubscribed/blacklisted, and a provider-side opt-out pulled back sets gb_email_unsubscribed and clears consent. You never email a contact who opted out on either platform, avoiding compliance breaches.
Sync Log, Retry & Cron
Every push and pull writes a gb.email.sync.log row with ok/error result and message, and action_retry re-runs a failed contact's push. An optional ir.cron (_cron_sync_all, off by default) pushes lists, pulls engagement and syncs auto-sync segments every few hours for hands-free upkeep.
Use Cases
Screenshots
Sync Log
Push Contacts
Why Choose This Module
Stop maintaining your marketing lists by hand. This BYOK connector keeps your Odoo contacts and dynamic segments in sync with Mailchimp or Brevo using your own API key — no middle-man service. Credentials stay in your database and calls go straight to the provider's official REST API. It is a connector, not a sender: it formats and transports data, it does not send email itself.
Specifications
- Compatible: Odoo 18.0 / 19.0
- License: OPL-1
- Languages: English
- Author: Pokutsoft
- Dependencies: mail, contacts
- Support: support@pokutsoft.com
Update date: 2026-07-02