CRM migration

Migrate from Sellsy to Odoo CRM

Field-level mapping, validation, and rollback between Sellsy and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Sellsy logo

Sellsy

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

69%

9 of 13

objects map 1:1 between Sellsy and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Sellsy to Odoo CRM is a consolidation migration as much as a CRM migration. Sellsy combines CRM, invoicing, and pre-accounting under one roof; Odoo CRM is one module within a full ERP suite that can replace all of those simultaneously or run as a standalone CRM module. The primary technical challenge is that Sellsy conflates Individuals and Companies into a single Contact export without a clean discriminator field — we split by type before importing into Odoo's separate Contact (res.partner, style=contact) and Company (res.partner, style=company) model. Financial documents (Invoices, Orders, Credit Notes) require the Odoo Accounting module to be active and configured; we sequence them after the partner and product catalogs to preserve account balances. SmartTags on Sellsy transactional documents map to Odoo Tags, and where Odoo has no tagging field on that object, we create a custom Char field to hold the tag values. We do not migrate Sellsy automations, document templates, or staff privilege models as code; we deliver a written inventory of each for the customer's Odoo administrator to rebuild.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Sellsy logo

Sellsy

What's pushing teams away

  • Steep learning curve that requires roughly one week to become productive: reviewers consistently report Sellsy is not intuitive and the information architecture demands significant onboarding investment before teams can work efficiently.
  • Pricing opacity across public sources creates buying friction: Sellsy has been transitioning from modular to bundled pricing for years, leaving outdated numbers scattered across Capterra, G2, and its own site — confusing prospects and delaying sign-off.
  • Interface and UX lag behind newer CRM alternatives: reviewers note the design feels dated compared to platforms like Pipedrive, with imperfect ergonomics that create friction even for basic workflows after the initial learning period.
  • Document template and workflow setup takes 2–3 hours to configure properly: initial setup of custom fields, pipelines, and document templates is non-trivial, and basic configuration at go-live still requires deliberate configuration effort.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Sellsy objects map to Odoo CRM

Each row shows how a Sellsy 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.

Sellsy

Contact (Individuals)

maps to

Odoo CRM

res.partner (style=contact)

1:many
Fully supported

Sellsy bundles Individuals and Companies in a single Contact export with a type discriminator (personne morale / personne physique). We split the export by the type attribute before import. Each Individual maps to a res.partner record with style=contact. Name, email, phone, address, and custom field values migrate directly. Owner (sellsy staff) maps to Odoo User on the created_by_uid and write_uid fields. The customer chooses whether to create a parent company partner for each Individual or leave them standalone in Odoo.

Sellsy

Corporation / Company

maps to

Odoo CRM

res.partner (style=company)

1:1
Fully supported

Sellsy Corporation records map to res.partner with style=company. Corporate name, SIRENE or company registry data, address, revenue range, and industry classification migrate as partner fields. The linked staff owner maps to Odoo User. If the customer uses Sellsy's SIRENE enrichment, we preserve the official company identifiers (SIREN, SIRET) in a custom Char field on the Odoo partner record.

Sellsy

Opportunity

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Sellsy Opportunities map directly to Odoo crm.lead records. Pipeline stages from Sellsy map to Odoo Stage names within the customer's Odoo CRM pipeline. The opportunity amount (montant) migrates to the expected_revenue or planned_revenue field; probability migrates as probability. Owner assignment uses email matching against Odoo Users. Closed Won and Closed Lost outcomes map to Odoo's won and lost stage values.

Sellsy

Pipeline Stage

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Each Sellsy pipeline becomes an Odoo CRM Stage within the customer's pipeline configuration. Stage order and probability percentages migrate from Sellsy. Odoo CRM's Kanban drag-and-drop stage management requires that we configure the stage sequence before opportunity records are imported so that the default stage is set correctly on insert.

Sellsy

Invoice

maps to

Odoo CRM

account.move (type=out_invoice)

1:1
Fully supported

