CRM migration

Migrate from MetroLeads to Salesforce Sales Cloud

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 logo

MetroLeads

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

43%

6 of 14

objects map 1:1 between MetroLeads and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

MetroLeads logo

MetroLeads

What's pushing teams away

  • Reporting and analytics features lack customization depth, with limited dashboard options for drag-and-drop insight building and graphical trend visualization.
  • Integration ecosystem is narrower than enterprise CRMs, making it difficult to connect specialized tools as the business scales beyond the built-in connectors.
  • Small review sample size on public platforms makes independent quality assessment difficult before committing to a contract.

Choosing

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How MetroLeads objects map to Salesforce Sales Cloud

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

maps to

Salesforce Sales Cloud

Lead or Contact (split required)

1:many
Fully supported

MetroLeads 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

maps to

Salesforce Sales Cloud

Account

1:1
Fully supported

MetroLeads 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

maps to

Salesforce Sales Cloud

Task, Event, or Note (split by event_type)

1:many
Fully supported

MetroLeads 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

maps to

Salesforce Sales Cloud

Custom Object or Salesforce Topic

lossy
Mapping required

Intellisearch 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

maps to

Salesforce Sales Cloud

Custom Object (__c)

1:1
Fully supported

Advanced 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

maps to

Salesforce Sales Cloud

User

1:1
Fully supported

MetroLeads 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

maps to

Salesforce Sales Cloud

Contact Phone (standard and custom fields)

1:1
Fully supported

MetroLeads 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

Email

maps to

Salesforce Sales Cloud

Contact Email (standard and custom fields)

1:1
Fully supported

MetroLeads 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)

maps to

Salesforce Sales Cloud

Custom Fields (__c)

lossy
Mapping required

MetroLeads 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

maps to

Salesforce Sales Cloud

Multi-Select Picklist or Custom Tag Field

lossy
Fully supported

source_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

maps to

Salesforce Sales Cloud

Lead Status or Custom Lifecycle Stage Field

lossy
Mapping required

MetroLeads 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

maps to

Salesforce Sales Cloud

Campaign, List, or Custom Grouping Field

lossy
Mapping required

lead_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)

maps to

Salesforce Sales Cloud

Lead (deduplication during import)

lossy
Fully supported

MetroLeads 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)

maps to

Salesforce Sales Cloud

Task (TaskSubtype = Call)

1:1
Fully supported

MetroLeads 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.

Gotchas + challenges

What specifically takes care here

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 logo

MetroLeads gotchas

High

Merge API field priority can silently overwrite data

Medium

Custom lead_fields use property IDs not property names

Medium

Tenant-specific state values require pre-migration catalog

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • Merge-pending Lead pairs can silently lose fields during import

    MetroLeads merge API defaults to primary-record field priority when two Leads conflict, silently dropping secondary record values if the wrong primary is passed or retain_fields is omitted. We identify merge-pending pairs during the export phase by querying the merge API's pending state, present each pair to the customer for explicit survivor confirmation, and exclude the nonsurvivor from the Salesforce import. Skipping this step results in field data loss that is not visible until a sales rep notices missing information on a Lead record.

  • Custom lead_fields use property IDs not human-readable names

    MetroLeads lead_fields on each Lead store values keyed by internal property IDs (e.g. customer_id_070) rather than property names. The property name catalog is a separate API call. We fetch the full property schema first, build an ID-to-name mapping, and apply that mapping during field mapping so Salesforce custom fields use readable names derived from the schema catalog. Without this step, destination custom fields carry MetroLeads internal IDs as field labels, making them unusable by the customer's admin.

  • Tenant-configured state values require pre-migration catalog and mapping

    MetroLeads Lead state accepts tenant-configured string values, meaning 'contacted' in one instance may not exist in another. We extract all unique state values during the export scan, present them to the customer for lifecycle-stage mapping, and flag any unmapped values so no records are orphaned with an unresolvable state during Salesforce import. The mapping table is a required input before any Lead import begins.

  • Salesforce validation rules and field-level security block record imports

    Salesforce orgs commonly enforce required field formats, conditional required fields, picklist whitelists, and field-level security that reject records from external imports. We coordinate with the customer's Salesforce admin to grant the migration user Modify All Data and Bulk API permissions, and either temporarily disable validation rules during load or extend them with a migration-context check. Without this coordination, 5-30 percent of imported records are rejected on first attempt, requiring reprocessing and delaying cutover.

  • Intellisearch scoring logic and Advanced Data Module schema do not migrate as data

    MetroLeads Intellisearch applies a lead-scoring algorithm built on top of Lead data, and Advanced Data Modules contain tenant-specific schema logic that extends the base Lead object. These are configuration and logic layers, not raw data records. We export Intellisearch raw configuration as a JSON spec and Advanced Data Module schema alongside records, but the scoring algorithms and schema logic must be rebuilt in Salesforce as custom objects, formula fields, or Flow logic. We deliver a written specification for the rebuild but do not implement it inside the migration scope.

Migration approach

Six steps for a successful MetroLeads to Salesforce Sales Cloud data migration

  1. 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).

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

MetroLeads logo

MetroLeads

Source

Strengths

  • Unified CRM, telephony, and lead capture in a single platform reduces vendor fragmentation.
  • Automatic lead deduplication prevents duplicate records on import.
  • Native cloud VOIP with call logging integrated directly into the Lead record.
  • Workflow automation for reminders and follow-up sequences is built in.
  • Omni-channel engagement tracking across voice, email, and web.

Weaknesses

  • Limited review corpus on public platforms makes independent quality assessment challenging.
  • Analytics and reporting lack advanced visualization and customization options.
  • Smaller integration ecosystem compared to enterprise-grade CRMs.
  • No publicly documented pricing tiers on the main website.
  • Limited evidence of advanced customization options for enterprise-scale deployments.
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

Complexity grading

How hard is this migration?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across MetroLeads and Salesforce Sales Cloud.

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    MetroLeads: Not publicly documented in the available research data.

  • Data volume sensitivity

    B

    MetroLeads doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your MetroLeads to Salesforce Sales Cloud migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about MetroLeads to Salesforce Sales Cloud data migrations

Answers to the questions buyers ask most during MetroLeads to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most migrations land between four and six weeks for accounts under 20,000 Leads, 3,000 Companies, and no Advanced Data Modules with clean state-value mapping. Migrations with Advanced Data Module custom schema, large event histories (over 200,000 records), merge-pending Lead pairs requiring explicit survivor confirmation, or complex lead_group UUID groupings move to ten to sixteen weeks because of property catalog resolution, merge reconciliation, and Bulk API time for engagement history.

Adjacent paths

Related migrations to explore

Ready when you are

Move from MetroLeads.
Land in Salesforce Sales Cloud, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day