MOFU Migration Guide · 2026
Custom CRM Migration from Salesforce: The 30-Point Checklist (2026)
Thirty engineering checkpoints we run for every Salesforce-to-custom CRM migration. Data extraction, identifier mapping, automation parity, integration rebuild, parallel-run, and cutover order — without losing a single deal.
By Bill Beltz, founder of QUANT LAB USA INC · Published May 12, 2026
Quick answer
A Salesforce-to-custom CRM migration in 2026 takes 8 to 20 weeks and runs across five engineering phases: data archeology, schema mapping, automation parity, integration rebuild, and parallel-run cutover. The thirty checkpoints in this guide are the ones we run on every engagement to avoid the three migration killers: lost history, broken automations, and integration drift. Budget $40K to $150K for migration engineering alone, on top of the cost to build the new CRM.
Salesforce migrations fail the same way every time. The data comes over clean. The automation does not. Three weeks after cutover someone discovers that the renewal-notification Flow was running on a custom object that did not get mapped, and forty renewals slipped past the team because nobody was watching that queue anymore. The CRM is fine. The business process is broken.
I have run enough custom CRM migrations off Salesforce to know that the spreadsheet of objects is the easy part. The hard part is reproducing every Workflow Rule, Process Builder, Flow, and Apex trigger as explicit business logic in the new system — and proving that logic works before the legacy org goes read-only.
This checklist is the one we run end-to-end. Use it as a scope document, a sequencing guide, or a sanity check on whatever your current vendor proposed.
Phase 1: Data archeology (weeks 1 to 3)
- Catalog every object. Standard objects (Account, Contact, Lead, Opportunity, Case, Campaign) and every Custom Object. List record counts, recent activity, and last-write timestamps per object.
- Catalog every field. For each object, dump the full field schema with data type, picklist values, required flag, formula logic, and validation rules. The Metadata API is your friend here.
- Identify the long tail. Most Salesforce orgs have 30 to 60% of fields with under 5% population. Flag them for deletion-on-migration, not rebuild.
- Map Record Types. Each Record Type usually represents a distinct business process. The new CRM has to express that distinction explicitly — usually as a separate route or a type discriminator.
- Catalog every automation. Workflow Rules, Process Builder flows, Flow Builder flows, Apex triggers, scheduled batch jobs, and managed packages. This list is usually 3 to 5x longer than the team thinks.
- Catalog every integration. Both directions. Outbound (Salesforce-to-other) and inbound (other-to-Salesforce). Include the bidirectional ones that pretend to be one-way.
Phase 2: Schema mapping (weeks 3 to 5)
- Build a master mapping table. Source object plus field, target table plus column, transform rule, validation rule, default value, and notes. One row per source field. This becomes the contract for every extract-transform-load script.
- Decide what to consolidate. Salesforce orgs accumulate duplicate fields (`Status__c` vs `Stage__c` vs `Phase__c`). Migration is the chance to fix the data model.
- Decide what to deprecate. Anything with under 1% population, no automation, no report, and no integration consumer. Document the decision and the count of affected records.
- Define identifier strategy. Every migrated record gets a new UUID plus a `salesforce_id` foreign reference. The Salesforce ID stays on the record forever. Never throw it away.
- Pick the primary key for de-dupe. Accounts on domain plus company name. Contacts on email. Opportunities on Salesforce ID (always). Run a dry-pass to surface duplicates before the real migration.
- Build the validation harness. A script that runs after every load and compares row counts, sum-of-amount, distinct-owner-count, and ten other sanity checks between source and target. Run it after every load forever.
Phase 3: Automation parity (weeks 5 to 10)
- Translate each Workflow Rule. Most become Postgres triggers, application-layer event handlers, or scheduled jobs in the new CRM. Document the trigger, the condition, and the action explicitly.
- Translate each Process Builder process. These are often chained workflow rules. Re-express them as state machines in the new application layer — clearer to maintain.
- Translate each Flow. Flows can branch and call sub-flows. Map each one to a typed function or service module with explicit inputs, outputs, and side effects.
- Re-express Apex triggers. Where Apex was a workaround for declarative limits, rewrite as plain application code with proper tests. Where Apex implemented complex business logic, port the algorithm and write coverage tests.
- Identify managed-package replacements. Conga, DocuSign, Apttus, Pardot. Each becomes either a third-party integration in the new CRM or a custom feature.
- Build the parity test suite. A set of scenarios — "create a deal, change stage to closed-won, observe X" — that runs against both old and new systems and asserts identical outcomes.
Salesforce migration cost ranges (2026)
| Org profile | Migration engineering | Timeline |
|---|---|---|
| Lite — under 20 seats, standard objects only | $25K to $55K | 8 to 12 weeks |
| Standard — 20 to 60 seats, 5 to 15 custom objects, moderate automation | $55K to $120K | 12 to 18 weeks |
| Heavy — 60 to 200 seats, deep Apex and Flow customization | $120K to $300K | 18 to 28 weeks |
| Enterprise — 200+ seats, multiple business units, regulatory data | $300K to $800K | 28 to 52 weeks |
These ranges cover migration engineering only. The cost to build the new CRM is separate. Get a sense of total cost via the CRM ROI calculator.
Phase 4: Integration rebuild (weeks 8 to 14)
- Inventory every integration consumer. ERP, marketing automation, support tool, data warehouse, accounting, billing — anything that talks to Salesforce in either direction.
- Document the contract. What payload, what frequency, what auth, what failure mode. This document is the spec for the rebuild.
- Rebuild outbound first. The new CRM emits events. Subscribe each downstream consumer to the new event stream. Compare against legacy Salesforce events for two weeks.
- Rebuild inbound second. Anything writing to Salesforce gets pointed at the new CRM. This is where you find the integration that nobody documented because it was a one-off Zapier zap from 2019.
- Preserve the audit trail. Every record write from an integration logs source, payload, timestamp, and result. Auditors will ask.
For more on building integrations on a custom stack, see our API development service.
Phase 5: Parallel-run and cutover (weeks 12 to 20)
- Run both systems in parallel. The new CRM is the system of record; Salesforce is read-only mirror. Sync new-to-old for 2 to 4 weeks.
- Train every user. Recorded sessions plus live workshops. Capture every "where did X go" question — those become release-note items.
- Migrate attachments and files. Stream from ContentVersion to S3, regenerate references, verify checksums on every file.
- Rebuild the top 20 reports. Not all 400. Just the ones the team actually opens weekly. Archive the rest to a static-export viewer.
- Run the cutover checklist. Every integration green for 14 days. Every automation green for 14 days. Sales sign-off in writing.
- Cut Salesforce to read-only. Not deactivated. Read-only with a 90-day window for retroactive lookups.
- Plan the Salesforce contract exit. Renewal notice is usually 30 days. Coordinate the cancel date with the read-only window expiry. Do not pay for another year.
Mid-post: free quote
Salesforce renewal is coming up. We can scope a migration in a single 60-minute call.
The three migration killers
Every failed Salesforce migration we have audited (and we have audited a few that other vendors ran) failed in one of three predictable ways.
- Lost history. Activities, notes, attachments, or email logs that did not come over. Sales loses the last-touched timestamp on an account and the renewal conversation falls apart.
- Broken automation. The notification, escalation, or assignment rule that was implicit in Salesforce is silently missing in the new system. Deals sit in queues with no owner.
- Integration drift. An inbound integration keeps writing to Salesforce after cutover because nobody documented it. Data shows up on neither side cleanly.
The checklist above is designed to surface all three before they bite. Real-world examples: see the J5 Sales OS case study and the Wilder Recovery operations platform case study.
When you should not migrate off Salesforce
Not every Salesforce org is a candidate to leave. We have told prospects to stay on Salesforce more than once. The honest signal that custom is wrong:
- You actively use Salesforce-native analytics (CRM Analytics / Tableau CRM) and the dashboards drive revenue decisions.
- Your sales process is genuinely commodity (lead-to-opp-to-quote-to-close) and matches Sales Cloud out of the box.
- You have under 20 seats and your team's pain is process discipline, not tooling.
- Your AppExchange managed packages do work that would take 6+ months to rebuild.
The honest signal that custom is right: you have built a Frankenstein of Apex, Flows, and managed packages to force Salesforce to behave like the system you actually need. At that point you are paying a license fee for a custom application you already built — just on someone else's runtime. See the full custom CRM development guide for the deeper build-vs-stay framework.
The cutover playbook (the 30th checkpoint)
Cutover is the only step the team will remember. The playbook we run, in order, the week of cutover:
- Friday 5 PM: freeze writes to Salesforce. Communicate to the team in three channels.
- Friday 6 PM: run final delta extract. Apply to the new CRM. Run validation harness.
- Saturday 9 AM: flip integration endpoints. Verify outbound and inbound traffic flowing to the new CRM.
- Saturday 12 PM: open the new CRM to a pilot group. They run real sales workflows for 4 hours.
- Saturday 5 PM: open to the full team. Salesforce becomes read-only.
- Monday 8 AM: first business day on the new system. Engineering on standby in shared chat.
- Friday week 1: post-cutover review. Triage the top 10 issues. Patch.
- Day 90: kill the read-only Salesforce instance. Cancel the contract.
Frequently asked questions
How long does a Salesforce migration to a custom CRM take?
A clean Salesforce-to-custom migration runs 8 to 16 weeks for a sales org under 50 seats, including data archeology, mapping, parallel-run, and cutover. Heavily customized orgs with 200+ Apex triggers, dozens of Flow processes, and a decade of Validation Rules can stretch to 6 to 9 months. The size of the data is rarely the bottleneck; the size of the workflow logic is.
Should I migrate all Salesforce history or only active records?
Migrate active records (opportunities open or closed within the last 24 months, accounts with activity, contacts with engagement) into the new CRM and archive the rest to an S3-hosted Parquet warehouse with a read-only viewer. Migrating ten years of stale leads inflates timelines and slows day-one performance for no business value.
Can I run Salesforce and a custom CRM in parallel during cutover?
Yes, and you should for at least 2 to 4 weeks. Run the new CRM as the system of record while keeping Salesforce read-only. Use a sync job (one direction, new to old) so anything created in the new system also appears in Salesforce for the holdouts. Cut Salesforce access entirely only after the sales team has signed off on the new system.
What does a Salesforce export actually give me?
The Data Export Service produces zipped CSVs for every object — Accounts, Contacts, Opportunities, Custom Objects, Activities, Attachments, ContentDocuments. What you do not get is the workflow logic: Flows, Apex classes, validation rules, page layouts. Those have to be rebuilt from documentation or reverse-engineered from the Metadata API.
How do I handle Salesforce Files and attachments?
Use the Bulk API plus ContentVersion queries to pull every file as a binary plus its parent record reference. Stream directly into S3 (or your storage provider), regenerate signed URLs in the new CRM, and re-link them via the parent ID mapping table. Plan for 200 to 500 GB on a 50-seat org with five years of attachments.
What is the highest-risk step in a Salesforce migration?
Identifier remapping. Every Salesforce ID (18-character) becomes a new identifier in the custom CRM. If you do not store the original Salesforce ID as a foreign reference on every migrated record, you lose the ability to retroactively merge data, reconcile with legacy reports, or unwind a bad migration. Always keep the Salesforce ID on every record forever.
How much does a Salesforce migration cost?
Migration engineering alone runs $40K to $150K for a typical small-business org, on top of the cost to build the new CRM. The variables are the number of custom objects, the depth of automation logic, the integration count, and whether the source org uses managed packages that need replacement logic. Big consultancies quote $250K to $1M for the same scope.
Will my Salesforce integrations still work on the new CRM?
No. Every integration that calls the Salesforce REST or Bulk API has to be rewritten against the new CRM API. Outbound integrations (Salesforce sending to other systems) are usually easier because the new CRM emits the events. Inbound integrations (other systems writing to Salesforce) are harder and typically take 60 to 80% of the integration rebuild effort.
What happens to Salesforce reports and dashboards?
They are not migrated. The new CRM will have its own reporting layer, usually built on Postgres views or a warehouse like BigQuery or Snowflake. Plan a separate reporting workstream that catalogs the 10 to 20 reports the team actually uses (not the 400 that exist) and rebuilds them natively. Anything else gets archived.
What about Pardot, Marketing Cloud, or Account Engagement?
Marketing automation is a separate migration. The CRM holds the system of record for contacts and accounts; the marketing tool holds engagement history. Decouple them in the project: cut the CRM over first, then migrate marketing automation in a second phase. Trying to do both at once doubles the risk.
What is the worst-case failure mode for a Salesforce migration?
Cutting over the CRM before integration parity is complete, then realizing the order-to-cash flow is broken and there is no way back without paying Salesforce again. The mitigation is a strict pre-cutover checklist requiring every integration, automation, and report to be live and validated in the new system for two full sales cycles before retiring Salesforce access.
Can QUANT LAB USA run our Salesforce migration?
Yes. We have run migrations for sales orgs of 5 to 80 seats. We treat migration as a series of engineering deliverables — extract scripts, mapping tables, validation harnesses, cutover playbook — not a one-shot import. Engagements run 12 to 20 weeks end-to-end and include parallel-run, training, and a 30-day post-cutover support window.
Related reading and next steps
- Custom CRM Development service
- API Development service
- SaaS Platform Development
- Stripe Integration service
- Custom CRM development pillar guide
- Custom CRM vs Salesforce vs HubSpot (2026)
- QUANT LAB USA vs Salesforce
- Case study — J5 Sales OS
- Case study — Wilder Recovery operations platform
- Atlanta software development
- CRM ROI calculator
- CRM rollout playbook (free download)
- Talk to Bill about your Salesforce exit
Ready to leave Salesforce.
We will scope your migration in a single call. Free, no obligation, no sales engineer. Just an engineer asking the right questions.
More custom CRM reading
All postsCustom CRM Development Guide
When custom CRM beats Salesforce, HubSpot, and Zoho — and what the build looks like.
Read postCustom CRM vs Salesforce vs HubSpot (2026)
Head-to-head TCO and capability comparison for mid-market sales teams.
Read postCRM Data Migration from Spreadsheets
How to move messy spreadsheet pipelines into a real CRM without losing history.
Read post