Sellsy Invoices require the Odoo Accounting module to be installed and configured before import. Invoice header data (partner, date, number, due date) maps to account.move. Line items map to account.move.line with account_id resolved from the Odoo chart of accounts. Tax amounts, discounts, and SmartTags migrate to Tags on the move record. Invoice status (draft, sent, paid) maps to Odoo's move_state workflow. We flag that the Odoo Accounting app must be activated and a fiscal position / chart of accounts configured before this object imports.

Sellsy

Order

maps to

Odoo CRM

sale.order

1:1
Fully supported

Sellsy Orders map to Odoo Sale Order records. Product lines migrate as sale.order.line with product_id resolved via the Odoo product catalog. Order total, discount, and SmartTags transfer to the sale.order record. If Odoo Inventory is active, the stock.picking workflow is triggered after sale.order confirmation; we do not trigger confirmation during migration to allow the customer's team to review before fulfilment activation.

Sellsy

Credit Note

maps to

Odoo CRM

account.move (type=out_refund)

1:1
Fully supported

Sellsy Credit Notes (API support added in v2.86.0) map to Odoo account.move with type=out_refund. The linked original invoice reference migrates to the Odoo reconcile field if the original account.move record has already been imported; otherwise the reference is stored in a custom field for manual reconciliation after import. SmartTags transfer to Odoo Tags on the refund move.

Sellsy

Product

maps to

Odoo CRM

product.product / product.template

1:1
Fully supported

Sellsy Products map to Odoo product.template (for product type and pricing) and product.product (for stock-tracked variants). Product code from Sellsy maps to the default_code field. Pricing rules migrate to Odoo pricelist items. The product catalog must be imported before Invoice and Order records to satisfy product_id foreign key constraints.

Sellsy

Staff

maps to

Odoo CRM

res.users

1:1
Mapping required

Sellsy Staff records map to Odoo res.users. We resolve by email match. Staff role and privilege information in Sellsy does not map directly to Odoo's access-control groups — the Odoo administrator assigns access rights based on the staff member's intended role in Odoo. We flag that Sellsy's Staff privilege model is not a direct equivalent of Odoo's user groups and document the mapping decision for the administrator.

Sellsy

Task

maps to

Odoo CRM

project.task

1:1
Fully supported

Sellsy Tasks map to Odoo project.task records. Assignee, due date, status, and description migrate. If the customer does not have the Odoo Project app active, tasks migrate as a standalone CRM activity log against the related partner or opportunity record instead. The customer confirms the target app during scoping.

Sellsy

Activity (calls, emails, meetings)

maps to

Odoo CRM

mail.message / project.task

1:1
Fully supported

Sellsy Activities (appointments, calls, logged interactions) map to Odoo mail.message records linked to the parent crm.lead or res.partner. Call logs and meeting entries preserve timestamps and body content. Activity type (call, meeting, email) is stored as a custom field on the mail.message to maintain the original categorisation. We note that Odoo does not expose a native activity timeline per Contact the same way Sellsy does; the CRM Activity view in Odoo shows a subset of logged activities.

Sellsy

SmartTag

maps to

Odoo CRM

mail.activity.mixin / Tags

lossy
Fully supported

Sellsy SmartTags are a tagging layer applied to Invoices, Orders, and Credit Notes. In Odoo, Tags are available on crm.lead, account.move, and sale.order records via the mail.activity.mixin or ir_attachment tag system. We map SmartTags to Odoo Tags on the corresponding model. Where the destination Odoo model has no native Tags field, we create a custom Char field to hold the tag values, flagged during scoping for the customer's administrator to confirm.

Sellsy

Custom Field

maps to

Odoo CRM

ir.model.fields

lossy
Fully supported

Sellsy custom fields on Invoices, Contacts, and Corporations are read via GET /custom-fields and mapped to Odoo custom fields created in Odoo Studio or via the ORM before migration. Field type mapping follows: Sellsy text maps to Odoo Char, Sellsy number to Float or Monetary, Sellsy date to Date, Sellsy checkbox to Boolean. Custom fields that reference other Sellsy objects (e.g., a lookup from an Invoice to a Contact) are resolved to the corresponding Odoo record ID at migration time.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Sellsy logo

Sellsy gotchas

High

