CRM migration
Field-level mapping, validation, and rollback between Bolten CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Bolten CRM
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Bolten CRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Bolten CRM to Odoo CRM is a structural migration driven by two core differences: billing model and platform scope. Bolten charges per Project (per workspace, not per seat) while Odoo charges per user, meaning the cost structure changes significantly for growing teams. Odoo CRM sits inside a full ERP suite, so teams migrating from a CRM-only tool gain access to integrated accounting, inventory, and project management, but they also inherit a steeper initial configuration curve. We map Bolten's Contacts, Leads, and Kanban Deals to Odoo CRM's equivalent objects, convert Bolten's free-text pipeline stages to Odoo's ordered stage picklist, and preserve activity audit logs as Odoo Mail Message records. WhatsApp message content cannot migrate because it lives on Meta's servers; we preserve phone numbers and conversation timestamps as Activity records. Bolten's AI autofill data migrates as the current field value only. Workflows, automations, and AI agent configurations do not migrate as code; we deliver a written inventory of these for the customer's Odoo administrator to rebuild in Studio or through server actions.
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 Bolten CRM 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.
Bolten CRM
Contact
Odoo CRM
Contact
1:1Bolten Contacts map directly to Odoo Contact. We preserve name, phone, email, and custom field values as typed fields in Odoo (text, number, date, selection, or many2one depending on destination field type). Tags stored as multi-checkbox labels migrate to Odoo Tags. Lead-source attribution stored on the Contact migrates to a custom field or the Activity log. We deduplicate on email during import to prevent duplicate Contact creation when multiple Bolten Projects share the same Contact record.
Bolten CRM
Lead
Odoo CRM
Lead
1:1Bolten Leads (separate from Contacts in Bolten's data model) map to Odoo CRM Lead. We preserve lifecycle status, source campaign, owner assignment, and conversion attribution data as custom fields on the Odoo Lead. UTM source and medium values migrate as text fields. Any Bolten Lead that is already converted (status = customer) migrates to an Odoo Contact with a note flagging the original conversion date.
Bolten CRM
Deal (Kanban Pipeline)
Odoo CRM
Opportunity
1:1Bolten Deals map to Odoo CRM Opportunity. Bolten's free-text stage names have no enforced ordering property in the API, so we explicitly write an ordinal position (stage_sequence field) during migration based on the customer's confirmed stage order. The pipeline assignment maps to an Odoo CRM Sales Team. Deal value, expected close date, and probability migrate directly. Closed-won and closed-lost reasons from Bolten become custom fields on Odoo Opportunity.
Bolten CRM
Pipeline Stage
Odoo CRM
Stage
lossyEach Bolten Kanban pipeline becomes an Odoo CRM stage within a Sales Team. We capture stage names and write explicit sequence numbers derived from the customer's confirmed stage order. Odoo enforces stage sequence as a picklist property, so we create the stage in Odoo first, then assign the ordinal sequence number before importing any Deals that reference that stage.
Bolten CRM
Task
Odoo CRM
Task
1:1Bolten Tasks migrate to Odoo Project Task or CRM Activity depending on task type. Tasks linked to a Contact or Deal carry the res_id and res_model lookup at migration time. Recurring task rules do not transfer and are documented in the handoff inventory for the customer's admin to rebuild in Odoo Studio. Due date, assignee (mapped via email to Odoo User), and status (new/in_progress/done) preserve directly.
Bolten CRM
Activity (Audit Log)
Odoo CRM
Mail Message
1:1Bolten's full change-audit history per record migrates to Odoo Mail Message records. Each audit entry becomes a Mail Message with author, body, and date preserved. Mail Message records are linked via res_id and model to the parent Contact, Lead, or Opportunity. We batch Mail Message inserts using Odoo's XML-RPC or jsonrpc endpoint with rate-limit handling and parent-record validation to ensure messages attach to the correct record.
Bolten CRM
Custom Field
Odoo CRM
Custom Field
lossyBolten custom fields (text, number, date, dropdown, multi-select) map to Odoo custom fields of equivalent type. We pre-create the destination schema in Odoo via the Settings > Technical > Fields menu or via CSV import of ir.model.fields before any data import. Multi-select fields from Bolten migrate to Odoo tags or many2many relation depending on the target field configuration. Any Bolten custom field with no Odoo equivalent is flagged in the handoff document.
Bolten CRM
Conversions (Lead Attribution)
Odoo CRM
Lead / UTM Custom Fields
1:1Bolten's lead origin tracking (Google Ads, Meta Ads, direct) and real-time conversion events migrate as custom text fields on the Odoo Lead (utm_source, utm_medium, utm_campaign). Attribution timestamps migrate as custom date fields. The customer should verify UTM reconnection in Odoo's marketing attribution module if they intend to continue paid acquisition tracking.
Bolten CRM
User / Assignee
Odoo CRM
User
1:1Bolten Users map to Odoo Users by email match. Suspended or inactive Bolten users are flagged in the reconciliation queue for the customer's admin to map to active Odoo Users before record import. If Bolten has a User not yet provisioned in Odoo, we hold that User's assigned records and import them after the User is created. Owner lookups on Contacts, Leads, Deals, and Tasks all reference User records, so User provisioning must complete before object import begins.
Bolten CRM
Tag
Odoo CRM
Tag
1:1Bolten Tags (flat-label strings on Contacts and Deals) migrate to Odoo Tags. Tags used for deal categorization become Tags on the Opportunity record. Tags used for contact segmentation become Tags on the Contact record. We preserve the tagging relationship per record and flag any tag that appears more than 50 times as a candidate for a dedicated Odoo Stage or Sales Team assignment.
Bolten CRM
WhatsApp Conversation Metadata
Odoo CRM
Activity / Note
1:1WhatsApp message content cannot migrate because conversations are stored on Meta's servers, not in Bolten's database. We migrate contact phone numbers (already covered by Contact mapping), conversation timestamps as Activity records, and message metadata as Note records on the Contact. A note on the Contact flags that WhatsApp history requires a separate Meta data portability request. The customer should initiate a Meta data export at account.meta.com before cutover to preserve live chat history.
Bolten CRM
AI Autofill Data
Odoo CRM
Custom Field (final value)
1:1Bolten's AI autofill suggestions auto-populate fields but users sometimes override them without clearing the original suggestion. We migrate the current (user-confirmed) field value, not the AI suggestion history. Any field that shows a discrepancy between the AI suggestion and the final value is noted in the migration report. The AI suggestion log is not accessible via Bolten's standard export and must be requested separately if required for audit purposes.
| Bolten CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Deal (Kanban Pipeline) | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Stagelossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Activity (Audit Log) | Mail Message1:1 | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| Conversions (Lead Attribution) | Lead / UTM Custom Fields1:1 | Mapping required | |
| User / Assignee | User1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| WhatsApp Conversation Metadata | Activity / Note1:1 | Fully supported | |
| AI Autofill Data | Custom Field (final value)1: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.
Bolten CRM gotchas
Per-Project billing does not scale like per-seat models
WhatsApp message history lives on Meta's infrastructure
Kanban stage names are free-text, not schema-enumerated
AI autofill data may not reflect corrected final field values
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 billing model reconciliation
We audit the source Bolten account across all active Projects, record counts per object (Contacts, Leads, Deals, Tasks, Activity logs), custom field definitions per object, active Kanban pipeline names and stage lists, and any AI autofill configurations. We reconcile the per-Project billing against the customer's Odoo deployment choice (Cloud per-user or Community self-hosted) and document the expected cost delta. The discovery output is a written migration scope with object counts, a proposed Odoo target schema (stages, Sales Teams, custom fields), and a billing model comparison.
Stage ordering confirmation and schema pre-creation in Odoo
We send the customer a stage ordering confirmation worksheet listing every Bolten Kanban stage name with a request to assign an ordinal position (1, 2, 3). Once confirmed, we pre-create the Odoo stages in the target CRM with explicit sequence numbers, pre-create any required custom fields via Odoo's Settings > Technical > Fields interface, and pre-create the necessary Sales Teams. Schema pre-creation happens in an Odoo Sandbox or staging database first for validation before production cutover.
User provisioning and owner reconciliation
We extract every distinct Bolten User referenced on Contacts, Leads, Deals, and Tasks and match by email against the Odoo destination's User table. Any Bolten User without a matching Odoo User goes to a reconciliation queue. The customer's Odoo admin provisions missing Users (active or inactive based on the original Bolten user's status). Owner lookups on all standard objects require valid User references before import, so this step gates all subsequent object imports.
Sandbox migration and reconciliation
We run a full migration into an Odoo Sandbox or staging database using production-like data volume. The customer's CRM lead reconciles record counts (Contacts in, Leads in, Opportunities in, Tasks in, Mail Messages in), spot-checks 25-50 random records against Bolten source, and confirms stage ordering matches the confirmed worksheet. Any mapping corrections or missing custom fields are addressed in the sandbox before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Users (validated from step 3), Contacts (with Tags resolved), Leads (with UTM fields and owner resolved), Opportunities (with stage_sequence, Sales Team, and owner resolved), Tasks (with res_id and res_model resolved to parent records), Activity audit logs (Mail Messages batched via Odoo's jsonrpc with rate-limit handling and parent-record lookup validation). Each phase emits a row-count reconciliation report before the next phase begins. WhatsApp conversation metadata imports as Note records on the parent Contact.
Cutover, validation, and automation rebuild handoff
We freeze Bolten writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver a written inventory of Bolten workflows, automations, and AI agent configurations requiring rebuild in Odoo Studio or as server actions. We support a one-week hypercare window where we resolve reconciliation issues. Workflows, sequences, and automations do not migrate as code; that is a separate engagement or an internal Odoo admin task.
Platform deep dives
Bolten CRM
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 Bolten CRM 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
Bolten CRM: Not publicly documented.
Data volume sensitivity
Bolten CRM 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 Bolten CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Bolten CRM 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 Bolten CRM
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.