CRM migration
Field-level mapping, validation, and rollback between Comet Suite and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Comet Suite
Source
Odoo CRM
Destination
Compatibility
8 of 10
objects map 1:1 between Comet Suite and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Comet Suite and Odoo CRM take fundamentally different approaches to data architecture. Comet Suite stores business records in a multi-tenant cloud environment with REST API access and no required installation, while Odoo CRM runs as a modular Python/PostgreSQL application where every record belongs to a named model accessible via XML-RPC. The migration carries Comet Suite contacts, companies, activities, and custom fields into Odoo CRM's crm.lead, res.partner, and ir.attachment models. We surface Comet Suite's custom field definitions as Odoo custom columns on crm.lead so the source data is queryable post-migration. Activities (calls, emails, meetings) land as Odoo mail.message records attached to the relevant crm.lead. Odoo does not provide native workflow migration — Comet Suite automation rules must be exported as configuration JSON and rebuilt using Odoo's Studio automation builder or server actions. We use a staged load: contacts into res.partner first (since crm.lead requires a partner_id many2one), then leads with activity history, then attachments. A 24–48 hour delta window captures any records modified in Comet Suite during the cutover before we lock the source read access.
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 Comet Suite 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.
Comet Suite
Contact
Odoo CRM
res.partner
1:1Comet Suite contacts map to Odoo res.partner records with partner_type='contact'. Odoo requires a parent_id for commercial entities — contacts linked to companies in Comet Suite set partner_id to the corresponding res.partner company record. Partner records are loaded before crm.lead because Odoo's crm.lead model requires a partner_id many2one field on the lead form by default.
Comet Suite
Company
Odoo CRM
res.partner (Commercial Partner)
1:1Comet Suite companies map to res.partner with partner_type='company'. The commercial_partner_id many2one self-references the company record. Parent-child hierarchies in Comet Suite (if parent_company_id exists) map to Odoo's parent_id field on res.partner. Multi-company Comet Suite setups with distinct legal entities require separate res.company records in Odoo if accounting data is also migrated.
Comet Suite
Contact + Company Association (N:N)
Odoo CRM
res.partner (child contact + parent_id)
many:1Comet Suite supports N:N contact-to-company associations, but Odoo res.partner uses a hierarchical tree (one parent_id per contact). FlitStack AI migrates the primary company (most recently modified or by your specified rule) as the parent_id, and secondary company associations are preserved as a JSON-serialized list in a custom Char field (x_comet_secondary_companies) on the res.partner record for reference and manual re-association post-migration.
Comet Suite
Lead / Opportunity
Odoo CRM
crm.lead
1:1Comet Suite leads and opportunities both map to Odoo crm.lead. The type field on crm.lead distinguishes 'lead' from 'opportunity' — we set type='opportunity' for records that have a monetary value or stage progression in Comet Suite. The pipeline stages in Comet Suite map to Odoo's crm.stage records, which are ordered by sequence within a team. Stage names are mapped value-by-value.
Comet Suite
Pipeline / Stage
Odoo CRM
crm.team + crm.stage
1:1Odoo CRM's default configuration has one pipeline per database (via crm.team with stage_ids). If Comet Suite uses multiple named pipelines (e.g., Sales Pipeline, Support Pipeline), we map each to a separate crm.team with its own stage sequence. Odoo Enterprise allows multiple pipelines per team; Odoo Community uses one pipeline per team. Stage names map via value_mapping — custom stage names in Comet Suite become new crm.stage records created in the target Odoo database before the lead load.
Comet Suite
Activity (Call, Email, Meeting, Site Visit)
Odoo CRM
mail.message
1:1Comet Suite activity records (calls, emails, meetings, site visits) map to Odoo mail.message records linked to the target crm.lead via res_model='crm.lead' and res_id=lead_id. The message_type field differentiates them: 'call' for phone logs, 'email' for email threads, 'meeting' for calendar events. Original timestamps and activity owners are preserved. Odoo requires the mail module to be installed for message tracking to function.
Comet Suite
Attachment / File
Odoo CRM
ir.attachment
1:1Comet Suite file attachments (documents, images, receipts) are downloaded from cloud storage and re-uploaded to Odoo ir.attachment records. The attachment is linked via res_model='crm.lead' and res_id pointing to the migrated lead record. File names and original URLs are preserved in the display_name and url fields of ir.attachment. Odoo's default filestore size limits apply — large files may require filestore configuration adjustment.
Comet Suite
Custom Fields (Comet Suite entity-specific fields)
Odoo CRM
ir.model.fields (x_comet_*)
1:1Comet Suite custom fields on any entity become Odoo custom columns via Settings > Technical > Models — FlitStack creates ir.model.fields entries for each custom property using the x_comet_ prefix convention. Field type mapping: text fields become char/text, date fields become date, numeric fields become float or integer depending on Comet Suite type. Custom field values are loaded after the column schema is registered so the data lands without type errors. This is the primary scope driver for migrations with extensive Comet Suite property configurations.
Comet Suite
User / Owner
Odoo CRM
res.users
1:1Comet Suite owner_id references are resolved by email match against Odoo res.users records. FlitStack generates a pre-flight user map showing matched users, unmatched owners (flagged with fallback assignment to admin), and any Comet Suite users who do not yet have an Odoo account. You create Odoo users for unmatched owners before the migration runs — no record lands without an owner assignment.
Comet Suite
Ticket / Case
Odoo CRM
crm.lead (type='lead') or helpdesk.ticket
1:manyIf Comet Suite includes ticket or case records, they route to crm.lead with type='lead' in Odoo CRM's default configuration. If your Odoo installation includes the helpdesk module, tickets migrate to helpdesk.ticket with a link back to the originating crm.lead via x_comet_ticket_id for traceability. We surface this routing decision in the pre-migration mapping plan so your admin can choose the target based on your Odoo app stack.
| Comet Suite | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (Commercial Partner)1:1 | Fully supported | |
| Contact + Company Association (N:N) | res.partner (child contact + parent_id)many:1 | Fully supported | |
| Lead / Opportunity | crm.lead1:1 | Fully supported | |
| Pipeline / Stage | crm.team + crm.stage1:1 | Fully supported | |
| Activity (Call, Email, Meeting, Site Visit) | mail.message1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Custom Fields (Comet Suite entity-specific fields) | ir.model.fields (x_comet_*)1:1 | Fully supported | |
| User / Owner | res.users1:1 | Fully supported | |
| Ticket / Case | crm.lead (type='lead') or helpdesk.ticket1:many | 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.
Comet Suite gotchas
No documented public API for automated export
Attachments are not included in standard exports
Feature phone and flip phone data requires separate extraction
Custom Work Order fields vary by customer configuration
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 Comet Suite schema and Odoo target configuration
FlitStack AI extracts the Comet Suite entity list, custom field definitions, and API schema via REST endpoints. We simultaneously inspect your target Odoo database for installed apps, existing crm.stage records, res.partner structure, and custom field registry. The output is a pre-migration mapping plan: which Comet Suite objects map to which Odoo models, which custom fields require creation, and which records need Odoo user or partner pre-creation. This step runs before any data moves and typically takes 1–2 business days depending on the complexity of your Comet Suite configuration.
Pre-create Odoo dependencies and resolve user ownership
Before any record load, FlitStack AI creates Odoo crm.stage entries for each Comet Suite pipeline stage, creates ir.model.fields for every Comet Suite custom property, and resolves Comet Suite owner IDs against Odoo res.users by email match. Any owner without a matching Odoo user is flagged in a user-resolution report. You create the missing Odoo users or designate a fallback owner before the migration run. Custom field definitions are registered in a staging Odoo environment if available, or applied during an off-peak maintenance window on production.
Load res.partner records (companies first, then contacts)
The migration sequence follows Odoo's foreign-key dependencies: companies load first as commercial res.partner records, then contacts with their parent_id linking to the correct company partner. The N:N contact-company associations are collapsed to primary parent_id plus x_comet_secondary_companies JSON for post-migration reference. Timestamps, owner IDs, and custom field values are loaded alongside the core fields. This step is the most record-intensive — FlitStack AI uses batched XML-RPC writes with transaction commits every 1,000 records to avoid Odoo's request timeout limits.
Load crm.lead and mail.message records
With res.partner records in place, Comet Suite leads and opportunities migrate to crm.lead with type set per record characteristics. Stage mapping applies from the pre-created crm.stage registry. Activity records (calls, emails, meetings) load as mail.message records linked to the migrated crm.lead. The res_model field on each mail.message is set to 'crm.lead' so messages appear in the Odoo lead chatter. Original activity timestamps and owners are preserved in mail.message.date and author_id. This step also handles the default 'Unknown Partner' assignment for leads without a company association.
Migrate attachments and run sample diff
Comet Suite file attachments are downloaded, checked against Odoo's size limits, and re-uploaded to ir.attachment linked to the migrated crm.lead or res.partner. Files over the limit are flagged for manual review. A sample migration of 100–500 records (spanning companies, contacts, leads, and activities) runs first and produces a field-level diff comparing source values against the Odoo database. You review the diff to confirm stage mapping, owner resolution, and custom field values before FlitStack AI commits the full migration run.
Delta pickup, audit log, and rollback readiness
The full migration run executes against Odoo. During and after the run, a 24–48 hour delta-pickup window monitors Comet Suite for any records created or modified during cutover. New or changed records are migrated incrementally. FlitStack AI generates an audit log covering every insert, update, and skip operation. If reconciliation reveals data quality issues, one-click rollback reverts the Odoo database to its pre-migration state. After rollback, the delta window re-opens so no in-flight records are lost. The migration is considered complete once the audit log is clean and your team has confirmed lead and contact counts match between platforms.
Platform deep dives
Comet Suite
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Comet Suite and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Comet Suite and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Comet Suite 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
Comet Suite: Not applicable — no public API.
Data volume sensitivity
Comet Suite 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 Comet Suite to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Comet Suite 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 Comet Suite
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.