CRM migration

Migrate from Dashly to Odoo CRM

Field-level mapping, validation, and rollback between Dashly and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Dashly logo

Dashly

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

67%

8 of 12

objects map 1:1 between Dashly and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Dashly to Odoo CRM is a structural migration from a conversational marketing platform to a full ERP-adjacent CRM. Dashly stores leads as unified contact records with threaded conversation arrays, while Odoo CRM uses a single crm.lead table with a type field separating unqualified Leads from qualified Opportunities, and stores partner data in res.partner rather than a separate Contact object. We resolve the Dashly conversation-to-lead association during scoping, map conversation metadata to Odoo's mail.thread model, and preserve message timestamps and participant attribution. Visitor sessions, ephemeral behavioral data, and leadbot automation configs do not migrate as functional equivalents; we deliver exported JSON configs and a written rebuild guide for the customer's Odoo admin. Odoo Community edition is free and self-hosted, while Odoo Online and Enterprise are subscription-based, making pricing substantially different from Dashly's visitor-quota model.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Dashly logo

Dashly

What's pushing teams away

  • G2 reviewers report that Dashly's interface is not intuitive, with a steep learning curve that makes basic tasks like editing workflows and navigating the inbox time-consuming.
  • Users encounter difficulties deleting records and contacts cleanly, leading to data clutter and frustration when attempting to maintain accurate contact databases.
  • The platform's editing workflow for conversations and automations is described as cumbersome, forcing support teams to work around UI limitations rather than through them.
  • Email deliverability and sending issues appear in negative reviews, with some users reporting that outbound email features fail without clear explanation or workaround.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Dashly objects map to Odoo CRM

Each row shows how a Dashly 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.

Dashly

Lead

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Dashly Leads map directly to Odoo crm.lead records. Standard properties (name, email, phone, company) map to crm.lead fields name, email_from, phone, and partner_name respectively. Custom Lead properties are inventoried during discovery and created as ir.model.field definitions on crm.lead before migration. The crm.lead type field defaults to lead for unqualified records and is set to opportunity when a deal amount or pipeline assignment exists. We use Odoo's XML-RPC API with create() calls to insert records in batches of up to 100, handling field type mapping (date fields, many2one lookups, char/text fields) per Odoo's ORM expectations.

Dashly

Company

maps to

Odoo CRM

res.partner

1:1
Fully supported

Dashly Company records map to Odoo res.partner with is_company=True. Dashly's standard company fields (name, domain, industry) map to partner name, website, and industry_id respectively. Custom company properties migrate as custom fields on res.partner. The res.partner record is created before any Lead migration so that the crm.lead partner_id lookup (many2one) is satisfied at insert time. If a Dashly Lead references a Company, we create the partner first, then link the lead via partner_id on crm.lead.

Dashly

Conversation

maps to

Odoo CRM

mail.thread

1:many
Fully supported

Dashly Conversations attached to a Lead map to Odoo mail.thread records linked to the corresponding crm.lead. Odoo does not have a native conversation object; instead, each crm.lead gets a mail.thread record that accumulates mail.message child records. Conversation metadata (status, assignee, source channel, created timestamp) is stored as mail.thread custom fields or crm.lead extension fields. Multiple Dashly conversations per Lead become multiple thread entries within the same lead's conversation history in Odoo.

Dashly

Message

maps to

Odoo CRM

mail.message

1:1
Fully supported

Dashly Messages within Conversations map to Odoo mail.message records as child records of the crm.lead's mail.thread. Each message preserves sender attribution (agent name or visitor identifier), body content, timestamp, and delivery channel via mail.message body, author_id, date, and subtype fields. We reconstruct thread ordering by setting mail.message date to the original Dashly timestamp. Messages from Dashly that reference a deleted or unmigrated Lead are held in a dead-letter queue for manual review.

Dashly

User (Agent)

maps to

Odoo CRM

res.users

