Salesforce Migration Problems: A 7-Step Prevention Playbook

Salesforce Migration Problems: 2026 RevOps Survival Guide

Content

Written by: Doug Camplejohn, CEO & Co-Founder, Coffee | Last updated: August 11, 2026

Key Takeaways for a Clean Salesforce Migration

  • Dirty source data, broken relationships, and active automations cause most Salesforce migrations to fail and create weeks of cleanup.
  • Follow a strict seven-step sequence of profiling, sequencing, disabling automations, External IDs, batching, reconciliation, and governance to avoid orphaned records and API-limit blocks.
  • Correct parent-child object order, External ID mapping, and Bulk API 2.0 batching keep relationships intact and prevent governor-limit failures.
  • Post-load reconciliation plus ongoing governance controls stop data drift from returning within 90 days of go-live.
  • Start your Coffee trial to automate data capture and keep Salesforce clean without manual entry.

Salesforce Migration Best Practices: A Practical 7-Step Sequence

The following seven-step sequence addresses the most common failure points in the right order. Each step includes a representative error table and a one-sentence reconciliation checklist.

Step 1: Data Profiling and Quality Assessment Before Any Mapping

Early data profiling detects missing values, invalid formats, mismatched field types, duplicates, and relationship-link issues before import. Run profiling against every object in scope and document findings in a remediation log before any mapping work begins.

Issue Type Example Error Root Cause Fix
Missing required field Contact loads without AccountId Source system allowed null on foreign key Assign a default or placeholder Account before load
Invalid format Phone field contains letters Legacy system had no format validation Normalize to E.164 during transformation
Duplicate records Same Account appears twice with different IDs No deduplication in source CRM Merge before export; deduplicate before enrichment
Orphan child records Opportunity with no parent Account Account deleted in source after Opportunity created Measure orphan rate; resolve or exclude before load

Reconciliation checklist: Confirm that orphan rate, duplicate rate, and null-field percentage are documented and below defined thresholds before advancing to Step 2.

Step 2: Loading Parent and Child Objects in the Right Order

Child records must not be loaded before their parent records exist, because Salesforce enforces referential integrity at the point of insert. Load objects in dependency order, typically starting with Users, Accounts, and Contacts, then loading Products, Opportunities, Cases, and Custom Objects.

Object Depends On Common Error Fix
Contacts Accounts INVALID_CROSS_REFERENCE_KEY on AccountId Load Accounts first, then map via External ID
Opportunities Accounts, Contacts Opportunity orphaned from Account Confirm Account External IDs resolve before load
Activities Contacts, Accounts, Opportunities WhatId or WhoId reference fails Load all parent objects before the Activity wave
Custom Objects Varies by lookup Lookup field returns null Map the dependency graph before sequencing

Reconciliation checklist: Verify that each object wave success file contains zero INVALID_CROSS_REFERENCE_KEY errors before loading the next dependent object.

Step 3: Turning Off Automations Before the First Record Loads

Legacy triggers, flows, and notifications can fire unexpectedly during migration and create chaos. Document every active automation, then disable validation rules, triggers, flows, assignment rules, duplicate rules, and email alerts before the first record loads.

Automation Type Migration Risk Symptom Fix
Email alerts Sends welcome emails to migrated contacts Mass unsubscribes from legacy contacts Disable before load, then re-enable post-reconciliation
Validation rules Blocks records with legacy field formats Entire batch fails on one rule Disable or adjust criteria for the migration window
Assignment rules Routes records to wrong owners Leads assigned to inactive users Disable, then manually assign owners post-load
Duplicate rules Blocks legitimate historical records Load fails on records that are not true duplicates Disable during load, then re-enable after a deduplication pass

Reconciliation checklist: Maintain a written inventory of every disabled automation and confirm each is re-enabled and tested before user acceptance testing begins.

Step 4: Using External IDs to Keep Relationships Intact

Load parent records first with the legacy ID populated in an External ID field, save the Data Loader success file as the canonical ID map, then load child records by referencing the parent object’s External ID field. External IDs enable reliable relationship mapping by allowing Salesforce to match records using source system IDs instead of Salesforce record IDs.

Configuration Step Common Mistake Consequence Best Practice
Field length Field too short for source IDs Truncated IDs cause false matches Set 36 characters minimum for Dynamics GUIDs
Unique checkbox Unique not enabled Multiple records match on upsert, 300 error returned Enable Unique when the source system guarantees uniqueness
Naming convention Inconsistent field names across objects Mapping errors in Data Loader configuration Use consistent naming such as Legacy_ID__c across all objects
Field-level security Migration user cannot read External ID field Upsert silently skips relationship resolution Update FLS and page layouts before load

