CRM migration
Field-level mapping, validation, and rollback between MetroLeads and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
MetroLeads
Source
Salesforce Sales Cloud
Destination
Compatibility
6 of 14
objects map 1:1 between MetroLeads and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from MetroLeads to Salesforce Sales Cloud is a lead-centric to lead-and-account model migration. MetroLeads organizes its entire data model around the Lead object, which carries state, source_tags, and lead_fields for tenant-specific custom properties, all nested under a Company via the /companies/{uuid}/leads/ API hierarchy. Salesforce splits prospects into a Lead object and qualified records into a Contact attached to an Account, which requires a lifecycle-stage split design upfront. MetroLeads also exposes custom property values keyed by internal IDs rather than human-readable names, requiring a schema catalog fetch before field mapping can proceed. We sequence the migration by exporting the property catalog first, extracting state values and merge-pending pairs during the discovery scan, then loading Accounts before Leads, resolving OwnerId by email match, and using the Bulk API 2.0 for event history. Workflows, Intellisearch scoring layers, and Advanced Data Module schema logic do not migrate 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 MetroLeads 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.
MetroLeads
Lead
Salesforce Sales Cloud
Lead or Contact (split required)
1:manyMetroLeads Leads with state values indicating unqualified prospects map to Salesforce Lead. Leads with state values indicating qualified buyers map to Salesforce Contact tied to a Salesforce Account. We extract all unique state values during discovery, present them to the customer for lifecycle-stage mapping, and apply the split rule during the transform phase before import. The original MetroLeads state value is preserved in a custom field ml_original_state__c on both Lead and Contact for audit and reporting continuity.
MetroLeads
Company
Salesforce Sales Cloud
Account
1:1MetroLeads Companies are parent containers for Leads via the /companies/{company_uuid}/leads/ API hierarchy. They map directly to Salesforce Account. We export Companies first, establish them as Account records, then resolve the parent-child relationship when Leads import by matching company_uuid to Account external ID. Account is always created before any child Lead import so the AccountId lookup is satisfied.
MetroLeads
Event
Salesforce Sales Cloud
Task, Event, or Note (split by event_type)
1:manyMetroLeads Events track engagement history tied to Leads, with a stable field structure and event_type distinguishing call, email, meeting, and task variants. We split by event_type during export: call events map to Salesforce Task with TaskSubtype=Call and CallDisposition; email events map to Salesforce Task with an associated EmailMessage record; meeting events map to Salesforce Event; general task events map to Salesforce Task. Event-to-Lead associations are preserved via WhoId resolution at migration time.
MetroLeads
Intellisearch
Salesforce Sales Cloud
Custom Object or Salesforce Topic
lossyIntellisearch is a MetroLeads-specific lead scoring and saved-search layer that applies algorithmic scoring to Lead data. The scoring logic, weighting rules, and saved search criteria do not map 1:1 to standard Salesforce objects. We export the raw Intellisearch configuration as a JSON payload and deliver it as a written specification document. Salesforce admins can rebuild scoring logic as a custom object with formula fields and custom scoring rules, or as Salesforce Einstein Activity Capture scoring if Einstein is licensed.
MetroLeads
Advanced Data Module
Salesforce Sales Cloud
Custom Object (__c)
1:1Advanced Data Modules are tenant-specific data structures extending MetroLeads's base schema, with field definitions that vary per organization. We export the module schema alongside all records during discovery. Each module maps to a Salesforce custom object with __c suffix, with field types matched (text to Text, number to Number, date to Date). Lookup fields on Advanced Data Modules that reference Leads or Companies are resolved to Salesforce IDs during the transform phase before import.
MetroLeads
User
Salesforce Sales Cloud
User
1:1MetroLeads User records (id, name, role assignments) export by email match against the destination Salesforce org's User table. Owner references on Leads and Companies resolve to OwnerId via email lookup. Any MetroLeads User without a matching Salesforce User is held in a reconciliation queue; the customer's Salesforce admin provisions the missing Users before record import resumes.
MetroLeads
Phone
Salesforce Sales Cloud
Contact Phone (standard and custom fields)
1:1MetroLeads Phones are embedded arrays within Lead records with type (Work, Mobile, etc.) and phone number. We flatten these into Salesforce Contact standard phone fields (Phone, MobilePhone) and custom Phone type fields (ml_phone_work__c, ml_phone_mobile__c) matching the type metadata. Phone number formatting is preserved as-is during import; Salesforce validation rules for phone format should be reviewed before migration.
MetroLeads
Salesforce Sales Cloud
Contact Email (standard and custom fields)
1:1MetroLeads Emails are embedded arrays within Lead records with type and address. We extract Work and Personal email addresses into the Contact standard Email and HomeEmail fields, with additional type-specific addresses mapped to custom fields (ml_email_work__c, ml_email_personal__c). Email addresses are validated for format before import to prevent rejection by Salesforce email validation rules.
MetroLeads
Lead Fields (Custom Properties)
Salesforce Sales Cloud
Custom Fields (__c)
lossyMetroLeads lead_fields on each Lead store tenant-specific custom property values keyed by property ID (e.g. customer_id_070). Property naming conventions are per-tenant and not self-describing. We fetch the full MetroLeads property schema catalog first, build an ID-to-name mapping, then apply that mapping during field mapping so destination custom fields use human-readable names derived from the schema. Custom field types are inferred from the property value types in the schema catalog.
MetroLeads
Source Tags
Salesforce Sales Cloud
Multi-Select Picklist or Custom Tag Field
lossysource_tags are string arrays on MetroLeads Lead records indicating lead disposition (e.g. disposition_answered). We export the raw tag strings and map them to a Salesforce multi-select picklist on Lead (ml_source_tags__c) if the tag cardinality is under 150 unique values. If cardinality exceeds Salesforce's multi-select limit, we create a custom tag-lookup object and TopicAssignment records for each tag reference.
MetroLeads
Lead State
Salesforce Sales Cloud
Lead Status or Custom Lifecycle Stage Field
lossyMetroLeads Lead state is a tenant-configured string field (e.g. contacted) representing lifecycle stage. Valid values vary by tenant, meaning 'contacted' in one MetroLeads instance may not exist in another. We extract all unique state values during the discovery scan, present them to the customer for lifecycle-stage mapping, and flag any unmapped values so no records are orphaned with an unresolvable state. Mapped values populate Salesforce Lead Status or a custom ml_original_lifecycle__c field.
MetroLeads
Lead Group
Salesforce Sales Cloud
Campaign, List, or Custom Grouping Field
lossylead_group is a MetroLeads-specific UUID reference grouping related Leads. This is not a standard CRM concept in Salesforce. We export the lead_group UUID and the set of Leads sharing each group. Options for destination mapping include Campaign membership (each group becomes a Campaign with Leads as CampaignMembers), a shared List, or a custom grouping custom field (ml_lead_group__c) holding the original UUID for reference. The customer selects the preferred grouping strategy during scoping.
MetroLeads
Lead (merge-pending pairs)
Salesforce Sales Cloud
Lead (deduplication during import)
lossyMetroLeads merge-pending Lead pairs are identified during the export scan by checking the merge API's pending state. When two Leads should be merged in MetroLeads, we present the pair to the customer for explicit survivor selection before executing the Salesforce import. The survivor record absorbs fields from the merged record per the customer's preference, and the duplicate record is excluded from import. This prevents silent field overwrites that the MetroLeads merge API's default primary-field-priority behavior would otherwise cause.
MetroLeads
Phone (VOIP call log)
Salesforce Sales Cloud
Task (TaskSubtype = Call)
1:1MetroLeads native cloud telephony embeds call logs directly in Lead records. These call log records export as Task objects with TaskSubtype=Call, CallDurationInSeconds, CallDisposition, and a CallRecordingUrl custom field pointing to the VOIP recording. The WhatId on the Task points to the parent Lead (or converted Contact after split). Call timestamps preserve the original MetroLeads call time for activity timeline ordering.
| MetroLeads | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Lead | Lead or Contact (split required)1:many | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Event | Task, Event, or Note (split by event_type)1:many | Fully supported | |
| Intellisearch | Custom Object or Salesforce Topiclossy | Mapping required | |
| Advanced Data Module | Custom Object (__c)1:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Phone | Contact Phone (standard and custom fields)1:1 | Fully supported | |
Contact Email (standard and custom fields)1:1 | Fully supported | ||
| Lead Fields (Custom Properties) | Custom Fields (__c)lossy | Mapping required | |
| Source Tags | Multi-Select Picklist or Custom Tag Fieldlossy | Fully supported | |
| Lead State | Lead Status or Custom Lifecycle Stage Fieldlossy | Mapping required | |
| Lead Group | Campaign, List, or Custom Grouping Fieldlossy | Mapping required | |
| Lead (merge-pending pairs) | Lead (deduplication during import)lossy | Fully supported | |
| Phone (VOIP call log) | Task (TaskSubtype = Call)1: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.
MetroLeads gotchas
Merge API field priority can silently overwrite data
Custom lead_fields use property IDs not property names
Tenant-specific state values require pre-migration catalog
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 property catalog extraction
We audit MetroLeads across the full object inventory: Leads (with lead_fields and state values), Companies, Events (split by event_type), Intellisearch configuration, Advanced Data Modules (schema plus records), Users, and any merge-pending Lead pairs. We specifically fetch the property schema catalog first to build the ID-to-name mapping for custom lead_fields. We extract all unique state values for lifecycle-stage mapping and present them to the customer. The discovery output is a written migration scope, property mapping table, state-value mapping table, and a Salesforce edition recommendation (Professional at $80/user for most migrations; Enterprise at $165/user if custom objects exceed 10 or Flow at scale is required).
Schema design and Salesforce sandbox setup
We design the destination Salesforce schema in a Sandbox org. This includes creating all custom fields (with __c suffix matching the MetroLeads property names from the schema catalog), Advanced Data Module custom objects, Record Types and Sales Processes if multiple pipelines exist, Page Layouts per Record Type, and any custom tag or grouping objects. Field types are matched to MetroLeads property value types. The schema is deployed via metadata API or change set and validated before any data import begins.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox (Full Copy or Partial Copy) using production-like data volume. The customer's Salesforce admin reconciles record counts (Accounts in, Leads in, Contacts in, Tasks in, Events in), spot-checks 25-50 random records against MetroLeads source data, and validates custom field completeness. Merge-pending pair survivor decisions are confirmed during this phase. Any mapping corrections, validation rule conflicts, or field type mismatches are resolved here, not in production.
Owner reconciliation and User provisioning
We extract every distinct MetroLeads User referenced on Lead, Company, and Event records and match by email against the destination Salesforce org's User table. Users without a matching Salesforce User are placed in a reconciliation queue. The customer's Salesforce admin provisions missing Users (active or inactive matching the MetroLeads user's active status). Migration cannot proceed past this step because OwnerId references are required on Lead, Account, and Opportunity records, and any unresolved owner reference causes record rejection during import.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from MetroLeads Companies) first, then Leads and Contacts with the lifecycle-stage split applied, then Opportunities (if applicable), then Events split by type (Tasks via Bulk API 2.0 with Call subtype for VOIP logs, Events for meetings, EmailMessages for emails), then Advanced Data Module records, then Intellisearch configuration spec, and finally custom field data for tag and grouping assignments. Each phase emits a row-count reconciliation report before the next phase begins. Bulk API 2.0 chunking handles large event volumes with exponential backoff on rate limit responses.
Cutover, validation, and automation rebuild handoff
We freeze MetroLeads writes during the cutover window, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the Intellisearch configuration JSON spec, Advanced Data Module schema spec, and a written inventory of every MetroLeads workflow automation requiring rebuild in Salesforce Flow. We support a one-week hypercare window for reconciliation issues raised by the sales team. We do not rebuild MetroLeads workflows or Intellisearch scoring logic as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
MetroLeads
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 MetroLeads 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
MetroLeads: Not publicly documented in the available research data.
Data volume sensitivity
MetroLeads 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 MetroLeads to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your MetroLeads 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 MetroLeads
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.