CRM migration

Migrate from e-shot to Odoo CRM

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

e-shot logo

e-shot

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between e-shot and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from e-shot to Odoo CRM is a cross-category migration: e-shot is an email marketing and automation platform built around Contacts and Campaigns, while Odoo CRM is a pipeline-first CRM that happens to include email integration through its mail module. There is no direct object equivalence between the two. We extract e-shot Contacts and their custom field definitions, replicate the merge-tag personalisation logic using Odoo's mail template fallback syntax, transfer HTML email templates as body content in Odoo mail.mail_template, and map campaign audience segments to Odoo CRM tags and mailing list subscriptions. We do not migrate Automated Series, Website Popups, Landing Pages, or the preference centre as functional objects — these have no equivalent architecture in Odoo CRM. We deliver a written inventory of every active Series, Popup, and Landing Page so the customer's Odoo admin can rebuild them using Odoo's automation rules and website builder. Timeline typically lands between four and eight weeks depending on contact volume, custom field complexity, and whether historical campaign reports are required alongside the contact migration.

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

e-shot logo

e-shot

What's pushing teams away

  • Import failures and intermittent system reliability frustrate users — contacts sometimes fail to load and template rendering breaks unpredictably, requiring manual intervention.
  • The analytics interface is widely regarded as dated and unintuitive, prompting teams to export data to external BI tools rather than rely on in-platform reporting.
  • The basic tier caps active Preferences at 25 and Automated Series at 3, which forces growing teams to upgrade or manage within artificially constrained campaign structures.
  • Some users report the platform feels slower than competing email tools during high-volume sends, particularly on the basic tier with lower API rate limits.

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 e-shot objects map to Odoo CRM

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

e-shot

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

e-shot Contacts migrate to Odoo res.partner records. Standard fields (name, email, phone, address) map directly. Custom contact fields defined in e-shot Settings > Contacts field manager are extracted by API and replicated as custom fields on res.partner using Odoo Studio before migration. The merge-tag field name becomes the Odoo field technical name (e.g., *company_name* becomes x_eshot_company_name). We preserve the original merge-tag syntax as a field label so Odoo admins can verify personalisation during template testing.

e-shot

Contact Field (custom)

maps to

Odoo CRM

res.partner custom field (via Studio or data file)

lossy
Fully supported

e-shot's contact field schema is fully customisable. Every custom field definition (name, type, merge-tag syntax) is extracted from the e-shot field manager. Each field is created in Odoo before contact import begins. Picklist-type contact fields in e-shot map to Odoo selection fields; checkbox fields map to boolean; date fields map to date; text fields map to char or text depending on length. We flag any e-shot field type without an Odoo equivalent (e.g., complex multi-value arrays) for manual review during scoping.

e-shot

Merge-tag fallback definitions

maps to

Odoo CRM

mail.mail_template default_value or body QWeb

lossy
Fully supported

e-shot personalisation uses *_fieldname=fallback('text')_* syntax for fields where some contacts lack values. We extract every fallback definition from the contact field manager and replicate them in Odoo's mail.mail_template model. Odoo's mail template system uses Jinja2-style {{partner.x_field}} with optional |default('fallback text') filters. We convert each e-shot fallback to an equivalent Odoo default value on the res.partner field, so contacts without a value render the fallback text without showing raw merge-tag syntax.

e-shot

Campaign

maps to

Odoo CRM

crm.lead (as lead) + tag

1:many
Fully supported

e-shot Campaigns have no direct Odoo equivalent. Each e-shot Campaign maps to a tag on crm.lead records, with the campaign name stored as a tag label (e.g., 'es_campaign_summer-promo'). The campaign audience (the contacts who received the campaign) is identified by tag membership. Campaign subject lines and sender details are not preserved as Odoo records; we document them in the handoff inventory. Campaign content (HTML body) migrates to mail.mail_template if the customer wants to reuse it in Odoo's email composer.

e-shot

Campaign Report

