CRM migration
Field-level mapping, validation, and rollback between Odoo Field Service and Mailchimp. We move data and schema; workflows are rebuilt natively in Mailchimp.
Odoo Field Service
Source
Mailchimp
Destination
Compatibility
12 of 12
objects map 1:1 between Odoo Field Service and Mailchimp.
Complexity
BStandard
Timeline
24–48 hours
Overview
Odoo Field Service stores customer and company data as res.partner records within its broader ERP database, alongside field-service-specific objects like fsm.tasks, fsm.orders, and equipment records. Mailchimp's data model is purpose-built for email marketing: Audiences hold contacts, Merge Fields extend standard properties, Tags enable segmentation, and Campaigns drive outreach. The migration scope focuses on what Mailchimp can consume: partner contacts with their email addresses, phone numbers, company affiliations, addresses, and any custom fields defined on the partner model. Field-service work orders, task assignments, scheduling data, and equipment records have no Mailchimp equivalent and are excluded from the migration payload. We preserve Odoo partner IDs in Mailchimp merge fields for traceability, resolve owner email addresses to Mailchimp subscriber status, and run a delta-pickup window (24–48 hours) before finalizing the Audience so any contacts modified in Odoo during cutover are captured before go-live. The transformation layer handles data type conversions, address formatting for Mailchimp's expected structure, and hierarchical flattening of Odoo's parent-child company relationships into flat subscriber records with company name merge fields.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Odoo Field Service object lands in Mailchimp, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Odoo Field Service
res.partner (Contact)
Mailchimp
Audience Member
1:1Odoo partner records where is_company=False map directly to Mailchimp Audience members. Email address serves as the unique identifier; contacts without a valid email address are flagged for manual review before migration begins. The original Odoo partner ID is preserved in a custom merge field (ODOO_PARTNER_ID__c) for traceability back to the source system. This allows your team to cross-reference Mailchimp subscribers with Odoo records for reconciliation, audit purposes, and data governance requirements.
Odoo Field Service
res.partner (Company)
Mailchimp
Audience Member + COMPANY Merge Field
1:1Odoo partners where is_company=True represent organizations. These migrate as individual Audience members with the company name populated in Mailchimp's built-in COMPANY merge field. Child contacts of that company are linked by having matching company_name in their merge field, creating a soft association that enables segmentation by company without native hierarchy support.
Odoo Field Service
res.partner.category_id (Tags)
Mailchimp
Mailchimp Tags
1:1Odoo contact tags (category_id) map 1:1 to Mailchimp Tags. Each Odoo tag name becomes a Tag in Mailchimp applied to the corresponding subscriber. Tags with no contacts are excluded. Tag names are lowercased and spaces replaced with hyphens for Mailchimp compatibility.
Odoo Field Service
res.country
Mailchimp
COUNTRY Merge Field
1:1Odoo's country_id (many2one relationship to res.country) stores the full country name. This maps to Mailchimp's COUNTRY merge field, which Mailchimp auto-creates when needed. Geographic segmentation works immediately on import, allowing you to create Mailchimp Segments filtering by country for regional campaigns, localized content, and compliance with regional email regulations such as GDPR for EU contacts.
Odoo Field Service
res.partner (address fields)
Mailchimp
ADDRESS Merge Field
1:1Odoo stores address as street, street2, city, state_id, zip, country_id. Mailchimp has a single ADDRESS merge field with format 'city, state zip country'. We concatenate these into the standard Mailchimp format during migration. State names are resolved to abbreviations where Odoo state_id records exist.
Odoo Field Service
res.partner.phone, mobile
Mailchimp
PHONE Merge Field
1:1Odoo's separate phone and mobile fields map to Mailchimp's single PHONE merge field. When both phone and mobile numbers exist in Odoo for a partner, the mobile number takes priority in the PHONE merge field since Mailchimp supports only one phone field per subscriber. Phone numbers are validated for format consistency during the migration to ensure deliverable contact information.
Odoo Field Service
res.partner (custom fields)
Mailchimp
Custom Merge Fields
1:1Any Odoo custom fields on res.partner (x_*, x_studio_*) are created as Merge Fields in Mailchimp with matching type (text, number, date, checkbox). Field labels become merge field names; field types are mapped: char/text to text, integer/float to number, boolean to checkbox, date/datetime to date.
Odoo Field Service
res.partner.title
Mailchimp
HONORIFIC Merge Field
1:1Odoo partner titles (Mr., Ms., Dr.) map to Mailchimp's HONORIFIC merge field. If Odoo uses non-standard titles or professional designations not recognized by Mailchimp's standard options, they are preserved as-is and a custom merge field is created to hold the additional title variants. This ensures no title information is lost during the migration while maintaining compatibility with Mailchimp's built-in field for standard honorifics.
Odoo Field Service
res.partner.function (job title)
Mailchimp
JOBTITLE Merge Field
1:1Odoo's function field on res.partner (representing the contact's job title at their company) maps to Mailchimp's JOBTITLE merge field for professional segmentation. This enables B2B marketing use cases such as filtering contacts by seniority level, targeting specific departments, or personalizing email content with the recipient's role. Job title data supports creating segments for industry-specific campaigns and account-based marketing workflows.
Odoo Field Service
res.partner (create_date, write_date)
Mailchimp
DATE_CREATED Merge Field + custom timestamp fields
1:1Mailchimp does not natively track record creation date. We create a DATE_CREATED merge field and populate it from Odoo's create_date so marketing teams can filter by how long a subscriber has been in the system. write_date is preserved as MODIFIED_DATE__c for reconciliation audits.
Odoo Field Service
fsm.task, fsm.order
Mailchimp
No equivalent
1:1Odoo Field Service task and order records have no Mailchimp equivalent. These objects are excluded from the migration payload. If you need task-related context (e.g., service history) in Mailchimp, we can create a custom merge field summarizing recent task activity as text for reference purposes.
Odoo Field Service
res.partner (opt-out / email unsubscribed)
Mailchimp
Audience Member status
1:1Odoo marks opted-out partners with a boolean flag. These contacts are migrated to Mailchimp with 'unsubscribed' status rather than 'subscribed', honoring the communication preference recorded in Odoo. Re-subscription requires explicit opt-in in Mailchimp through the platform's interface or API. If Odoo's opt-out flag represents temporary campaign suppression rather than a permanent unsubscribe preference, we recommend reviewing these records before migration to determine whether they should be migrated as subscribed contacts with a tag indicating their Odoo communication preference.
| Odoo Field Service | Mailchimp | Compatibility | |
|---|---|---|---|
| res.partner (Contact) | Audience Member1:1 | Fully supported | |
| res.partner (Company) | Audience Member + COMPANY Merge Field1:1 | Fully supported | |
| res.partner.category_id (Tags) | Mailchimp Tags1:1 | Fully supported | |
| res.country | COUNTRY Merge Field1:1 | Fully supported | |
| res.partner (address fields) | ADDRESS Merge Field1:1 | Fully supported | |
| res.partner.phone, mobile | PHONE Merge Field1:1 | Fully supported | |
| res.partner (custom fields) | Custom Merge Fields1:1 | Fully supported | |
| res.partner.title | HONORIFIC Merge Field1:1 | Fully supported | |
| res.partner.function (job title) | JOBTITLE Merge Field1:1 | Fully supported | |
| res.partner (create_date, write_date) | DATE_CREATED Merge Field + custom timestamp fields1:1 | Fully supported | |
| fsm.task, fsm.order | No equivalent1:1 | Fully supported | |
| res.partner (opt-out / email unsubscribed) | Audience Member status1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Odoo Field Service gotchas
Database version upgrade is not a direct restore
Custom fields use x_ column naming that can collide
ir.attachment binaries can exceed API upload limits
Chatter messages use HTML that requires sanitization
Mailchimp gotchas
Contact count includes unsubscribed and non-subscribed records
Automation workflows cannot be exported
Account suspensions trigger silently during migration
Template HTML is Mailchimp-specific and may not render in other platforms
E-commerce data requires active store connection
Pair-specific challenges
Migration approach
Export Odoo res.partner records via XML-RPC or CSV
We connect to your Odoo instance via XML-RPC using your database credentials and user API key, exporting all res.partner records where email is not null. The export includes standard fields (name, email, phone, address, company, tags), custom fields (x_*, x_studio_*), and system fields (create_date, write_date, active, opt_out, parent_id for hierarchy tracking). For Odoo instances with large partner tables (100k+ records), we batch the export in chunks of 5,000 records to avoid API timeouts, storing intermediate JSON files for auditability.
Create Mailchimp audience and configure merge fields
We create a new Audience in Mailchimp using the API (or connect to an existing audience you specify). Before importing contacts, we create all required Merge Fields: standard fields (FNAME, LNAME, EMAIL, PHONE, COMPANY, ADDRESS, COUNTRY) are auto-created by Mailchimp on first import; custom merge fields from Odoo (x_studio_*, DATE_CREATED__c, ODOO_PARTNER_ID__c, MODIFIED_DATE__c) are created via the Mailchimp Merge Field API with matching data types. We verify the merge field configuration before data upload begins.
Transform partner data and resolve hierarchy flattening
Odoo partner records are transformed for Mailchimp's flat structure: addresses are concatenated into the ADDRESS merge field format, titles are resolved to the HONORIFIC field, parent-child company relationships are resolved so company_name populates the COMPANY merge field, and Odoo tags become Mailchimp Tags applied per contact. We apply the opt_out mapping (opt_out=True → unsubscribed status), generate the full Mailchimp subscriber payload per record, and prepare the batch upload in Mailchimp's JSON format for the API.
Run sample migration and field-level diff
A representative slice of 200–500 contacts migrates first, covering a variety of record types: contacts with and without companies, contacts with custom fields, contacts with tags, and opted-out contacts. We generate a field-level diff report showing the source Odoo field value and the resulting Mailchimp merge field value for every mapped field. You review the diff to confirm address formatting, tag creation, unsubscribe mapping, and custom field type assignments before the full run commits.
Execute full migration with delta-pickup and audit
The full partner dataset migrates to Mailchimp in batches using Mailchimp's bulk import API. During the cutover window (24–48 hours), your team continues working in Odoo. A delta-pickup run captures any contacts created or modified during this period, deduplicating against the initial import by email address and Odoo partner ID. We generate an audit log listing every imported subscriber, their Odoo partner ID, their Mailchimp subscriber status, and any records that failed validation (missing email, invalid email format, duplicate email).
Platform deep dives
Odoo Field Service
Source
Strengths
Weaknesses
Mailchimp
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Odoo Field Service and Mailchimp.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Odoo Field Service and Mailchimp.
Object compatibility
All 8 core objects map 1:1 between Odoo Field Service and Mailchimp.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Odoo Field Service: Not publicly documented; Odoo documentation notes timeout thresholds for large exports and imports that effectively cap batch size.
Data volume sensitivity
Odoo Field Service doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Odoo Field Service to Mailchimp migration scoping. Not seeing yours? Book a call.
Walk through your Odoo Field Service to Mailchimp migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Odoo Field Service
Other ways to arrive at Mailchimp
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.