CRM migration
Field-level mapping, validation, and rollback between Variable Soft CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Variable Soft CRM
Source
Odoo CRM
Destination
Compatibility
7 of 12
objects map 1:1 between Variable Soft CRM and Odoo CRM.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from Variable Soft CRM to Odoo CRM is a file-based migration rather than an API-driven one, because VSCRM exposes no documented REST endpoint, authentication scheme, or rate limit. We work from the customer's CSV exports or database dumps, discover the field schema from the live data itself, and map VSCRM's Lead, Contact, Company, Deal, Pipeline, and Activity objects into Odoo's crm.lead, crm.team, and project.task models. VSCRM's distinction between Leads and Contacts maps to Odoo's lead model, where the same record carries lifecycle stages and converts to a partner (Contact) record with the original lead preserved. Deals migrate as crm.lead records with a won/lost state, and pipeline stage names are recreated as Odoo stage labels in the sales team view. Workflow automations do not export from VSCRM; we document every active automation during discovery and deliver a rebuild checklist for Odoo Automations. Odoo CRM starts at $24.90/user/month for the in-app CRM, or the customer can self-host via the open-source Community edition with per-module paid subscriptions.
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 Variable Soft CRM 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.
Variable Soft CRM
Lead
Odoo CRM
crm.lead
1:1VSCRM Lead records map to Odoo crm.lead. The lead's name, email, phone, source, status, and owner assignment migrate directly. VSCRM lifecycle stage maps to Odoo's lead_stage_id (New, Qualified, Proposal, Negotiation, Won, Lost). VSCRM's custom lead fields are discovered from the export file and created as Odoo Studio custom fields on crm.lead before import. Owner resolution uses email matching against Odoo's res.users table.
Variable Soft CRM
Contact
Odoo CRM
res.partner
1:1VSCRM Contact records map to Odoo res.partner with partner_type = 'contact'. The primary company association from VSCRM maps to the partner's parent_id (also res.partner as the Company record). VSCRM lifecycle stage on the contact becomes a custom field partner_lifecycle_stage__c in Odoo. VSCRM contact-phone and contact-email map to phone and email on res.partner. Contacts without a company association are imported as standalone res.partner records and linked to Deals separately.
Variable Soft CRM
Company
Odoo CRM
res.partner (company type)
1:1VSCRM Company records map to Odoo res.partner with is_company = True. Company name becomes partner name, domain becomes website, industry maps to industry_id (Odoo's industry reference model), and employee_count maps to a custom field. Res.partner records with is_company = True are imported first so that child Contact records (is_company = False) can reference parent_id at insert time. This parent-child resolution is the critical ordering dependency for the Contact phase.
Variable Soft CRM
Deal
Odoo CRM
crm.lead (with type = 'opportunity')
1:1VSCRM Deal records map to Odoo crm.lead with type = 'opportunity'. Deal value maps to planned_revenue, expected_close_date maps to date_deadline, owner maps to user_id, and stage maps to stage_id. The VSCRM pipeline name maps to crm.team (sales team) in Odoo. Open deals with no associated Contact or Company in VSCRM are imported as standalone leads first and reconciled against res.partner records after Contact import. Closed-won deals set active = False in Odoo after migration.
Variable Soft CRM
Pipeline
Odoo CRM
crm.team + stage configuration
lossyVSCRM named pipelines map to Odoo crm.team records. Each team gets its own Kanban view with stage columns. VSCRM stage labels within each pipeline are recreated as crm.stage records under the corresponding team. Stages with no associated deals are created as empty container stages to preserve the full pipeline structure. The pipeline-stage mapping matrix is documented during discovery and deployed in Odoo before Deal import begins.
Variable Soft CRM
Deal Stage
Odoo CRM
crm.stage
lossyVSCRM deal stages (New, Qualified, Proposal Sent, Negotiation, Closed Won, Closed Lost) map to crm.stage records with sequence ordering preserved. Probability percentages migrate from VSCRM to crm.stage.on_change_state values. VSCRM custom stage properties (stage-specific notification rules, owner-assignment triggers) do not carry over and are documented separately for Odoo Automations rebuild.
Variable Soft CRM
Activities: Calls, Emails, Tasks, Meetings
Odoo CRM
mail.message + project.task
1:manyVSCRM activities map to a combination of Odoo record types. Calls and meetings migrate as mail.message records with subtype 'mt_comment' and subtype设置 for call/discussion. Tasks migrate as project.task records linked to the parent crm.lead via project_id. Email content migrates to mail.message on the lead's chatter thread. All activity timestamps are preserved as write_date on the migrated record. Activity notes migrate as mail.message body text.
Variable Soft CRM
Custom Fields (Contacts, Companies, Deals)
Odoo CRM
Custom fields on res.partner and crm.lead
lossyVSCRM custom fields on Contacts, Companies, and Deals are discovered from the export file header row. We create Odoo Studio custom fields of the closest matching type (Char, Text, Integer, Float, Date, Selection, Many2One) on the respective Odoo model before import. Multi-select or checkbox fields in VSCRM map to Odoo Char with comma-separated values or to selection fields if the set of values is enumerable and bounded.
Variable Soft CRM
Owner/User
Odoo CRM
res.users
1:1VSCRM owner assignments on Leads, Contacts, Companies, and Deals map to Odoo res.users records by email address lookup. Any VSCRM owner without a matching Odoo user is placed in a reconciliation queue for the customer's Odoo admin to provision before Deal import. Owner display names are preserved in a custom field on the migrated record to prevent information loss if user provisioning is delayed.
Variable Soft CRM
Workflow Automations
Odoo CRM
No equivalent (flag for rebuild)
1:1VSCRM workflow automations are not exportable and have no portable format. We enumerate every active automation rule during the discovery call, recording the trigger event (record creation, field change, stage change), the condition logic, and the action taken. This inventory is delivered as a written handoff document for the customer's Odoo admin to rebuild using Odoo Automations. No automation logic migrates as code.
Variable Soft CRM
Tags / Labels
Odoo CRM
crm.tag
lossyVSCRM tags on Leads, Contacts, and Deals migrate to Odoo crm.tag records. Tags are normalized (lowercase, stripped whitespace) and deduplicated before import. A tag's association with a specific record type (Lead vs Contact vs Deal) is preserved in a custom field on crm.tag so that tag filtering behaves consistently post-migration. Tags without any associated records are excluded from migration but noted in the handoff document.
Variable Soft CRM
Notes (free-text)
Odoo CRM
mail.message
1:1VSCRM notes attached to Leads, Contacts, Companies, or Deals migrate as mail.message records on the Odoo record's chatter thread. The note body migrates as message_body in plain text; attachments migrate as ir.attachment records linked via res_model = 'crm.lead' or 'res.partner' and res_id = the migrated record ID. Note timestamps are preserved as message_date.
| Variable Soft CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | crm.lead1:1 | Fully supported | |
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (company type)1:1 | Fully supported | |
| Deal | crm.lead (with type = 'opportunity')1:1 | Fully supported | |
| Pipeline | crm.team + stage configurationlossy | Fully supported | |
| Deal Stage | crm.stagelossy | Fully supported | |
| Activities: Calls, Emails, Tasks, Meetings | mail.message + project.task1:many | Fully supported | |
| Custom Fields (Contacts, Companies, Deals) | Custom fields on res.partner and crm.leadlossy | Fully supported | |
| Owner/User | res.users1:1 | Fully supported | |
| Workflow Automations | No equivalent (flag for rebuild)1:1 | Not supported | |
| Tags / Labels | crm.taglossy | Fully supported | |
| Notes (free-text) | mail.message1: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.
Variable Soft CRM gotchas
No public REST API documentation exists
Workflow automations are not portable
Data model not externally documented
Free tier data portability is unclear
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 export coordination
We conduct a scoping call with the customer's VSCRM admin to enumerate the record types in scope (Leads, Contacts, Companies, Deals, Activities, Custom Fields), the approximate record counts per object, the active workflow automations, and the pipeline structure. We request the full CSV export or database dump from VSCRM, validate record counts against VSCRM's reported figures, and identify any export gaps (empty fields, missing relationships, truncated timestamps). We also confirm that the target Odoo instance is accessible, has the CRM app installed, and that the customer's admin has Odoo Studio access for custom field creation.
Schema discovery and Odoo custom field creation
We parse the VSCRM export file header row to discover field names, data types, and the presence of custom fields. We map each VSCRM field to the closest Odoo model and field type (Char, Text, Integer, Date, Many2one, etc.). Custom fields on VSCRM Contacts, Companies, and Deals are created in Odoo Studio before import begins. We design the Lead-Contact architecture decision (lead-first or partner-first) with the customer's input and document it in the mapping specification. Pipeline stages are pre-created in Odoo crm.team and crm.stage records with the correct sequence ordering.
Sandbox migration and reconciliation
We run a full migration into the customer's Odoo sandbox or staging environment using production-like data volume from the export file. The customer reconciles record counts (Leads in, Contacts in, Companies in, Deals in, Activities in), spot-checks 20-30 records against the VSCRM source for field accuracy and relationship integrity, and reviews the Lead-Contact split result. Any mapping corrections, field type adjustments, or custom field additions are made in the sandbox before production migration begins. No data is written to the production Odoo environment until sandbox sign-off.
Owner and user provisioning validation
We extract every distinct VSCRM owner (user_id or assigned_to field) from the export file and match by email against the Odoo res.users table. Any VSCRM owner without a matching Odoo user is placed in a reconciliation queue. The customer's Odoo admin provisions the missing users in Odoo (active for current owners, inactive for departed users). Migration cannot proceed past this step because user_id is a required foreign key on crm.lead in Odoo.
Production migration in dependency order
We run production migration in record-dependency order: res.partner records with is_company = True (Company records first), then res.partner records with is_company = False (Contact records with parent_id resolved), then crm.team and crm.stage (pipeline and stage configuration), then crm.lead records (Leads and Deals with type = 'opportunity'), then mail.message and project.task (Activity history), then crm.tag records, then ir.attachment records for migrated documents. Each phase emits a row-count reconciliation report before the next phase begins. The VSCRM source system is placed in read-only mode during the final cutover window.
Cutover, delta pass, and automation handoff
We freeze VSCRM writes at cutover, run a delta migration of any records modified during the migration window, then hand the Odoo instance to the customer as the system of record. We deliver the workflow automation inventory document to the customer's Odoo admin with step-by-step rebuild instructions for each automation in Odoo Automations. We support a five-business-day hypercare window to resolve post-migration reconciliation issues. Odoo Studio, Automations, and any Odoo.sh or self-hosted configuration remain the customer's admin's responsibility.
Platform deep dives
Variable Soft CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 5 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Variable Soft CRM and Odoo CRM.
Object compatibility
5 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
Variable Soft CRM: Not publicly documented — typical SaaS limits assumed and confirmed during scoping..
Data volume sensitivity
Variable Soft CRM 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 Variable Soft CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Variable Soft CRM 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 Variable Soft CRM
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.