1:1
Fully supported

Dashly User accounts (agents and admins) map to Odoo res.users by matching on email address. We extract Dashly user records including name, email, role, and availability status. Inactive Dashly users map to Odoo Portal users or inactive res.users records depending on whether the customer wants historical attribution preserved. The Odoo res.users records must exist before any crm.lead owner assignment because crm.lead user_id is a many2one to res.users.

Dashly

Company

maps to

Odoo CRM

res.partner (contact)

1:many
Fully supported

Dashly Contacts nested under Companies in Dashly map to Odoo res.partner records with is_company=False and parent_id pointing to the company partner record. Dashly contact records (name, email, phone, job title) map to res.partner name, email, phone, and function respectively. This creates the Odoo standard partner hierarchy: company as the parent partner with individual contacts as child records. If Dashly stored contacts without a parent company, they migrate as standalone res.partner records without a parent_id.

Dashly

Tag

maps to

Odoo CRM

crm.tag

1:1
Fully supported

Tags applied to Dashly Leads and Companies map to Odoo crm.tag records attached via crm.lead.tag_ids (many2many). Dashly tag names become crm.tag names, deduplicated at migration time to avoid duplicate Odoo tags. If a Dashly tag name conflicts with an existing Odoo crm.tag, we merge them under the existing tag ID. Tags on Companies map to res.partner category_id (many2many to res.partner.category) for consistency.

Dashly

Custom Properties

maps to

Odoo CRM

ir.model.field (custom fields on crm.lead and res.partner)

1:1
Mapping required

Dashly custom fields on Leads and Companies are inventoried during discovery, including data type, required status, and all unique values for picklist fields. We create corresponding custom fields on crm.lead and res.partner via Odoo's ir.model.data before migration begins. Char fields map to char, text areas to text, dates to date, numbers to float or integer, and multi-select or checkbox fields to char or many2many depending on Odoo version. All custom field values migrate as part of the Lead and Company insert phases.

Dashly

Leadbot Configurations

maps to

Odoo CRM

Server Action / Automated Action (documentation only)

lossy
Fully supported

Dashly Leadbots are structured automation configs with trigger conditions, dialogue trees, and action sequences stored as JSON. Odoo does not share this schema. We export the full bot configuration as structured JSON files (one per Leadbot) and deliver a written rebuild guide mapping each Dashly trigger condition to an Odoo Automated Action or Server Action with the equivalent logic. The automation rebuild itself is manual and not within standard migration scope. The exported JSON files are delivered as part of the migration handoff package.

Dashly

Triggered Message Rules

maps to

Odoo CRM

Automated Action (documentation only)

lossy
Fully supported

Dashly triggered message rules define automated outbound sequences tied to visitor behavior or time delays. The trigger rules and message content are exported as structured automation data. Odoo's Automated Actions support time-based triggers and write actions but do not have native email sequence cadence logic. We deliver an exported JSON file of all triggered message configurations and a written mapping guide recommending the closest Odoo Automated Action equivalent for each rule. The rebuild is a manual admin task post-migration.

Dashly

Knowledge Base Articles

maps to

Odoo CRM

document.page

1:1
Mapping required

Dashly Knowledge Base articles (title, body content, category associations) map to Odoo document.page records. Article body content migrates as document.page content. Dashly article categories map to document.folder or parent document.page hierarchy depending on the target Odoo version. SEO settings (meta title, meta description, URL slug) are preserved in document.page custom fields since Odoo's document.page does not have native SEO fields. The customer should review and republish migrated articles in Odoo's document management module after migration.

Dashly

Team Inbox Assignments

maps to

Odoo CRM

crm.team

1:1
Mapping required

Dashly conversation assignee data and team routing rules map to Odoo crm.team records and crm.lead.team_id / user_id assignments. We extract Dashly team inbox assignments and map them to Odoo crm.team structure (name, member_user_ids). Dashly assignee agents map to res.users and are linked to crm.team as member_user_ids. Conversation routing rules are exported as configuration data and delivered as a written mapping document; the actual crm.team setup is configured in Odoo during migration setup.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Dashly logo

