CRM migration
Field-level mapping, validation, and rollback between mQuest and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
mQuest
Source
Odoo CRM
Destination
Compatibility
11 of 12
objects map 1:1 between mQuest and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
The mQuest data model centers on contacts, companies, opportunities, and activities stored as flat records with owner and timestamp metadata. Odoo CRM uses a relational model anchored by res.partner (covering both contacts and companies), crm.lead for leads and opportunities with a type discriminator field, crm.stage for pipeline stages, and ir.attachment for files. The migration maps mQuest's contact records into res.partner, companies into res.partner with company_type='company', and opportunities into crm.lead with type='opportunity'. Activity history (calls, emails, meetings) from mQuest transfers as crm.phonecall and crm.log notes attached to the corresponding res.partner or crm.lead record. Odoo's External API (XML-RPC) enforces a throttled rate of approximately 1 call per second on Custom plans; FlitStack AI batches writes and queues requests to stay within this limit during the full run. Workflows, automation rules, and custom modules from mQuest do not transfer — we export definitions as JSON for Odoo studio rebuild. Reports and dashboards underlying them migrate as data rows, but the report configurations must be rebuilt in Odoo Reporting.
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 mQuest 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.
mQuest
Contact
Odoo CRM
res.partner
1:1mQuest contacts map directly to Odoo res.partner records with company_type set to 'person'. The primary company link in mQuest becomes partner_id on res.partner if the contact is a person within a company organization. Names are split into firstname and lastname, emails are normalized, and duplicate alerts are logged for review.
mQuest
Company
Odoo CRM
res.partner
1:1mQuest company records map to res.partner with company_type='company'. Odoo stores company VAT, website, and category_id on the same partner record used for contacts, so no separate company object exists in Odoo CRM. If a company has multiple locations, each location can be modeled as a child partner under the main company partner, preserving address details for each branch.
mQuest
Opportunity / Deal
Odoo CRM
crm.lead
1:1mQuest opportunities map to crm.lead records with type='opportunity'. The stage name from mQuest is looked up in Odoo's crm.stage table for the target crm.team and written as stage_id. Stage sequence order preserved for kanban display. If a stage does not exist, FlitStack AI creates it during schema setup, assigning a sequence number matching the original pipeline order.
mQuest
Lead / Prospect
Odoo CRM
crm.lead
1:1mQuest lead records map to crm.lead with type='lead'. If mQuest does not distinguish leads from opportunities, all records default to type='lead' and are converted manually in Odoo using the built-in 'Convert to Opportunity' wizard after migration. You can schedule a bulk conversion in Odoo Studio for efficient processing.
mQuest
Pipeline Stage
Odoo CRM
crm.stage
many:1mQuest stage names merge into existing Odoo crm.stage records per sales team. If a stage name does not exist in Odoo, a new crm.stage record is created during schema setup before data migration begins. Stage sequence numbers are assigned sequentially per team.
mQuest
Activity / Call Log
Odoo CRM
crm.phonecall
1:1mQuest call logs with subject, duration, and notes migrate to crm.phonecall. The phonecall is linked to the corresponding res.partner or crm.lead via the partner_id and opporunity_id foreign keys. Original start datetime preserved in call_date. If the caller ID matches an existing partner email, the phonecall is automatically linked; otherwise it remains orphaned until manual assignment.
mQuest
Email Activity
Odoo CRM
mail.message
1:1mQuest email records become mail.message entries on the res.partner or crm.lead's chatter thread. The message is stored with message_type='email', author_id set to the matched res.partner, and body containing the email HTML. Odoo's mail.thread automatically threads replies. Attachments in the original email are saved as ir.attachment records linked to the same mail.message, preserving file size and name.
mQuest
Meeting / Event
Odoo CRM
calendar.event
1:1mQuest meetings map to calendar.event records with start_datetime, stop_datetime, name, and attendee_ids resolved by email match to res.users. The event is linked to the related crm.lead or res.partner via the res_model and res_id fields. If an attendee email does not correspond to a res.users record, Odoo creates a placeholder partner record for that attendee, allowing visibility without login.
mQuest
Attachment / File
Odoo CRM
ir.attachment
1:1mQuest file attachments on contacts, companies, or deals re-upload to Odoo's ir.attachment table with res_model pointing to the target model (res.partner or crm.lead) and res_id set to the destination record ID. Odoo stores files in its filestore directory. If a file exceeds Odoo's 25 MB limit, FlitStack AI splits the upload into chunks and reassembles them on the server.
mQuest
Custom Object (if present)
Odoo CRM
Custom model (x_ prefix)
1:1Any mQuest custom objects require a new Odoo model created via ir.model and ir.model.fields before migration. If mQuest exposes custom object metadata via API, FlitStack AI generates the Odoo model XML and applies it during schema setup. N:N associations in mQuest map to Odoo's x_xref intermediate tables.
mQuest
Owner / User
Odoo CRM
res.users
1:1mQuest owner IDs resolve by email match to res.users. Unmatched owners are flagged in the pre-migration report — the team either invites them to Odoo or assigns records to a fallback active res.users. Inactive users can own records in Odoo but cannot log in.
mQuest
Tag / Label
Odoo CRM
res.partner.category
1:1mQuest tags on contacts and companies map to res.partner.category (for partners) or crm.tag (for leads/opportunities). New category records created automatically if the tag name does not already exist in Odoo. Tags with special characters are sanitized, replacing spaces with underscores and removing punctuation to conform to Odoo's naming rules.
| mQuest | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner1:1 | Fully supported | |
| Opportunity / Deal | crm.lead1:1 | Fully supported | |
| Lead / Prospect | crm.lead1:1 | Fully supported | |
| Pipeline Stage | crm.stagemany:1 | Fully supported | |
| Activity / Call Log | crm.phonecall1:1 | Fully supported | |
| Email Activity | mail.message1:1 | Fully supported | |
| Meeting / Event | calendar.event1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Custom Object (if present) | Custom model (x_ prefix)1:1 | Fully supported | |
| Owner / User | res.users1:1 | Fully supported | |
| Tag / Label | res.partner.category1: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.
mQuest gotchas
No public API documented for programmatic data extraction
Custom field schemas vary by tenant with no published reference
Invoiced job data may require fiscal-period alignment
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
Schema setup and stage mapping in Odoo
Before pulling any data from mQuest, FlitStack AI inspects the target Odoo instance's crm.stage, crm.team, and ir.model.fields to establish what stages, teams, and custom fields already exist. We create any missing crm.stage records matching mQuest stage names, create custom fields (x_ prefix) for mQuest custom properties via ir.model.fields, and generate a stage-mapping matrix showing which mQuest stage routes to which Odoo crm.stage per sales team. This step requires an Odoo admin login with write access to Settings > Technical.
Export and profile mQuest data
FlitStack AI connects to mQuest via scoped read access (API or database export) and pulls all standard objects: contacts, companies, opportunities/leads, activities (calls, emails, meetings), attachments, and any custom objects. We run a data quality profile identifying missing required fields, duplicate email addresses, orphaned company records without contacts, and stage values with no Odoo equivalent. Dirty data is surfaced in a pre-migration report so your team can decide whether to clean records in mQuest before the migration run or accept the mapped values in Odoo.
Owner and user resolution by email match
mQuest owner IDs on each record are resolved against Odoo res.users by email address. FlitStack AI generates a user-match report listing matched owners (mapped directly), unmatched owners (flagged for fallback assignment), and users who exist in Odoo but are inactive (your team activates them). In Odoo, inactive users can own records but cannot log in — we recommend activating all expected Odoo users before the migration cutover to avoid records landing with no active owner.
Sample migration with field-level diff
A representative slice of 100–500 records spanning contacts, companies, opportunities/leads, and activities migrates first. FlitStack AI generates a field-level diff comparing source values in mQuest against written values in Odoo, highlighting any truncation (e.g., character limits on name fields), value-mapping mismatches (e.g., stage names not found in crm.stage), and missing related records (e.g., partner_id pointing to a company not yet migrated). You review the diff and approve before the full run commits.
Full migration with delta-pickup window
The full migration run writes all mQuest records to Odoo using the approved field mappings, respecting Odoo's 1-call-per-second rate limit via our XML-RPC write queue. A delta-pickup window (24–48 hours) begins at cutover: any records modified or created in mQuest during this window are re-exported and written to Odoo as updates or inserts. FlitStack AI generates an audit log of every record written with source ID, destination ID, timestamp, and operation type. If reconciliation fails, one-click rollback reverts the target Odoo database to its pre-migration state.
Platform deep dives
mQuest
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 mQuest 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
mQuest: Not publicly documented..
Data volume sensitivity
mQuest 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 mQuest to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your mQuest 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 mQuest
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.