Reconciliation checklist: Confirm that every child object lookup field maps to the parent External ID field in the Data Loader configuration, with zero manual Salesforce ID insertions.

Step 5: Managing Batches and API Limits During High-Volume Loads

Use Bulk API 2.0 for large loads, break datasets into jobs of 10,000–50,000 records, and poll job status instead of assuming completion. To avoid throttling and stalled jobs, monitor consumption and schedule loads during low-activity windows.

Limit Type Threshold Failure Mode Mitigation
Bulk API 2.0 daily volume Organization-dependent daily volume limits Jobs queued or rejected after limit hit Schedule waves across multiple low-traffic windows
DML governor limit 150 DML statements, 10,000 rows per transaction Apex triggers abort mid-batch Bulkify all triggers before migration begins
Duplicate IDs in batch Any duplicate in same batch Immediate failure: “Duplicate Id Specified” Deduplicate CSV before upload, then review the failed-results file after every job
allOrNone behavior Default: true One bad record rolls back the entire batch Set allOrNone: false for partial success handling

Reconciliation checklist: Download and inspect the failed-results file after every Bulk API job, because a job marked “completed” can still contain individual record failures that need correction and resubmission.

Step 6: Checking Data Accuracy After the Load Finishes

Start reconciliation immediately after load with record-count checks across objects, then run checksum comparisons, field-level validation on business-critical data, and business-rule validation on transactional records. Plan a two-week post-migration review window to track and resolve data anomalies that only surface once users work with migrated data in production.

Validation Layer What to Check Common Finding Resolution
Record counts Source vs. Salesforce totals per object Batch dropped mid-load due to timeout Reload missing batch using External ID upsert
Referential integrity Every child record has a resolvable parent Orphaned Contacts with null AccountId Run orphan query, then assign to placeholder or correct Account
Field-level accuracy Spot-check transformed fields Date fields shifted by timezone offset Correct transformation logic, then reload affected records
Business-rule validation Domain logic, such as close date not before create date Order with ship date before order date Flag for business review, then correct at source before re-import

Reconciliation checklist: Obtain documented business sign-off on record counts, referential integrity, and business-rule validation before declaring the migration complete.

Step 7: Governing Data Quality After Go-Live

Without ongoing governance, post-migration data drift returns CRM records to a dirty state within 90 days. CRM data decays at a rate of 30% annually because of job changes, acquisitions, and contact updates. To counter this decay, implement four minimum controls: required fields on create, validation rules for phone and email formats, a weekly hygiene report, and a named data owner.

Governance Control Frequency What It Prevents Owner
Required-field enforcement On every record create Incomplete records entering the system Salesforce Admin
Duplicate rule monitoring Weekly report Duplicate accumulation post-go-live RevOps
Stale record detection Monthly enrichment refresh Contacts with outdated titles or emails RevOps / Agent automation
Relationship integrity audit Quarterly orphan query Orphaned child records from deletions Salesforce Admin

Reconciliation checklist: Assign a named owner to each governance control and confirm automated alerts are active before closing the migration project.

See Coffee pricing and remove the manual overhead that turns every one of these steps into a recurring burden.

Stopping Future Migration Problems with Agent Automation

The seven steps above solve the immediate migration, but they do not address the ongoing decay that keeps returning. AI agents continuously monitor CRM records, enrich missing data, merge duplicates, and flag data quality issues automatically, reducing recurring cleanup work after migrations and delivering an 80% reduction in manual data work while maintaining 95%+ data accuracy. Given the 30% annual decay rate mentioned earlier, manual processes cannot match the cadence required to maintain data quality.

Coffee’s Companion App deploys an autonomous agent directly on top of an existing Salesforce instance. Instead of waiting for humans to log calls, update fields, or reconcile records, the Coffee Agent captures structured and unstructured data, such as emails, calendar events, and call transcripts, and writes it back to Salesforce in real time. Every Contact, Activity, and Opportunity stays current without a rep touching the keyboard.

The agent preserves relationship integrity by associating every interaction with the correct parent record automatically. There are no orphaned Activities because a rep forgot to link a call. There are no stale Contacts because the agent enriches records continuously from live data sources. Gartner estimates that poor data quality costs organizations an average of $12.9 million per year, and bad CRM data can reduce pipeline accuracy. Coffee’s agent removes the human dependency that produces those costs in the first place.

