ERP migration
Field-level mapping, validation, and rollback between Selly Erp and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
Selly Erp
Source
Odoo ERP
Destination
Compatibility
10 of 12
objects map 1:1 between Selly Erp and Odoo ERP.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Selly ERP to Odoo ERP is a platform consolidation that trades a flat-rate Italian CRM for a modular open-source ERP with native accounting, inventory, and reporting depth. The primary migration constraint is Selly ERP's absence of a public API — every export originates from the customer's in-app manual data dump, which we coordinate and validate before ingestion. We map Selly ERP's company and deal records to Odoo's Partner and Opportunity objects, reconcile pipeline stages to Odoo project stages or CRM pipeline stages, and archive invoice PDFs as document attachments while re-importing line items as structured records. Workflow automations inside Selly ERP are undocumented and cannot transfer; we deliver a written specification for rebuilding in Odoo's Automations module. Odoo Community is free; Odoo Enterprise starts around $24.90 per user per month with a free trial available, making the platform accessible for SMB teams that want ERP depth without enterprise licensing overhead.
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 Selly Erp object lands in Odoo ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Selly Erp
Lead
Odoo ERP
Lead (CRM module)
1:1Selly ERP Lead records map to Odoo CRM Lead (also called crm.lead). We extract first name, last name, email, phone, company name, source, and status fields. The lead priority (low, medium, high) maps to Odoo's priority field (0-5 scale). We create the Lead before any Opportunity creation so that crm.lead/opportunity conversion links correctly.
Selly Erp
Customer
Odoo ERP
Contact (res.partner)
1:1Selly ERP Customer records map to Odoo res.partner with type=contact. Company details map to parent_id on the partner record. Billing and shipping addresses migrate as partner addresses with address_type fields. The partner's VAT number, fiscal position, and payment terms transfer as fields on res.partner.
Selly Erp
Company (within Customer)
Odoo ERP
Company (res.partner with type=company)
1:1Selly ERP's embedded company data within Customer records extracts as Odoo res.partner with type=company. We create the company partner first and then link individual contacts as child partners under the parent company, preserving the relationship structure from Selly ERP.
Selly Erp
Opportunity
Odoo ERP
Opportunity (crm.lead converted to opportunity)
1:1Selly ERP Opportunities map to Odoo CRM Opportunities. The deal name, estimated value, close date, and probability migrate. Stage names from Selly ERP's custom pipeline are extracted during scoping and created as Odoo stage records in the CRM pipeline before import. Probability percentages are stored as stage_weight values in Odoo's stage configuration.
Selly Erp
Pipeline Stages
Odoo ERP
Stage (crm.stage)
lossySelly ERP allows custom pipeline stage names per account. We extract the complete stage list during scoping and create corresponding Odoo CRM stages in the destination pipeline, preserving the ordering sequence. Stage colors and is_won flags are configured to match the customer's visual conventions where possible.
Selly Erp
Deal
Odoo ERP
Opportunity or Project Task
1:1Selly ERP Deals map to Odoo CRM Opportunities for sales-cycle tracking. If the customer uses Selly ERP's task or project submodule within a deal context, those items map to Odoo Project Task records linked to the corresponding Opportunity. We confirm the deal-to-task split strategy with the customer during scoping based on how they use Deals in Selly ERP.
Selly Erp
Invoice
Odoo ERP
Account Invoice (account.move)
1:1Selly ERP Invoice records migrate as Odoo account.move entries with type=out_invoice or out_refund. Invoice line items transfer as move_line records with account_id resolved from the Odoo chart of accounts mapping. The original invoice PDF is archived as an Odoo attachment on the move record for audit reference, but the PDF does not replace the structured line-item record.
Selly Erp
Quote
Odoo ERP
Sale Order (sale.order)
1:1Selly ERP Quotes map to Odoo Sale Orders. Quote line items, totals, validity dates, and payment terms transfer. Custom quote templates from Selly ERP do not carry over; we document the template structure separately so the customer can rebuild in Odoo's Sale Order report designer.
Selly Erp
Activity (calls, emails, meetings, notes)
Odoo ERP
Mail Activity + Project Task
1:1Selly ERP Activity records (calls, emails, meetings, tasks, notes) migrate as Odoo mail.activity entries linked to the parent crm.lead or res.partner. Timestamps are preserved in UTC and converted to the destination timezone during import. Note content migrates as Odoo note.doc records attached to the parent record.
Selly Erp
User and Owner
Odoo ERP
User (res.users)
1:1Selly ERP user accounts and owners map to Odoo res.users records via email match. We resolve each HubSpot owner ID to the corresponding Odoo user. Any Selly ERP user without a matching Odoo user goes to a reconciliation queue for the customer's admin to provision before the record import phase resumes, because OwnerId references are required on most Odoo document types.
Selly Erp
Custom Fields
Odoo ERP
Custom Fields (ir.model.fields)
lossyCustom fields on any Selly ERP object are extracted during export. We preserve the field name, data type, and values, and create matching custom fields in Odoo (via Settings > Technical > Database Structure > Fields) before importing values. Field types are mapped to Odoo field definitions including selection, char, float, date, datetime, many2one, and one2many where applicable.
Selly Erp
Attachment
Odoo ERP
Ir Attachment
1:1File attachments linked to records in Selly ERP (customer documents, deal files, invoice PDFs) are extracted from the export and stored for re-upload to Odoo as ir.attachment records linked to the corresponding res.partner, crm.lead, or account.move. Attachment migration runs after record creation so that the res_model and res_id references resolve correctly during import.
| Selly Erp | Odoo ERP | Compatibility | |
|---|---|---|---|
| Lead | Lead (CRM module)1:1 | Fully supported | |
| Customer | Contact (res.partner)1:1 | Fully supported | |
| Company (within Customer) | Company (res.partner with type=company)1:1 | Fully supported | |
| Opportunity | Opportunity (crm.lead converted to opportunity)1:1 | Fully supported | |
| Pipeline Stages | Stage (crm.stage)lossy | Mapping required | |
| Deal | Opportunity or Project Task1:1 | Fully supported | |
| Invoice | Account Invoice (account.move)1:1 | Fully supported | |
| Quote | Sale Order (sale.order)1:1 | Fully supported | |
| Activity (calls, emails, meetings, notes) | Mail Activity + Project Task1:1 | Fully supported | |
| User and Owner | User (res.users)1:1 | Fully supported | |
| Custom Fields | Custom Fields (ir.model.fields)lossy | Mapping required | |
| Attachment | Ir Attachment1: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.
Selly Erp gotchas
No public API forces manual data export
Invoice PDFs are not exported as structured records
Workflow automations are undocumented and non-transferable
Odoo ERP gotchas
No rollback for CSV imports
External ID conflicts on re-import
Many2many field encoding in CSV imports
Large export timeouts require batching
Version schema drift between Odoo releases
Pair-specific challenges
Migration approach
Export coordination and data quality assessment
We schedule a guided export session with the customer to extract CSV or Excel dumps from each Selly ERP module — Leads, Customers, Opportunities, Deals, Pipeline Stages, Invoices, Quotes, and Activities. During the same phase we run a data quality assessment that identifies duplicate partner records, missing required fields, inconsistent naming conventions, and stale open balances. We produce a data quality report that the customer reviews and approves before we begin any import work into Odoo. Cleaning decisions are documented and agreed upon before transformation scripts are written.
Odoo schema preparation and chart of accounts design
We set up the Odoo destination environment — selecting and installing the required apps (CRM, Sales, Inventory, Accounting) from the Odoo Apps list, configuring the company record, and designing the chart of accounts based on the Selly ERP account export. We create pipeline stages in the CRM module matching the Selly ERP stage names, configure warehouse and product categories for inventory migration, and pre-create any custom fields on crm.lead, res.partner, and account.move before record import begins. Schema preparation runs in parallel with data quality remediation so that both tracks are ready before the first import script runs.
Staging migration and reconciliation
We run a full migration into an Odoo staging environment (a separate Odoo database or sandbox-like test company) using production-like data volume. The customer reconciles record counts across all object types, spot-checks 25-50 records against the Selly ERP source, and validates that pipeline stage names, invoice totals, and contact assignments match. Any mapping corrections are made in the transformation scripts at this stage. The customer signs off on the staging reconciliation before we proceed to production migration. This step prevents post-go-live data corrections that are significantly more disruptive to resolve.
Owner and user reconciliation
We extract every distinct user referenced as an owner or assignee on Contacts, Deals, Invoices, and Activity records in Selly ERP and match them by email against the Odoo destination's res.users table. Users without a matching Odoo account are added to a reconciliation queue. The customer's Odoo admin provisions any missing user accounts, assigns appropriate access rights per Odoo's access rights model, and confirms active versus inactive status. Migration cannot advance past this step because OwnerId and UserId references are required fields on most Odoo document types.
Production migration in dependency order
We run the production migration in record-dependency order: res.partner (companies and contacts), crm.lead (Leads and Opportunities converted from Opportunities), account.account (chart of accounts for financial records), account.move (Invoices and credit notes), sale.order (Quotes), mail.activity (Activity history), and ir.attachment (document files). Each phase emits a row-count reconciliation report before the next phase begins. Attachment migration runs last because it requires the res_model and res_id references from previously imported records to resolve correctly.
Cutover, delta reconciliation, and automation handoff
We freeze Selly ERP write access during cutover and run a final delta migration of any records created or modified during the migration window. We validate invoice totals, opportunity values, and partner counts against the Selly ERP source and resolve any discrepancies. We deliver the written automation inventory document to the customer's admin team covering every Selly ERP workflow rule with its trigger, conditions, actions, and a recommended Odoo Automations equivalent. We support a one-week hypercare window for reconciliation issues raised by the customer's team.
Platform deep dives
Selly Erp
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP 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 Selly Erp and Odoo ERP.
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
Selly Erp: Not publicly documented.
Data volume sensitivity
Selly Erp 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 Selly Erp to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your Selly Erp to Odoo ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Selly Erp
Other ways to arrive at Odoo ERP
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.