CRM migration
Field-level mapping, validation, and rollback between Teamgate and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Teamgate
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Teamgate and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Teamgate to Odoo CRM is a structural migration that restructures a pipeline-first CRM into a modular ERP component. Teamgate uses People and Companies as the primary contact model with Deals as the revenue-tracking object; Odoo splits the qualification model into Lead (unqualified) and Contact (qualified) with a Convert action that ties Contacts to a Partner record. We resolve that split during scoping, map Teamgate's pipeline stages to Odoo's stage configuration, and preserve owner assignments, loss reasons, and custom fields throughout. Activity history (calls, emails, meetings, tasks) migrates to Odoo's chatter and activity tracking models. Teamgate's storage tier constraints, annual billing cycle, and SmartDialer usage billing are scoped as source-side variables that do not carry forward. Workflows, automations, and integration configurations do not migrate as code; we deliver a written inventory for the customer's admin to rebuild in Odoo's automation framework.
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 Teamgate 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.
Teamgate
People (Contact/Lead)
Odoo CRM
Lead or Contact (split required)
1:manyTeamgate People records with no Deal association and no conversion history map to Odoo CRM Lead. People with active Deals or a completed stage progression map to Odoo CRM Contact. We compute the split during migration using Teamgate's deal association count and stage history. Odoo Lead converts to Contact linked to a Partner (the Odoo company/contact record), and Contact can also attach directly to Partner. We preserve the original Teamgate created_at timestamp in a custom field teamgate_created_at__c on both Lead and Contact for audit trail integrity.
Teamgate
Company
Odoo CRM
Partner
1:1Teamgate Company records map 1:1 to Odoo CRM Partner records with company_type = 'company'. The Odoo Partner object serves dual roles (as an account/company and as a contact holder), so we map Teamgate Company name to Partner name and Company domain to Partner website. Company address data maps to Partner address fields (street, city, country). Partner must be created before any Contact import that references it as parent.
Teamgate
Deal
Odoo CRM
Opportunity
1:1Teamgate Deals map directly to Odoo CRM Opportunity (crm.lead). The deal value, expected close date, loss reason, and owner assignment migrate as Opportunity expected_revenue, date_deadline, lost_reason, and user_id. Pipeline assignment from Teamgate maps to Odoo's crm_case_section (sales team/pipeline) field. We resolve the section ID during migration using a name-match lookup against Odoo's configured pipelines.
Teamgate
Pipeline Stage
Odoo CRM
Stage
lossyEach Teamgate Pipeline's ordered Stages become Odoo CRM Stage records within a crm_case_section. Stage name, sequence order, and probability percentage migrate. Odoo's stage probability is stored as a float (0.0-1.0) rather than an integer percentage. We also map win/loss stage flags: Teamgate's closed-won stage maps to Odoo's won_state, and closed-lost maps to lost_state. Stages are configured in Odoo via Settings > CRM > Pipelines > Stages before data import begins.
Teamgate
Pipeline
Odoo CRM
CRM Case Section (Sales Team)
lossyTeamgate's named Pipelines map to Odoo's CRM Case Sections (sales teams), which define the pipeline context for Opportunities and control team-level assignment rules, alias emails, and shared planning. We export each Teamgate pipeline name and recreate it as an Odoo Section with the same sequence order. Multi-pipeline teams in Teamgate Enterprise map cleanly to multiple Odoo Sections.
Teamgate
Custom Field (People)
Odoo CRM
Custom Field (Lead / Contact)
1:1Teamgate custom fields on People (text, number, date, dropdown, checkbox) map to Odoo custom fields on the Lead and Contact models. Text fields map to char or text depending on length; number to float or integer; date to date; dropdown to selection; checkbox to boolean. We pre-create the Odoo custom fields via XML or Studio before any data import. Dropdown values are created as selection options matching the Teamgate allowed values.
Teamgate
Custom Field (Deal)
Odoo CRM
Custom Field (Opportunity)
1:1Teamgate custom fields on Deals map to Odoo custom fields on crm.lead (the Opportunity model). The same type-mapping logic applies as for People. Loss reason dropdown values from Teamgate migrate as selection options in Odoo's lost_reason field if the standard field is used, or to a custom field if the customer uses a custom loss reason schema.
Teamgate
Tag
Odoo CRM
Tag
lossyTeamgate tags (flat string labels on People, Companies, and Deals) map to Odoo CRM Tags. Odoo stores tags as a many2many relation on the crm.lead model (the Tag model is shared across CRM and other apps). We export tags as a normalized set per record and create Odoo CRM Tag records during migration, then link via crm.tag.rel. Teams migrating from Teamgate Starter retain tag functionality in Odoo without tier restriction.
Teamgate
Activity: Call, Email, Meeting, Task
Odoo CRM
Activity
1:1Teamgate Activities (calls, emails, meetings, tasks) tied to People or Deals migrate to Odoo CRM Activities linked to the corresponding Lead, Contact, Partner, or Opportunity. Odoo uses the mail.activity model with type区分 (call, email, meeting, to_do). Activity body, timestamp, and duration transfer. The original Teamgate created_at timestamp is preserved in Odoo's create_date. We link activities to the resolved Odoo record (Lead or Opportunity) using the external ID we assigned during record creation.
Teamgate
Owner (User)
Odoo CRM
User
1:1Teamgate Owner records map to Odoo CRM Salesperson Users. We match by email address during migration. Owners without a matching Odoo User are held in a reconciliation queue; the customer's Odoo admin provisions the missing Users (and optionally activates them as Teamgate owners) before record import resumes. Inactive Odoo Users can own records if the Use Record Locking setting allows it.
Teamgate
File and Attachment
Odoo CRM
Attachment
1:1Teamgate file attachments (stored under the account's storage tier) are exported as binary files via the Teamgate API. We download files, rename them with the target Odoo record's model and ID reference, and re-upload to Odoo as ir.attachment records linked to the corresponding Lead, Contact, Partner, or Opportunity. Storage tier limits on the source side are scoped during discovery; files exceeding the source tier are flagged for selective migration or tier upgrade before export begins.
Teamgate
Loss Reason
Odoo CRM
Lost Reason
1:1Teamgate loss reasons are a dropdown tied to Deals. We export all active loss reason values and map them to Odoo CRM's lost_reason selection field on crm.lead. New values are created as selection options during the Odoo custom field schema phase. Loss reason assignment migrates with the Deal-to-Opportunity record.
| Teamgate | Odoo CRM | Compatibility | |
|---|---|---|---|
| People (Contact/Lead) | Lead or Contact (split required)1:many | Fully supported | |
| Company | Partner1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Stagelossy | Fully supported | |
| Pipeline | CRM Case Section (Sales Team)lossy | Fully supported | |
| Custom Field (People) | Custom Field (Lead / Contact)1:1 | Fully supported | |
| Custom Field (Deal) | Custom Field (Opportunity)1:1 | Fully supported | |
| Tag | Taglossy | Fully supported | |
| Activity: Call, Email, Meeting, Task | Activity1:1 | Fully supported | |
| Owner (User) | User1:1 | Fully supported | |
| File and Attachment | Attachment1:1 | Fully supported | |
| Loss Reason | Lost Reason1: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.
Teamgate gotchas
SmartDialer usage billing is uncapped and opaque
Annual vs monthly billing creates a 2.3–3× price swing
Import history does not preserve original source timestamps
Storage tier limits constrain file migration volume
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 scope definition
We audit Teamgate across tier (Starter/Professional/Enterprise), storage usage, People count, Company count, active Deals, pipeline count, stage definitions, custom field schema, owner list, and activity volume. We confirm the target Odoo edition (Community vs Online vs Enterprise) and the installed apps. The discovery output is a written migration scope document specifying record counts per object, storage volume, custom field list with Odoo type mapping, pipeline and stage mapping, and a list of any source-side items requiring admin action before migration (SmartDialer cancellation, annual billing review, storage tier upgrade).
Odoo schema preparation
We configure the destination Odoo CRM before any data import. This includes creating CRM Case Sections (one per Teamgate Pipeline), configuring Stages with names and probability percentages, setting up Partner categories (if using company_type segmentation), creating custom fields on crm.lead and res.partner models via XML or Studio, setting up Users matched to Teamgate owners by email, and configuring currency settings if the Teamgate account uses multi-currency. Schema configuration happens in a staging Odoo database first, validated against the mapping document, then deployed to production.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database using a representative data sample (or full data if volume allows). The customer's admin reconciles record counts across all objects, spot-checks 25-50 records against Teamgate source data, and validates that pipeline stages and owner assignments are correct. Any field mapping corrections, missing custom fields, or stage configuration errors are fixed during this phase. No data is written to the production Odoo database until sign-off.
Owner and User provisioning
We extract every distinct Teamgate Owner referenced on People, Company, Deal, and Activity records and match by email against the Odoo destination's User list. Owners without a matching Odoo User are listed with the customer's admin for provisioning. We recommend provisioning Odoo Users before production migration begins because OwnerId (user_id) references are required on crm.lead records during import. Inactive Odoo Users can own records if the customer's configuration allows it.
Production migration in dependency order
We execute production migration in dependency sequence: Partners (from Teamgate Companies) first, then Leads and Contacts (from Teamgate People with the qualification split applied), then CRM Opportunities (from Teamgate Deals with section and stage IDs resolved), then Tags (created as CRM Tag records and linked via relation table), then Activities (calls, emails, meetings, tasks linked to the migrated record IDs), then Files and Attachments (downloaded from Teamgate and re-uploaded to Odoo ir.attachment). Each phase produces a reconciliation report comparing source record count to destination record count before the next phase begins.
Cutover, validation, and automation handoff
We freeze Teamgate write access during cutover, run a final delta migration for any records modified during the migration window, then enable Odoo as the system of record. Post-cutover validation includes record count matching, spot-checks of deal values and stage assignments, owner assignment verification, and activity timeline review. We deliver a written inventory of all Teamgate workflows, automations, and integration configurations that require rebuild in Odoo Studio or via automation rules. We do not rebuild automations inside the migration scope. Post-migration support is available as a separate engagement.
Platform deep dives
Teamgate
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Teamgate and Odoo CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
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
Teamgate: Not publicly documented.
Data volume sensitivity
Teamgate 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 Teamgate to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Teamgate 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 Teamgate
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.