CRM migration
Field-level mapping, validation, and rollback between MarketSharp and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
MarketSharp
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between MarketSharp and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
MarketSharp organizes sales data around Leads, Contacts, Companies, Appointments, and Jobs — a structure built for field-service contractors who need appointment scheduling and project tracking inside a CRM. Odoo CRM uses a different architecture: crm.lead holds both inbound leads and opportunities in a single Kanban-pipeline object, while res.partner covers both individual contacts and company records with a type field to distinguish them. Appointments from MarketSharp have no native equivalent in Odoo CRM — they translate to calendar.meeting records with a linked crm.lead or res.partner, preserving original start/end times and salesperson assignment. Jobs in MarketSharp map to project.project records when the project management module is active, or surface as notes and custom fields on the related crm.lead when it is not. MarketSharp's customizable pipeline stages and custom lead fields require value-by-value mapping or new Odoo stage definitions and custom fields created via Odoo Studio before migration data lands. FlitStack AI sequences the migration as: Companies → Contacts (as res.partner), then Leads/Opportunities (as crm.lead), then Appointments (as calendar.meeting), then Jobs (as project.project or custom fields). Owner resolution runs by email match against Odoo internal users. A 24–48-hour delta-pickup window captures any records modified in MarketSharp during the cutover window. Audit log and one-click rollback protect the full migration commit.
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 MarketSharp 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.
MarketSharp
Lead
Odoo CRM
crm.lead
1:1MarketSharp Lead records map directly to Odoo crm.lead. The crm.lead.type field is set to 'lead' for inbound MarketSharp leads. All standard lead properties (name, email, phone, source, status) migrate as crm.lead fields. MarketSharp lead score migrates as a custom integer field on crm.lead since Odoo has no native lead scoring — the custom field is created via Odoo Studio before the full migration run.
MarketSharp
Lead (converted / opportunity stage)
Odoo CRM
crm.lead (type='opportunity')
1:1MarketSharp leads that have advanced to an active deal stage migrate to Odoo crm.lead with type='opportunity'. The MarketSharp pipeline stage name maps to an Odoo crm.stage record scoped to the relevant crm.team. If multiple MarketSharp pipelines exist, each requires its own Odoo crm.team + stage sequence so stage pick-lists remain scoped correctly.
MarketSharp
Contact
Odoo CRM
res.partner
1:1MarketSharp Contact records map to Odoo res.partner with type='contact'. The contact's linked Company in MarketSharp becomes res.partner.parent_id pointing to the corresponding company partner. Email, phone, mobile, job title, and address fields migrate as direct field equivalents using Odoo's standard address formatting (street, city, state, zip, country).
MarketSharp
Company
Odoo CRM
res.partner (type='company')
1:1MarketSharp Company records map to Odoo res.partner with type='company'. Company name becomes res.partner.name, website migrates as website field, industry maps to a custom selection field or the built-in industry_id if available, and employee count stored as a custom Integer field. MarketSharp company hierarchies (parent/child) map to res.partner.parent_id on the child record.
MarketSharp
Appointment
Odoo CRM
calendar.event
1:1MarketSharp Appointments have no native Odoo equivalent — they migrate as calendar.event records requiring the Odoo Calendar module to be installed. The appointment start/end datetime maps to calendar.event.start and calendar.event.stop. The salesperson (assigned_to) resolves to calendar.event.user_id via email match against Odoo internal users. The linked MarketSharp Lead or Contact resolves to calendar.event.res_id with model='crm.lead' or model='res.partner'.
MarketSharp
Job
Odoo CRM
project.project (or crm.lead note)
1:1MarketSharp Job records are a domain-specific object without a direct Odoo CRM equivalent. If the Odoo project.management module is active, Jobs map to project.project with name, partner_id (linked customer), and stage. If project management is not in scope, the job's key fields (status, products, crew, address) migrate as custom Char/Selection fields on the related crm.lead record so the data is preserved and accessible to the sales team.
MarketSharp
Custom Lead Fields
Odoo CRM
Custom ir.model.fields on crm.lead
1:1MarketSharp custom lead fields (set via Settings > Custom Lead Fields) translate to Odoo custom fields on crm.lead. Each custom field requires creation in Odoo Studio before migration — selection-type custom fields in MarketSharp become selection fields in Odoo with the same value options preserved via value_mapping. The migration plan surfaces every custom field and its Odoo target type so the Odoo admin can pre-create the schema.
MarketSharp
Custom Contact Fields
Odoo CRM
Custom ir.model.fields on res.partner
1:1MarketSharp custom contact fields follow the same pattern as custom lead fields — they map to Odoo custom fields on res.partner. Boolean, date, integer, and text custom fields in MarketSharp translate to their Odoo counterparts (boolean, date, integer, char/text). The mapping plan includes a type-check pass to flag any MarketSharp field types that lack a direct Odoo equivalent and require a custom char field with structured value storage.
MarketSharp
Lead Owner / Salesperson
Odoo CRM
res.users (linked via calendar.event.user_id / crm.lead.user_id)
1:1MarketSharp stores a salesperson assignment on each lead and appointment. FlitStack AI resolves MarketSharp owner IDs to Odoo res.users records by email match — if no matching Odoo user exists, the record is flagged before migration and assigned to a fallback user so no record lands without an owner. The fallback owner is configurable per migration plan.
MarketSharp
Attachment / File
Odoo CRM
ir.attachment
1:1MarketSharp file attachments on leads, contacts, or jobs are downloaded from MarketSharp's storage and re-uploaded as Odoo ir.attachment records linked to the corresponding crm.lead or res.partner via res_model and res_id. File size limits are respected per Odoo's attachment configuration. Inline images in MarketSharp notes are extracted and stored as ir.attachment with a relation to the note or description field on the target record.
MarketSharp
Lead Source
Odoo CRM
crm.lead.source_id (utm.source)
1:1MarketSharp lead source values (Google Ads, referral, walk-in, etc.) map to Odoo utm.source records. If the MarketSharp source value does not match an existing Odoo utm.source, a new utm.source record is created during migration with the original MarketSharp source label preserved. The utm.source_id on crm.lead carries the attribution forward for reporting in Odoo.
MarketSharp
Lead Status / Stage
Odoo CRM
crm.stage
1:1MarketSharp lead status values (New, Contacted, Qualified, etc.) map to Odoo crm.stage records. Each stage gets its own crm.stage entry scoped to the relevant crm.team. Probability values attached to MarketSharp stages migrate as stage_default_probability on the Odoo crm.stage record. If MarketSharp stages use custom probabilities, these are applied per stage during migration so deal forecasting in Odoo reflects the historical close probability.
| MarketSharp | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | crm.lead1:1 | Fully supported | |
| Lead (converted / opportunity stage) | crm.lead (type='opportunity')1:1 | Fully supported | |
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (type='company')1:1 | Fully supported | |
| Appointment | calendar.event1:1 | Fully supported | |
| Job | project.project (or crm.lead note)1:1 | Fully supported | |
| Custom Lead Fields | Custom ir.model.fields on crm.lead1:1 | Mapping required | |
| Custom Contact Fields | Custom ir.model.fields on res.partner1:1 | Fully supported | |
| Lead Owner / Salesperson | res.users (linked via calendar.event.user_id / crm.lead.user_id)1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Lead Source | crm.lead.source_id (utm.source)1:1 | Fully supported | |
| Lead Status / Stage | crm.stage1: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.
MarketSharp gotchas
Custom Lead Fields vary per installation
Reporting export requires manual trial-and-error
Webhook functionality is limited and not self-serve
Division-segmented data requires multi-pass export
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
Audit MarketSharp data model and custom field inventory
FlitStack AI connects to MarketSharp via its REST API to extract a full inventory of leads, contacts, companies, appointments, and jobs — including every custom lead field and custom contact field defined in the MarketSharp settings. This discovery pass produces a data map that identifies duplicate records, missing required fields, and records with no clear Odoo equivalent (like appointments or jobs). The audit report is shared with the customer's Odoo admin, who uses it to pre-create the necessary custom fields in Odoo Studio and configure crm.team + stage sequences before migration data is loaded.
Map MarketSharp object model to Odoo crm.lead and res.partner architecture
FlitStack AI maps each MarketSharp object to its Odoo counterpart: Leads to crm.lead (type='lead' for new inbound, type='opportunity' for converted deals), Contacts to res.partner with type='contact', Companies to res.partner with type='company'. Appointments map to calendar.event records requiring the Odoo Calendar module. Jobs map to project.project when the project management module is active, or to custom fields on crm.lead when it is not. Owner resolution runs by email match against Odoo res.users. The mapping plan is reviewed with the customer before any data moves.
Run a sample migration with field-level diff
A representative slice of MarketSharp records — typically 100 to 500 spanning leads, contacts, appointments, and jobs — migrates first into the customer's Odoo instance. FlitStack AI generates a field-level diff showing source values vs. destination values for every mapped field, with special attention to appointment start/end timestamps, owner resolution, custom field population, and stage-to-crm.stage mapping. The customer reviews the diff and approves the field mapping before the full migration run is scheduled. Any mapping corrections are applied before the full run commits.
Execute full migration with delta-pickup window and audit log
The full migration runs against the customer's Odoo instance via XML-RPC API. Companies and contacts migrate first so res.partner records exist before leads are linked to them. Leads and opportunities migrate next with stage values mapped to the pre-created crm.stage records. Appointments migrate as calendar.event records with original start/end times and owner resolution. Jobs migrate to project.project or crm.lead custom fields per the agreed scope. A delta-pickup window of 24 to 48 hours runs after the initial commit to capture any MarketSharp records modified during the cutover period. Every operation is logged to an audit trail, and one-click rollback is available if the reconciliation check fails.
Platform deep dives
MarketSharp
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between MarketSharp and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across MarketSharp and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between MarketSharp 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
MarketSharp: Not publicly documented.
Data volume sensitivity
MarketSharp 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 MarketSharp to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your MarketSharp 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 MarketSharp
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.