Owner name uniqueness required in CSV exports

Medium

Pricing numbers scattered across modular and bundled models

Medium

SmartTags are a tagging layer, not a structured object

Medium

Public API rate limits not documented

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Sellsy Contact export bundles Individuals and Companies without a clean split field

    Sellsy's CSV export for contacts bundles Individuals (personne physique) and Companies (personne morale) together with only a type discriminator in the export file. If the type field is absent or mislabeled in the export, the migration splits incorrectly, placing company contacts into the Individual partner model and vice versa. We inspect the export schema before import, ask the customer to confirm the type column header, and run a validation count against the Sellsy dashboard totals before proceeding. Incorrect split at this stage corrupts the entire downstream mapping because Odoo's res.partner model treats style=contact and style=company differently for address storage and sales order linking.

  • Financial document migration requires Odoo Accounting module activation

    Sellsy Invoices, Orders, and Credit Notes cannot be imported into Odoo CRM alone — they require the Odoo Accounting app (account module) to be installed and a chart of accounts to be configured. Odoo distinguishes between out_invoice (accounts receivable), out_refund (credit notes), and sale_order (orders) as separate model types in different apps. If the customer plans to use only Odoo CRM without the Accounting app, financial documents must be migrated as CRM documents (crm.lead with custom fields holding invoice data) or excluded from migration scope entirely. We confirm the Accounting app status during scoping and flag any financial document scope that requires module activation before the migration window.

  • SmartTags have no native Odoo equivalent on all transactional objects

    Sellsy SmartTags apply to Invoices, Orders, and Credit Notes as a labelling system. Odoo has a native Tags system on crm.lead and sale.order but not on account.move records unless the customer enables the 'accounting and finance' Tags feature in Odoo 17+. On earlier versions, account.move records have no tagging field by default. We create a custom Char field tag_sellsy_smarttags__c on account.move to hold the original SmartTag values, preserving the data for the customer's admin to reassign to a native field after they upgrade or configure it. This approach avoids silently dropping SmartTags during migration.

  • Owner name uniqueness in Sellsy CSV exports causes silent mis-assignment

    Sellsy's CSV export does not deduplicate owner names across Staff records. If two staff members share the same name, the Odoo import uses the first match only, silently assigning all records owned by the second person to the first. We detect duplicate owner names during pre-flight and ask the customer to either disambiguate the staff names in Sellsy before export or provide a unique staff identifier column. We then match on identifier rather than name during the user resolution phase.

  • Odoo module version compatibility affects custom field creation approach

    Odoo versions between 14 and 18 handle custom fields differently. Community vs Enterprise edition also affects which custom field types are available (Odoo Studio is Enterprise-only for visual field creation). We confirm the customer's Odoo version and edition during scoping and adapt the custom field creation approach accordingly: XML data migration for Community editions and Studio-exported field definitions for Enterprise. Custom modules built for Sellsy (if any) have no equivalent migration path to Odoo — we document them as requiring a separate Odoo developer assessment for reimplementation.

Migration approach