The practical result is that post-migration drift, the slow degradation that forces teams back into cleanup cycles every quarter, stops. The agent handles the data-in process so the system of record remains accurate without manual effort. Pipeline Compare surfaces week-over-week changes automatically, which turns pipeline reviews from data-quality interrogations into strategic conversations.

For mid-market RevOps teams committed to Salesforce, this shift means the migration playbook above becomes a one-time event instead of a recurring project. The agent acts as the permanent fix that replaces the manual data entry loop.

Deploy the Coffee Agent and keep Salesforce clean long after go-live.

Frequently Asked Questions

What are the most common Salesforce migration problems teams encounter?

The most frequently reported problems fall into five categories. First, dirty source data, such as duplicates, missing required fields, and invalid formats, causes batch failures before a single record reaches Salesforce. Second, broken parent-child relationships occur when child objects are loaded before their parent records exist, which produces orphaned records and referential integrity errors. Third, active automations such as validation rules, flows, and email alerts fire during the load window, generating erroneous outreach or blocking records entirely. Fourth, API and governor limits throttle or stall high-volume jobs when batch sizes are too large or loads are scheduled during peak usage windows. Fifth, post-go-live drift gradually degrades data quality as reps skip manual entry, contacts change roles, and no governance process catches the decay.

How does Coffee’s Companion App work with an existing Salesforce instance?

Coffee’s Companion App connects to an existing Salesforce org through a simple authentication flow. Once connected, the Coffee Agent begins reading emails, calendar events, and call transcripts from Google Workspace or Microsoft 365. It automatically creates and enriches Contacts and Companies, logs Activities against the correct parent records, and writes structured data, including meeting summaries, next steps, and qualification signals, back into Salesforce fields. The agent operates continuously in the background so Salesforce stays accurate without requiring reps to perform manual data entry. RevOps leaders retain full control of their existing Salesforce configuration, workflows, and reporting while the agent handles the data-in process.

Is Coffee secure enough for mid-market sales data?

Coffee is SOC 2 Type 2 and GDPR compliant. Data processed by the Coffee Agent is not used to train public AI models. For mid-market teams handling customer records, pipeline data, and call transcripts inside Salesforce, these certifications meet standard security review requirements. Teams in heavily regulated industries such as healthcare or finance with multi-year security review cycles are outside Coffee’s current target profile, but most mid-market SaaS and technology organizations fall well within the compliance scope.

How long does it take to see results after deploying the Coffee Agent on Salesforce?

The Coffee Agent begins capturing and writing data immediately after authentication. Contact and Company records start populating from email and calendar data within the first session. Activity logging runs continuously from day one. The more meaningful metric is data quality improvement over time. Because the agent captures every interaction at the source rather than relying on rep entry, the gap between actual sales activity and CRM records closes within the first week of use. Pipeline Compare, which visualizes week-over-week deal changes, becomes actionable as soon as the agent has accumulated a baseline of structured pipeline data, typically within the first two weekly cycles.

Can Coffee replace the need for separate enrichment tools like ZoomInfo after a Salesforce migration?

For most mid-market use cases, Coffee can replace a separate enrichment tool. The Coffee Agent enriches records with job titles, funding data, and LinkedIn profiles via licensed data partners, which removes the need for a standalone enrichment subscription. Coffee’s Lead Finder also allows RevOps teams to build targeted prospect lists directly inside the platform using natural language queries, replacing the workflow of exporting from a prospecting database and importing into Salesforce. Teams that require enterprise-grade enrichment at very high volumes or with highly specialized firmographic criteria may still benefit from dedicated tools, but the majority of mid-market teams find Coffee’s built-in enrichment sufficient for maintaining post-migration data quality without adding another point solution to the stack.

Conclusion: Turning Migration into a One-Time Project

Salesforce migration problems follow a predictable sequence: dirty source data, broken object relationships, automation interference, API limit violations, inadequate reconciliation, and post-go-live drift. The seven-step playbook above addresses each failure point in order. Executing the playbook once still does not prevent the cycle from repeating. Sales representatives spend roughly 20–30% of their time on administrative CRM data tasks, and without an agent layer capturing data at the source, Salesforce reverts to a dirty state within months of go-live.

Coffee’s Companion App deploys an autonomous agent on top of Salesforce that captures structured and unstructured data in real time, preserves parent-child relationships automatically, and removes the manual entry dependency that causes every migration problem to recur. The migration becomes a one-time event. The agent handles everything after.

Try Coffee today and end the migration cycle for good.