maps to

Odoo CRM

Documented in handoff inventory

1:1
Fully supported

e-shot campaign analytics (opens, clicks, bounces, unsubscribes, delivery health) are pulled as CSV exports from the analytics dashboard and documented in the migration handoff inventory. Odoo CRM does not have native campaign analytics; the customer can import the CSV to Odoo's document management (ir.attachment) or a linked BI tool. We do not create Odoo analytics records from campaign report data because no equivalent schema exists.

e-shot

Email Template

maps to

Odoo CRM

mail.mail.template

1:1
Fully supported

e-shot email templates (HTML with embedded styles and merge tags) migrate as mail.mail.template records in Odoo. We extract template body as HTML content, replace e-shot merge-tag syntax with Odoo's Jinja2 {{partner.field}} equivalents, and set the template model to res.partner. Merge-tag personalisation is preserved as source values for re-enabling in the Odoo mail composer. Image assets embedded in templates are extracted as base64-encoded attachments or converted to Odoo-relative URLs depending on the template complexity.

e-shot

Form / Preference Centre

maps to

Odoo CRM

Documented in handoff inventory

1:1
Fully supported

e-shot Forms and the preference centre store subscription opt-in/out choices and contact field inputs. We export form definitions and per-contact preference data. Opt-in status migrates to the Odoo res.partner x_opted_in field (created during schema setup) and to the mail.mass_mailing.contact mailing list model if Odoo Marketing is installed. The form field structure and layout do not have a direct Odoo equivalent and are documented for the admin to rebuild in Odoo Forms or via Odoo Website builder.

e-shot

Saved Filter

maps to

Odoo CRM

ir.filters

1:1
Fully supported

e-shot Saved Filters define dynamic contact segments using field conditions. We export each filter definition as a set of domain conditions and replicate them as ir.filters records in Odoo scoped to res.partner. Tier limits from e-shot (basic: 10, pro: 25, omni: unlimited) do not apply in Odoo. Complex saved filters with multi-condition logic (AND/OR grouping) are translated to Odoo domain syntax and validated against the migrated field names.

e-shot

Tag

maps to

Odoo CRM

res.partner category

1:1
Fully supported

e-shot Tags label contacts for segmentation without a formal taxonomy. Tags are stored as tag-name values on contact records and extracted during export. They map to res.partner.category records in Odoo. We deduplicate tag names (e.g., 'vip' and 'VIP' become one category) and preserve tag assignment on each contact during import. Tags used for campaign audience targeting become the tag-on-lead pattern described in the Campaign mapping.

e-shot

Automated Series

maps to

Odoo CRM

Documented in handoff inventory

1:1
Mapping required

e-shot Automated Series are workflow-based email sequences with trigger conditions, delays, and branching logic. Odoo CRM does not have a native cadence sequencer equivalent to Automated Series. We export the full Series definition (trigger type, conditions, steps, delays, email content) as a written inventory document. The customer's Odoo admin rebuilds them using Odoo CRM automation rules (server actions and automated actions on crm.lead) or the Odoo Marketing app if installed. We do not migrate Automated Series as functional records.

e-shot

Landing Page

maps to

Odoo CRM

Documented in handoff inventory

1:1
Fully supported

e-shot Landing Pages are tier-gated (basic: 0, pro: 25, omni: 100) and store published page content and form elements. Odoo does not have a direct landing page management module within CRM. If Odoo Website is installed, landing pages can be rebuilt there; otherwise we document the page URL, content structure, and form field mapping for the admin to rebuild. We export landing page content as HTML files and form field definitions in the handoff inventory.

e-shot

Website Popup

maps to

Odoo CRM

Documented in handoff inventory

1:1
Fully supported

e-shot Website Popups are campaign-triggered web overlays tied to contact identification. They have no equivalent in Odoo CRM. We export popup configurations (trigger conditions, display rules, content) as a written inventory document. If the customer uses Odoo Website, popups can be rebuilt using Odoo's website popup widget or a third-party integration. Popup data is not loaded into Odoo as records.

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.

