CRM migration
Field-level mapping, validation, and rollback between OpenCRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
OpenCRM
Source
Salesforce Sales Cloud
Destination
Compatibility
9 of 12
objects map 1:1 between OpenCRM and Salesforce Sales Cloud.
Complexity
CModerate
Timeline
4-8 weeks
Overview
Moving from OpenCRM to Salesforce Sales Cloud is a migration from a flat-feature, per-user-priced UK mid-market CRM into the world's most widely deployed enterprise CRM platform. OpenCRM has no publicly documented REST API for automated extraction, so we pull data through the CSV export interface, staging each object with its full-column selection before transforming and loading into Salesforce via Bulk API. The OpenCRM schema uses Company as a foreign-key parent for Contacts, and Deals attach to either entity, so we import in dependency order — Companies first, then Contacts, then Deals — and validate linkage integrity at each phase. Pipeline stage names in OpenCRM are tenant-defined and rarely align with Salesforce StageName values, requiring a mapping table that we produce during scoping and present to the customer for confirmation before any Deal import runs. Workflows, automations, and email marketing configurations do not migrate; we deliver a written inventory of every active workflow and automation for the customer's admin to rebuild in Salesforce Flow.
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 OpenCRM object lands in Salesforce Sales Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
OpenCRM
Company
Salesforce Sales Cloud
Account
1:1OpenCRM Company records map directly to Salesforce Account. The Company name becomes Account Name, domain fields map to Website, and industry or sector fields map to Industry or a custom picklist. Account is the first object imported in all cases because Contacts carry a foreign-key reference to their parent Company. We validate that every Contact in the export has a valid Company before staging the import; orphaned Contacts (those with no parent Company) are flagged for the customer to resolve or to allow as standalone Contacts in Salesforce.
OpenCRM
Contact
Salesforce Sales Cloud
Contact
1:1OpenCRM Contact records map to Salesforce Contact. The AccountId lookup is resolved at migration time using the OpenCRM Company name as the matching key against the Account Name field, then cross-referenced to the Salesforce AccountId. Email address is used as a secondary dedupe check. Any Contacts without a valid Salesforce AccountId are held in a queue for resolution before import. Custom fields on Contact are mapped field-by-field during scoping, with type conversion applied (OpenCRM date pickers become Salesforce Date fields, checkbox fields map directly, and text fields map to Text or Long Text Area depending on content length).
OpenCRM
Deal
Salesforce Sales Cloud
Opportunity
1:1OpenCRM Deals map to Salesforce Opportunity. Deals that reference a Company map to Opportunity with AccountId resolved via the Company-to-Account mapping. Deals that reference a Contact directly require special handling: we set the Opportunity Contact Role to the Contact after Opportunity creation. Deal value maps to Amount, expected close date maps to CloseDate, and owner assignment maps via the Owner reconciliation step.
OpenCRM
Pipeline Stage
Salesforce Sales Cloud
Opportunity Stage
lossyOpenCRM allows full customisation of pipeline stage names per workflow, which means stage values are tenant-defined and almost never align 1:1 with Salesforce StageName values. We produce a stage-mapping table during scoping, present it to the customer for sign-off, and apply the mapping during the Deal import so each Opportunity lands in the correct Salesforce stage. Stage probability values migrate from OpenCRM to Salesforce StageProbability with rounding to the nearest integer.
OpenCRM
Activity (Call, Meeting, Task)
Salesforce Sales Cloud
Task, Event
1:1OpenCRM Activities (calls, meetings, tasks) are stored with date/time formats and owner fields that differ from Salesforce's UTC-normalised timestamps. We normalise all timestamps to UTC before loading, map OpenCRM owner names to Salesforce User IDs via the Owner lookup table, and import Activities as Salesforce Task (for calls and tasks) or Event (for meetings) records. Parent-entity linkage is resolved using the Contact or Company name lookup to produce the correct WhoId and WhatId on each activity record.
OpenCRM
Note
Salesforce Sales Cloud
Note
1:1OpenCRM Notes attached to contacts, companies, or deals migrate to Salesforce Note records. We preserve the parent-entity linkage by resolving the OpenCRM record reference to the corresponding Salesforce record ID (ContactId, AccountId, or OpportunityId) at migration time. Note body migrates as plain text; rich formatting is converted where possible and flagged where conversion is not supported.
OpenCRM
Attachment
Salesforce Sales Cloud
ContentDocument + ContentVersion
1:1File attachments stored against contacts, companies, or deals in OpenCRM are extracted via the UI and stored to a file store. We generate reference links in Salesforce and attach them via ContentDocumentLink to the corresponding Contact, Account, or Opportunity. PDF, DOCX, XLSX, PNG, and JPG formats are handled; unsupported binary formats are listed in the delivery document with a note to the customer on manual retrieval.
OpenCRM
User / Owner
Salesforce Sales Cloud
User
1:1OpenCRM owner assignments on Contacts, Companies, and Deals are mapped to Salesforce User records by email address. We build a lookup table during the scoping phase and match on exact email. Any OpenCRM Owner that does not have a corresponding Salesforce User record is flagged in the reconciliation queue for the customer's Salesforce admin to provision before record import resumes. Ownerless records (unassigned Deals or Contacts) are flagged separately.
OpenCRM
Tag / Label
Salesforce Sales Cloud
Multi-Select Picklist
lossyOpenCRM tag-based categorisation on contacts and companies migrates to Salesforce multi-select picklist fields on Contact and Account. Tags with fewer than 15 distinct values map cleanly; tags with high cardinality are flagged for the customer to choose between a multi-select picklist, a separate custom object, or Topics.
OpenCRM
Custom Field
Salesforce Sales Cloud
Custom Field
lossyOpenCRM custom fields on all primary objects (Contact, Company, Deal) are discovered per-tenant during scoping. Each custom field is mapped to an equivalent Salesforce custom field (with __c suffix) of matching or nearest-matching type. OpenCRM text custom fields map to Text; date fields map to Date; numeric fields map to Number or Currency depending on content. Custom field metadata (label, API name, data type, picklist values) is documented in the scoping deliverable before any data is touched.
OpenCRM
Email Marketing Campaign
Salesforce Sales Cloud
Campaign
1:1OpenCRM email marketing campaigns and their associated subscriber lists map partially to Salesforce Campaign and CampaignMember. We export the campaign name, list members, and opt-in status. Email content (templates, HTML bodies, images) does not migrate automatically; we deliver a campaign inventory document listing each OpenCRM campaign with its recipient list and recommended Salesforce CampaignMember Status values for the customer to rebuild in Salesforce Marketing Cloud or a third-party email tool.
OpenCRM
Product
Salesforce Sales Cloud
Product2 + PricebookEntry
1:1If OpenCRM Products are in scope, they map to Salesforce Product2 records with Standard Price Book entries created during import. Product code maps from OpenCRM SKU fields. Pricebook2 is set to the Salesforce org's Standard Pricebook for all line-item imports.
| OpenCRM | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Company | Account1:1 | Fully supported | |
| Contact | Contact1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Activity (Call, Meeting, Task) | Task, Event1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Attachment | ContentDocument + ContentVersion1:1 | Fully supported | |
| User / Owner | User1:1 | Fully supported | |
| Tag / Label | Multi-Select Picklistlossy | Fully supported | |
| Custom Field | Custom Fieldlossy | Fully supported | |
| Email Marketing Campaign | Campaign1:1 | Fully supported | |
| Product | Product2 + PricebookEntry1: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.
OpenCRM gotchas
Bulk import without CRM ID or ExternalID creates duplicate records
Import ordering dependency: Companies before Contacts
No documented public REST API for programmatic export
Pipeline stage names are tenant-defined and require manual mapping
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Discovery and scoping
We audit the OpenCRM tenant across all in-scope objects: Contacts, Companies, Deals, Activities (calls, meetings, tasks), Notes, Attachments, Tags, Custom Fields, Users, and any email marketing campaigns. We capture the full-column export for each object directly from the OpenCRM UI with the customer's admin performing the export while we observe the column selections. We also document active OpenCRM workflows and automations for the handoff inventory. The scoping output is a written migration scope, a custom field inventory, and a stage-mapping table for Deal pipeline stages.
Owner reconciliation and User provisioning
We extract every distinct OpenCRM owner referenced across Contact, Company, and Deal records and produce a matching table against the Salesforce destination org's User table using email as the key. Owners without a matching Salesforce User are listed in a reconciliation report for the customer's admin to provision or map to an active User before migration proceeds. Migration cannot run Contacts or Deals without resolved OwnerIds on most Salesforce objects, so this step is a hard gate.
Schema design and field mapping
We design the destination Salesforce schema in a Sandbox org before touching production. This includes custom fields on Contact, Account, and Opportunity (mapped from OpenCRM custom fields with type-conversion applied), any custom objects if in scope, Salesforce Record Types and Sales Processes for the pipeline stage mapping, and field-level security adjustments to allow the migration user profile to write to required fields. The schema is validated in Sandbox before production deployment.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox using production-like data volume or a representative subset. The customer's RevOps lead and Salesforce admin review record counts, spot-check 25-50 records per object for field-level accuracy against the OpenCRM source, and sign off the mapping before production migration begins. Any field mapping corrections, stage-mapping adjustments, or Owner resolution gaps are addressed in this phase, not in production.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from OpenCRM Companies), Contacts (with AccountId resolved), Opportunities (with AccountId, OwnerId, and StageName resolved via the stage-mapping table), Activities (Tasks and Events via Bulk API 2.0 with parent-entity WhoId and WhatId resolved), Notes (via ContentNote or Note with ContentDocumentLink), and Attachments (as ContentVersion records with ContentDocumentLink to parent records). Each phase emits a row-count reconciliation report and an error log before the next phase begins.
Cutover, validation, and automation handoff
We freeze OpenCRM write access during the cutover window, run a final delta migration of any records created or modified during the migration period, then enable Salesforce as the system of record. We deliver the OpenCRM Workflow and Automation inventory document listing every active workflow with its trigger, conditions, and actions, plus a recommended Salesforce Flow equivalent for the customer's admin or a Salesforce partner to rebuild. We support a one-week post-go-live window for reconciliation issues raised by the customer's team. We do not rebuild OpenCRM workflows as Salesforce Flow inside the migration scope; that is a separate engagement.
Platform deep dives
OpenCRM
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 4 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 OpenCRM and Salesforce Sales Cloud.
Object compatibility
4 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
OpenCRM: Not publicly documented.
Data volume sensitivity
OpenCRM 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 OpenCRM to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your OpenCRM to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave OpenCRM
Other ways to arrive at Salesforce Sales Cloud
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.