CRM migration
Field-level mapping, validation, and rollback between Spotler Mail+ and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Spotler Mail+
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Spotler Mail+ and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Spotler Mail+ to Odoo CRM is a migration from an email marketing automation platform into a full CRM embedded within an ERP suite. Spotler Mail+ stores Contacts with Tags, Scores, Custom Fields, and mailing interaction history; Odoo CRM receives these as Contacts with custom fields for scoring and tags for segmentation. We flag the 24-month anonymization cutoff on mailing history upfront and scope reporting migration to the accessible window. Audience segmentations are delivered as exported contact sets with their filter logic documented for Odoo Groups recreation. Spotler Workflow Automations, Form closure rules, and template drag-and-drop layouts do not migrate as executable objects; we produce written inventories for the customer's admin to rebuild in Odoo's action-automation framework. The CRM module must be present and licensed in the target Odoo instance before migration begins, which we confirm during scoping.
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 Spotler Mail+ 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.
Spotler Mail+
Contact
Odoo CRM
Contact (res.partner with customer_rank)
1:1Spotler Mail+ Contacts map directly to Odoo res.partner records with partner_type set to contact (type='contact'). Standard fields (name, email, phone, mobile) map cleanly. We set customer_rank via res.partner.automatic_groupbased on whether the Spotler contact has a corresponding deal or mailing history indicating a sales relationship. The original Spotler contact_id is preserved in a custom reference field for audit and cross-system reconciliation.
Spotler Mail+
Company implicit in contact data
Odoo CRM
Company (res.partner with company_rank)
1:manySpotler Mail+ does not have a separate Company/Account object; company context is embedded in contact records as a company name field. We extract unique company names from the Spotler contact dataset, create res.partner records with company_rank set (type='contact' parent_id pointing to company), and re-link child contact records to the parent company. This rebuilds the Odoo company-contact hierarchy that is required for pipeline and deal management.
Spotler Mail+
Tag
Odoo CRM
Tag (res.partner.category)
1:1Spotler Mail+ Tags map to Odoo's res.partner.category (Tags) model. Each unique Tag from Spotler becomes a category record in Odoo, and the category-tag relationships are written to res.partner.category_rel during contact import. Tags with more than 500 contacts in Spotler are flagged for review since Odoo's tag system is not designed for high-cardinality label sets.
Spotler Mail+
Score
Odoo CRM
Custom Float Field (lead_score)
1:1Spotler Mail+ lead scoring values map to a custom float field on res.partner (x_lead_score). We create the field during schema setup using Odoo's res.partner model extension via XML. Score values migrate as numeric integers or floats depending on Spotler's source field type. The customer decides during scoping whether to create Odoo Automated Actions triggered by score thresholds.
Spotler Mail+
Custom Fields
Odoo CRM
Custom Fields on res.partner
lossySpotler Mail+ Custom Fields of types text, numeric, currency, list, and date map to Odoo Char, Float, Monetary, Selection, and Date fields on res.partner. We pre-create each field definition via Odoo's ir.model.fields XML during schema setup. List fields with defined value sets become Odoo Selection fields; multi-select lists become Char fields storing comma-separated values. Field-type mapping is validated against Spotler's database field registry during scoping.
Spotler Mail+
Mailing interaction history (opens, clicks, delivery)
Odoo CRM
CRM Activity log (mail.activity) or Chatter note
1:1Spotler Mail+ mailing engagement records (opens, clicks, delivery confirmations) within the 24-month accessible window are migrated as mail.activity records on the related Contact. Each mailing becomes a scheduled Activity with subject set to the Spotler mailing subject line and body containing campaign performance summary. We flag explicitly that opens and clicks older than 24 months are anonymized by Spotler and will return empty in any export query regardless of method.
Spotler Mail+
Audience Segmentation (contact sets)
Odoo CRM
Partner Group (crm.lead.team or custom group)
1:1Spotler segmentations are exported as contact sets rather than reusable rule objects. We deliver each segmentation as a named Group in Odoo (crm.lead.team or a custom res.partner.group) with the constituent contact IDs attached. The segmentation rule logic (selections, exclusions, behavioral criteria) is documented in a written handoff so the customer's admin can recreate the dynamic filter in Odoo using domain-based Automated Actions or static group membership.
Spotler Mail+
Form Request
Odoo CRM
Custom Note or Custom Field on res.partner
1:1Spotler form submissions are flat records linked to contacts by email. We denormalize form responses into a structured text block (appended to a custom long-text field on res.partner) or, if the form has fewer than 10 questions, into individual custom fields. Survey closure rules (quota-triggered or date-triggered) are documented but not migrated as executable rules. Form response timestamps and submission source (form name) are preserved.
Spotler Mail+
User
Odoo CRM
User (res.users)
1:1Spotler Mail+ User accounts (names, emails, role assignments) map to Odoo res.users. We extract user records during scoping. Role definitions from Spotler map to Odoo Access Rights groups (internal type, portal, or public). Note that Odoo user provisioning requires the customer's Odoo admin to create login credentials during the migration window; we cannot generate passwords through the API for security reasons.
Spotler Mail+
Mailings (subject lines, send dates, content references)
Odoo CRM
CRM Opportunity or Custom Activity
1:1Spotler mailing campaigns are mapped as custom activity records (mail.activity) on the associated Contact or Company. The Spotler mailing subject, send date, and sender name are preserved in the activity description. The full HTML content of sent emails is archived as Odoo attachments. We do not recreate Spotler mailing campaigns as Odoo email marketing campaigns unless the customer has Odoo's Email Marketing app installed, which is confirmed during scoping.
Spotler Mail+
Template content (HTML/CSS)
Odoo CRM
Document (ir.attachment) or saved in external archive
1:1Spotler email template drag-and-drop layouts do not export as portable format. We extract template HTML, inline CSS, and embedded image URLs as a static HTML file archived as an ir.attachment in Odoo. The customer receives the archived package and reassembles templates manually in Odoo's email builder or a third-party HTML email tool. Template metadata (name, creation date, usage count) is documented in the migration inventory.
Spotler Mail+
Workflow Automations
Odoo CRM
Not migrated (no equivalent executable object)
1:1Spotler Mail+ automated campaign logic (triggers, drip sequences, behavioral actions) is platform-native and cannot be exported as executable rules. We do not migrate automations as code. We deliver a written inventory of every active Spotler automation listing its trigger type, conditions, delay steps, and CRM or mailing actions with a recommended Odoo Automated Action (ir.actions.server) equivalent for each. The customer's admin rebuilds these in Odoo's Automate menu post-migration.
| Spotler Mail+ | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact (res.partner with customer_rank)1:1 | Fully supported | |
| Company implicit in contact data | Company (res.partner with company_rank)1:many | Fully supported | |
| Tag | Tag (res.partner.category)1:1 | Fully supported | |
| Score | Custom Float Field (lead_score)1:1 | Fully supported | |
| Custom Fields | Custom Fields on res.partnerlossy | Mapping required | |
| Mailing interaction history (opens, clicks, delivery) | CRM Activity log (mail.activity) or Chatter note1:1 | Fully supported | |
| Audience Segmentation (contact sets) | Partner Group (crm.lead.team or custom group)1:1 | Fully supported | |
| Form Request | Custom Note or Custom Field on res.partner1:1 | Fully supported | |
| User | User (res.users)1:1 | Fully supported | |
| Mailings (subject lines, send dates, content references) | CRM Opportunity or Custom Activity1:1 | Fully supported | |
| Template content (HTML/CSS) | Document (ir.attachment) or saved in external archive1:1 | Fully supported | |
| Workflow Automations | Not migrated (no equivalent executable object)1:1 | Not 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.
Spotler Mail+ gotchas
Mailing interaction data is purged after 24 months
Import file structure is strict and column-name-sensitive
Form and survey results export as flat records, not relational data
Multi-brand capability is tier-gated to MailPro
API does not expose a bulk export endpoint for contact history
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 Odoo CRM module confirmation
We audit the Spotler Mail+ portal for total contacts, Tags, Scores, Custom Fields, active segmentations, form submissions, user accounts, and mailing history volume within the 24-month window. We confirm the target Odoo instance has the CRM app installed and licensed. We extract a full contact export using paginated API calls and validate column headers against Spotler's field registry. The discovery output is a written migration scope, a source field inventory, and confirmation that the CRM module is present in the destination Odoo environment.
Odoo schema design and custom field creation
We design the Odoo CRM schema before any data loads. This includes creating custom fields on res.partner (x_lead_score, x_spotler_contact_id, x_custom_field_1 through x_custom_field_n) via Odoo's ir.model.fields XML, configuring res.partner.category entries for Tag migration, setting up res.partner records with company_rank for the company-contact hierarchy split, and creating any required crm.lead.team entries for segmentation mapping. Schema is deployed into the customer's Odoo Sandbox or staging environment first for validation.
Company-contact hierarchy split
We process the Spotler contact export to extract unique company names, create parent res.partner records with company_rank set, then re-link child contact records to their parent. This step resolves the company-contact relationship that Odoo CRM requires for pipeline and deal association before individual contact import begins. We use email domain as a secondary dedupe signal where company name is ambiguous.
Tag and Score migration with group provisioning
We extract all unique Tags from Spotler, create corresponding res.partner.category records in Odoo, then map each Contact's Tag memberships during the contact import phase. Spotler Scores are written to the x_lead_score custom field on each res.partner record. We batch-tag operations using Odoo's xmlrpc_batch write method to minimize API round-trips.
Contact import with custom field population
We run contact import in batches of 200-500 records using Odoo's jsonrpc API create and write methods with exponential backoff on rate-limit responses. Each batch is checkpointed to a migration log. After each batch completes, we validate record counts against Spotler's export totals and spot-check 10-20 records for field-level accuracy. Custom Fields are populated as Char, Float, Selection, or Date fields depending on the type-mapped Odoo field created during schema setup.
Mailing history and activity import within 24-month window
We export Spotler mailing engagement records (opens, clicks, delivery) scoped to the 24-month accessible window and map them to mail.activity records on the associated res.partner in Odoo. Each activity gets a type (email, call, or meeting), a subject (Spotler mailing subject line), and a description with send date and sender. We flag records that fall outside the 24-month window as unreachable due to Spotler anonymization and document this in the migration report.
Cutover, delta sync, and automation handoff
We freeze Spotler writes during cutover, run a delta migration of records modified during the migration window, then enable Odoo CRM as the system of record. We deliver the automation inventory documenting every Spotler workflow with its trigger, conditions, and recommended Odoo Automated Action equivalent. We support a five-day hypercare window for reconciliation issues. We do not rebuild Spotler automations as Odoo actions inside the migration scope; that is a separate engagement.
Platform deep dives
Spotler Mail+
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Spotler Mail+ and Odoo CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
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
Spotler Mail+: Not publicly documented in the available API documentation.
Data volume sensitivity
Spotler Mail+ 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 Spotler Mail+ to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Spotler Mail+ 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 Spotler Mail+
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.