CRM migration
Field-level mapping, validation, and rollback between Textline and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Textline
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Textline and Odoo CRM.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from Textline to Odoo CRM is a platform-type migration: Textline is a team SMS inbox built around phone-number-threaded conversations and agent assignment, while Odoo CRM is a full sales management suite with Leads, Opportunities, and integrated ERP modules. There is no Deal or Opportunity object to migrate because Textline does not manage pipeline stages. We map Contacts to Odoo Partners (res.partner), preserve Conversation history as Partner Chats or Activity Tasks on each contact record, and map Agents to Odoo Users. Routes, Automations, and Announcement logic do not migrate via API; we document these as workflow gaps and deliver an Odoo Automated Actions and CRM Team assignment inventory for the customer's admin to rebuild post-migration. Large conversation histories require per-conversation API pagination that extends the extraction phase beyond a standard CRM pull.
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 Textline 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.
Textline
Contact
Odoo CRM
res.partner
1:1Textline Contacts in the Address Book map to Odoo res.partner records. The primary phone number becomes the partner's phone and mobile fields; email maps directly. Tags on Textline Contacts migrate as res.partner.category records linked via res.partner.category.rel. We use the contact's phone number as the deduplication key during import to prevent duplicate partner records in Odoo.
Textline
Conversation
Odoo CRM
mail.message / crm.lead.task
1:1Textline conversations are SMS threads tied to a contact's phone number. We migrate each message as a mail.message record linked to the resolved res.partner via the partner's phone number lookup. Message direction (inbound/outbound), timestamp, body content, and agent attribution transfer. MMS attachments migrate as ir.attachment records linked to the message where URLs remain accessible. This phase requires per-conversation pagination and can extend extraction time significantly for accounts with long message histories.
Textline
Department (Phone Number)
Odoo CRM
crm.team
lossyTextline Departments group phone lines by location or function. We map each Department to an Odoo crm.team record with the department's phone numbers preserved as a custom field on the team. The team lead maps from the department's primary agent assignment. Teams without a clear Odoo equivalent are mapped to a custom char field on res.partner to preserve the source grouping.
Textline
Agent
Odoo CRM
res.users
1:1Textline Agents map to Odoo res.users. We match agents by email address. Each agent's department assignment in Textline maps to the corresponding crm.team membership in Odoo. Permissions and custom roles in Textline are documented for manual replication in Odoo's access rights configuration (Settings > Users > Access Rights). Active agents without matching Odoo users are held in a reconciliation queue for admin provisioning before record import.
Textline
Custom Address Book Fields
Odoo CRM
ir.model.fields (custom on res.partner)
lossyTextline custom fields on Contacts (Standard and Pro plans only) map to Odoo custom fields on res.partner. We pre-create the destination fields with matching types (char, selection, date, etc.) via Odoo's settings or direct SQL during the schema phase. Custom field values migrate as literal values against the new field names. If the Textline account is on Essentials, no custom fields exist to migrate.
Textline
Message Template
Odoo CRM
mail.template
1:1Textline canned reply templates export with their shortcut codes and body content. We deliver these as a CSV inventory of template names and bodies. Odoo mail.template requires manual creation in Settings > Technical > Email > Templates because template configuration includes WYSIWYG body building, signature placement, and recipient model scoping that cannot be fully automated across platforms.
Textline
Tag
Odoo CRM
res.partner.category
1:1Tags applied to Textline Contacts migrate as res.partner.category records. Tag names and taxonomy structure (hierarchical if applicable) are preserved as-is. We create the categories in Odoo before importing contacts and resolve the many-to-many relationship via res.partner.category.rel during the contact import phase.
Textline
Announcement
Odoo CRM
mail.mass_mailing
1:1Textline Announcements are bulk outbound messages sent to contact lists. We export the announcement body, send timestamp, and contact list membership. In Odoo, Announcements map to mail.mass_mailing records, which require the customer to configure the mailing list (mailing.list) and select a compatible email template. The sending mechanism must be replicated in Odoo because the actual send is a platform action rather than a stored record.
Textline
Attachment
Odoo CRM
ir.attachment
1:1MMS attachments within Textline conversations are referenced by URL in message records. We preserve attachment URLs and migrate them as ir.attachment records in Odoo linked to the corresponding mail.message via ir.attachments.res.model and res_id. File re-download and re-hosting depends on whether the attachment URLs remain accessible post-migration from Textline; URLs that expire or require authentication may need manual re-upload by the customer's team.
Textline
Routes
Odoo CRM
crm.team (assignment rule inventory)
1:1Textline Routes assign inbound messages to agents or departments based on routing rules. Routes are not exposed via the Textline public API, so they cannot be migrated programmatically. During discovery we document the routing logic (keyword triggers, time-based rules, department assignments) and deliver a written inventory of Routes with recommended equivalents in Odoo's CRM Team assignment rules or Server Actions. The customer's admin recreates these manually post-migration.
Textline
Automations
Odoo CRM
base.automation / ir.actions.server
1:1Textline Automations trigger on keywords, time, or contact actions. The automation rules (trigger conditions, action steps, delay logic) are documented during discovery and delivered as a written Odoo Automated Actions and Server Actions inventory. Odoo's base.automation model handles scheduled and event-triggered automations, but the trigger conditions and action set differ from Textline's builder model. Admin rebuild is required; we do not migrate automation logic as executable code.
Textline
Metrics (NPS, CSAT, Agent Stats)
Odoo CRM
none
1:1Textline provides aggregated performance metrics including NPS scores, CSAT surveys, and agent statistics. These are reporting aggregates stored outside the contact record and have no migration target in Odoo CRM's standard data model. We note the existence of these reports in the discovery output and recommend exporting them as PDF or CSV from Textline for archival purposes.
| Textline | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Conversation | mail.message / crm.lead.task1:1 | Fully supported | |
| Department (Phone Number) | crm.teamlossy | Fully supported | |
| Agent | res.users1:1 | Fully supported | |
| Custom Address Book Fields | ir.model.fields (custom on res.partner)lossy | Mapping required | |
| Message Template | mail.template1:1 | Fully supported | |
| Tag | res.partner.category1:1 | Fully supported | |
| Announcement | mail.mass_mailing1:1 | Fully supported | |
| Attachment | ir.attachment1:1 | Fully supported | |
| Routes | crm.team (assignment rule inventory)1:1 | Not supported | |
| Automations | base.automation / ir.actions.server1:1 | Mapping required | |
| Metrics (NPS, CSAT, Agent Stats) | none1: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.
Textline gotchas
API access requires Standard or Pro plan
HIPAA compliance is a paid add-on with separate configuration
Conversation export requires per-conversation manual action
Routes are not exposed via the public API
Custom address book fields are tier-gated
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 plan verification
We audit the Textline account across plan tier (Essentials/Standard/Pro), Contact volume, Department count, agent count, active Routes, active Automations, message template inventory, custom field definitions, and conversation history depth. We verify API access status and request elevated permissions for data extraction if needed. For healthcare customers, we confirm HIPAA plan activation and document any PHI scope. The discovery output is a written migration scope, a source-object inventory, and an API access confirmation checklist.
Schema design and Odoo environment preparation
We design the destination Odoo schema in a staging environment. This includes creating custom fields on res.partner to match Textline custom address book fields, provisioning crm.team records mapped from Textline Departments, configuring res.users records for each Textline Agent, and setting up mail.mailing.list for Announcement replacement. We validate the schema with a small subset of records before production migration begins. Any Tags taxonomy is pre-created in Odoo so that the many-to-many relationship resolves at import time.
Owner and user reconciliation
We extract every distinct Agent referenced in Textline Conversations, Contact assignments, and Department leadership roles and match by email against the Odoo destination's res.users table. Agents without a matching Odoo user go to a reconciliation queue. The customer's Odoo admin provisions any missing users before record import resumes because res.users references are required for agent attribution on migrated message records. We also reconcile the contact deduplication strategy (phone number as primary key) against any existing Odoo partner records to avoid duplication during import.
Contact, custom field, and tag migration
We run the primary contact import using Textline's Address Book export. Each contact resolves to a res.partner record with name, phone, email, and custom field values mapped to the pre-created Odoo fields. Tags resolve via res.partner.category.rel. For Standard and Pro accounts, custom field extraction is included. For Essentials accounts, we extract only standard fields and note the absence of custom fields in the reconciliation report. This phase emits a row-count reconciliation comparing Textline contact count against Odoo res.partner count before proceeding.
Conversation history migration with pagination
We extract conversation history from Textline using per-conversation API calls with batch processing and exponential backoff on rate-limit responses. Each SMS message maps to a mail.message record linked to the resolved res.partner by phone number. Agent attribution resolves via res.users lookup by email. MMS attachments migrate as ir.attachment records where URLs are accessible. This phase is the longest in the migration and is executed in chunks with reconciliation checkpoints after every 5,000 messages to detect and recover from silent failures.
Cutover, validation, and workflow gap handoff
We freeze Textline writes during the cutover window and run a final delta migration of any records modified during the migration run. We enable Odoo as the system of record and deliver the Routes and Automations gap report to the customer's admin team for manual rebuild in Odoo's Automated Actions and CRM Team configuration. We provide a one-week hypercare window for reconciliation issues. We do not rebuild Textline Automations or Routes as Odoo automations inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Textline
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Textline and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Textline and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Textline 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
Textline: Not publicly documented.
Data volume sensitivity
Textline 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 Textline to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Textline 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 Textline
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.