CRM migration
Field-level mapping, validation, and rollback between CentralStationCRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
CentralStationCRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between CentralStationCRM and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from CentralStationCRM to Odoo CRM is a structural migration from a lightweight, single-module CRM to an all-in-one ERP platform with CRM as one of dozens of optional apps. CentralStationCRM holds People, Companies, Deals, Leads, and Activities in a flat, unified model; Odoo separates the CRM app into Leads (pre-qualification) and Contacts (post-qualification) with an explicit Convert action. We resolve that split at migration time using CentralStationCRM's Deal attachment as the qualification proxy, preserve the original Hub-style tag vocabulary as Odoo Tags, and walk every nested address route (GET /api/people/{id}/addrs.json) so that no child record is silently omitted. Odoo's per-user pricing plus per-app monthly fees (CRM starts around €19/user/month on top of the base platform) makes the total cost structure materially different from CentralStationCRM's flat per-seat model, so we map the customer's current CentralStationCRM seat count against Odoo's subscription stack during scoping. Workflows, email templates, and custom automations built in CentralStationCRM do not migrate; we deliver a written inventory of every active workflow for Odoo Automated Actions rebuild by the customer's admin.
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 CentralStationCRM 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.
CentralStationCRM
People (Contacts)
Odoo CRM
Lead or Contact (split required)
1:manyCentralStationCRM People map to Odoo CRM Lead if the record has no attached Deal and is pre-qualification, and to Odoo CRM Contact if the record has an active Deal or has been worked by a sales rep. We apply a Deal-attachment heuristic during scoping: People with at least one non-closed Deal become Contacts; People with no Deal attachment and no contact history become Leads. The original CentralStationCRM record ID is preserved in a custom field csrm_id__c on both Lead and Contact for cross-system audit.
CentralStationCRM
Company
Odoo CRM
Contact (company type) or Company (res.partner model)
1:1Odoo uses the res.partner model for both individual contacts and companies; companies are distinguished by the is_company flag set to True. CentralStationCRM Company records map to Odoo Partner records with is_company=True and child contact records created for each related Person. The company name, domain, and address fields transfer directly; website becomes the Partner's website field used as the dedupe key.
CentralStationCRM
Deal
Odoo CRM
CRM Opportunity
1:1CentralStationCRM Deals map to Odoo CRM Opportunity. The deal stage maps to an Odoo CRM Stage, and we pre-create stages matching the source pipeline before migration. Deal value, expected close date, and assigned owner transfer to the Opportunity's planned_revenue, date_deadline, and user_id fields. CentralStationCRM Deals attached to a Person without a Company create Opportunities linked directly to the Contact; Deals attached to a Company link to a Company-level Opportunity.
CentralStationCRM
Lead
Odoo CRM
CRM Lead
1:1CentralStationCRM's standalone Lead object maps directly to Odoo CRM Lead. Lead status (new, contacted, qualified, lost) maps to Odoo's Lead Status field, and any lead score from CentralStationCRM custom fields transfers to a custom csrm_lead_score__c field on the Odoo Lead. If the destination Odoo instance has no CRM app installed, Leads migrate as Contacts in the base Odoo Contacts module.
CentralStationCRM
Activities (calls, meetings, notes)
Odoo CRM
CRM Activities (Phone Calls, Meetings, Notes)
1:1CentralStationCRM Activity records map to Odoo CRM Activity records linked to the migrated Lead or Contact via res_id and res_model. Activity type (call, meeting, note) maps to Odoo's activity_type_id; title becomes the activity's summary; description becomes the note body. Odoo allows one activity type per record, so multi-type CentralStationCRM activities on a single date are split into individual Odoo activity records.
CentralStationCRM
Tags
Odoo CRM
Tags
1:1CentralStationCRM's flat tag vocabulary maps to Odoo CRM Tags (crm.tag model). Tags are applied to Leads and Opportunities via crm.tag.rel. The tag vocabulary transfers as-is; Odoo supports unicode tag names so German-language tags from CentralStationCRM import without transformation. Tags with special characters (e.g., ampersands) are sanitized to Odoo's allowed character set.
CentralStationCRM
Custom Fields
Odoo CRM
Custom Fields (ir.model.fields)
lossyCentralStationCRM tenant-defined custom fields have no fixed schema and require explicit mapping to Odoo custom fields. We discover all custom fields at the source during scoping, create matching custom fields on the appropriate Odoo model (res.partner, crm.lead, crm.lead) using Odoo's Settings > Technical > Fields interface or XML data, and map each field's type (text, number, date, select) to the closest Odoo field type before migration begins. Custom fields must exist in Odoo before any data containing them is imported.
CentralStationCRM
Tasks
Odoo CRM
Project Tasks or CRM Activities
1:1CentralStationCRM Tasks attached to People or Deals map to Odoo CRM Activities (activity type Task) linked to the parent Contact or Opportunity. Task title, due date, and status (open/done) transfer directly. Completed state from CentralStationCRM maps to Odoo's activity's completed status with the completion date preserved. If the destination Odoo instance uses the Project app for task management, tasks attach to a default project created during migration.
CentralStationCRM
Offers
Odoo CRM
Sale Order (Quotation)
1:1CentralStationCRM Offers map to Odoo Sale Orders in Quotation state. Offer line items (product, quantity, unit price, discount) map to Odoo sale.order.line records linked to the Sale Order. Offer totals, tax amounts, and validity dates transfer to the corresponding Sale Order fields. Because CentralStationCRM Offers are standalone and not tied to Odoo's product.price.list model, we create Product records during migration for any Offer line items referencing unnamed products.
CentralStationCRM
Addresses (nested child records)
Odoo CRM
Contact Addresses (res.partner address fields)
1:1CentralStationCRM addresses live as nested child records fetched via GET /api/people/{id}/addrs.json and are not included in the parent Person record. We traverse each nested address route during export, then write address fields (street, city, zip, country) to the Odoo Partner's address fields (street, city, zip, country_id). Multiple addresses per contact create Odoo Contact records of type contact linked as children of the primary company Partner.
CentralStationCRM
Owner
Odoo CRM
User
1:1CentralStationCRM Owners map to Odoo Users by email match against the destination Odoo instance's res.users table. Any Owner without a matching Odoo User is held in a reconciliation queue for the customer's admin to provision before record import proceeds. Odoo Users must be active and have CRM app access assigned for Opportunities to route correctly.
CentralStationCRM
Deals (pipeline configuration)
Odoo CRM
CRM Stages
lossyEach CentralStationCRM Deal pipeline maps to an Odoo CRM Stage sequence. We pre-create the stage names, sequence order, and fold status (whether the stage appears collapsed in Odoo's pipeline Kanban view) matching the source before Deals are imported. Stage probability percentages are stored on a custom stage_probability field per stage if the customer requires granular forecasting.
| CentralStationCRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| People (Contacts) | Lead or Contact (split required)1:many | Fully supported | |
| Company | Contact (company type) or Company (res.partner model)1:1 | Fully supported | |
| Deal | CRM Opportunity1:1 | Fully supported | |
| Lead | CRM Lead1:1 | Fully supported | |
| Activities (calls, meetings, notes) | CRM Activities (Phone Calls, Meetings, Notes)1:1 | Fully supported | |
| Tags | Tags1:1 | Fully supported | |
| Custom Fields | Custom Fields (ir.model.fields)lossy | Mapping required | |
| Tasks | Project Tasks or CRM Activities1:1 | Mapping required | |
| Offers | Sale Order (Quotation)1:1 | Mapping required | |
| Addresses (nested child records) | Contact Addresses (res.partner address fields)1:1 | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Deals (pipeline configuration) | CRM Stageslossy | 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.
CentralStationCRM gotchas
50 req/10s rate limit causes 429 errors on fast exports
Nested routes required for child object exports
No OAuth — API key only with header authentication
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 Odoo app provisioning review
We audit the source CentralStationCRM account across all record types (People, Companies, Deals, Leads, Activities, Offers, Tasks, Tags) and custom fields. We pair this with an Odoo readiness review: confirming whether the CRM app is installed, what other Odoo apps are planned (Sales, Invoicing, Project), and whether the destination is Odoo Online, Odoo.sh, or on-premises. We also map the CentralStationCRM seat count against Odoo's per-user base platform fee plus per-app fees to produce a post-migration cost comparison document. The discovery output is a written migration scope with a per-record-type count estimate.
Lead-Contact split rule definition
We define the business logic for converting CentralStationCRM People to Odoo Leads versus Contacts. The default heuristic uses Deal attachment as the qualification proxy: People with at least one non-closed Deal become Odoo Contacts; People with no Deal and no activity history become Odoo Leads. We present this heuristic to the customer's sales manager for validation and adjustment before any data is exported. We also define the Odoo CRM Stage mapping (one Odoo stage per CentralStationCRM pipeline stage) and pre-create stages in the destination Odoo instance.
Custom field schema creation in Odoo
We create all required custom fields in Odoo before any data import begins. This includes mapping each CentralStationCRM custom field's data type to the closest Odoo field type, creating the fields on the correct Odoo model (res.partner for People, crm.lead for Leads, crm.lead for Opportunities), and documenting any fields that have no Odoo equivalent as candidates for Odoo Studio customization or exclusion from migration.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database or Sandbox (for Odoo.sh) using a representative data sample. The customer's Odoo administrator reconciles record counts per object (People in, Leads in, Contacts in, Deals in, Activities in), spot-checks 20-30 records against the CentralStationCRM source for field accuracy, and validates that the Lead-Contact split heuristic produced the expected distribution. Any mapping corrections happen in this phase before the production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users (manual provisioning validated first), Companies (from CentralStationCRM Company records, with is_company flag set), Contacts and Leads (with the split heuristic applied and Company link resolved), Opportunities (with Contact/Lead link, Owner link, and Stage resolved), Activity history (calls, meetings, notes traversed via nested routes), Tasks, Offers (as Sale Orders in draft state), Tags (created first so they can be linked during import), and Custom Fields (applied during the relevant object import). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze CentralStationCRM writes during a defined cutover window, run a final delta migration of any records modified during the migration run, then set Odoo as the active system of record. We deliver the CentralStationCRM workflow and automation inventory document to the customer's Odoo administrator as a rebuild reference. We do not rebuild CentralStationCRM workflows as Odoo Automated Actions or Studio configurations within migration scope; that work is handled by the customer's admin or an Odoo implementation partner. We support a five-business-day hypercare window for reconciliation issues raised during the first week of live use.
Platform deep dives
CentralStationCRM
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 CentralStationCRM 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
CentralStationCRM: 50 requests within 10 seconds; returns HTTP 429 with Retry-After header when exceeded.
Data volume sensitivity
CentralStationCRM 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 CentralStationCRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your CentralStationCRM 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 CentralStationCRM
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.