CRM migration
Field-level mapping, validation, and rollback between Regal.io and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Regal.io
Source
Odoo CRM
Destination
Compatibility
12 of 14
objects map 1:1 between Regal.io and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Regal.io to Odoo CRM is a structural migration: Regal.io is a voice-AI and event-stream platform where Contacts and their behavioral Events are the primary data model; Odoo CRM uses a traditional Lead-to-Opportunity pipeline with Notes and Activities for history. We extract all Contact records with their Contact Attributes, full Event history, SMS and email threads, Campaign membership, and call transcripts from Regal's single /events endpoint at 300 req/sec. We map Contacts to Odoo Leads (or Contacts attached to a Company depending on qualification status), Events to Odoo Activity records or Notes, and we flag that Journey automations and AI Agent scripts have no Odoo equivalent and must be reconstructed in Odoo Action Rules or a third-party telephony add-on. We do not migrate AI Agent configurations, Journey builders, branded caller ID registrations, or third-party CDP/CRM integration endpoints — these are documented for manual rebuild.
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 Regal.io 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.
Regal.io
Contact
Odoo CRM
Lead (primary) or Contact attached to Company (secondary)
1:manyRegal Contacts map to Odoo Lead by default, with an optional split to Contact+Company for contacts that represent established accounts. The split decision is based on whether the Regal Contact has a company_name attribute or domain-based Company affiliation. We set the Odoo Lead email and phone from Regal's contact attributes, using phone as the primary contact field (Regal requires a phone number for contactability; Odoo tolerates email-only Leads). A custom field regal_contact_id__c preserves the Regal source ID for audit.
Regal.io
Contact Attributes (custom fields)
Odoo CRM
Lead/Contact custom fields
1:1Regal's tenant-specific Contact Attributes (profile fields beyond name, email, phone) are extracted from Regal's API attribute schema before migration. Each attribute is mapped to an Odoo Lead custom field created during schema configuration. Multi-value attributes (arrays, tags) map to Odoo Char or text fields with pipe-delimited values. Date, Boolean, and numeric attribute types map to the equivalent Odoo field types. We note any attributes that have no Odoo equivalent and document them for manual enrichment post-migration.
Regal.io
Event (all types)
Odoo CRM
Activity (mail.message or crm.activity)
1:1Regal Events (call_initiated, call_completed, sms_sent, email_opened, journey_entered, custom event types) map to Odoo mail.message records linked to the Lead via res_id and model fields. The event type becomes a custom field event_type__c; the event timestamp maps to mail.message.date; event properties (duration, disposition, transcript excerpt) map to additional custom fields on the message record. This preserves the behavioral timeline within Odoo's chatter-like activity view. We batch event writes using Odoo's mail.message batch API to handle high-volume event streams.
Regal.io
Campaign
Odoo CRM
CRM Campaign
1:1Regal Campaigns (outbound programs with list selection, cadence, and goal) map to Odoo CRM Campaign records. Campaign membership (which contacts were assigned to which campaign) migrates as Campaign lines or a linked tag on the Lead. Goal metrics (calls attempted, calls answered, conversion rate) are stored as custom fields on the Odoo Campaign. Cadence and list-refresh logic is platform-specific and documented for manual configuration in Odoo's Campaign follow-up rules.
Regal.io
Journey (workflow logic)
Odoo CRM
Action Rules / Server Actions (rebuild required)
1:1Regal Journeys (event-triggered sequences of voice, SMS, and email steps) have no direct Odoo equivalent. We extract Journey logic as a step-by-step conditional rule document during discovery, including trigger conditions, step order, channel (voice/SMS/email), and exit criteria. The document is delivered to the customer's admin for reconstruction in Odoo Action Rules or via a third-party marketing automation integration (such as Mautic or Brevo). Journey-trigger conditions that reference Regal Events map to Odoo mail.message domain filters on the equivalent Activity records.
Regal.io
AI Agent (scripts, decision trees, persona)
Odoo CRM
None (flagged for rebuild)
1:1Regal AI Agent configurations — voice scripts, decision trees, persona settings, and handoff logic — are tied to a proprietary runtime that cannot be exported via API or UI. We do not migrate Agent configurations. We deliver a written inventory of every configured AI Agent with its trigger conditions, branching logic, persona description, and handoff rules. If the customer requires AI agent capabilities in Odoo, they select a compatible VoIP telephony add-on (such as a native Asterisk integration or a third-party CCaaS connector) and rebuild agent logic there.
Regal.io
SMS Thread
Odoo CRM
mail.message (SMS subtype)
1:1Regal SMS conversations (sent and received messages linked to a Contact) map to Odoo mail.message records with a custom SMS channel indicator. We preserve the message direction (inbound/outbound), timestamp, content, and delivery status. Thread continuity in Odoo depends on the mail gateway configuration; we document the required incoming SMS gateway setup so that future SMS flows through Odoo's messaging channel rather than reverting to Regal.
Regal.io
Email Thread
Odoo CRM
mail.message (email subtype)
1:1Regal email thread history attached to Contacts maps to Odoo mail.message records linked to the Lead. Message direction, subject, body, timestamp, and any attachments migrate. Email thread threading (in-reply-to references) is preserved as mail.message parent_id where available. Note that thread continuity in Odoo requires configuring the incoming email gateway (alias domain) post-migration; we document the required configuration steps.
Regal.io
Call Transcript and Recording
Odoo CRM
ir.attachment (transcript) + mail.message (activity note)
1:1Call transcripts from Regal (available depending on Regal's retention settings at time of export) migrate as ir.attachment records linked to the corresponding mail.message activity. The transcript text is also embedded in the mail.message body for immediate visibility in the activity timeline. Call recording files migrate as ir.attachment records linked to the mail.message; audio file availability depends on Regal's media retention policy and is flagged before migration begins.
Regal.io
Branded Caller ID (CNAM)
Odoo CRM
None (flagged for re-registration)
1:1Regal branded caller ID carrier registration details and CNAM configuration per campaign are exported as a configuration document. There is no Odoo-native equivalent for caller ID management because Odoo does not include native telephony. We deliver the registration details (carrier account IDs, number assignments, CNAM text) and recommend a VoIP provider (such as Twilio, Asterisk, or a regional carrier) for re-registration post-migration.
Regal.io
Integrations (CDP/CRM connections)
Odoo CRM
None (reconfiguration required)
1:1Regal's live integrations with Segment, HubSpot, Salesforce, Braze, and Iterable define which contacts are synced and how. We document each active integration endpoint, sync direction, and field mapping during discovery. Post-migration, the customer must reconfigure Odoo's API or webhook integrations with these platforms. If HubSpot or Salesforce is the intended system of record post-migration, we configure Odoo's native bidirectional sync with the relevant platform during the post-migration integration phase.
Regal.io
Custom Object (Regal tenant-defined)
Odoo CRM
Custom Model (ir.model + ir.model.fields)
1:1Regal Custom Objects (tenant-defined schemas beyond standard Contacts, Campaigns, and Events) migrate to Odoo custom models created via the Settings > Technical > Database Structure > Models menu or via data migration scripts. We pre-create the Odoo model with the equivalent field types (Char, Integer, Float, Date, Many2one, One2many) and lookup relationships before data import. Multi-table custom object relationships are resolved using Odoo's Many2one reference fields. Any Custom Object that has a lookup to Regal's native Contact object maps to the corresponding Odoo Lead or Contact record via the regal_contact_id__c source key.
Regal.io
Owner (agent/user in Regal)
Odoo CRM
Res.users
1:1Regal Owners (agents assigned to Contacts and Campaigns) are resolved by email against Odoo's res.users table. Any Regal Owner without a matching Odoo User is held in a reconciliation queue for the customer's admin to provision before record import. Owner assignments on Leads migrate as the Lead's user_id field. This step gates the production migration because OwnerId references are required on most Odoo CRM records.
Regal.io
Contact contactability status
Odoo CRM
Lead stage or active flag
lossyRegal Contactability requires a phone number; contacts without a phone are non-contactable and excluded from Journey triggers. We flag these records during the pre-migration audit and include them in the migration with a custom field contactable__c set to False. In Odoo, these records land as Leads with no phone, which is valid but they will not be reachable by outbound telephony flows unless enriched manually or via a third-party enrichment tool.
| Regal.io | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Lead (primary) or Contact attached to Company (secondary)1:many | Fully supported | |
| Contact Attributes (custom fields) | Lead/Contact custom fields1:1 | Fully supported | |
| Event (all types) | Activity (mail.message or crm.activity)1:1 | Fully supported | |
| Campaign | CRM Campaign1:1 | Fully supported | |
| Journey (workflow logic) | Action Rules / Server Actions (rebuild required)1:1 | Fully supported | |
| AI Agent (scripts, decision trees, persona) | None (flagged for rebuild)1:1 | Fully supported | |
| SMS Thread | mail.message (SMS subtype)1:1 | Fully supported | |
| Email Thread | mail.message (email subtype)1:1 | Fully supported | |
| Call Transcript and Recording | ir.attachment (transcript) + mail.message (activity note)1:1 | Fully supported | |
| Branded Caller ID (CNAM) | None (flagged for re-registration)1:1 | Fully supported | |
| Integrations (CDP/CRM connections) | None (reconfiguration required)1:1 | Mapping required | |
| Custom Object (Regal tenant-defined) | Custom Model (ir.model + ir.model.fields)1:1 | Fully supported | |
| Owner (agent/user in Regal) | Res.users1:1 | Fully supported | |
| Contact contactability status | Lead stage or active flaglossy | 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.
Regal.io gotchas
Regal API is a single-events endpoint
AI Agent scripts and decision trees are non-exportable
No public pricing or documented tier limits
Contact contactability status is phone-number-dependent
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 data audit
We audit the Regal.io account: Contact volume, Contact Attribute schema, Event types and volume per type, Campaign count and membership, active Journeys and AI Agent configurations, SMS/email thread volume, call transcript availability, and active third-party integrations. We run a parallel Odoo discovery — edition (Community vs Enterprise), hosting method (Online vs Odoo.sh vs self-hosted), existing Odoo modules, and current User count. The discovery output is a written migration scope covering record counts per object, attribute schema, and an explicit list of what is in scope and out of scope (AI Agents, Journeys, branded caller ID, integrations). We flag the Odoo edition and hosting method as a gating decision before proceeding.
Schema design in Odoo
We configure the Odoo destination schema before any data import. For Community Edition, we create custom fields via CSV import through Settings > Import. For Enterprise, we use Settings > Technical > Database Structure > Models to create custom fields and configure field types. We create custom fields on res.partner (the base contact model Odoo CRM uses internally) to hold the Regal source ID (regal_contact_id__c), original contactability status, and any non-standard Contact Attributes that have no Odoo default equivalent. We configure Lead tags and stage values to mirror Regal's Campaign structure where applicable.
Sandbox migration and reconciliation
We run a full migration into an Odoo test environment (Odoo Online sandbox database or a duplicated Odoo.sh environment) with production-like data volume. The customer's operations lead reconciles record counts: Contacts imported vs Leads in Odoo, Events mapped vs mail.message records created, SMS threads re-associated correctly, call transcripts accessible. We spot-check 25-50 random Contact-to-Lead mappings against the Regal source. The customer signs off on schema, field mapping, and activity ordering before production migration begins.
Regal export through /events endpoint with sequencing
We export from Regal's single POST /events endpoint using chunked reads at 300 req/sec. We sequence the export as: (1) Contacts with full attribute payloads, (2) Campaigns and membership, (3) Events in chronological order by Contact, (4) SMS and email threads, (5) Call transcripts. For each Contact, we write the regal_contact_id__c as a custom field to enable downstream Event resolution. We run deduplication checks at this stage — Regal's single-endpoint model can produce duplicate Contact records on retry, and we eliminate them before Odoo import.
Production migration in dependency order
We run production migration in strict order: Users (provisioned, validated), Leads (with regal_contact_id__c set, phone validated), Activities (mail.message records linked to Leads via res_id and model), SMS/Email threads (linked to the correct Lead), Call transcripts (as ir.attachment + mail.message body), Custom Objects (last, after Lead lookups are resolved), and Campaign membership (as Lead tags or CRM Campaign lines). Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's batch import API (CSV or JSON-RPC depending on volume) with exponential backoff on rate-limit responses.
Cutover, validation, and automation handoff
We freeze Regal writes during cutover, run a final delta migration for any records modified during the migration window, then set Odoo CRM as the system of record. We deliver the Journey inventory document, AI Agent configuration summary, branded caller ID registration details, and integration reconfiguration checklist to the customer's admin team. We support a one-week hypercare window to resolve reconciliation issues. We do not rebuild Journeys in Odoo Action Rules or AI Agents in a third-party CCaaS layer — those are separate engagements scoped after migration.
Platform deep dives
Regal.io
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Regal.io and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Regal.io and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Regal.io and Odoo CRM.
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
Regal.io: 300 requests per second.
Data volume sensitivity
Regal.io 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 Regal.io to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Regal.io 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 Regal.io
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.