CRM migration
Field-level mapping, validation, and rollback between Textedly and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Textedly
Source
Odoo CRM
Destination
Compatibility
8 of 13
objects map 1:1 between Textedly and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Textedly to Odoo CRM is a schema restructuring, not a record copy. Textedly stores subscriber data as flat contact records without a native company or account concept; Odoo CRM requires Contacts to be linked to an Account or created independently. We resolve that mismatch by building Odoo Accounts from Textedly address fields at migration time, linking each Contact to its parent Account, and preserving the original Tags as Odoo Tags for segmentation. Unsubscribe status carries over as a custom field since Odoo does not have a native SMS opt-out mechanism. We flag contacts with zero delivery history as potentially carrier-suppressed so the destination does not inherit invalid numbers. Auto-responders, keyword configurations, and drip campaign logic are not migrated as code; we deliver a written automation inventory for the customer's Odoo admin to rebuild using Odoo Automated Actions and Mass Mailings. Pricing shifts from Textedly's per-message model to Odoo's per-user model, which reduces cost for organizations with large subscriber lists and small sales teams.
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 Textedly 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.
Textedly
Subscriber
Odoo CRM
Contact
1:1Textedly Subscribers map to Odoo CRM Contacts with Phone (mobile) as the primary identifier. The following Textedly fields map directly: First Name, Last Name, Email, Address, City, State, ZIP, Birth Date. We map Phone to the Contact's mobile phone field and use it as the dedupe key during import to prevent duplicate contacts. Tags from Textedly (derived from Groups) are preserved as Odoo Tags attached to each Contact record. Any Textedly custom personalization fields export as values we map to Odoo custom contact fields created before migration.
Textedly
Company Name (address field)
Odoo CRM
Account
1:manyTextedly's Company Name field on a Subscriber record does not represent a full company entity — it is a free-text field. We evaluate the data quality during scoping: if the Company Name field is populated consistently across the subscriber list, we create Odoo Account records for each unique company name and link the corresponding Contacts. If the field is sparsely populated or contains informal names, we skip Account creation and import Contacts as standalone records. The customer decides the strategy during scoping based on data quality analysis.
Textedly
Group
Odoo CRM
Tag
1:1Textedly Groups segment subscribers for targeted campaigns. We export group membership and convert each group to an Odoo Tag attached to the corresponding Contact. Textedly does not support group hierarchy — groups are flat lists — so the mapping is direct. Tags in Odoo are used for segmentation in the CRM pipeline view and in mass mailing filters. The customer specifies whether group names should be prefixed or cleaned during import.
Textedly
Keyword
Odoo CRM
Automated Action (configuration)
lossyTextedly Keywords trigger opt-in flows and are tied to short codes. We export keyword-to-autoresponder mappings as structured automation records with the keyword, trigger condition, and associated message body. Keywords in Textedly are short-code-bound and cannot be transferred to Odoo (phone numbers and short codes do not migrate). We document the keyword configuration in the automation rebuild guide so the customer's Odoo admin can recreate the opt-in logic using Odoo Automated Actions triggered on Contact creation with the appropriate filter conditions.
Textedly
Auto-Responder
Odoo CRM
Mail Template (configuration)
lossyTextedly Auto-Responders are time-based or keyword-triggered message chains attached to specific keywords or subscriber actions. We export the message body, delay interval, and trigger condition as structured automation data. Odoo Mail Templates provide the message body and merge field substitution (using {{object.field}} syntax). Automated Actions in Odoo can trigger a Send Email action or a Create Activity action based on record conditions. Complex branching auto-responders with conditional logic do not map directly; we document the full step sequence in the automation handoff so the admin rebuilds the flow using Odoo Automated Actions and Mail Templates.
Textedly
Drip Campaign / Sequence
Odoo CRM
Scheduled Action + Mass Mailing (configuration)
lossyTextedly Drip Campaigns are time-based automated message chains sent to subscribers over a defined interval. We export the campaign step order, delay between messages, message content, and audience filter. Odoo does not have a native SMS drip campaign object; the equivalent is a combination of Mass Mailings (sent via the configured outgoing mail server or integrated SMS gateway) and Scheduled Automated Actions that trigger each step. We document the complete drip sequence in the automation rebuild guide with step numbers, delays, and message content, enabling the admin to rebuild using Odoo Mass Mailings and Automated Actions.
Textedly
MMS Media URL
Odoo CRM
Custom Field (attachment URL)
1:1Textedly MMS messages attach images and media referenced by URLs. We preserve MMS media URLs as a custom Text field on the Contact record (e.g., last_mms_url__c). Odoo does not have a native MMS storage object in the CRM module. If the customer uses an Odoo-integrated SMS gateway (Twilio, MessageBird, or similar), media URLs can be passed as variables in the SMS send action. We note this in the technical notes and recommend a post-migration review of media attachment handling.
Textedly
Subscribed / Unsubscribed Status
Odoo CRM
Opted Out of Mailing (custom field)
1:1Textedly exports subscriber status as a binary flag with no timestamp. We map the status to a custom boolean field on the Contact record (e.g., sms_unsubscribed__c) set to True for unsubscribed contacts and False for active subscribers. We flag the absence of an unsubscribe timestamp as a limitation: Odoo mailing lists respect the opt-out flag for email sends, but the date of opt-out is not available from the source export, which affects re-engagement campaign targeting. We recommend the admin document any contacts with recent opt-outs manually if that date is commercially significant.
Textedly
Personalization Fields
Odoo CRM
Custom Contact Fields
1:1Textedly personalization tokens (First Name, Last Name, Email, Company, City, State, Birth Date, and any custom fields) are stored per subscriber and inserted at message send time. We export the field values and create equivalent custom fields on the Odoo CRM Contact model before migration. Custom field API names follow Odoo's naming convention (snake_case). These fields are then available for use in Odoo Mail Templates using the {{object.field_name}} merge field syntax. Birth Date maps to a Date field on Contact.
Textedly
Campaign (metadata and stats)
Odoo CRM
Custom Field (campaign history)
1:manyTextedly Campaigns aggregate sent messages, delivery receipts, and response logs. Odoo CRM does not have a native SMS campaign object with delivery statistics. We export campaign metadata (name, send date, total sent, delivered count, response count) and aggregate delivery statistics per subscriber, then write these as custom fields on each Contact record (e.g., last_sms_sent_date__c, sms_campaign_count__c). Campaign-level delivery reports are documented as a written inventory for the customer's admin to reference for historical reporting.
Textedly
User / Team Member
Odoo CRM
User
1:1Textedly Users with campaign and contact ownership map to Odoo User records by email match. We export user name, email, and role. Role semantics differ between platforms: Textedly roles are campaign-level (owner, admin, member), while Odoo User access rights are app-scoped (CRM User, Sales User, Admin). We create a role-mapping table during scoping and flag any Textedly role that has no direct Odoo equivalent. The customer's Odoo admin provisions Users before the production migration phase.
Textedly
Custom Field (subscriber-level)
Odoo CRM
Custom Field (Contact model)
1:1Textedly allows custom personalization fields per subscriber beyond the standard set. We export all active custom field names, data types, and values from the subscriber export. Before migration, we create matching custom fields on the Odoo CRM Contact model using Odoo Studio (for in-app configuration) or via XML data migration for enterprise-grade deployment. Field types are mapped: text to Char, number to Float or Integer, date to Date. The customer's Odoo admin validates field creation before the production phase.
Textedly
Message Template
Odoo CRM
Mail Template
1:1Textedly Message Templates (saved outbound message bodies used across campaigns) map to Odoo Mail Templates. We export template name and body content including any personalization token placeholders. In Odoo, Mail Templates use the Jinja-style {{object.field}} syntax for merge fields; we convert Textedly's token format to Odoo's format during the transform step. Templates are assigned to the corresponding Mass Mailing configuration or Automated Action for use in drip campaign rebuilds.
| Textedly | Odoo CRM | Compatibility | |
|---|---|---|---|
| Subscriber | Contact1:1 | Fully supported | |
| Company Name (address field) | Account1:many | Fully supported | |
| Group | Tag1:1 | Fully supported | |
| Keyword | Automated Action (configuration)lossy | Fully supported | |
| Auto-Responder | Mail Template (configuration)lossy | Fully supported | |
| Drip Campaign / Sequence | Scheduled Action + Mass Mailing (configuration)lossy | Fully supported | |
| MMS Media URL | Custom Field (attachment URL)1:1 | Fully supported | |
| Subscribed / Unsubscribed Status | Opted Out of Mailing (custom field)1:1 | Fully supported | |
| Personalization Fields | Custom Contact Fields1:1 | Mapping required | |
| Campaign (metadata and stats) | Custom Field (campaign history)1:many | Fully supported | |
| User / Team Member | User1:1 | Fully supported | |
| Custom Field (subscriber-level) | Custom Field (Contact model)1:1 | Fully supported | |
| Message Template | Mail Template1: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.
Textedly gotchas
Free trial users cannot bulk upload subscribers
Per-message pricing creates variable billing
Phone number suppression without user notification
Unsubscribe status is binary and not date-stamped
Canadian users require manual migration support
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
Source audit and scoping
We audit the Textedly account across subscriber count, group count, active keywords, auto-responder configurations, drip campaign count, message template library, and MMS usage. We run a preliminary data quality report on the export covering address field completeness, company name consistency, duplicate phone numbers, and suppressed number indicators. We deliver a scoping document with record counts per object, data quality findings, and an Odoo app recommendation (CRM only, CRM + Sales, or full Odoo suite) based on the customer's operational scope.
Odoo environment provisioning and schema design
We provision the Odoo environment (Odoo Online, Odoo.sh, or on-premise based on the customer's hosting preference) and install the required apps. We create all custom fields on the Contact model matching the Textedly custom field set, configure picklist values for Tags, and design the Account creation strategy based on the scoping decision. If the customer uses an SMS gateway post-migration, we note the configuration requirement for later implementation.
Sandbox migration and reconciliation
We run a full migration into an Odoo test environment using representative data volume. The customer reconciles record counts (Contacts imported, Accounts created if applicable, Tags applied), spot-checks 25-50 randomly selected Contacts against the Textedly source, and validates custom field population. Data quality issues (missing emails, duplicate phones, inconsistent company names) are documented and corrected before production migration. The customer signs off on the sandbox results before cutover proceeds.
Production migration — Contact and Tag import
We run the production migration in dependency order: Accounts (if the company strategy is confirmed), then Contacts with Phone as the dedupe key, Tags applied from Textedly Groups, and custom fields populated from Textedly personalization and subscriber data. Suppressed numbers are isolated in a separate import batch and flagged in the delivery manifest. Each import phase emits a row-count reconciliation report and a field-population percentage summary.
Automation inventory delivery and gateway handoff
We deliver the written automation rebuild guide covering every active Textedly keyword, auto-responder, and drip campaign with step-by-step instructions for Odoo Automated Actions and Mass Mailings. The SMS gateway integration plan is delivered as a separate technical note. The customer's Odoo admin reviews the automation guide and begins rebuild using the Odoo Studio interface or with an Odoo partner if the configuration is complex.
Cutover, delta migration, and hypercare
We freeze Textedly writes during the cutover window, run a final delta migration for any records modified between the initial export and cutover, then mark Odoo as the system of record. We deliver the final reconciliation report with record counts, suppression list, and automation inventory. We provide a two-week hypercare window to resolve post-cutover data issues raised by the customer's team. Post-hypercare support, workflow rebuild assistance, SMS gateway configuration, and user training are outside standard migration scope and are available as separate engagements.
Platform deep dives
Textedly
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Textedly and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Textedly and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Textedly 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
Textedly: Not publicly documented.
Data volume sensitivity
Textedly 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 Textedly to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Textedly 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 Textedly
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.