CRM migration

Migrate from Serviceform to Odoo CRM

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

Serviceform logo

Serviceform

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between Serviceform and Odoo CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Serviceform to Odoo CRM is a structural migration from a conversation-first lead-capture platform to a full CRM with accounts, pipelines, and activity logging. Serviceform organizes data around Conversations, Leads, Forms, and Chatbots; Odoo CRM uses crm.lead for unqualified prospects and res.partner for qualified contacts and companies, with a Convert action to merge them. We resolve that split during scoping, extract conversation transcripts and lead scores from Serviceform's export format, and map them into Odoo's crm.lead description fields and custom lead scoring fields. Custom properties on chatbot nodes require field-level mapping during import. Serviceform does not expose a documented public REST API, so migration relies on coordinated UI-based exports or support-assisted data dumps. We do not migrate chatbot flows, conditional form logic, or sequences as functional code; we deliver a written specification for rebuilding them in Odoo's automation tools.

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

Serviceform logo

Serviceform

What's pushing teams away

  • Integration documentation is sparse or missing, making it difficult for technical teams to connect Serviceform to existing software stacks without support.
  • WhatsApp and Telegram bot integrations are not yet available, forcing teams that rely on those channels to use alternative tools.
  • Some users report that advanced customization options feel limited compared to enterprise chatbot platforms.
  • Pricing can scale unexpectedly as conversation volume grows, especially for high-traffic campaigns.

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

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

Serviceform

Lead

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Serviceform Leads (name, email, phone, source, qualification status) map to Odoo crm.lead records. The lead_source property from Serviceform maps to Odoo's source_id (linked to crm.tracking.source). Lead score from Serviceform's AI qualification migrates to a custom float field x_serviceform_lead_score__c on crm.lead. If the lead is already a qualified contact in Serviceform, it can be mapped directly to res.partner with the Convert to Opportunity action deferred until Odoo admin review.

Serviceform

Lead

maps to

Odoo CRM

res.partner (Contact or Company)

lossy
Fully supported

Serviceform leads marked with qualification status 'qualified' or 'customer' are candidates for direct res.partner creation rather than crm.lead staging. We create a res.partner record (contact type) from the Serviceform lead email, name, and phone, and flag it with a custom field x_migrated_from_serviceform__c for audit. The decision to use crm.lead versus res.partner as primary contact model is confirmed during scoping based on the customer's Odoo pipeline workflow.

Serviceform

Conversation

maps to

Odoo CRM

crm.activity or mail.message

1:many
Fully supported

Serviceform conversation logs (visitor messages, bot responses, timestamps, channel) map to Odoo crm.activity records with subtype for chat, or to mail.message records on the related crm.lead or res.partner. Each message pair is stored as a separate crm.activity line with body text containing the visitor and bot exchange. Channel metadata (web, email, SMS) maps to a custom selection field x_serviceform_channel__c. We offer full transcript migration or summary migration based on scoping volume.

Serviceform

Form

maps to

Odoo CRM

crm.lead (via website form)

1:1
Fully supported

Serviceform form submissions create crm.lead records in Odoo via Odoo's website lead form or via an incoming API payload. Form field names map to crm.lead fields (email, partner_name, phone, description). Conditional field visibility rules from Serviceform forms are documented during discovery and provided as a written specification for rebuilding via Odoo website form builder or custom module.

Serviceform

Chatbot

maps to

Odoo CRM

Custom fields on crm.lead

1:1
Fully supported

Serviceform chatbot flows consist of nodes, intents, and response rules. We export chatbot flow metadata and conversation tree structure. The outcome of the chatbot interaction (qualification result, booked meeting flag, selected intent) migrates as custom fields on the linked crm.lead record (e.g., x_chatbot_intent__c, x_meeting_booked__c). The chatbot flow logic itself cannot migrate as executable code; we deliver a node-by-node map of the original flow for rebuilding in Odoo's automation tools.

Serviceform

Team Members

maps to

Odoo CRM

res.users

1:1
Fully supported

Serviceform user accounts with roles and seat assignments map directly to Odoo res.users. We resolve by email match. Active status migrates as boolean active. If a Serviceform user has no corresponding Odoo user at migration time, they enter a reconciliation queue for the Odoo admin to provision before contact and lead imports proceed.

Serviceform

ATS (Applicants)

maps to

Odoo CRM

hr.applicant

1:1
Mapping required

