CRM migration
Field-level mapping, validation, and rollback between RAYNET CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
RAYNET CRM
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between RAYNET CRM and Odoo CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from RAYNET CRM to Odoo CRM is a migration from a regional CRM purpose-built for Central-European SMB teams to an integrated ERP/CRM suite. RAYNET stores Contacts, Accounts, Deals, Activities, Sales Orders, and Quotes; Odoo CRM maps these to its crm.lead (which handles both Leads and Opportunities in one model), res.partner (which covers both individuals and companies), and crm.team objects. One structural difference requires design work upfront: RAYNET's separate Deal and Company objects map to Odoo's crm.lead opportunity stage and res.partner partner record, while RAYNET's GPS coordinates auto-derived for Map Analysis are stored as custom latitude/longitude fields since Odoo CRM does not auto-derive these from addresses. We sequence parent records (res.partner) before children (crm.lead, sale.order), resolve owner email cross-references, and chunk large record sets against Odoo's XML-RPC rate limits. Automation rules, conditional workflows, and Architect-tier automations do not migrate; we deliver a written automation inventory so the customer's Odoo admin rebuilds them in Odoo Studio or via server actions. Attachments export via XLSX cross-reference and re-associate in Odoo.
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 RAYNET CRM 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.
RAYNET CRM
Contact
Odoo CRM
res.partner
1:1RAYNET Contact records map to Odoo res.partner with type=contact. We preserve RAYNET's lifecycle stage as a custom selection field (x_raynet_lifecycle_stage) since Odoo CRM's crm.lead model derives stage from the opportunity pipeline rather than the contact. RAYNET's GPS coordinates (latitude/longitude auto-derived from address for Map Analysis) migrate to custom float fields x_latitude and x_longitude on res.partner because Odoo CRM does not auto-compute these from addresses. Standard name, email, phone, street, city, and country fields map 1:1.
RAYNET CRM
Account (Company)
Odoo CRM
res.partner
1:1RAYNET Account records also map to res.partner with type=company. During scoping we identify whether the RAYNET Account and Contact share a single parent record or are separate entities, and design the Odoo partner hierarchy accordingly. Company-type partners get child contact partners linked via child_ids. Address fields (shipping, billing) migrate to partner address fields with dedicated contact address records.
RAYNET CRM
Deal
Odoo CRM
crm.lead (Opportunity)
1:1RAYNET Deals map to Odoo crm.lead records with type=opportunity. The RAYNET pipeline maps to an Odoo crm.team, and RAYNET pipeline stages map to Odoo stage_ids within that team's stage sequence. Deal value, probability, estimated close date, and owner migrate to crm.lead fields expected_close_date, planned_revenue, user_id, and team_id. Closed-Won and Closed-Lost stages map to Odoo's won and lost stage states.
RAYNET CRM
Activity (Calls, Emails, Meetings)
Odoo CRM
mail.activity
1:1RAYNET activity records (Calls, Emails, Meetings) map to Odoo mail.activity records linked to the migrated res.partner or crm.lead via res_id and res_model. Activity type (call, email, meeting) maps to Odoo's activity_type_id, with duration preserved in Odoo's date_deadline and note fields for call disposition. Email subject and body migrate as note body text.
RAYNET CRM
Sales Order
Odoo CRM
sale.order
1:1RAYNET Sales Orders map to Odoo sale.order records. Order lines migrate as sale.order.line records with product, quantity, unit price, and taxes. The linked Account maps to the Odoo res.partner partner_id, and the associated Deal maps to the crm.lead origin_id if the customer enables the CRM-Sales integration in Odoo. Shipping and billing addresses migrate as partner shipping contact records.
RAYNET CRM
Quote
Odoo CRM
sale.order (quotation state)
1:1RAYNET Quotes with validity dates and line-item pricing map to Odoo sale.order records in draft or sent state. Quote validity dates migrate to sale.order validity_date. Line items migrate as sale.order.line records with product, description, quantity, and unit price. If the Quote was signed, we attach a note indicating the signed status and copy any signature metadata as a custom field x_signed since Odoo handles e-signatures via external integrations.
RAYNET CRM
Custom Fields (Contact and Account)
Odoo CRM
Custom Fields (res.partner)
1:1RAYNET custom fields on Contact and Account objects migrate to Odoo res.partner custom fields. We extract the custom field schema via RAYNET list export, map each field to the equivalent Odoo field type (char, selection, date, float, integer), and pre-create the fields in Odoo via Odoo Studio or data migration script before import. Fields without a direct Odoo equivalent store as x_raynet_cf_{fieldname} char fields for admin review.
RAYNET CRM
Owner / User
Odoo CRM
res.users
1:1RAYNET Users map to Odoo res.users by email match. We extract every distinct owner_id on Contact, Account, Deal, and Activity and resolve against the destination Odoo instance's users list. Any RAYNET Owner without a matching Odoo User enters a reconciliation queue for the customer's Odoo admin to provision before record import proceeds. Inactive RAYNET owners map to Odoo inactive users with a flag in x_raynet_owner_active.
RAYNET CRM
Tag
Odoo CRM
res.partner.category
lossyRAYNET Tags on Contacts and Deals migrate to Odoo res.partner.category (tags) for partner records and crm.lead tag_ids for opportunity records. We extract all distinct tag values, create the corresponding Odoo tag categories, and re-associate them during import. If Odoo tag limits are a concern at scale, we alternatively map tags to a custom multi-select Char field for admin review.
RAYNET CRM
Pipeline Stage
Odoo CRM
crm.stage
lossyRAYNET pipeline stage names, order, and probabilities map to Odoo crm.stage records within each crm.team. We extract the full stage configuration including stage colors (if set) and map probabilities to Odoo's probability field. If RAYNET has multiple pipelines (ENTERPRISE tier), each becomes a separate crm.team in Odoo with its own stage sequence. Stage count limits are not a constraint in Odoo at any tier.
RAYNET CRM
Attachment
Odoo CRM
ir.attachment
1:1Files attached to RAYNET Contacts, Accounts, Deals, and Activities export via RAYNET XLSX export cross-referenced with the record list. We export the file references and URLs, then upload attachments to Odoo ir.attachment records linked via res_model and res_id to the migrated res.partner or crm.lead. Attachment re-association uses the cross-reference ID map built during scoping.
RAYNET CRM
Automations (Builder/Architect)
Odoo CRM
Not migratable — documentation only
1:1RAYNET Automation rules (conditions, triggers, and actions at the Builder and Architect tier) are stored in a RAYNET-specific format with no documented export endpoint. We identify every active automation rule during scoping and deliver a written inventory listing each rule's trigger object, conditions, actions, and Odoo Workflow or automated action equivalent. The customer's Odoo admin rebuilds these post-migration. Skipping this step leaves business processes unautomated in the new platform.
| RAYNET CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Account (Company) | res.partner1:1 | Fully supported | |
| Deal | crm.lead (Opportunity)1:1 | Fully supported | |
| Activity (Calls, Emails, Meetings) | mail.activity1:1 | Fully supported | |
| Sales Order | sale.order1:1 | Fully supported | |
| Quote | sale.order (quotation state)1:1 | Fully supported | |
| Custom Fields (Contact and Account) | Custom Fields (res.partner)1:1 | Fully supported | |
| Owner / User | res.users1:1 | Fully supported | |
| Tag | res.partner.categorylossy | Fully supported | |
| Pipeline Stage | crm.stagelossy | Fully supported | |
| Attachment | ir.attachment1:1 | Fully supported | |
| Automations (Builder/Architect) | Not migratable — documentation only1: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.
RAYNET CRM gotchas
Automation rules do not export or migrate
Pipeline stage count varies by plan tier
API call limits are capped and billed as an add-on
Pricing displayed inconsistently across aggregator sites
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 scoping
We audit the source RAYNET portal across tier (START/PROFESSIONAL/ENTERPRISE), active pipelines, pipeline stage counts, custom fields on Contact and Account objects, active Automation rules, and engagement volume. We pair this with an Odoo edition decision: Community (free, self-hosted) for teams with technical resources; Online or.sh (hosted) for teams preferring managed infrastructure; Enterprise for teams needing official support, advanced reporting, and Studio customisation. The discovery output is a written migration scope document covering record counts per object, custom field schema, pipeline-to-crm.team mapping, and automation audit list.
Schema design and crm.lead stage configuration
We design the destination Odoo CRM schema. This includes provisioning custom fields on res.partner (including x_latitude and x_longitude for GPS coordinates), configuring crm.team records (one per RAYNET pipeline), and defining crm.stage sequences with probability percentages matching RAYNET stage values. We design the Lead versus Opportunity classification rule based on whether the RAYNET Contact has an associated Deal and its pipeline stage. Schema is validated in an Odoo staging database before production migration begins.
Owner and User reconciliation
We extract every distinct RAYNET Owner referenced on Contact, Account, Deal, and Activity records and match by email against the destination Odoo instance's res.users table. RAYNET owners without a matching Odoo user enter a reconciliation queue for the customer's Odoo admin to provision before record import proceeds. Owner assignments on records cannot be resolved without active user records in Odoo, so this step gates all subsequent import phases.
Sandbox migration and data reconciliation
We run a full migration into an Odoo test database using production-equivalent data volume. The customer's CRM admin reconciles record counts (Contacts in, Accounts in, Deals in, Activities in), spot-checks 25-50 records against the RAYNET source for field accuracy and GPS coordinate preservation, and signs off the schema and mapping before production migration begins. GPS coordinate preservation is validated explicitly since it requires a custom field approach not native to Odoo.
Production migration in dependency order
We run production migration in record-dependency order: res.users (manual provisioning validated), res.partner parent records (RAYNET Accounts as company-type partners), res.partner child records (RAYNET Contacts linked to parent), crm.lead opportunities (RAYNET Deals with crm.team and stage resolved), sale.order quotations and orders (RAYNET Quotes and Sales Orders), mail.activity history (RAYNET Activities via chunked XML-RPC or base_import), ir.attachment re-association (RAYNET file references cross-referenced to migrated record IDs). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze RAYNET write access during cutover, run a final delta migration of records modified during the migration window, then set Odoo CRM as the system of record. We deliver the automation inventory document to the customer's Odoo admin team with Odoo Workflow and automated action equivalents for each RAYNET rule. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's sales team. We do not rebuild RAYNET Automations as Odoo Workflow inside the migration scope; that is documented for the customer's admin or an Odoo implementation partner.
Platform deep dives
RAYNET CRM
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 RAYNET CRM 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
RAYNET CRM: Not publicly documented; base limit expandable in 10,000-request/day blocks for $50/month.
Data volume sensitivity
RAYNET CRM 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 RAYNET CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your RAYNET CRM 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 RAYNET CRM
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.