Six steps for a successful Sellsy to Odoo CRM data migration

  1. Scoping and module activation check

    We audit the source Sellsy account across all active modules, record counts for Contacts/Individuals/Corporations, Opportunities, Invoices, Orders, Credit Notes, Products, Staff, Tasks, and Activities. We confirm the customer's Odoo version, edition (Community or Enterprise), and which Odoo apps are already active (CRM, Accounting, Inventory, Project). If the customer intends to migrate financial documents, we confirm that the Odoo Accounting app is installed and a chart of accounts is configured before the migration window. The scoping output is a written migration scope document and a checklist of Odoo prerequisites.

  2. Contact split and partner schema design

    We inspect the Sellsy Contact CSV export schema and confirm the type discriminator column for Individuals vs Companies. We design the Odoo res.partner import plan: Corporations become style=company partners, Individuals become style=contact partners, and the customer decides whether to link Individual partners to their parent Company partner. We pre-create any custom fields on res.partner needed to hold SIRENE identifiers, original Sellsy IDs for reconciliation, and SmartTags where applicable. If Odoo Contacts requires address records in a separate res.partner.address model (certain Odoo versions), we split the flat address fields into the correct child record structure.

  3. Product catalog and financial document schema

    We extract the Sellsy product catalog and import it into Odoo product.template and product.product before any transactional records are loaded. This establishes the product_id foreign key required for sale.order and account.move.line records. We then create the Odoo chart of accounts structure to support account.move imports, map Sellsy tax codes to Odoo tax groups, and configure the sale_journal and purchase_journal references that Odoo Accounting requires on invoice and order records.

  4. Sandbox migration and reconciliation

    We run a full migration into a staging Odoo database (a copy of the production database or a fresh Odoo.sh environment) with production-like record volumes. The customer's team reconciles record counts, spot-checks 25-50 randomly sampled records against the Sellsy source for field accuracy, and verifies that the contact split produced the correct partner counts. Schema corrections, custom field additions, and mapping adjustments happen here before production cutover.

  5. Owner and user provisioning

    We extract every distinct Sellsy Staff member referenced as an owner on Contacts, Opportunities, Invoices, Orders, and Tasks. We match by email against the Odoo res.users table. Any Sellsy owner without a matching Odoo user goes to a reconciliation queue for the customer's administrator to provision before production migration resumes. Owner assignment cannot be completed in Odoo without an active User record for each owner.

  6. Production migration in dependency order

    We run production migration in record-dependency order: Product catalog first (no dependencies), then res.partner records (Individuals and Companies), then crm.lead (Opportunities with owner and partner lookups resolved), then sale.order, then account.move (Invoices and Credit Notes), then project.task, then mail.message activity history. Each phase emits a row-count reconciliation report before the next phase begins. SmartTags are mapped to Odoo Tags on each pass. Custom field values from Sellsy are written to the pre-created Odoo custom fields during the same pass.

  7. Cutover, validation, and automation inventory handoff

    We freeze Sellsy writes during cutover and run a final delta migration of any records modified during the migration window. We validate that record counts match across all objects, that partner-contact linking is intact, that financial document totals reconcile against Sellsy dashboard totals, and that the owner assignment rate exceeds 95 percent. We deliver the automation and document template inventory document to the customer's Odoo administrator for rebuild in Odoo Studio or via the Actions menu. We provide a one-week hypercare window for reconciliation issues raised by the team and do not include post-migration admin support, training, or workflow rebuild in the standard scope.

Platform deep dives

Context on both ends of the pair

Sellsy logo

Sellsy

Source

Strengths

  • Comprehensive feature stack covering CRM, invoicing, pre-accounting, and marketing in a single subscription.
  • Native GDPR compliance and French market features including SIRENE directory enrichment.
  • Competitive pricing for very small to mid-sized French businesses compared to international alternatives.
  • Integrated electronic document signing reduces the need for third-party document workflow tools.
  • Automation of routine billing and proposal workflows reduces manual administrative overhead.

Weaknesses

  • Steep learning curve with a one-week ramp-up period reported by multiple reviewers.
  • Interface and UX design feel dated compared to modern CRM alternatives like Pipedrive.
  • Pricing structure has been in transition from modular to bundled, creating confusion across public sources.
  • Limited API documentation and undocumented public rate limits complicate programmatic integrations.
  • Owner name uniqueness requirement in CSV exports can block bulk imports with duplicate owners.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Sellsy and Odoo CRM.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Sellsy: Not publicly documented.

  • Data volume sensitivity

    A

    Sellsy exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Sellsy to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Sellsy to Odoo CRM data migrations

Answers to the questions buyers ask most during Sellsy to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Sellsy to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Sellsy to Odoo CRM migrations land between four and six weeks for accounts under 15,000 Contacts, 3,000 Opportunities, and no financial documents. Migrations that include Sellsy Invoices, Orders, and Credit Notes extend to eight to twelve weeks because the Odoo Accounting module must be active, a chart of accounts configured, and the financial document journal chain established before import. Complex migrations with large product catalogs (over 5,000 SKUs), multiple Odoo apps, or on-premise deployment move to ten to sixteen weeks.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Sellsy.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day