CRM migration
Field-level mapping, validation, and rollback between Moskit and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Moskit
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Moskit and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Moskit to Odoo CRM is a migration from a Brazil-focused sales CRM into a modular open-source ERP with CRM as one of dozens of integrated applications. Moskit's Deal-centric Projects require explicit re-linkage to Odoo Opportunities as a custom reference field, because Odoo Projects are standalone with optional CRM linkage rather than deal-spawned by default. We handle the field-label translation from Brazilian Portuguese (Empresas, Negócios, Atividades) into Odoo's multilingual field system, preserving custom Moskit field definitions and picklist values as Odoo custom fields. WhatsApp conversation metadata migrates as linked notes; actual message history cannot be transferred because it lives in WhatsApp infrastructure. We do not migrate Moskit's automations, workflows, or mass-email campaign configurations; we deliver a written inventory of these for the customer's Odoo admin to rebuild using Odoo's Studio, Workflow, or 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 Moskit 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.
Moskit
Contact
Odoo CRM
res.partner (type=contact)
1:1Moskit Contact records map to Odoo res.partner with partner_type=contact. The Moskit contact's associated Company link maps to res.partner with parent_id pointing to the mapped Company partner. Email, phone, mobile, function, and website fields migrate directly. Custom contact properties migrate as Odoo custom fields via Studio or a custom module. We use the contact's email address as the Odoo partner dedupe key.
Moskit
Company (Empresas)
Odoo CRM
res.partner (type=company)
1:1Moskit Company records map to Odoo res.partner with partner_type=company and is_company=True. Company address fields (street, city, state, country, zip) migrate to Odoo's address fields. The Company's CNPJ/CPF tax ID field maps to res.partner's vat field if populated. Custom company properties migrate as Odoo custom fields. The Company record must be created before any linked Contact so that parent_id is satisfied at import time.
Moskit
Deal (Negócio)
Odoo CRM
crm.lead (Opportunity)
1:1Moskit Deals map to Odoo crm.lead with type=pipeline (Odoo's Opportunity). The deal's monetary value maps to Odoo's expected_revenue and stage probabilities map to Odoo's stage_id with the probability auto-calculated or set manually per stage. Deal owner (responsável) maps to Odoo's user_id by email match. Closed-Won and Closed-Lost reasons from Moskit custom fields map to Odoo's lost_reason or a custom field.
Moskit
Pipeline Stage (Etapa do Funil)
Odoo CRM
crm.stage
lossyMoskit pipeline stages map to Odoo crm.stage records within the destination CRM team. We configure stage names, sequence order, and probability percentages to match Moskit's stage definitions. Each stage is assigned to the relevant Odoo sales team so multi-pipeline setups (if present in Moskit Professional) map to Odoo's multiple sales teams each with their own stage pipeline.
Moskit
Activity (Atividade)
Odoo CRM
mail.activity
1:1Moskit Activities (tasks, calls, meetings, notes) map to Odoo mail.activity records linked to the target res.partner or crm.lead via res_model and res_id. Activity type (call, meeting, task) maps to Odoo's activity_type_id. Timestamp fields (date, duration) migrate directly. Description and notes migrate as Odoo's note field. The responsible user maps by email match.
Moskit
Project (Projeto)
Odoo CRM
project.project
1:1Moskit Projects are deal-spawned and carry a Negócio reference. We migrate Projects as Odoo project.project records with a custom field x_moskit_deal_id storing the source deal ID. After Deal migration, we run a lookup pass to update x_moskit_deal_id with the destination crm.lead ID so the linkage is preserved and queryable in Odoo. Project tasks migrate as project.task records under the parent project.
Moskit
Custom Property ( Campo Personalizado)
Odoo CRM
Custom Field (ir.model.fields)
lossyMoskit custom fields on Contacts, Companies, Deals, and Activities are discovered per object during extraction (no bulk schema endpoint in Moskit). We create equivalent Odoo custom fields via Studio or a custom module before migration. Field types (text, number, date, picklist, checkbox) map to the closest Odoo field type. Picklist options migrate as selection values or many2one relations depending on complexity.
Moskit
User (Usuário)
Odoo CRM
res.users
1:1Moskit Users map to Odoo res.users by email address match. We export all active and inactive Moskit users. Inactive Moskit users become Odoo res.users with active=False so they can be reactivated by the admin post-migration. Access rights and groups in Odoo are assigned during the approach phase based on the user's Moskit role, but the customer admin reviews and approves group assignments before they take effect.
Moskit
Pipeline (Funil)
Odoo CRM
crm.team + crm.stage
lossyIf Moskit Professional or Enterprise has multiple deal pipelines, we configure multiple Odoo crm.team records (sales teams) each with their own pipeline stages. Each crm.team maps to a distinct stage sequence. Single-pipeline Moskit instances map to a single crm.team with the stages configured under it.
Moskit
Product (Produto)
Odoo CRM
product.template
1:1If Moskit Products are used in Deals (line items), they migrate to Odoo product.template. Product name, SKU (hs_sku equivalent), list_price, and standard_price migrate directly. Product categories map to Odoo's product.category hierarchy.
Moskit
WhatsApp Conversation Metadata
Odoo CRM
mail.message or note.note
1:1Moskit WhatsApp conversation metadata (timestamps, participant numbers, message count, deal association) migrates as Odoo mail.message records or note.note records linked to the Contact res.partner. Actual message content cannot migrate because it lives in WhatsApp Business API infrastructure. We flag this gap in the scoping report and note that WhatsApp message history export requires a separate WhatsApp Business API data request.
Moskit
Mass Email Campaign
Odoo CRM
mail.mass_mailing (documented, not migrated)
lossyMoskit mass email campaigns and personalization tokens do not migrate as live campaigns. We deliver a written inventory of every active Moskit campaign with its audience filter, email template, personalization fields, and trigger logic, mapped to Odoo's mail.mass_mailing equivalent. The customer's admin rebuilds campaigns in Odoo using the mail_mass_mailing module (Odoo Marketing Automation app).
| Moskit | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (type=contact)1:1 | Fully supported | |
| Company (Empresas) | res.partner (type=company)1:1 | Fully supported | |
| Deal (Negócio) | crm.lead (Opportunity)1:1 | Fully supported | |
| Pipeline Stage (Etapa do Funil) | crm.stagelossy | Fully supported | |
| Activity (Atividade) | mail.activity1:1 | Fully supported | |
| Project (Projeto) | project.project1:1 | Fully supported | |
| Custom Property ( Campo Personalizado) | Custom Field (ir.model.fields)lossy | Fully supported | |
| User (Usuário) | res.users1:1 | Fully supported | |
| Pipeline (Funil) | crm.team + crm.stagelossy | Fully supported | |
| Product (Produto) | product.template1:1 | Fully supported | |
| WhatsApp Conversation Metadata | mail.message or note.note1:1 | Fully supported | |
| Mass Email Campaign | mail.mass_mailing (documented, not migrated)lossy | 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.
Moskit gotchas
No published API rate limit documentation
WhatsApp conversation sync is a linked feature, not standalone data
Deal-to-Project linkage must be explicitly preserved
Custom field definitions vary by object and are not enumerated in bulk
Brazilian Portuguese field labels may cause mapping mismatches
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 edition selection
We audit the Moskit portal across plan tier (Starter/Professional), custom field definitions per object type, pipeline count and stage definitions, active project count and deal linkage, user count and role assignments, activity volume per type, and WhatsApp conversation metadata. We confirm the destination Odoo edition and deployment model (Odoo Online, Odoo.sh, or self-hosted Enterprise) because API access is a hard requirement for our migration tooling. The discovery output is a written migration scope, an Odoo edition recommendation, and a data volume estimate for each object type.
Schema design and custom field provisioning
We design the destination Odoo schema before any data moves. This includes creating custom fields on res.partner, crm.lead, and project.project via Odoo Studio or a custom module manifest. We configure crm.team (sales team) records, crm.stage (pipeline stage) records with probabilities, and product.category and product.template records. We activate BRL as an accounting currency in Odoo's multi-currency settings. If Odoo Community is confirmed as the destination, we design the CSV/XLSX import structure and batch strategy instead of API-based migration. Schema is validated in an Odoo test database before production migration begins.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database using production-equivalent data volume. The customer's Odoo administrator reconciles record counts (Contacts in, Companies in, Opportunities in, Activities in), spot-checks 25-50 records against Moskit source data, and verifies that Portuguese field labels and picklist values are correct. Any field mapping corrections, stage probability adjustments, or custom field type changes happen in this phase. Sign-off on the sandbox reconciliation is required before production migration begins.
Owner reconciliation and user provisioning
We extract every distinct Moskit user (Usuário) referenced on Deals, Activities, and Projects and match by email against the destination Odoo res.users table. Users without a matching Odoo account go to a reconciliation queue. The customer's Odoo administrator provisions any missing users (active or inactive based on the Moskit source status) and assigns them to appropriate Odoo access groups (Sales / Administrator / Custom). OwnerId references on Deals and Activities cannot be resolved until this step is complete.
Production migration in dependency order
We run production migration in record-dependency order: Companies (res.partner type=company, first), Contacts (res.partner type=contact with parent_id resolved to Company), Users (provisioned and validated), Opportunities (crm.lead type=pipeline with user_id and partner_id resolved), Products (product.template), Pipeline stages (crm.stage), Activities (mail.activity via API or CSV), Projects (project.project with x_moskit_deal_id custom field set to source deal ID), then a second pass to update x_moskit_deal_id with destination Opportunity IDs. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Moskit write access during cutover, run a final delta migration of any records modified during the migration window, then set Odoo as the system of record. We deliver the WhatsApp conversation metadata inventory (timestamps, participant counts, message counts, deal associations) for the customer to decide on WhatsApp Business API data export separately. We deliver the automation and campaign inventory document (Moskit workflows, mass email campaigns, AI Smart Fields) with Odoo equivalents (Odoo Studio automations, mail.mass_mailing, server actions) mapped for the admin to rebuild. We support a one-week post-cutover reconciliation window.
Platform deep dives
Moskit
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Moskit and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Moskit and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Moskit 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
Moskit: Not publicly documented.
Data volume sensitivity
Moskit 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 Moskit to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Moskit 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 Moskit
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.