Serviceform's ATS module stores applicant profiles and resume data separately from the main chatbot flows. If the destination Odoo instance has the HR Recruitment module installed, applicants migrate to hr.applicant with name, email, partner_phone, and resume file attached via ir.attachment. If Odoo Recruitment is not installed, we deliver applicant records as a structured CSV with the same schema for manual import or HRIS integration.

Serviceform

Live Chat Sessions

maps to

Odoo CRM

helpdesk.ticket

1:1
Mapping required

Serviceform live chat session logs (visitor info, agent assignment, resolution status) map to Odoo helpdesk.ticket if the Helpdesk module is active. Session records without a resolution (bot-only sessions) map to crm.activity on the related crm.lead. We resolve agent assignment to res.users by email match. Resolution status maps to ticket stage in Odoo.

Serviceform

Integrations

maps to

Odoo CRM

Integration configuration documentation

lossy
Mapping required

Serviceform integration connections to third-party CRM, email, and analytics tools are stored as configuration references. We extract the list of active integrations and deliver a written inventory that maps each Serviceform integration to an equivalent Odoo app or external connector. For example, a Serviceform-to-Google Analytics integration would be documented for rebuild as an Odoo Google Analytics connector or custom tracking script.

Serviceform

Statistics and Analytics

maps to

Odoo CRM

None (not migratable)

1:1
Not supported

Serviceform aggregated analytics (conversion rates, chatbot performance metrics, session duration averages) are calculated at read time from conversation data and are not independently stored records. These cannot be migrated. We migrate the underlying conversation records so that equivalent reports can be built in Odoo CRM's pivot, graph, and reporting views using crm.activity data.

Serviceform

Custom Properties (chatbot nodes)

maps to

Odoo CRM

Custom fields on crm.lead or res.partner

1:1
Fully supported

Serviceform chatbot nodes support custom properties that store visitor-provided data or conversation context beyond standard lead fields. These custom properties are not well-documented in Serviceform's schema. During discovery we extract all custom property keys observed in conversation exports and create equivalent custom fields on crm.lead (x_serviceform_prop_<key>__c) before migration. Field type is inferred from data sample (string, integer, boolean, date) and validated against Odoo's allowed field types.

Serviceform

Lead Score

maps to

Odoo CRM

Custom float field on crm.lead

1:1
Fully supported

Serviceform's AI agent Mira produces a lead qualification score or status on each lead. This score migrates to a custom float field x_serviceform_score__c on crm.lead. If Serviceform provides a categorical qualification tier (e.g., cold, warm, hot), this maps to a selection field x_serviceform_qualification__c. The Odoo admin can use these fields in Odoo CRM's stage automation or lead scoring workflows post-migration.

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.

Serviceform logo

Serviceform gotchas

High

Usage-based billing means migration scope directly affects costs

High

No publicly documented public API

Medium

ATS module data is separate from core chatbot data

Medium

Conditional logic on forms may not transfer 1:1

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

  • Serviceform has no documented public API for bulk export

    Serviceform does not appear to expose a documented REST API for programmatic data access. This means bulk migration cannot be self-served through API calls and requires either UI-based manual export, coordination with Serviceform's support team to obtain a data dump, or export of individual records through the platform interface. We coordinate directly with Serviceform support to obtain conversation logs, lead records, and form submissions in a usable structured format before mapping them into Odoo. The customer should initiate this request early in the scoping phase because response times vary.

  • Usage-based billing means migration scope directly affects costs

    Serviceform charges per conversation (0.79 EUR on the self-service tier) rather than per-seat alone. When migrating large volumes of conversation history, the conversation count included in scope affects billing. We track conversation volume during the scoping phase and work with the customer to decide whether historical transcripts migrate in full or as summarized summaries attached to lead records. This decision directly affects migration complexity and cost.

  • Odoo field naming conventions may not align with Serviceform properties

    Terminology differs between platforms. Serviceform uses 'lead' for all visitor records; Odoo uses crm.lead for prospects and res.partner for contacts. Serviceform's 'source' property maps to Odoo's crm.tracking.source but may use different taxonomy. We create a glossary during discovery that maps each Serviceform field to its Odoo equivalent, including any custom fields on crm.lead that must be created to hold Serviceform-specific properties. Misinterpretation of field names during mapping can result in data landing in the wrong columns.

  • Conditional logic on Serviceform forms requires manual rebuild in Odoo

    Serviceform forms support conditional field visibility and routing rules. These rules do not migrate as automation code to Odoo. We document the original conditional rules during discovery and provide a written specification for rebuilding them using Odoo's website form builder conditional visibility or custom module development. The customer's Odoo admin or implementation partner rebuilds the form logic post-migration.

  • ATS module data is a separate export from core chatbot data

    Serviceform's ATS product stores applicant and resume data in a separate module from the main chatbot and lead capture flows. During migration, these require separate export workflows and may land in different Odoo modules (crm.lead versus hr.applicant). We handle them as distinct data sets and ensure applicant records are mapped to the correct destination object type. If Odoo Recruitment is not installed, we deliver the ATS data as a structured CSV for manual import.

