CRM migration
Field-level mapping, validation, and rollback between Iterable and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Iterable
Source
Odoo CRM
Destination
Compatibility
11 of 15
objects map 1:1 between Iterable and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Iterable to Odoo CRM is a platform-class migration: Iterable is a cross-channel marketing automation system organized around User Profiles, Journeys, Campaigns, and behavioral event streams; Odoo CRM is a sales-focused CRM organized around Leads, Contacts, Opportunities, and activities on a Kanban pipeline. These are fundamentally different systems with incompatible automation models. We migrate the contact record layer (profiles, list memberships, subscription status, purchase history) into Odoo's Lead and Contact objects, and we log behavioral events as Activity records. We do not migrate Journey definitions, email templates, or campaign send configurations as code; we deliver a written inventory of every active Journey and Template with Odoo automation recommendations so your team can rebuild them post-migration. Odoo CRM does not send marketing email, SMS, or push messages natively, so teams relying on Iterable's outbound execution layer will need a separate marketing tool alongside Odoo CRM.
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 Iterable object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Iterable
User Profile
Odoo CRM
Lead and Contact (split required)
1:manyIterable User Profiles map to Odoo CRM Lead for unqualified prospects and Contact for qualified buyers. We apply a lifecycle-based split during scoping: Iterable users with subscription or marketing-only signals map to Lead; users with a purchase event or assigned sales owner map to Contact. The original Iterable userId and email preserve as fields on the Odoo record for audit and deduplication.
Iterable
User Profile custom fields
Odoo CRM
Lead or Contact custom fields
1:1Iterable profile-level custom fields map directly to custom fields on Odoo crm.lead or res.partner. We audit the full custom field schema during scoping, flag deprecated fields (which Iterabl cannot delete), and collapse redundant or unused fields to keep the Odoo schema clean. Field type mapping converts Iterables picklist, boolean, date, and number types to their Odoo equivalents.
Iterable
List
Odoo CRM
Tag
1:1Iterable Lists are audience segments used for campaign targeting. We map each List to an Odoo Tag attached to the corresponding Lead or Contact. List membership is preserved as a Tag value so segmentation logic is recoverable in Odoo. Note that Tags in Odoo are a flat key-value structure and do not support the nested or dynamic audience logic that Iterable Lists offer; we document the original List definition for the admin to rebuild in Odoo.
Iterable
Custom Event
Odoo CRM
Activity (note or log note)
1:1Iterable Custom Events capture behavioral data beyond profile updates (page views, feature usage, cart actions). We map these to Odoo Activity records logged against the corresponding Lead or Contact. Event metadata (event name, timestamp, payload) stores in the Activity note body. This preserves the behavioral signal for historical analysis but does not trigger Odoo automations natively. If behavioral triggers are required, we recommend a separate event-tracking integration post-migration.
Iterable
Purchase
Odoo CRM
Sale Order or Activity log
1:1Iterable Purchase events record transaction data (orderId, total, items, userId). We map these to Odoo Sale Order lines attached to the customer Contact if Odoo Sales app is active, or to Activity log entries if only the CRM module is in scope. Total revenue and item count preserve as Activity note content. Note that Iterables revenue attribution does not map to Odoo Opportunity without additional configuration.
Iterable
Subscription
Odoo CRM
Contact field (opt-in status)
1:1Iterable tracks channel-level opt-in and opt-out state per user (email, SMS, push). We map these to Odoo Contact fields: email opt-out to user_ids.opt_out, SMS opt-out to a custom field sms_opt_out__c. Suppression event history preserves as Activity log entries so the team can audit opt-out timestamps post-migration. Note that Odoo CRM does not have a native SMS opt-out field and requires a custom field or partner app for SMS compliance tracking.
Iterable
Campaign (metadata)
Odoo CRM
Opportunity or Activity
1:1Iterable Campaign records contain metadata (name, channel, status, schedule). Campaign metadata migrates as Odoo Opportunity records with the campaign name as Opportunity name, or as Activity log entries if no Opportunity association is appropriate. Campaign metrics (sends, opens, clicks) do not have a native Odoo equivalent and are documented in a separate campaign audit spreadsheet for the admin.
Iterable
Template
Odoo CRM
Documentation only
lossyIterable Templates define email, SMS, and push message content with Handlebars personalization syntax. Odoo CRM does not have a message content template system; email templates are scoped to CRM mail templates and do not support the multi-channel dynamic content that Iterables templates provide. We export template metadata and content to a structured document during migration. The customer rebuilds templates in their chosen marketing execution tool (Odoo Email Marketing, a separate ESP, or the tool they adopt post-Iterable).
Iterable
Journey
Odoo CRM
Documentation only
lossyIterable Journeys define multi-step, multi-channel automation paths with branching logic, delays, and action triggers. Odoo CRM has Automated Tasks and Server Actions that cover basic trigger-response workflows but do not replicate Iterables Journey logic. We deliver a written Journey inventory during migration: each Journey documented with its trigger conditions, step sequence, channel actions, and recommended Odoo Automated Task equivalent. The admin rebuilds Journeys post-migration in Odoo or in a dedicated marketing automation tool.
Iterable
Catalog Item
Odoo CRM
Product (via Odoo Sales)
1:1Iterable Catalog stores product data used for dynamic content insertion in messages. If the Odoo Sales app is active, we import Catalog schemas and items as Odoo Product records with relevant fields (name, SKU, price, description). If only Odoo CRM is in scope, Catalog items migrate as custom fields or a dedicated custom module. Note that Catalog-to-Journey associations do not migrate; these relationships are documented for the admin to reconfigure in Odoo.
Iterable
Engagement: Email
Odoo CRM
Activity log (note)
1:1Iterable email engagement records (sends, opens, clicks, unsubscribes) migrate as Odoo Activity log entries attached to the corresponding Lead or Contact. Email content summary preserves in the Activity note body. Odoo CRM does not have a native engagement tracking layer; the activity log provides a historical record but does not update a live engagement dashboard. If ongoing email engagement tracking is required, a separate marketing integration is needed.
Iterable
Engagement: Call
Odoo CRM
Activity log (note)
1:1Iterable call engagement records (call made, answered, duration, recording) migrate as Odoo Activity log entries. Duration and disposition data preserve in the Activity note. Call recordings do not migrate to Odoo natively; we document the original recording URL if the customer has an external storage policy.
Iterable
Engagement: Meeting
Odoo CRM
Activity log (note)
1:1Iterable meeting engagements (name, date, attendee list) migrate as Odoo Activity log entries. Attendee associations map to additional Activity log entries or are documented in the Activity note body. Odoo CRM does not have a native meeting calendar sync without Odoo Calendar app; we flag this dependency during scoping.
Iterable
Owner
Odoo CRM
User
1:1Iterable Owners map to Odoo Users. We resolve owners by email match against the destination Odoo User list. Any Iterabl Owner without a matching Odoo User goes to a reconciliation queue for the customer admin to provision before record import resumes.
Iterable
Data Sync Records
Odoo CRM
External stored records
lossyIterable Data Sync exports data to a warehouse and requires Customer Success coordination and IP allowlisting. If the customer uses Data Sync as a primary data source, we export the historical records to CSV or JSON and deliver them alongside the CRM migration. The customer is responsible for loading warehouse exports into their chosen analytics environment post-migration.
| Iterable | Odoo CRM | Compatibility | |
|---|---|---|---|
| User Profile | Lead and Contact (split required)1:many | Fully supported | |
| User Profile custom fields | Lead or Contact custom fields1:1 | Fully supported | |
| List | Tag1:1 | Fully supported | |
| Custom Event | Activity (note or log note)1:1 | Fully supported | |
| Purchase | Sale Order or Activity log1:1 | Fully supported | |
| Subscription | Contact field (opt-in status)1:1 | Fully supported | |
| Campaign (metadata) | Opportunity or Activity1:1 | Fully supported | |
| Template | Documentation onlylossy | Fully supported | |
| Journey | Documentation onlylossy | Fully supported | |
| Catalog Item | Product (via Odoo Sales)1:1 | Fully supported | |
| Engagement: Email | Activity log (note)1:1 | Fully supported | |
| Engagement: Call | Activity log (note)1:1 | Fully supported | |
| Engagement: Meeting | Activity log (note)1:1 | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Data Sync Records | External stored recordslossy | Mapping required |
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.
Iterable gotchas
Iterable does not allow field deletion
Separate API endpoints for US and EU data centers
Soft limit of 8,000 unique fields per project
Enterprise pricing is opaque and contract-based
Usage metrics lag by one calendar day
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Discovery and data center confirmation
We audit the Iterabl project across API key scope (USDC vs EDC), total User Profile count, active custom fields (including deprecated fields), List count and membership sizes, active Journeys, active Templates, Purchase event volume, and engagement history by type. We confirm the Iterabl data center and set the correct API base URL for extraction. The discovery output is a written migration scope including which objects migrate, which are documented for rebuild, and which are excluded with rationale.
Schema audit and field mapping design
We audit the full Iterabl custom field schema and map each field to an Odoo field type on crm.lead or res.partner. Deprecated Iterabl fields are flagged for exclusion. We design the Tag strategy for Iterabl Lists and the split rule for User Profile to Lead versus Contact mapping. If Odoo Sales app is active, we also design the Product mapping for Iterabl Catalog items. Schema design is validated in an Odoo staging environment before production migration begins.
Staging migration and reconciliation
We run a full migration into an Odoo staging environment using production-like data volume. The customer reconciles record counts (Leads in, Contacts in, Activities in, Products in), spot-checks 25-50 random records against the Iterabl source, and validates the Tag assignments and split rule correctness. Any mapping corrections happen in staging. The customer signs off the staging results before production migration begins.
Owner and user reconciliation
We extract every distinct Iterabl Owner referenced on User Profiles and map them by email to Odoo User records. Owners without a matching Odoo User go to a reconciliation queue. The customer provisions any missing Odoo Users (active or inactive based on whether the original Iterabl owner is still active in the organization). Migration cannot proceed past this step because Owner assignments are required on Odoo Lead and Contact records.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users (validated), Leads and Contacts (with split rule applied and OwnerId resolved), Tags (assigned to the corresponding Lead or Contact), Activities (event history logged per type), Products (if Odoo Sales is active), Catalog items (mapped to Products), Purchase records (as Sale Orders or Activity logs), and Subscription status fields (opt-in and opt-out state per channel). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Iterabl writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver the Journey inventory document, Template content export, and Campaign audit spreadsheet to the customers admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the team. We do not rebuild Iterabl Journeys as Odoo Automated Tasks inside the migration scope; that work is handled by the admin using the provided documentation or a separate Odoo automation engagement.
Platform deep dives
Iterable
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Iterable and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Iterable and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Iterable and Odoo CRM.
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
Iterable: Not publicly documented; returns RateLimitExceeded code on limit.
Data volume sensitivity
Iterable exposes a bulk API — large-volume migrations stream efficiently.
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 Iterable to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Iterable to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Iterable
Other ways to arrive at Odoo CRM
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.