How to quote data cleanup in system migrations
Never quote data cleanup as a fixed fee because the true scope is too unpredictable. Client exports are typically full of undocumented fields, duplicates, and messy formatting that can take days just to decipher. This unpredictability causes data tasks to quickly eat your profit margins, leading many to refuse file migration entirely.
What people tried
Every workaround mentioned in the threads below. We haven’t tested any of them — and nobody here is claiming they worked.
Found another way around this?
Share your steps and trade-offs so fellow engineers don't have to reinvent the wheel. No account required.
- 1Quoting and billing the data audit and cleaning phase as a separate hourly-billed discovery phase prior to system setup.Did this help you?
- 2Using spreadsheets and regular expressions (regex) for manual data cleaning, mapping, and deduplication.Did this help you?
- 3Using first-party vendor migration tools to automate the technical transferDid this help you?
- 4Refusing to organize files and requiring the client to appoint an internal data leadDid this help you?
- 5Quoting fixed fees based on storage size and structural complexity rather than billing hourlyDid this help you?
- 6Separating the literal data copy from cleanup, permission mapping, and training as distinct line itemsDid this help you?
In their words
Unedited, grouped by where they were said, most upvoted first within each place, each linked to the thread it came from.
“How are you doing file server to SharePoint migrations”source ↗
“And how do you decide what to charge for them?”source ↗
“We don't help them migrate files because we don't have the time to get involved in reorganizing their file structure or similar out of scope tasks. Their files are theirs, not ours.”source ↗
“Every migration quote seems to have a clean line for building the new system & a vague line for data. Then the data line eats the margin.”source ↗
“The client sends exports. Half the fields are named things only their former admin understood. The same customer is in there three times. Nobody on their side can say which of the two "status" fields is the real one.”source ↗
“too much unknown to fixed fee it, learned that one the hard way”source ↗
“worst data i got was a client who had their whole CRM in one giant excel sheet with 90+ columns, half of them merged cells. took me three days just to figure out what was meant to be a contact vs an account”source ↗
Where this came up
People with this problem also raised
- 20How to clean up messy CRM data after importing
- 4Inherited spreadsheets with white fill instead of hidden gridlines
- 9How to handle undocumented legacy database changes
- 6How to migrate data without breaking deep object dependencies
- 3How to delete an entire uploaded file of duplicate transactions?
- 14Why is it so hard to export and switch accounting software?