CRM migration
Field-level mapping, validation, and rollback between MiniCRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
MiniCRM
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between MiniCRM and Odoo CRM.
Complexity
BStandard
Timeline
3-6 weeks
Overview
Moving from MiniCRM to Odoo CRM is a platform consolidation for teams that have outgrown MiniCRM's micro-to-small-business ceiling and need the broader Odoo ERP ecosystem. MiniCRM organizes data around Cards (Karty) — containers that bundle contact details, company data, deal references, tasks, and custom fields in one record. Odoo separates Contacts (res.partner records), Companies (separate res.partner records or company-linked contacts), and Opportunities into distinct objects with their own pipelines and stage configurations. We resolve the Card-to-contact deconstruction during scoping, map Deals/Interests to Odoo CRM Opportunities, and migrate task assignments with owner resolution. MiniCRM's automation rules cannot be exported via API and must be rebuilt in Odoo's Studio automation framework; we deliver a written inventory of every active rule for the customer's admin to reference during rebuild. MiniCRM's limited export tooling — no documented bulk API, no public rate limit spec — requires a structured CSV and manual export approach during data extraction, which adds time to the discovery phase.
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 MiniCRM 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.
MiniCRM
Card (Karta)
Odoo CRM
Contact + Opportunity (split required)
1:manyMiniCRM Cards are multi-purpose containers that bundle contact details, company fields, deal references, tasks, notes, and custom fields. During migration we de-containerize the Card into Odoo's normalized schema: contact fields map to res.partner, company name maps to the partner's company_name field or a separate Company contact, and the deal/interest component maps to crm.lead (Opp). Custom fields on Cards migrate to custom fields on the relevant Odoo object. We apply a decision rule during scoping to determine whether each Card's primary intent was a Contact or an Opportunity based on stage and field occupancy.
MiniCRM
Contact (Kontakt)
Odoo CRM
Contact (res.partner)
1:1MiniCRM contact-level fields (name, email, phone, address) map directly to Odoo res.partner records. We use email as the dedupe key during import and preserve MiniCRM's contact_id as an external ID field partner_minicrm_id on res.partner so upserts are safe on re-run. Polish-language field labels are confirmed against the customer's export before mapping.
MiniCRM
Company (Firma)
Odoo CRM
Company Contact (res.partner, type=contact, is_company=True)
1:1MiniCRM Company records with normalized fields (name, address, NIP/tax ID if populated) map to Odoo res.partner with is_company=True. Companies with fewer normalized fields receive only the fields present in the export; missing Odoo fields are left blank rather than populated with placeholder data. Company contacts are created before related person Contacts so the hierarchy is intact during import.
MiniCRM
Deal / Interest (Interes)
Odoo CRM
Opportunity (crm.lead)
1:1MiniCRM Deals (Interesy) are associated with Cards and carry pipeline stage names, deal value, currency, expected close date, and owner reference. We map these to Odoo CRM crm.lead records with type=opportunity. Pipeline stage names from MiniCRM are mapped to Odoo stage_id via a config file we build during scoping that aligns each MiniCRM stage label to the nearest Odoo stage sequence, creating new Odoo stages where MiniCRM stages have no direct equivalent.
MiniCRM
Pipeline Stage
Odoo CRM
CRM Stage + Sales Team
lossyMiniCRM workspace pipeline stages map to Odoo CRM stage records within the default pipeline. Stage probabilities migrate as percentage values in the stage config. If MiniCRM uses multiple workspaces with distinct pipelines, we create additional Odoo CRM Sales Teams and map each MiniCRM workspace to a corresponding Odoo team. The customer confirms team naming and user assignment during scoping.
MiniCRM
Task (Zadanie)
Odoo CRM
Project Task (project.task) or CRM Task (mail.activity)
1:1MiniCRM Tasks linked to Cards map to Odoo project.task (if using Project module) or mail.activity records (if using CRM activities only). We preserve the task title, description, due date, status (stage), and assignee (user_id resolved via email match). Task recurrence patterns are documented as free-text notes in Odoo because they may not map to Odoo's recurrence model without custom configuration. Reminder settings migrate as mail.activity records with activity_type_id and reminder fields set.
MiniCRM
Note (Notatka)
Odoo CRM
Note (mail.message)
1:1Free-text Notes attached to MiniCRM Cards migrate to Odoo mail.message records with message_type=comment, linked to the parent res.partner or crm.lead record via res_id and model. Author information is preserved where the MiniCRM export includes it; otherwise the note is attributed to the system migration user. Rich-text formatting is preserved where the export format supports it; plain-text otherwise.
MiniCRM
User / Worker (Pracownik)
Odoo CRM
User (res.users)
1:1MiniCRM Users (Pracownicy) map to Odoo res.users records. We match by email address, which must be unique on res.users. The customer's Odoo admin provisions Users before the production migration step, and we validate that every MiniCRM owner reference resolves to an active Odoo User before record import begins. Role and permission distinctions in MiniCRM may not map directly to Odoo's access groups, so we flag any non-standard role mappings during scoping.
MiniCRM
Calendar / Event
Odoo CRM
Meeting (calendar.event)
1:1MiniCRM Calendar events associated with Cards map to Odoo calendar.event records with start, stop, duration, location, and description preserved. Attendee lists migrate as calendar.attendee records linked to the event. Where MiniCRM exports attendee email addresses, we resolve them to existing Odoo res.partner records by email match; unresolved attendees are noted for manual review. All-day events and recurring events may require post-migration cleanup depending on export fidelity.
MiniCRM
Custom Field (Pole dodatkowe)
Odoo CRM
Custom Field (ir.model.fields)
lossyMiniCRM custom fields on Cards (text, number, date, choice/selection types) are detected during scoping and pre-created in Odoo as ir.model.fields on res.partner or crm.lead before data import. Choice fields require explicit value mapping: each MiniCRM picklist option is mapped to the corresponding Odoo selection key. Custom field labels in Polish are preserved as field descriptions for the customer's admin to rename post-migration. Fields that exist in MiniCRM but have no Odoo equivalent are added to the migration scope only if the customer confirms they need them; otherwise they are excluded from the export plan.
MiniCRM
Tag / Label
Odoo CRM
Tag (crm.tag)
lossyMiniCRM Tags applied to Cards for segmentation migrate to Odoo CRM tags on the corresponding crm.lead or res.partner record. Tags are stored in crm.tag and linked via crm.lead.tag_ids (many2many). We deduplicate tags during import — if the same label appears with different capitalizations in MiniCRM, we normalize to a single lowercase tag name and flag the consolidation for the customer's admin to review.
MiniCRM
Attachment reference
Odoo CRM
Attachment (ir.attachment)
1:1File attachments referenced in MiniCRM Cards are identified during scoping. If MiniCRM exposes attachment URLs or binary data in the export, we download and upload them as ir.attachment records linked to the parent res.partner or crm.lead via res_model and res_id. Attachment size limits in Odoo (default 25MB per file) are confirmed against the largest MiniCRM attachment during scoping. Files exceeding this limit are flagged for the customer's admin to handle manually or to configure an external storage (S3, Google Drive) integration.
| MiniCRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Card (Karta) | Contact + Opportunity (split required)1:many | Fully supported | |
| Contact (Kontakt) | Contact (res.partner)1:1 | Fully supported | |
| Company (Firma) | Company Contact (res.partner, type=contact, is_company=True)1:1 | Fully supported | |
| Deal / Interest (Interes) | Opportunity (crm.lead)1:1 | Fully supported | |
| Pipeline Stage | CRM Stage + Sales Teamlossy | Fully supported | |
| Task (Zadanie) | Project Task (project.task) or CRM Task (mail.activity)1:1 | Fully supported | |
| Note (Notatka) | Note (mail.message)1:1 | Fully supported | |
| User / Worker (Pracownik) | User (res.users)1:1 | Fully supported | |
| Calendar / Event | Meeting (calendar.event)1:1 | Fully supported | |
| Custom Field (Pole dodatkowe) | Custom Field (ir.model.fields)lossy | Fully supported | |
| Tag / Label | Tag (crm.tag)lossy | Fully supported | |
| Attachment reference | Attachment (ir.attachment)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.
MiniCRM gotchas
Automation rules do not export via API
Pricing tier boundaries are opaque
API export tooling is limited and undocumented
Acquisition by group.one may affect product continuity
Polish-language interface and documentation
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 export extraction
We audit the MiniCRM account across all active workspaces, Cards, Contacts, Companies, Deals (Interesy), Tasks, Notes, Calendar events, Attachments, Custom Fields, and Automation Rules. Because MiniCRM lacks a documented bulk API, we request CSV and manual exports via the customer account and supplement with screen-based extracts where the account interface allows. We validate record counts against MiniCRM's own dashboard and flag any export gaps before mapping begins. The discovery output is a written migration scope document confirming object counts, custom field inventory, automation rule list, and owner count.
Schema design and Card split decision
We design the Odoo destination schema: creating custom fields on res.partner and crm.lead via Odoo Studio or direct database write, configuring CRM pipeline stages (aligning MiniCRM stage names to Odoo stages), setting up Sales Teams per MiniCRM workspace, and defining the Card-to-record split rule. The customer confirms the split decision (contact-primary vs deal-primary vs mixed per workspace) before schema deployment. We deploy into a non-production Odoo database first for validation. We also confirm the customer's Odoo edition (Community or Enterprise) and which Odoo Apps are active, as app availability affects which Odoo objects are present.
Owner reconciliation and User provisioning
We extract every distinct MiniCRM Owner (Pracownik) referenced on Cards, Tasks, and Deals and match by email against the destination Odoo org's res.users table. Any MiniCRM owner without a matching Odoo User is held in a reconciliation queue. The customer's Odoo admin provisions missing Users before production migration begins. Migration cannot insert records with owner references that resolve to inactive or absent Users, as Odoo's access control rejects the write. We also confirm whether inactive MiniCRM users (former employees) should be migrated as inactive Odoo Users to preserve historical assignment.
Staging migration and reconciliation
We run a full migration into the non-production Odoo environment using representative data volume. The customer's admin spot-checks 25-50 random records against the MiniCRM source, verifies that task assignments, deal values, and contact details match, and confirms the stage mapping is correct. We correct any field mapping errors discovered during staging before production migration begins. Staging also surfaces any duplicate detection issues — if MiniCRM has duplicate Cards for the same contact, we apply a dedupe strategy (keep most recent, keep most complete) agreed upon with the customer.
Production migration in dependency order
We run production migration in record-dependency order: Companies (res.partner, is_company=True) first, then Contacts (res.partner, is_company=False with company_id resolved), then Opportunities (crm.lead) with partner_id and user_id resolved, then Tasks and Calendar events with res_model and res_id pointing to the correct parent records, then Notes as mail.message records, and finally Tags via crm.lead.tag_ids. Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC API with batch chunking and exponential backoff on rate-limit responses. We flag any records that fail import and resolve them in a retry pass before cutover.
Cutover, validation, and Automation rebuild handoff
We freeze MiniCRM writes during the cutover window, run a final delta migration of any records modified during the window, then mark Odoo as the system of record. We deliver the Automation Inventory document to the customer's admin team: every MiniCRM Automatyzacja with its trigger, conditions, and actions, plus a recommended Odoo Studio Automation equivalent. We support a one-week hypercare window where we resolve any record reconciliation issues raised by the team. We do not rebuild MiniCRM automation rules as Odoo Studio automations inside the migration scope; that is a separate engagement handled by the customer's admin or an Odoo implementation partner.
Platform deep dives
MiniCRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between MiniCRM and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across MiniCRM and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between MiniCRM 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
MiniCRM: Not publicly documented.
Data volume sensitivity
MiniCRM 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 MiniCRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your MiniCRM 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 MiniCRM
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.