CRM migration
Field-level mapping, validation, and rollback between Serviceform and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Serviceform
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Serviceform and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
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.
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 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
Odoo CRM
crm.lead
1:1Serviceform 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
Odoo CRM
res.partner (Contact or Company)
lossyServiceform 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
Odoo CRM
crm.activity or mail.message
1:manyServiceform 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
Odoo CRM
crm.lead (via website form)
1:1Serviceform 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
Odoo CRM
Custom fields on crm.lead
1:1Serviceform 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
Odoo CRM
res.users
1:1Serviceform 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)
Odoo CRM
hr.applicant
1:1Serviceform'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
Odoo CRM
helpdesk.ticket
1:1Serviceform 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
Odoo CRM
Integration configuration documentation
lossyServiceform 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
Odoo CRM
None (not migratable)
1:1Serviceform 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)
Odoo CRM
Custom fields on crm.lead or res.partner
1:1Serviceform 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
Odoo CRM
Custom float field on crm.lead
1:1Serviceform'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.
| Serviceform | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | crm.lead1:1 | Fully supported | |
| Lead | res.partner (Contact or Company)lossy | Fully supported | |
| Conversation | crm.activity or mail.message1:many | Fully supported | |
| Form | crm.lead (via website form)1:1 | Fully supported | |
| Chatbot | Custom fields on crm.lead1:1 | Fully supported | |
| Team Members | res.users1:1 | Fully supported | |
| ATS (Applicants) | hr.applicant1:1 | Mapping required | |
| Live Chat Sessions | helpdesk.ticket1:1 | Mapping required | |
| Integrations | Integration configuration documentationlossy | Mapping required | |
| Statistics and Analytics | None (not migratable)1:1 | Not supported | |
| Custom Properties (chatbot nodes) | Custom fields on crm.lead or res.partner1:1 | Fully supported | |
| Lead Score | Custom float field on crm.lead1: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.
Serviceform gotchas
Usage-based billing means migration scope directly affects costs
No publicly documented public API
ATS module data is separate from core chatbot data
Conditional logic on forms may not transfer 1:1
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 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.
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.
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.
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.
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.
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
Serviceform
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Serviceform and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Serviceform and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Serviceform 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
Serviceform: Not publicly documented.
Data volume sensitivity
Serviceform 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 Serviceform to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Serviceform
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.