Migration approach

Six steps for a successful Serviceform to Odoo CRM data migration

  1. Discovery and data access coordination

    We audit the Serviceform account for lead volume, conversation history size, form count, chatbot flow complexity, ATS usage, and active integrations. Because Serviceform lacks a public API, we simultaneously coordinate with Serviceform support to obtain data exports in a structured format (CSV, JSON, or structured file). We also assess the target Odoo instance for installed apps (CRM, Helpdesk, Recruitment), Odoo version, and available custom field capacity. The discovery output is a written migration scope document and an export request filed with Serviceform.

  2. Schema design in Odoo

    We design the destination schema in Odoo. This includes creating custom fields on crm.lead and res.partner to hold Serviceform-specific properties (lead score, qualification tier, channel source, chatbot intent), configuring crm.lead source tracking, setting up pipeline stages to match Serviceform's qualification workflow, and enabling required Odoo apps (CRM, Helpdesk, Recruitment) if not already present. Schema is validated in an Odoo sandbox environment before production migration begins.

  3. Data export and transformation

    We receive the Serviceform data export and transform it into the mapping schema. Leads are split into crm.lead candidates and res.partner contacts based on qualification status. Conversations are parsed into crm.activity or mail.message records linked to the parent lead or contact. Custom chatbot properties are extracted and mapped to the pre-created custom fields. ATS applicant data is separated into an hr.applicant migration set. Integration configuration is extracted as a written inventory document.

  4. Sandbox migration and reconciliation

    We run a full migration into an Odoo sandbox environment using production-equivalent data volume. The customer's Odoo administrator reconciles record counts, spot-checks 25-50 random records against the Serviceform source data, and validates that custom fields populated correctly. Any mapping corrections and schema adjustments happen in the sandbox before production migration begins. Owner assignment is reconciled by email match against Odoo res.users.

  5. Production migration in dependency order

    We run production migration in record-dependency order: res.users (validated, manual provisioning for any missing), crm.lead and res.partner (with custom fields resolved), crm.activity and mail.message (conversation transcripts linked to parent records), helpdesk.ticket (live chat sessions), hr.applicant (ATS data), and custom fields on chatbot-outcome records. Each phase emits a row-count reconciliation report before the next phase begins. Conversation volume is confirmed against Serviceform's stated export scope before transcript import begins.

  6. Cutover, validation, and handoff documentation

    We freeze Serviceform as the system of record during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the primary system. We deliver the chatbot flow map, form conditional logic specification, and integration inventory document to the customer's Odoo admin for rebuilding. We support a one-week hypercare window where we resolve any reconciliation issues raised by the team. Chatbot flow logic, form automation rules, and sequences are not migrated as code; they require manual rebuild in Odoo's automation tools.

Platform deep dives

Context on both ends of the pair

Serviceform logo

Serviceform

Source

Strengths

  • Usage-based pricing with no monthly minimum for the self-service tier.
  • AI-powered lead qualification and meeting booking without manual follow-up.
  • Multi-industry templates for real estate, automotive, ecommerce, and education verticals.
  • Multi-channel reach including website chat, email, SMS, and WhatsApp (roadmap).
  • Personal onboarding meeting included with managed service tiers.

Weaknesses

  • API documentation and technical reference materials are not publicly accessible or well-indexed.
  • WhatsApp and Telegram bot channels are not yet available.
  • Integration ecosystem is narrower than enterprise chatbot platforms.
  • Custom property support for chatbot nodes is not well-documented.
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 Serviceform and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

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

    Serviceform: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Serviceform 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 three and five weeks for accounts under 10,000 leads and 50,000 conversation records with no custom chatbot properties and a straightforward qualification workflow. Migrations with large engagement volumes (over 200,000 conversation logs), multiple ATS modules, separate chatbot flow exports, or complex custom property schemas move to six to ten weeks because of the multi-phase export coordination required from Serviceform and the Odoo custom field creation scope.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Serviceform.
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