CRM migration
Field-level mapping, validation, and rollback between SendCloud and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
SendCloud
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between SendCloud and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Migrating from SendCloud to Odoo CRM is a cross-domain move: SendCloud is a shipping automation platform with no native CRM objects, while Odoo CRM is part of a full ERP suite with Contacts, Companies, Opportunities, and pipeline management. SendCloud stores customer data as recipient names attached to Parcel and Shipment records, not as structured contact records. We extract and reshape that data into Odoo Contacts and Companies during migration, preserving shipment history, address books, return records, and carrier routing preferences. We do not migrate SendCloud Workflows, return portal templates, or negotiated carrier rate tables as these are platform-stored values with no export path. We do not migrate shipping labels as binary files. We deliver a written inventory of webhook endpoint configurations and integration credentials that your admin rebuilds in Odoo after cutover.
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 SendCloud 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.
SendCloud
Parcels
Odoo CRM
Delivery Order
1:1SendCloud Parcel records map to Odoo Stock Picking records with move lines representing the shipped items. Each Parcel's weight, dimensions, reference number, status, and carrier information migrate as fields on the Stock Picking and stock.move records. Parcel status (shipped, in_transit, delivered, returned) maps to Odoo's picking state and move state fields. The SendCloud Parcel external_id is preserved as a custom field for reconciliation.
SendCloud
Shipments
Odoo CRM
Sale Order
1:1SendCloud Shipment records, which group one or more Parcels sent to the same recipient, map to Odoo Sale Orders. The recipient address from the Shipment becomes the Delivery Address on the Sale Order. If the customer does not already exist as an Odoo Contact, we create one from the shipment recipient data. Shipment carrier and service level map to Odoo's delivery method and shipping_cost fields on the Sale Order.
SendCloud
Returns
Odoo CRM
Return (Stock Picking type return)
1:1SendCloud Return records track the inbound flow of parcels back to the merchant. We map these to Odoo Stock Pickings of type 'return' linked to the original outbound Delivery Order. Return reason codes from SendCloud migrate to a custom picklist field on the return picking. Note that SendCloud return portal settings (reason code configuration, label templates) are not exposed via the API and require manual reconfiguration in Odoo after migration.
SendCloud
Addresses (ship-to)
Odoo CRM
Contact
1:manySendCloud stores ship-to addresses as structured objects on Shipments and Returns. Multiple shipments to the same address are consolidated into a single Odoo Contact record with the address set as the primary delivery address. Name, street, city, postal code, country, and phone migrate directly. Email addresses, if present on shipment recipient data, migrate as email fields on the Contact. We deduplicate by address hash to avoid creating duplicate Contact records for repeat customers.
SendCloud
Addresses (ship-from warehouse)
Odoo CRM
Company + Warehouse
1:1SendCloud's sender address configuration, used as the ship-from origin on Parcels, maps to an Odoo Company record and a Warehouse record. The Warehouse address in Odoo must match the Address Name field in SendCloud exactly (case-sensitive) for return processing to work correctly. We flag this requirement during scoping and validate the name match before production migration begins.
SendCloud
Carriers
Odoo CRM
Delivery Carrier
lossySendCloud carrier routing rules and activated carrier integrations map to Odoo Delivery Carriers configured in Inventory > Configuration > Delivery Methods. We preserve the carrier-to-carrier mapping (which SendCloud carriers correspond to which Odoo delivery carrier integrations) in a written carrier routing table. Carrier-specific negotiated rates stored in SendCloud's internal tables do not transfer and are flagged as a high-severity gotcha for the customer to resolve directly with carriers post-migration.
SendCloud
Custom Fields (on Parcels)
Odoo CRM
Custom Fields on Stock Picking
lossySendCloud custom fields on Parcels (available on certain plan tiers) map to custom fields on the Odoo stock.picking model. We inventory all SendCloud custom field schemas during scoping, map them to Odoo custom fields with matching data types, and pre-create the destination schema before migration so that custom field data migrates into typed custom fields rather than being dropped.
SendCloud
Webhook Subscriptions
Odoo CRM
Webhook Endpoint Inventory (no import)
1:1SendCloud webhook endpoint configurations (Parcel status change, shipment event, return update webhooks) are exported as a written inventory document listing each webhook's endpoint URL, event type, and secret key. The webhook subscriptions themselves cannot be transferred to Odoo because they are tied to SendCloud API credentials. The inventory document is delivered to the customer's admin for recreation in Odoo's webhook or automation triggers post-migration.
SendCloud
Integrations (Shop platforms)
Odoo CRM
Integration Credential Inventory
1:1SendCloud's native shop platform integrations (Shopify, WooCommerce, Magento, PrestaShop, PrestaShop) connect order data to SendCloud. We inventory active integrations and flag which require new API credentials to be generated after migration. Odoo has its own native e-commerce (Odoo Website / eCommerce) and shop connectors, and if the customer intends to consolidate into Odoo's shop platform, we flag the integration migration path in the scope document.
SendCloud
Users
Odoo CRM
User
1:1SendCloud user accounts (team members with shipping operation roles) are mapped to Odoo User records by email match. SendCloud role assignments do not have direct Odoo equivalents because Odoo uses a more granular rights group system covering per-app access. We deliver a role mapping table that maps SendCloud user roles to Odoo access groups (Shipping User, Inventory User, Sales User, etc.) for the customer's admin to assign post-migration.
SendCloud
Shipping Labels
Odoo CRM
Label Format Configuration
lossySendCloud shipping label data (PDF, ZPL, PNG formats) is not migrated as binary files. We preserve the label format preferences (format type, carrier-specific formatting) in a written configuration document. After migration, shipping labels are regenerated in Odoo through the delivery carrier integration using the carrier API credentials configured at the destination. This is standard practice because label binary files expire and carrier APIs regenerate current labels on demand.
SendCloud
Parcel Status History
Odoo CRM
Stock Move Line Activity Log
1:1SendCloud tracks Parcel status transitions (created, label_printed, handed_to_carrier, in_transit, out_for_delivery, delivered, returned) over time. Each status transition timestamp migrates as a note or activity entry on the corresponding Odoo Stock Picking record, preserving the historical delivery timeline. This ensures the full tracking history is available in Odoo without requiring access to the SendCloud dashboard.
| SendCloud | Odoo CRM | Compatibility | |
|---|---|---|---|
| Parcels | Delivery Order1:1 | Fully supported | |
| Shipments | Sale Order1:1 | Fully supported | |
| Returns | Return (Stock Picking type return)1:1 | Fully supported | |
| Addresses (ship-to) | Contact1:many | Fully supported | |
| Addresses (ship-from warehouse) | Company + Warehouse1:1 | Fully supported | |
| Carriers | Delivery Carrierlossy | Mapping required | |
| Custom Fields (on Parcels) | Custom Fields on Stock Pickinglossy | Fully supported | |
| Webhook Subscriptions | Webhook Endpoint Inventory (no import)1:1 | Mapping required | |
| Integrations (Shop platforms) | Integration Credential Inventory1:1 | Fully supported | |
| Users | User1:1 | Mapping required | |
| Shipping Labels | Label Format Configurationlossy | Fully supported | |
| Parcel Status History | Stock Move Line Activity Log1: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.
SendCloud gotchas
Carrier-specific rate negotiated rates do not transfer
Webhook and integration credentials must be re-established
Free tier parcel cap is easy to exceed during migration
Return workflow configurations are account-specific
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 SendCloud plan audit
We audit the SendCloud account across plan tier, activated carriers, webhook endpoint list, integration connections (Shopify, WooCommerce, Magento, etc.), custom field schemas on Parcels and Returns, and historical shipment volume by month. We identify the free-plan parcel cap risk and recommend a temporary paid tier upgrade if historical export volume will exceed 20 parcels during the migration window. The discovery output is a written migration scope document with the full object inventory, carrier routing table, and webhook inventory.
Odoo schema design and warehouse naming validation
We design the Odoo destination schema. This includes creating or confirming the Company and Warehouse records with names validated against SendCloud's Address Name field, configuring Delivery Carriers to match the active SendCloud carrier integrations, designing the Contact and Company structure (including whether to use Odoo's virtual Company model or direct Contact with address), and pre-creating custom fields on stock.picking to match SendCloud Parcel custom fields. Schema is validated in an Odoo test database before production deployment.
Customer data reshape and address book normalization
We extract all distinct recipient records from SendCloud Shipment data by parsing recipient name, email, phone, and address fields across every shipment. We deduplicate by address hash, create Odoo Contact records with full address data, create or link Odoo Company records, and assign a primary delivery address to each Contact. Email addresses, where present in shipment recipient data, are used to match existing Odoo Contacts if the Odoo instance already contains customer data. The reshape logic is validated against a random sample of 50 shipments before full export begins.
Sandbox migration and reconciliation
We run a full migration into an Odoo test environment using a subset of production data volume. The customer reconciles record counts (Contacts created, Companies created, Delivery Orders linked to Contacts, Return pickings linked to original outbound pickings, custom field values present), spot-checks 30-50 records against SendCloud source data, and validates carrier configuration against the carrier routing table. Sign-off on the sandbox migration gates production migration.
Production migration in dependency order
We run production migration in dependency order: Contacts and Companies first (from shipment recipient reshape), followed by Warehouse and Delivery Carrier configuration (with carrier routing table applied), Delivery Orders (from SendCloud Parcels linked to Contacts), Return pickings (linked to original outbound Delivery Orders), Parcel status history (as activity notes on each Stock Picking), custom fields (mapped to pre-created stock.picking custom fields), and webhook and integration inventory document delivery. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and admin handoff
We freeze SendCloud API writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record for customer and shipment data. We deliver the webhook endpoint inventory, integration credential list, carrier routing table, and return portal configuration inventory to the customer's admin for rebuilding. We support a one-week post-cutover window to resolve reconciliation issues raised by the customer's team. We do not rebuild SendCloud automations as Odoo automation rules; that work is documented in the inventory and handled by the customer's admin or an Odoo partner.
Platform deep dives
SendCloud
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM 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 SendCloud and Odoo CRM.
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
SendCloud: Not publicly documented.
Data volume sensitivity
SendCloud exposes a bulk API — large-volume migrations stream efficiently.
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 SendCloud to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your SendCloud 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 SendCloud
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.