CRM migration
Field-level mapping, validation, and rollback between GoldMine and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
GoldMine
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between GoldMine and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
GoldMine customers face a hard deadline. Ivanti ended new license sales in 2025 and closes support in April 2026, leaving organizations that have run GoldMine for years to find a replacement before their current system goes unpatched. Odoo CRM is a modular, open-source business suite with a REST and XML-RPC API, a modern web interface, and a $24 per user per month price point that undercuts GoldMine's $55 to $125 per user tier. We extract GoldMine data via its XML API or direct database reads (Paradox or SQL Server depending on version), handle the schema discovery required to surface GoldMine's extended custom-field tables, and load the full object inventory into Odoo CRM through its XML-RPC API with rate-limit handling and batch chunking. GoldMine Workflows, automations, and report definitions do not migrate as code; we deliver a written inventory for the customer's admin to rebuild in Odoo Studio.
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 GoldMine 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.
GoldMine
Contact
Odoo CRM
res.partner (Contact type)
1:1GoldMine's primary contact record maps to Odoo res.partner with partner_type = contact. Name fields (FIRSTNAME, LASTNAME, COMPANY) parse into Odoo's name field and individual address subfields. Phone, email, and address blocks transfer as typed fields. GoldMine's AccountNo field becomes Odoo's ref field for cross-reference during reconciliation. The RECID from GoldMine becomes an external identifier (external_id) stored in ir.model.data so that activity history can re-link to the correct res.partner after import.
GoldMine
Company
Odoo CRM
res.partner (Company type)
1:1GoldMine Company records map to res.partner with partner_type = company. The Company-Contact linkage in GoldMine becomes the parent_id reference on the contact res.partner record pointing to the company res.partner. Companies are imported before Contacts so that parent_id can be resolved at Contact insert time. Company-level fields such as industry, annual revenue, and number of employees map to Odoo's custom field extensions on res.partner for the company type.
GoldMine
Opportunity
Odoo CRM
crm.lead (Pipeline stage)
1:1GoldMine Opportunities map to Odoo crm.lead records with type = opportunity. The GoldMine pipeline stage maps to Odoo's stage_id within the mapped pipeline. Probability percentages transfer as Odoo calculates probability automatically from stage by default but accepts a manual override stored in probability. Closed-Won and Closed-Lost stages from GoldMine become Odoo stage records marked as won or lost. If the customer has multiple GoldMine pipeline categories, each becomes a separate Odoo CRM pipeline in CRM > Configuration > Stages.
GoldMine
History / Activity Log
Odoo CRM
mail.message (Activity log)
1:1GoldMine stores communication history in a non-normalized history table with mixed formats (plain text, HTML, MIME-encoded). We extract each history entry, detect encoding format, normalize to plain text or HTML, and write it as a mail.message record linked to the migrated res.partner or crm.lead via model = res.partner or crm.lead and res_id = the migrated record's Odoo ID. Email type entries become mail.message with message_type = email; call and meeting entries become mail.message with subtype comment and a body noting the interaction type and duration.
GoldMine
Calendar / Appointments
Odoo CRM
calendar.event
1:1GoldMine appointments synced from Outlook or entered directly map to Odoo calendar.event records. We extract subject, start datetime, end datetime, location, and attendees. Attendees transfer as calendar.attendee records linked to the res.partner for external attendees and res.users for internal attendees. Recurring appointments are noted as exceptions in the event description and flagged for manual rebuild in Odoo Calendar if the customer uses recurring meeting patterns.
GoldMine
Documents and Attachments
Odoo CRM
ir.attachment
1:1GoldMine attachments stored as database BLOBs extract as binary files with their original filename and MIME type preserved. We re-upload each file as an Odoo ir.attachment record with res_model = res.partner or crm.lead and res_id = the migrated record's Odoo ID. GoldMine attachments stored as file paths on network shares require the file to be accessible at the path in the GoldMine database; any path returning a file-not-found error is flagged for the customer to restore from backup or skip. Attachments over 25MB are flagged for manual re-upload to avoid XML-RPC payload limits.
GoldMine
Projects (GoldMine Premium)
Odoo CRM
project.project + project.task
1:manyGoldMine Premium Project records map to Odoo project.project. Project tasks map to project.task with parent_id resolving the Odoo project ID. Milestone dates transfer as stage deadlines on project.task records. If the destination Odoo instance does not have the Project app installed, we map Projects to crm.lead records with custom fields for task names and milestone dates, and the customer installs the Project app during or after migration to promote these to native project records.
GoldMine
Custom Fields
Odoo CRM
ir.model.fields (Custom)
lossyGoldMine stores custom fields in separate extended columns linked to CONTACT1, COMPANIES, and other tables by RECID. We run a discovery query against the GoldMine database that enumerates all non-system columns, classifies each as char, float, integer, date, datetime, or selection (picklist), and presents the full inventory for mapping before any data moves. Each mapped custom field is pre-created in Odoo as an ir.model.fields record with the correct ttype, and the customer configures its label and placement in Odoo's form views via Studio after migration.
GoldMine
User
Odoo CRM
res.users
1:1GoldMine user accounts do not map automatically to Odoo res.users. We extract the full user roster including email, name, and active/inactive status. Matching is performed by email address. Any GoldMine user without a matching Odoo res.users account goes to a reconciliation queue for the customer's admin to provision before record import resumes. Inactive GoldMine users whose records need reassignment are flagged with the target owner for manual reassignment in Odoo before cutover.
GoldMine
Groups and Tags
Odoo CRM
crm.tag
lossyGoldMine groups, marketing lists, and tag-like labels stored on records map to Odoo crm.tag records. We extract all distinct group names, create corresponding crm.tag entries in Odoo, and apply them as tag_ids on the crm.lead records at migration time. If GoldMine groups represent marketing list membership rather than CRM pipeline tagging, we map them to a custom res.partner field (e.g., marketing_list_ids) rather than crm.tag, and the customer configures the segment in Odoo's Email Marketing app post-migration.
GoldMine
Sales Literature
Odoo CRM
ir.attachment (Document library)
1:1GoldMine's Sales Literature module files are exported as binary files and re-uploaded to Odoo ir.attachment with res_model = ir.ui.menu as a document library reference. We also attach each literature file to the related res.partner or crm.lead record it was referenced against in GoldMine so that sales reps find relevant materials in the record's attachment list. Literature metadata (document name, category, last modified) becomes the attachment's description field.
GoldMine
Duplicate Records
Odoo CRM
Mail Thread / Duplicate Detection
lossyGoldMine's dedupe relies on manual user action and does not store duplicate-group metadata. During migration, we run a pre-import deduplication pass on contact records using email address as the primary key and company name as a secondary key. Odoo's native duplicate detection (Contacts > mass duplicate action) is configured to flag the same keys post-migration. Any duplicates identified in GoldMine before migration are resolved manually in a staging pass before production import.
| GoldMine | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (Contact type)1:1 | Fully supported | |
| Company | res.partner (Company type)1:1 | Fully supported | |
| Opportunity | crm.lead (Pipeline stage)1:1 | Fully supported | |
| History / Activity Log | mail.message (Activity log)1:1 | Mapping required | |
| Calendar / Appointments | calendar.event1:1 | Mapping required | |
| Documents and Attachments | ir.attachment1:1 | Mapping required | |
| Projects (GoldMine Premium) | project.project + project.task1:many | Fully supported | |
| Custom Fields | ir.model.fields (Custom)lossy | Mapping required | |
| User | res.users1:1 | Fully supported | |
| Groups and Tags | crm.taglossy | Mapping required | |
| Sales Literature | ir.attachment (Document library)1:1 | Mapping required | |
| Duplicate Records | Mail Thread / Duplicate Detectionlossy | 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.
GoldMine gotchas
GoldMine support and updates end April 2026
No REST API requires direct database or XML API extraction
Communication history is the migration's highest-value and highest-risk object
Custom fields stored in extended tables require schema discovery
File attachments depend on server-side file paths that may be orphaned
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 GoldMine database audit
We audit the source GoldMine database to determine version (2018 through 2024.x), backend type (Paradox or SQL Server), and schema structure. We enumerate primary tables (CONTACT1, COMPANIES, PROJECTS, HISTORY), run the extended-table discovery query to surface all custom fields across non-system columns, count record volumes per object, sample the history table to classify encoding mix (plain text, HTML, MIME), and identify attachment storage type (BLOB or file path). This discovery output is a written scope document with record counts, custom field inventory, and a GoldMine EOL timeline risk assessment. We do not begin extraction until the customer signs off on the scope.
Odoo environment setup and schema design
We work with the customer to configure the destination Odoo CRM environment: install the CRM app (and Project app if GoldMine Premium Projects are in scope), create the pipeline and stage structure matching the GoldMine opportunity stage names, and pre-create all custom fields enumerated during discovery as ir.model.fields with correct ttype (char, integer, float, date, selection). Custom field labels and form-view placements are noted for Odoo Studio configuration post-migration. We access the destination Odoo instance via XML-RPC with an admin account and validate API connectivity and write permissions before test migration begins.
Test migration in Odoo staging
We run a full migration into the customer's Odoo staging environment (a separate Odoo database or a sandbox clone) with production-like data volume. The customer's administrator reviews 25-50 randomly sampled records against the GoldMine source, verifies that GoldMine RECID-to-Odoo external ID linkage is intact for activity history reattachment, spot-checks custom field values, and validates pipeline stage naming. Any field mapping corrections, stage value adjustments, or custom field type changes happen in staging before production migration begins. We do not proceed to production until the customer signs off on the staging migration report.
Attachment extraction and file re-upload preparation
We extract GoldMine attachments in parallel with record data. Database BLOBs are decoded and written to local storage with their original filenames and MIME types preserved. Network-share path attachments are fetched at the path referenced in the GoldMine record; any path returning a file-not-found error is flagged with the customer for resolution before cutover. Large attachments over 25MB are noted separately; the customer re-uploads these manually post-migration or transfers them via Odoo's document management app after cutover. We pre-stage all extracted files and validate counts against the GoldMine attachment reference table before production import.
Production migration in dependency order
We run production migration in dependency order: Odoo custom fields and pipelines first (schema deployment), then res.partner company records, then res.partner contact records with parent_id resolved to company partners, then crm.lead opportunities with stage_id and partner_id resolved, then mail.message activity history via chunked XML-RPC calls with parent-record lookup via the GoldMine RECID-to-external-ID map, then calendar.event appointments, then ir.attachment records, then crm.tag group membership, then project.project and project.task records. Each phase emits a row-count reconciliation report against the GoldMine source count before the next phase begins. Any records rejected during XML-RPC writes are logged with error reasons for a correction pass.
Cutover, final delta, and Workflow rebuild handoff
We freeze GoldMine writes during the cutover window (typically a 48-72 hour period), run a final delta migration of any records modified during the migration window, then set Odoo as the system of record. We deliver the Workflow and automation inventory document listing every GoldMine workflow rule and its Odoo Studio or server action equivalent for the customer's admin to rebuild post-migration. We support a one-week hypercare window where we resolve record reconciliation issues raised by the customer's team. We do not rebuild GoldMine automations as Odoo server actions inside the migration scope; that work is a separate engagement or an internal admin task using the delivered inventory.
Platform deep dives
GoldMine
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 GoldMine 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
GoldMine: Not publicly documented—rate limiting is not formally specified for GoldMine's XML API or COM-based integrations.
Data volume sensitivity
GoldMine 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 GoldMine to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your GoldMine 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 GoldMine
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.