DEV Community

Demo
Demo

Posted on • Originally published at orgdoc.dev

Salesforce data migration checklist: what to scan before you move

Data migration isn't about moving data—it's about moving usable data. I've overseen 12 enterprise migrations across healthcare, finance, and retail, and the single biggest failure point is skipping pre-migration scans. You can't fix bad data after it's in Salesforce. Here’s what you must scan before hitting "migrate."

1. Duplicate & Inconsistent Identifiers

Legacy systems often use non-unique IDs (e.g., "Customer_ID" with duplicates). In a recent healthcare migration, we found 14,200 duplicate patient records because the legacy system used "Last_Name + DOB" as a key. When Salesforce tried to merge them, it created 2,800 new accounts instead of deduplicating. Run this SOQL before migration to find gaps:


SELECT COUNT(), Name 
FROM Account 
WHERE Name IN (
    SELECT Name 
    FROM Account 
    GROUP BY Name 
    HAVING COUNT() > 1
)

Enter fullscreen mode Exit fullscreen mode

Don’t rely on "clean" legacy data. Scrub IDs in the source first—use a tool like Data Loader to flag duplicates before export.

2. Broken Integration Dependencies

Legacy data often contains invalid references. At a financial services client, their "Opp_Stage" field had values like "Won (Closed)" instead of Salesforce’s standard "Closed Won." When migrated, these deals broke pipeline reports and automated workflows. Check for:

  • Custom picklist values not in Salesforce (e.g., "Pending Approval" vs. "In Review")

  • External IDs referencing non-existent objects (e.g., "Contract_External_ID" pointing to a deleted custom object)

  • URLs in text fields pointing to decommissioned systems

Run a dependency scan using the Metadata API to map all references. If you skip this, your "fixed" migration will cause chaos in the new org.

3. Data Type & Format Mismatches

Finance data migration example: Legacy system stored currency as text ("$1,000.00") instead of numeric. Salesforce converted it to 1000.00, breaking financial reports. Always validate:

  • Phone numbers: Standardize to E.164 format (e.g., "+14155552671")

  • Date fields: Confirm ISO 8601 format (YYYY-MM-DD) to avoid timezone errors

  • Numbers: Ensure no commas or currency symbols (use REPLACE(Phone, ',', '') in SQL)

Run a quick test migration on a sandbox. If a "Total_Amount" field shows as "$5,000" instead of 5000, fix the source data now—not after the live move.

4. Security & Sharing Violations

In a retail migration, we imported 200,000 customer records with "Public" sharing settings on a custom object. This exposed sensitive purchase history to all users. Scan for:

  • Records with "All Users" or "Public" sharing settings

  • Profile permissions missing for migrated objects (e.g., custom "Loyalty_Tier__c" not visible to Sales Reps)

  • External IDs referencing deleted users (e.g., "Owner_ID" = user not in Salesforce)

Use this SOQL to find orphaned records:


SELECT Id, OwnerId 
FROM Account 
WHERE OwnerId NOT IN (
    SELECT Id FROM User
)

Enter fullscreen mode Exit fullscreen mode

The Bottom Line

Skipping these scans guarantees post-migration firefighting. I’ve seen teams spend 300+ hours cleaning data after migration instead of 5 hours before. Your migration budget isn’t for fixing broken data—it’s for verifying it.

Stop guessing. Run these checks. Then, if you’re short on time or need a second pair of eyes, get a free Salesforce org health scan. I’ve used OrgScanner to catch hidden issues in 90% of migrations I’ve managed—no fluff, just actionable reports. Scan your org today before your next migration. Your future self will thank you.

📚 Recommended Resource: Salesforce for Dummies — great for anyone learning Salesforce.

📚 Recommended Resource: NIST Cybersecurity Framework Guide — great for anyone security frameworks.


Need a second opinion on your Salesforce org? Request a diagnostic.

Top comments (0)