CRM migration
Field-level mapping, validation, and rollback between Metis CRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
Metis CRM
Source
Salesforce Sales Cloud
Destination
Compatibility
7 of 12
objects map 1:1 between Metis CRM and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Metis CRM to Salesforce Sales Cloud is a migration from a client-centric professional services platform to an enterprise CRM with a full data model. Metis organizes its data around Clients, Opportunities, Jobs, People, Timesheets, and Expenses with no public API — all extraction runs through per-zone CSV exports. We sequence the export starting with parent objects (Clients, People) before child records (Opportunities, Jobs, Timesheets) to preserve relationships, handle receipt images as a separate file transfer, and flag orphan time entries that have no linked Job for customer resolution before final import. Salesforce's Account, Contact, Opportunity, and custom object model accommodates Metis's client-centric schema with configuration work on pipeline stages and opportunity record types. We do not migrate Workflows, automations, or reports as code; we deliver a written inventory 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 Metis CRM 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.
Metis CRM
Clients
Salesforce Sales Cloud
Account
1:1Metis Client records map directly to Salesforce Account. The client name becomes Account Name, primary contact details map to the Account's standard contact fields, and client status maps to an Account Status custom picklist. We extract the Clients zone CSV as the first migration step because Account is the parent of Contact and the lookup target for Opportunity (WhatId) and any custom Job object. Clients with multiple primary contacts generate an Account with multiple Contact records via the People zone mapping.
Metis CRM
People
Salesforce Sales Cloud
Contact
1:1Metis People records map to Salesforce Contact. First name, last name, email, phone, role, and address fields transfer directly. The parent Client ID from Metis resolves to an Account ID in Salesforce during import so that every Contact has an Account lookup. People records are extracted from the People zone CSV as the second migration step after Accounts are confirmed in Salesforce.
Metis CRM
Opportunities
Salesforce Sales Cloud
Opportunity
1:1Metis Opportunity records map to Salesforce Opportunity. The pipeline stage value, estimated value, probability, and close date transfer to Opportunity StageName, Amount, Probability, and CloseDate. The parent Client lookup resolves to the Account ID. We configure a Salesforce Record Type and Sales Process that matches the Metis pipeline structure before migration begins so that stage values are whitelisted at import time.
Metis CRM
Jobs
Salesforce Sales Cloud
Opportunity or Custom Project Object
lossyMetis Jobs are project records with client association, status, dates, and costing fields. Salesforce has no native project object in Sales Cloud, so we configure this mapping in one of two ways during scoping: Jobs become Opportunities with a Project record type (preferred for sales-cycle-adjacent project tracking), or Jobs become a custom Project__c object with an Account lookup and Opportunity lookup (preferred for agency and professional services teams that need job costing separate from pipeline forecasting). The customer selects the strategy before migration. Job costing fields map to custom numeric fields on the destination object.
Metis CRM
Timesheets
Salesforce Sales Cloud
Task or Custom Time Entry Object
lossyMetis Timesheets export from the Manage zone as a structured grid with person association, date, hours, billable/non-billable flags, and optional Job linkage. For billable time tied to a Job, we map to a custom Time_Entry__c object linked to the Project (Job) and Contact (Person). Non-billable or general logged time maps to Salesforce Task with ActivityDate set to the timesheet entry date. Orphan time entries — timesheet rows with no Job association — are flagged in the pre-migration audit and presented to the customer with three options: assign to a default project, skip, or create placeholder Jobs for them.
Metis CRM
People Expenses
Salesforce Sales Cloud
ContentNote + Attachment or Custom Expense Object
1:1Metis People Expenses export from the Manage zone with expense category, amount, date, and person association. The receipt image is stored as a separate file outside the CSV. We map expense records to a custom Expense__c object with Amount, Date, Category, and Contact lookup. Receipt images transfer via parallel file transfer and re-attach as ContentDocumentLink records linked to the corresponding Expense__c record. Each expense record is flagged in the migration log with an image-reattachment confirmation note for the customer's post-migration review.
Metis CRM
Central Expenses
Salesforce Sales Cloud
Custom Expense Object
1:1Metis Central Expenses are agency-level overhead costs exported from the Manage zone separately from People Expenses. Receipt images are also stored as separate files. We map Central Expenses to a second custom Expense__c variant (expense_type = 'Central') with no Contact lookup, linked to the Account or a custom Agency_Overhead__c object. Receipt re-attachment follows the same parallel file transfer and ContentDocumentLink pattern as People Expenses.
Metis CRM
Resourcing Report
Salesforce Sales Cloud
Custom Resource Allocation Object
1:1Metis Resourcing reports are filtered views combining People availability with Job assignments — they are not transactional objects. We extract the underlying source data (People zone for availability, Jobs zone for assignments) and construct a custom Resource_Allocation__c object in Salesforce with fields for Person (Contact), Project (Job), start date, end date, and utilization percentage. Utilization percentage is computed from the source data and stored as a custom field.
Metis CRM
Owner (Person role)
Salesforce Sales Cloud
User
1:1Metis People with a user-facing role map to Salesforce User by email match. We extract all distinct Metis users referenced on Opportunities, Jobs, and Timesheets and match them against the Salesforce User table by email address. Any Metis user without a matching Salesforce User goes to a reconciliation queue for the customer's admin to provision before record import resumes.
Metis CRM
Client Contacts
Salesforce Sales Cloud
AccountContactRelation
1:manyMetis allows multiple People records linked to a single Client. After mapping People to Contacts and Clients to Accounts, we create AccountContactRelation records for each Person-Client link to represent the full contact hierarchy in Salesforce. The primary contact flag from Metis maps to the IsPrimary field on AccountContactRelation.
Metis CRM
Job Status
Salesforce Sales Cloud
Opportunity Stage or Custom Status Picklist
lossyMetis Job status values (Active, On Hold, Completed, Cancelled) map to a custom status picklist on the Project record type or Opportunity stage if Jobs are mapped to Opportunities. We configure the picklist values before migration so that imported Jobs land in the correct status without triggering validation rule rejections.
Metis CRM
Opportunity Stage
Salesforce Sales Cloud
Opportunity Stage
lossyEach Metis pipeline and its stages map to a Salesforce Sales Process and corresponding StageName values on Opportunity. Stage probabilities transfer from Metis to Salesforce StageProbability, rounded to the nearest integer. We deploy the stage configuration to a Sandbox org first for validation before production migration.
| Metis CRM | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Clients | Account1:1 | Fully supported | |
| People | Contact1:1 | Fully supported | |
| Opportunities | Opportunity1:1 | Fully supported | |
| Jobs | Opportunity or Custom Project Objectlossy | Fully supported | |
| Timesheets | Task or Custom Time Entry Objectlossy | Mapping required | |
| People Expenses | ContentNote + Attachment or Custom Expense Object1:1 | Mapping required | |
| Central Expenses | Custom Expense Object1:1 | Mapping required | |
| Resourcing Report | Custom Resource Allocation Object1:1 | Mapping required | |
| Owner (Person role) | User1:1 | Fully supported | |
| Client Contacts | AccountContactRelation1:many | Fully supported | |
| Job Status | Opportunity Stage or Custom Status Picklistlossy | Fully supported | |
| Opportunity Stage | Opportunity Stagelossy | 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.
Metis CRM gotchas
No public API forces CSV-only migration paths
Receipt images exported as separate files outside the main CSV
Orphan time entries without a linked Job
Xero-friendly export is a destination format, not a source object
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 zone export audit
We audit the source Metis CRM account across all zones: Clients, Opportunities, Jobs, People, Timesheets, People Expenses, Central Expenses, and Resourcing Reports. We assess record counts per zone, identify any custom fields or zone-specific columns, locate receipt image file storage, and flag orphan time entries (timesheet rows with no Job association). We pair this with a Salesforce destination review: which edition is the customer targeting, what existing custom objects or Record Types are present, and are there active validation rules or field-level security that will block import. The discovery output is a written migration scope with zone-by-zone record counts and a Salesforce edition recommendation.
Schema design and Project object strategy
We design the destination schema in Salesforce based on the scoping decision for Jobs: custom Project__c object with Account and Opportunity lookups, or Opportunity with a Project record type. We create all custom fields (job costing fields, expense fields, utilization fields, hs_original_lifecycle__c analog fields), configure Record Types and Sales Processes for pipeline alignment, and deploy to a Salesforce Sandbox for validation. This step resolves the Jobs mapping before any data moves and ensures that the parent lookup references exist at migration time.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox (Full Copy or Partial Copy) using production-like data volume extracted from the Metis CSV zones. The customer's RevOps or admin lead reconciles record counts (Accounts in, Contacts in, Opportunities in, custom Project records in, Time Entries in, Expenses in), spot-checks 25-50 random records against the Metis source, and signs off the schema and mapping before production migration begins. Orphan time entry decisions are made and documented at this stage. Any mapping corrections happen here, not in production.
Owner and User reconciliation
We extract every distinct Metis user referenced on Opportunity, Job, and Timesheet records and match by email against the Salesforce destination org's User table. Metis users without a matching Salesforce User go to a reconciliation queue. The customer's Salesforce admin provisions any missing Users (active or inactive depending on whether the original Metis user is still active). Migration cannot proceed past this step because OwnerId references are required on most standard objects and custom Project records.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from Metis Clients), Contacts (from Metis People with AccountId resolved via Client ID), custom Project records or Opportunities from Jobs (with AccountId and OwnerId resolved), Opportunities from Metis (with AccountId, OwnerId, and RecordTypeId resolved), custom Time Entry records and Tasks from Timesheets (with Contact and Project resolved; orphan entries held per customer decision), custom Expense records from People Expenses and Central Expenses, and receipt images via parallel file transfer with ContentDocumentLink attachment. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and Workflow rebuild handoff
We freeze Metis access during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver a written inventory of any automations, reports, or dashboards that require rebuild in Salesforce Flow or Reports — noting that Metis automations do not migrate as code and must be reconstructed by the customer's admin or a Salesforce partner. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's team. We do not rebuild Metis automations as Salesforce Flow inside the migration scope; that is a separate engagement.
Platform deep dives
Metis CRM
Source
Strengths
Weaknesses
Salesforce Sales Cloud
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 Metis CRM and Salesforce Sales Cloud.
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
Metis CRM: Not publicly documented.
Data volume sensitivity
Metis 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 Metis CRM to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your Metis CRM 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 Metis CRM
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.