The biggest hidden cost isn't the migration tool or the consultant's hourly rate. It's the **cleanup and transformation of your historical data** to fit the new CRM's data model and business logic.
Everyone budgets for moving fields from A to B. No one budgets for the man-years of manual review needed because your old CRM let you enter "Closed-Won," "Won," and "Contract Signed" for the same stage, or because you have 10 years of custom activity records with inconsistent formatting. The new system's validation rules and required fields will expose every single past sin.
Here’s a concrete example from a Salesforce to HubSpot migration I audited:
* Their old Salesforce had a custom "Customer_Status__c" picklist with 12 values.
* HubSpot's native "Customer" property only had 4 equivalent stages.
* The mapping left 60% of records in a "Review Required" queue. The cost wasn't the mapping itself; it was the business analyst who had to manually examine 12,000 account records to reassign them, because the logic was too complex for a simple script.
```javascript
// Example of "simple" logic that fails on historical data
if (oldStatus === "Active - Contracted") {
newStatus = "customer";
} else if (oldStatus === "Active - Trial") {
newStatus = "trial";
}
// What about "Active (Legacy Contract)"? "Contracted, Pending Payment"?
// They all get dumped into 'else' and require manual handling.
```
You also lose embedded business logic. That wonky Salesforce Flow that auto-populates a field by mashing data from three unrelated objects? That's now a manual process you need to replicate or rebuild, and the migration won't bring the historical values it created.
**What to do before signing any contract:**
1. Run a data quality audit on your **oldest, messiest** records, not a sanitized sample.
2. Demand a detailed data mapping document from the vendor/consultant that shows **every single transformation rule** for your key objects.
3. Build your migration budget assuming **at least 30% of the total effort will be post-migration data reconciliation and cleanup**, not the initial data push. If they promise "zero downtime," ask for their process on handling the records that fail validation.
Show me the query.