e-shot logo

e-shot gotchas

Medium

File attachments blocked in bulk email sends

Low

Tier limits apply to active (live) objects only

Medium

Merge-tag fallback values must be replicated

Low

No dedicated bulk export endpoint documented

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

  • Merge-tag fallback values require Odoo field defaults

    e-shot's personalisation syntax *_fieldname=fallback('text')_* ensures contacts without a field value display a fallback string rather than raw merge-tag syntax. If fallback values are not replicated in Odoo, contacts missing those fields will display the raw merge tag to recipients when emails are sent via Odoo's mail template system. We extract every fallback definition from e-shot's contact field manager before migration and set equivalent default values on the corresponding res.partner custom fields. This step is done before any contact import so the fallback is active from day one.

  • Automated Series have no Odoo CRM equivalent

    e-shot Automated Series are triggered email sequences tied to contact behaviour or date conditions. Odoo CRM has server actions and automated actions scoped to crm.lead state changes, but it has no native cadence sequencer with time-based delay stepping, A/B split logic, or enrolment conditions of the kind e-shot Series provide. We do not migrate Automated Series as functional records. We deliver a written inventory of every active Series with its trigger, conditions, steps, delays, and email content so the customer's Odoo admin can rebuild using Odoo automation rules or Odoo Marketing if they install it.

  • e-shot has no bulk export endpoint; pagination required

    The e-shot REST API accepts JSON request bodies and returns JSON-encoded responses but does not publish a dedicated bulk-export endpoint. High-volume contact exports require paginated API calls within the per-hour rate limit (500 on basic, 2,000 on pro, 5,000 on omni). We implement throttled pagination with resume logic to extract large contact lists without exceeding the plan's hourly cap. Contact volumes above 50,000 require multiple export sessions spanning one to two days. We do not bypass e-shot's rate limits.

  • Landing pages and popups are outside Odoo CRM scope

    e-shot Landing Pages and Website Popups are campaign assets that have no direct equivalent in Odoo CRM. Odoo Website (a separate module) can host landing pages, but CRM does not include a landing page builder. We export published landing page content as HTML files and popup configurations as a structured document. If the customer requires these features post-migration, they need to install Odoo Website and rebuild the assets manually. We document the full content and structure for the admin to reference.

  • Odoo custom field type mapping may require manual review

    e-shot supports custom contact field types that may not map directly to Odoo's field type system. Complex picklist fields, multi-select arrays, or currency-prefixed fields in e-shot may require manual schema review before migration to ensure Odoo validation rules do not reject the imported values. We flag any e-shot field type without an obvious Odoo equivalent during scoping and resolve the mapping before any data extraction begins.

Migration approach

