CRM migration
Field-level mapping, validation, and rollback between SalesNexus and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
SalesNexus
Source
Odoo CRM
Destination
Compatibility
13 of 16
objects map 1:1 between SalesNexus and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Migrating from SalesNexus to Odoo CRM is a structural migration that also marks a shift from a bundled CRM-email-marketing platform to a modular open-source ERP where CRM is one of many apps. SalesNexus Contacts map to Odoo Partners, Companies map to Odoo Companies, and SalesNexus Pipelines with ordered Stages map to Odoo crm.lead stage definitions. SalesNexus does not expose drip automation logic over its public API, and Nexi AI features produce no exportable artifact; we deliver written inventories of active sequences and Nexi configurations for manual rebuild in Odoo. The Odoo CRM app is free in the Community edition but requires per-app subscription in Odoo Online and Odoo.sh, with the Studio app needed for custom field creation on lower tiers. We handle parent-record lookup resolution, contact deduplication by email, and user mapping by email during migration, and we preserve call transcription URLs and email archival records as Odoo attachments.
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 SalesNexus 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.
SalesNexus
Contact
Odoo CRM
res.partner
1:1SalesNexus Contact maps to Odoo res.partner with is_company=False. The SalesNexus contact email becomes the partner email field and serves as the deduplication key during import. Custom fields on the Contact object migrate as custom fields on res.partner, which requires the Odoo Studio app on Standard and above plans; Community users with technical access can add fields directly via Python model inheritance. We resolve the linked Company record to a partner_id lookup on the Contact record at import time.
SalesNexus
Company
Odoo CRM
res.partner
1:1SalesNexus Company records map to Odoo res.partner with is_company=True. The Company name becomes the partner name, domain becomes the website field, and industry or category maps to a res.partner.category tag assignment. Company is imported before Contact so the company_id foreign key resolves correctly on each Contact row during batch import via Odoo's CSV or XML-RPC interface.
SalesNexus
Pipeline
Odoo CRM
crm.team
1:1SalesNexus named Pipelines map to Odoo crm.team records. We extract the pipeline name and description and create an equivalent crm.team in Odoo with team_member assignments populated from the mapped SalesNexus user list. On Free and Starter plans, SalesNexus limits pipeline count to 3 and 10 respectively; Odoo imposes no equivalent limit.
SalesNexus
Pipeline Stage
Odoo CRM
crm.lead stage
lossySalesNexus Pipeline Stages are ordered integers with name and probability defaults that map to Odoo crm.lead stage_id with sequence order, probability percentage, and legend color (grey=new, blue=qualified, green=won, red=lost). We preserve the stage order and probability values. SalesNexus stage IDs are integer sequential values; Odoo uses many2one stage_id references that we resolve after creating the stage records. Closed-Lost and Closed-Won stage handling is preserved with Odoo's on_change probability auto-update rules adjusted accordingly.
SalesNexus
Task
Odoo CRM
project.task
1:1SalesNexus Tasks map to Odoo project.task records attached to an Odoo Project created for the CRM context or to a dedicated Tasks project. Task fields (name, date_deadline, user_id, stage_id, priority, description) migrate directly. The SalesNexus task owner maps via email to an Odoo res.users record; unresolved owners are assigned to a default migration user and flagged for admin review. Completed status maps from SalesNexus kanban state to Odoo stage_id.
SalesNexus
Email Template
Odoo CRM
mail.template
1:1SalesNexus email templates with merge fields and HTML content map to Odoo mail.template records in the CRM app. Merge field syntax differs: SalesNexus uses {{contact.first_name}} patterns while Odoo uses {{object.partner_id.name}} Jinja2-style substitution. We convert common patterns (first_name, last_name, email, company_name) during the template body transform and flag any unrecognized merge field tokens in a template audit report for manual review in Odoo Studio.
SalesNexus
User/Owner
Odoo CRM
res.users
1:1SalesNexus Users referenced on Contacts, Companies, and Tasks map to Odoo res.users by email address match. We export the full user list from SalesNexus and cross-reference against the destination Odoo instance user table. Any SalesNexus owner without a matching Odoo user is placed in a reconciliation queue; the customer's Odoo admin provisions missing users before record import resumes to prevent orphaned owner_id references.
SalesNexus
Call Transcription
Odoo CRM
ir.attachment (linked to crm.lead)
1:1SalesNexus stores call recordings and transcription text linked to Contact Activity records. We export the transcription text as plain text and a URL reference to the recording. Binary audio files are not downloadable via the SalesNexus API, so we create an Odoo ir.attachment record with the transcription text as the file content and the recording URL as an external URL field on the associated crm.lead activity. The activity record is created as a note or log note on the lead.
SalesNexus
Email Archival
Odoo CRM
mail.message (on crm.lead)
1:1SalesNexus email archival records (subject, body as HTML, date, direction sent/received) migrate to Odoo mail.message records linked to the corresponding crm.lead via model= crm.lead and res_id pointing to the lead ID. HTML email bodies are converted to plain text or kept as HTML depending on the Odoo version rendering capability. Email thread continuity is preserved by grouping messages with the same thread_id or subject pattern.
SalesNexus
Custom Field (Contact/Company)
Odoo CRM
ir.model.fields (custom)
lossySalesNexus custom fields on Contacts and Companies identified by integer field IDs are exported via get-all-fields with field labels, types, and options. We create equivalent custom fields in Odoo via Settings > Technical > Database Structure > Models using the field type mapping (text to char, number to float or integer, dropdown to selection, checkbox to boolean). On Standard and above Odoo plans, the Studio app provides a UI for custom field creation; Community users require technical access or a developer to write the field definitions to the database.
SalesNexus
Drip Automation Sequence (enrollment audit)
Odoo CRM
crm.lead tag + note
1:1SalesNexus drip automation workflow logic is not accessible via the public API. We export active contacts enrolled in each sequence with enrollment date, sequence name, and step number, then create Odoo crm.lead.tag records for each sequence name and assign the tag to the enrolled contacts. A note is appended to each contact documenting the sequence name and last enrollment date. The trigger logic, delay rules, and conditional branches must be manually rebuilt in Odoo using Automated Actions or Studio workflows; we deliver a sequence audit report listing all active automations with their enrollments for the customer's admin.
SalesNexus
Marketing Form
Odoo CRM
crm.lead (via website form submissions)
1:1SalesNexus forms with field configurations and webhook/post URLs map to Odoo Website form definitions in the Website app. We export the form schema (field names, types, required flags) and recreate the form in Odoo Website > Contact Form. Form submission history migrates as crm.lead records created from the form, preserving submission date and field values. The iframe embed code is platform-specific and must be replaced with the Odoo Website form snippet in the customer's web properties.
SalesNexus
Dashboard and Report
Odoo CRM
ir.ui.view (custom report)
1:1SalesNexus personalized boards and dashboards (up to 10 boards and 20 dashboards depending on plan) export as metadata describing the chart type, data source object, and filter configuration. Odoo uses a different reporting model (action reports, Excel exports, and BI dashboard apps). We deliver a written report inventory document mapping each SalesNexus report to an equivalent Odoo approach: either a native Excel export definition, a custom Odoo BI view, or a documented rebuild step in Odoo Studio.
SalesNexus
Nexi AI Suggestions (ephemeral)
Odoo CRM
None (documented loss)
1:1Nexi AI features (AI Email Assistant suggestions, AI Meeting Notes outputs, Smart Recommendations) are stored ephemerally in SalesNexus's AI inference layer and are not exposed via the public API. We export any suggestions stored as contact notes or activity notes that are persistent, but the AI model state and live inference outputs cannot be migrated. We document which Nexi features are active in the source account in a gap analysis report so the customer understands what will be unavailable post-migration and can evaluate Odoo AI add-on apps as replacements.
SalesNexus
Nexi AI Configuration
Odoo CRM
None (manual rebuild)
lossySalesNexus Nexi AI settings (AI Email Assistant tone and template preferences, AI Meeting Notes configuration, Smart Recommendation thresholds) are account-level configurations not exposed via API. We export the list of active Nexi features and their high-level configuration state as a written document. Rebuilding these settings in Odoo requires selecting an equivalent Odoo AI app or a third-party AI integration; we do not configure these as part of the data migration scope.
SalesNexus
Opportunity/Deal
Odoo CRM
crm.lead
1:1SalesNexus Deals within Pipelines map to Odoo crm.lead records with type=opportunity. The SalesNexus deal amount, close date, and probability map to Odoo planned_revenue, date_deadline, and probability fields. The SalesNexus pipeline and stage assignment maps to crm.lead.team_id and stage_id. We preserve the SalesNexus deal name as the Odoo lead name and any deal-level custom fields as custom fields on the crm.lead model. Lost deal reasons from SalesNexus custom fields map to Odoo's lost_reason field on the lead.
| SalesNexus | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner1:1 | Fully supported | |
| Pipeline | crm.team1:1 | Fully supported | |
| Pipeline Stage | crm.lead stagelossy | Fully supported | |
| Task | project.task1:1 | Fully supported | |
| Email Template | mail.template1:1 | Fully supported | |
| User/Owner | res.users1:1 | Fully supported | |
| Call Transcription | ir.attachment (linked to crm.lead)1:1 | Fully supported | |
| Email Archival | mail.message (on crm.lead)1:1 | Mapping required | |
| Custom Field (Contact/Company) | ir.model.fields (custom)lossy | Fully supported | |
| Drip Automation Sequence (enrollment audit) | crm.lead tag + note1:1 | Fully supported | |
| Marketing Form | crm.lead (via website form submissions)1:1 | Fully supported | |
| Dashboard and Report | ir.ui.view (custom report)1:1 | Fully supported | |
| Nexi AI Suggestions (ephemeral) | None (documented loss)1:1 | Fully supported | |
| Nexi AI Configuration | None (manual rebuild)lossy | Fully supported | |
| Opportunity/Deal | crm.lead1: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.
SalesNexus gotchas
Dual-platform account confusion blocks clean exports
Contact tier limits are enforced at migration time
Drip automation sequences are not exportable via API
API rate limits restrict export throughput on Free and Starter plans
Nexi AI suggestions and automations produce no exportable artifact
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 platform identification
We audit the source SalesNexus account across all active users, pipelines, stages, contacts, companies, tasks, drip sequences, email templates, custom fields, and Nexi AI feature usage. We confirm whether the account uses the 2026 Nexi platform (app.salesnex.us), the legacy version (salesnexus.com), or both simultaneously. We validate contact and record counts against the current SalesNexus plan tier and identify any records approaching or exceeding tier limits. The discovery output is a written migration scope document covering record counts per object, active automation list, and a confirmed or pending Odoo plan recommendation.
Odoo plan and schema design
We confirm the destination Odoo plan (Community, Online Standard, or Online Enterprise) and verify whether Odoo Studio is available for custom field creation. We design the destination schema in Odoo: crm.team records for each SalesNexus pipeline, crm.lead stage definitions with probability and color mapping, custom fields on res.partner and crm.lead matching the SalesNexus field schema, and user provisioning by email. Schema is validated in an Odoo test database before production migration begins.
Data extraction and cleansing
We extract data from SalesNexus via paginated REST API calls using exponential backoff to respect plan-level rate limits. We deduplicate contacts by email address before import, merge duplicate company records, and standardize date formats and field types. We generate the sequence audit report documenting all active drip automations and their enrollment counts, and the Nexi AI gap analysis report documenting active AI features. Data cleansing corrects malformed email addresses, resolves orphaned company links, and flags records with missing required fields for Odoo import compatibility.
Staging migration and reconciliation
We run a full migration into the Odoo staging environment using production-equivalent data volume. The customer's admin reconciles record counts (Partners from Contacts and Companies, Leads from Deals, Tasks, email archives), spot-checks 25-50 random records against the SalesNexus source, and validates stage ordering and probability values. Any mapping corrections are made before production migration begins. We also confirm Odoo Studio is correctly configured for custom field display on form views.
Production migration in dependency order
We run production migration in record-dependency order: Odoo crm.teams (from SalesNexus Pipelines), crm.lead stages (configured per pipeline), res.partner company records (from SalesNexus Companies with is_company=True), res.partner contact records (from SalesNexus Contacts with company_id resolved), crm.lead opportunity records (from SalesNexus Deals with team_id, stage_id, and user_id resolved), project.task records (from SalesNexus Tasks), mail.message records (from SalesNexus email archives), ir.attachment records (from call transcription texts), mail.template records (from email templates), and crm.lead tags (from drip automation enrollment audit). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze SalesNexus 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 sequence audit report and Nexi AI gap analysis to the customer's admin team with recommendations for rebuilding drip automations as Odoo Automated Actions and evaluating Odoo AI add-on apps for Nexi feature replacement. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's team. We do not rebuild SalesNexus drip automations as Odoo workflows inside the migration scope; that is a separate configuration engagement.
Platform deep dives
SalesNexus
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 SalesNexus 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
SalesNexus: Not publicly documented in a rate-limit table; Free plan limits are 50 API calls/month, Starter increases to 500+.
Data volume sensitivity
SalesNexus 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 SalesNexus to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your SalesNexus 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 SalesNexus
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.