Dashly gotchas

High

Visitor-based pricing affects migration scoping

High

No public bulk export endpoint

Medium

Leadbot and triggered message configs require manual rebuild

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Dashly has no bulk export endpoint

    Dashly's REST API does not expose a bulk export endpoint for Leads, Companies, Conversations, or Messages. Data must be retrieved via paginated API requests using optional field inclusion parameters (include_{field_name}=true). We chunk requests per endpoint, page through results sequentially, and handle 429 rate-limit responses with exponential backoff. For accounts with extensive conversation history (50,000+ messages), this adds time to the migration timeline and requires careful rate-limit management to avoid API throttling during extraction. We estimate extraction time during scoping based on the observed pagination depth.

  • Visitor sessions and behavioral data do not migrate

    Dashly's visitor session data (page views, referrer URLs, UTM parameters, session duration) is ephemeral and aggregated by Dashly's analytics engine. This data is not stored as structured records that can be exported via API. It has no migratable equivalent in Odoo CRM, which does not have native visitor tracking. We exclude visitor session data from the migration scope and flag this clearly in the scope document. Companies that rely on visitor behavioral data for lead scoring or attribution will need to re-implement tracking via an Odoo-compatible analytics tool post-migration.

  • Odoo crm.lead combines Lead and Opportunity in one table

    Odoo CRM uses a single crm.lead model where the type field (lead or opportunity) determines the record's lifecycle stage, rather than separate Lead and Opportunity objects. Dashly has a single Lead record type with no equivalent Opportunity distinction. We design the crm.lead type assignment during scoping based on whether the Dashly Lead has an associated deal amount, pipeline stage, or expected revenue field. Leads without these map as type=lead; Leads with deal data map as type=opportunity and land in the Odoo CRM pipeline with stage assignment. This design decision must be agreed upon before production migration begins.

  • Leadbots and triggered messages require manual rebuild

    Dashly Leadbots and triggered message rules are stored as structured automation configurations with trigger conditions, dialogue trees, and message sequences. Odoo Automated Actions support basic record-triggered and time-based triggers but do not share the same automation schema. We export the bot and trigger configurations as JSON and deliver a written rebuild guide with Odoo equivalents, but the actual automation rebuild is a manual post-migration task for the customer's Odoo admin. We do not build Odoo server actions or automated actions as part of the migration deliverable.

  • Odoo requires schema deployment before data migration

    Odoo custom fields (added via Studio or direct ir.model.field creation) and crm.team structure must be deployed to the target database before any data import begins. Unlike some CRMs that accept unknown fields on import, Odoo's XML-RPC API rejects writes to undefined fields. We run schema deployment as a separate phase before the data migration phase, using Odoo's ir.model and ir.model.fields API to pre-create every custom field mapped from Dashly. This adds a setup step to the timeline that is not required in CRMs with looser schema enforcement.

Migration approach