Six steps for a successful e-shot to Odoo CRM data migration

  1. Discovery and e-shot account audit

    We audit the source e-shot account across all tiers in scope: plan tier (basic, pro, omni), active contact count, custom contact field definitions (names, types, merge-tag syntax, fallback values), campaign list, active Automated Series, published Landing Pages, active Website Popups, Saved Filters, Tags, and email template library. We pull the analytics dashboard to capture historical campaign report snapshots. The discovery output is a written migration scope that explicitly lists every object, its Odoo destination (or its classification as handoff inventory), and the merge-tag fallback matrix.

  2. Schema pre-creation in Odoo

    Before any data extraction, we create the Odoo destination schema. This includes custom fields on res.partner and crm.lead (using Odoo Studio or a data file), field labels matching the original e-shot merge-tag names, field default values matching every extracted fallback definition, res.partner.category records for e-shot Tags, mail.mail.template records for email templates (with Jinja2-converted body content), and ir.filters records for e-shot Saved Filters. Schema is validated in a staging Odoo database before production migration begins. We coordinate with the customer's Odoo admin to ensure the migration user has write access to the target models.

  3. Contact export with throttled pagination

    We export e-shot Contacts via paginated API calls, respecting the plan's hourly rate limit (500-5,000 calls/hour). For contacts exceeding 50,000 records, we implement resume logic across multiple export sessions. We extract all standard fields (name, email, phone, address) and all custom contact field values as flat key-value pairs. Merge-tag fallback values are attached to each record's field data so they can be set as Odoo field defaults rather than literal values during import. We generate a contact-level CSV export that includes a source_e_shot_contact_id column for audit traceability.

  4. Contact import into Odoo res.partner

    We load contacts into Odoo res.partner using the XML-RPC or JSON-RPC API with batch create/update operations. Each record is written with the resolved res.partner.category assignments (from the tag mapping) and the resolved x_opted_in field (from the preference centre opt-in data). We apply Odoo's deduplication rules on email address before insert. Owner assignment maps from e-shot owner email to Odoo res.users by email match; unresolved owners are flagged in the reconciliation report for the admin to provision.

  5. Email template migration and merge-tag conversion

    We migrate e-shot email templates to Odoo mail.mail.template records. The HTML template body is extracted and e-shot merge-tag syntax (*_fieldname_*) is converted to Odoo's Jinja2 equivalent ({{partner.x_field}}). Merge-tag fallback values are replicated using the |default('text') Jinja2 filter on each field reference. We test each converted template against a sample contact record in the staging Odoo database to verify that personalisation renders correctly before committing to production. Template subject lines and sender details are stored in the template record for use in Odoo's mail composer.

  6. Cutover, delta sync, and handoff inventory delivery

    We freeze e-shot writes during the final cutover window, run a delta migration of any contacts modified during the migration, then confirm Odoo as the system of record for migrated data. We deliver the complete handoff inventory: Automated Series documentation, Landing Page HTML exports, Website Popup configurations, campaign report CSVs, and the merge-tag fallback matrix. We do not rebuild Automated Series, Landing Pages, or Popups in Odoo as part of the migration scope; those are separate engagements or admin-led tasks. We offer a one-week post-migration reconciliation window to resolve any data discrepancies reported by the customer's team.

Platform deep dives

Context on both ends of the pair

e-shot logo

e-shot

Source

Strengths

  • Tiered pricing from £200/month provides a clear upgrade path without per-seat licensing on any plan.
  • Unlimited users across all tiers means whole teams can access the platform without incremental cost.
  • Dedicated deliverability tooling for Microsoft contacts, important for UK enterprise senders on Microsoft 365.
  • Contact field manager and merge-tag fallback syntax give non-technical users granular personalisation control.
  • Open API with JSON REST endpoints and tiered rate limits up to 5,000 calls per hour on omni.

Weaknesses

  • Analytics UI is repeatedly described as dated and difficult to navigate compared to modern email platforms.
  • Import reliability issues and intermittent system downtime affect campaign and contact loading.
  • Landing page and automation features are tier-gated, requiring upgrades as team complexity grows.
  • Basic tier has hard limits on live preferences, series, filters, and popups that constrain active campaigns.
  • Template design tools lack some drag-and-drop flexibility found in newer email builders.
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 e-shot and Odoo CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across e-shot and Odoo CRM.

  • Object compatibility

    A

    All 8 core objects map 1:1 between e-shot 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

    e-shot: 500–5,000 requests per hour depending on tier (basic: 500, pro: 2,000, omni: 5,000).

  • Data volume sensitivity

    B

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

Estimator

Estimate your e-shot 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 e-shot to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Contact-only migrations under 20,000 records with fewer than 30 custom fields complete in four to six weeks. Migrations that include email template HTML conversion with merge-tag fallback replication, campaign report export, or Saved Filter translation extend to eight to fourteen weeks. The primary time driver is the e-shot API's lack of a bulk export endpoint — large contact lists require throttled pagination that spans one to two days per export session.

Adjacent paths

Related migrations to explore

Ready when you are

Move from e-shot.
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