Six steps for a successful Dashly to Odoo CRM data migration

  1. Discovery and data audit

    We audit the Dashly account across all objects: Lead count, Company count, conversation thread volume (total messages), User count, active Tags, Knowledge Base article count, and Leadbot configuration count. We check the current Dashly plan tier and visitor quota during scoping because exceeding the visitor quota during the migration window (when data is accessed via API) does not suspend service but triggers per-visitor overage fees. We produce a written migration scope document listing all source objects, estimated record counts per object, any known data quality issues, and the custom field inventory derived from Dashly's custom property definitions.

  2. Odoo schema design and custom field creation

    We design the destination Odoo CRM schema before any data import. This includes creating crm.tag records for each unique Dashly tag, creating crm.team records for each Dashly team inbox, and defining custom fields on crm.lead and res.partner via Odoo's ir.model.field for every Dashly custom property discovered during audit. Custom fields are deployed via XML-RPC to the target Odoo database before the data migration phase begins. We configure crm.lead stage pipelines matching any Dashly lead stages identified, and design the lead-to-opportunity type assignment rule based on the customer's deal data presence in Dashly.

  3. Sandbox migration and reconciliation

    We run a full migration into a staging Odoo environment using production-like data volume. The customer reconciles record counts (Leads in, Companies in, res.partner contacts in, mail.message records in, Tags in), spot-checks 25-50 random records against the Dashly source for field-level accuracy, and validates the crm.lead type assignment logic. Any mapping corrections, missed custom fields, or tag deduplication issues are resolved in this phase. Production migration does not begin until the customer signs off on the staging reconciliation report.

  4. User and team provisioning

    We extract every distinct Dashly agent and admin referenced on Conversations and assign them to res.users records in Odoo. Agent names and emails are matched to Odoo users; inactive Dashly agents are mapped to inactive res.users. crm.team membership is configured by mapping Dashly team inbox membership to crm.team member_user_ids. Any Dashly agent without a corresponding Odoo user goes to a reconciliation queue for the customer's admin to provision before the Lead migration phase proceeds.

  5. Production migration in dependency order

    We run production migration in record-dependency order: crm.tag records first (no dependencies), then res.partner (company records), then res.partner child contacts with parent_id linking to company, then crm.lead records with partner_id resolved and type assigned (lead vs opportunity), then mail.thread and mail.message records linked to crm.lead. Each phase emits a row-count reconciliation report before the next phase begins. Custom field values are written as part of each insert call. We use Odoo's XML-RPC batch create (up to 100 records per call) with error logging and retry logic for partial failures.

  6. Cutover, validation, and handoff

    We freeze Dashly writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver the Leadbot and triggered message JSON exports with a written rebuild guide mapping Dashly automation logic to Odoo Automated Actions and Server Actions. We support a one-week hypercare window to resolve reconciliation issues raised by the customer's team. We do not rebuild Dashly automations as Odoo automated actions within the migration scope; that work is a separate engagement or an internal Odoo admin task.

Platform deep dives

Context on both ends of the pair

Dashly logo

Dashly

Source

Strengths

  • All-in-one platform combining live chat, AI leadbots, triggered messaging, and knowledge base in a single tool.
  • Unlimited seats across all paid plans, making it cost-effective for growing support teams without per-user licensing.
  • Visitor-based pricing allows small teams to start at a low monthly cost with overage flexibility.
  • Built-in knowledge base with unlimited articles and SEO settings supports both agent reference and self-service content.
  • Offers a free trial and free Conversation starter plan for evaluation.

Weaknesses

  • G2 reviews consistently describe the interface as unintuitive with a steep learning curve for new users.
  • Deletion workflows are reported as problematic, making it difficult to remove stale records cleanly.
  • Email sending and deliverability features receive recurring complaints in negative reviews.
  • No documented bulk data export endpoint means migration requires API-based extraction or manual workarounds.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Dashly and Odoo CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Dashly and Odoo CRM.

  • Object compatibility

    A

    All 8 core objects map 1:1 between Dashly and Odoo CRM.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Dashly: Not publicly documented.

  • Data volume sensitivity

    B

    Dashly doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Dashly to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Dashly to Odoo CRM data migrations

Answers to the questions buyers ask most during Dashly to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Dashly to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between four and six weeks for accounts under 15,000 Leads, 3,000 Companies, and 50,000 messages with no knowledge base migration. Migrations with larger conversation histories (200,000+ messages), multiple knowledge base article categories, or a complex Odoo multi-team setup move to ten to fourteen weeks because of paginated API extraction time from Dashly, message threading reconstruction, and the Odoo schema pre-deployment phase. Discovery and scoping add two to three weeks on top of the migration execution timeline.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Dashly.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day