More in
Data Migration Guide
Exporting Cleanly from Salesforce: The Migration-Ready Export Guide
Apr 18, 2026
Exporting Cleanly from HubSpot: What the Native Export Misses
Apr 18, 2026
Exporting Cleanly from Pipedrive: Deals, Contacts, and Activity History
Apr 18, 2026
Escaping Spreadsheets: The 5-Step Migration to a Real CRM
Apr 18, 2026
Handling Historical Activities, Notes, and Emails During CRM Migration
Apr 18, 2026 · Currently reading
Post-Migration Data Audit: What to Verify and When
Apr 18, 2026
User Access During CRM Migration: The Least-Privilege Approach
Apr 18, 2026
Communicating the CRM Migration to Your Sales Team
Apr 18, 2026
Rollback Planning for CRM Migrations: Hope You Don't Need It
Apr 18, 2026
Long-Term Archiving of Legacy CRM Data: What to Keep and How
Apr 18, 2026
Handling Historical Activities, Notes, and Emails During CRM Migration
An account executive had been working a renewal for six months. The account had been with the company for two years. During that time, there had been 14 logged calls, a competitive evaluation, a pricing objection in month four, and a meeting in month eight where the buying committee had raised a specific concern about a competitor's integration capability.
The migration deleted all of it. Not intentionally — but the activity history wasn't in scope for the export, and nobody had told the account executive to check.
Three weeks after migration, the renewal came up. The AE couldn't remember the competitor objection. She asked about the integration capability in a call. The prospect was annoyed — they'd already discussed this. The renewal stalled. It eventually closed, but at a lower rate, and with significant trust damage.
The data loss wasn't a technical failure. It was a planning failure. Nobody had made a decision about what to migrate and what to leave behind. This guide is that decision process. It connects directly to preparing your data before you migrate anything, where the scope of the migration — including whether activity history is in scope at all — gets defined before anyone touches the export tools.
Why Historical Activities Are the Hardest Part of Any Migration
Most CRM objects migrate cleanly. Contacts, Accounts, Deals — these are structured records with defined fields. A field maps to a field. Row counts match.
Activities are different.
Volume. A mature CRM from a 50-person sales team accumulates millions of activity records. Email-open events, call logs, meeting records, system-generated updates — all of it sits in the activity stream. Nobody looks at most of it, but it all takes up space and migration bandwidth. According to Statista data on CRM usage, the global CRM market exceeded $69 billion in 2023 — reflecting how much sales infrastructure now runs through these systems and why activity data volume has grown so dramatically.
Format inconsistency. Call logs might be plain text. Emails might be stored as HTML. Notes might be in a proprietary rich-text format. Meeting outcomes might be checkboxes, not text. The destination CRM probably handles these differently, which means every format needs a conversion decision.
Partial data. Older CRMs often stored email metadata (subject line, sender, recipient, date) but not the body content. Or the body in an encoding that doesn't render properly. Migrating partial data can be worse than not migrating it — reps see "Email: [no content available]" in the timeline and assume something broke.
CRM-specific object structures. Salesforce separates Tasks from Events. HubSpot has Engagements. Pipedrive logs everything against Deals, not Contacts. None of these map 1:1. Every migration requires a translation step for activity types, not just field names. This is why the source-specific guides — exporting from Salesforce, exporting from HubSpot, and exporting from Pipedrive — all treat activity export as a distinct step from object export.
These four factors mean that "just migrate all the activities" is almost never the right answer. It's not even always possible. The decision framework matters more than the technical mechanics.
The Migrate vs. Archive Decision Framework
Before any export, make these decisions explicitly and document them. The framework has three variables: age of record, record type, and deal status.
Decision matrix:
| Age | Record type | Deal status | Decision |
|---|---|---|---|
| Last 12 months | Rep-entered notes | Open deal | Migrate |
| Last 12 months | Rep-entered notes | Closed-won | Migrate |
| Last 12 months | Rep-entered notes | Closed-lost | Archive |
| Last 12 months | System-generated events (email opens, page views) | Any | Discard |
| 1-3 years | Rep-entered notes | Open deal | Migrate |
| 1-3 years | Rep-entered notes | Closed-won, top 20% accounts | Migrate |
| 1-3 years | Rep-entered notes | Closed-lost | Archive |
| 3+ years | Any type | Any | Archive unless specific business case |
| Any age | Auto-logged email-open events | Any | Discard |
| Any age | System-generated workflow events | Any | Discard |
How to apply this:
Use the matrix as a default, then override specific categories based on your business context. A company that sells multi-year enterprise contracts should push the "3+ years" threshold further back. A high-velocity SMB team that turns deals in 30 days can probably set the history cutoff at 6 months.
Document the cutoff date and the record types in scope before the export begins. Your export query will filter by these parameters. If you decide after export that you want more history, you need another export pass.
What to Actually Migrate
Within the framework, these categories usually justify migration.
Open deal activity logs. Any notes, call logs, or email summaries on currently open deals are essential. Reps will pick up these deals in the new CRM from day one. They need the history to work the deal effectively.
Notes on top 20% of accounts by revenue. High-value accounts have relationship context that reps and managers reference regularly. Pull your top 20% accounts (or top 50, depending on scale) and migrate all rep-entered notes and call logs for those accounts.
Recent emails and calls from the last 12 months. Logged emails and calls from the past year represent the active relationship record. These are the activities reps actually look at when preparing for a call or renewal conversation.
Meeting outcomes on live opportunities. If your team logs meeting notes or outcomes against deals, those records on open opportunities are essential. They're often where competitive intelligence and objection history live.
Notes from recently closed deals (last 6 months). Deals that closed recently — won or lost — often have renewal relevance, referral context, or lesson-capture notes. Six months is usually the right window.
What to Archive Instead of Migrate
These categories exist in the CRM but don't justify the cost of migration.
Closed-lost deals older than 2 years. The competitive context, pricing objections, and stakeholder landscape from a deal that went cold two years ago are rarely actionable today. Archive the deal record itself, but leave the activity logs in the source system.
System-generated email-open events. HubSpot, Salesforce, and most CRMs auto-log email opens, link clicks, and page views as activities. These are high-volume, low-signal records. Migrating them creates noise in the new timeline without adding usable context.
Auto-logged low-signal activities. Anything generated automatically without a human writing content — status change logs, workflow step completions, assignment change events — should go to archive, not migration.
Anything without a human note attached. A call log with a subject line and no notes is a data point that says "a call happened." Without content, it has minimal value in the new system. Set a rule: if there's no note body, archive instead of migrate.
How to Handle Format Conversion
Activity types rarely map 1:1 between CRMs. Plan for translation before the export.
Common conversion challenges:
| Source format | Destination format | Translation approach |
|---|---|---|
| Salesforce Task | Task in destination | Map Status values; split WhoId/WhatId into Contact/Opportunity links |
| HubSpot Engagement (CALL) | Call log | Map disposition field to outcome; preserve note body |
| Pipedrive Activity (Note) | Note activity | Keep as Note type; link to Contact, not Deal if destination is contact-centric |
| Email body (HTML) | Note body | Strip HTML to plain text; preserve formatting where possible |
| Rich text notes (RTF/JSON) | Plain text or markdown | Decide on conversion approach; test with sample records |
The safest approach for complex format conversions is to import all historical activities as "Notes" in the destination CRM, regardless of the original type. The Wikipedia overview of data migration outlines the transformation and normalization stages where format conversion decisions like this one must be made before data enters the destination system. This loses the type distinction (was it a call or an email?) but preserves the content. Note the original type in the first line of the note body: [Original type: Call log — 2023-09-12].
This approach creates a clean, consistent activity history in the destination without requiring complex type mapping for records the team rarely accesses directly. After import, the post-migration data audit checks that activity records are linked to the right Contacts and that content displays without encoding issues.
The "Day One" Minimum
Not everything needs to be migrated before go-live. Some activities can wait. Others are genuinely urgent.
What reps need in the new CRM on day one:
- Open deal activity logs (all notes and call summaries on open deals)
- Account notes on their top 10 accounts by revenue
- Meeting outcomes from the last 90 days on any open opportunity
- Notes from any renewal conversations in the past 6 months
What can come from the archived source system on request:
- Closed-lost deal history older than 6 months
- Activity logs on dormant accounts
- Email metadata and open event logs
- Historical system-generated events
What doesn't need to be accessible at all:
- Auto-logged events from more than 2 years ago
- System workflow events
- Activity records from churned customers (unless there's a re-engagement motion)
Define the "day one minimum" with the sales team before migration. Have the sales manager identify the 5 accounts where history matters most. Make sure those specific records are in the migration scope. Then keep the source system accessible for 90 days post-migration for anything outside the minimum — most requests will come in the first two weeks.
Common Pitfalls
Migrating activity metadata without content. A call log with a subject line and no note body is worse than nothing in many CRMs — it shows an activity that can't be read, implying something was lost. Either migrate complete records or don't migrate them at all.
Mixing archived system events with real rep notes. If you migrate everything indiscriminately, auto-generated system events (email opened, page viewed, field updated) appear in the timeline alongside rep-written notes. Reps spend time scrolling through noise. Filter these out at the export stage.
Not setting a cutoff date. "We'll decide later" on the history cutoff means the export team defaults to "migrate everything," which then creates the cleaning and volume problems downstream. Set the cutoff date before export. Document it. Communicate it to the sales manager so there are no surprises post-go-live.
Ignoring storage cost implications. Migrating millions of activity records into a CRM that charges per record or per storage GB can meaningfully affect your licensing costs. Check the destination CRM's pricing model before committing to a full activity migration. Deloitte's enterprise data management research notes that storage cost analysis is frequently overlooked in migration planning, and that data volume decisions made during migration have multi-year financial implications. Records that don't make the migration cut should be handled through long-term archiving of legacy CRM data — not deleted, and not left on an active license indefinitely.
What to Do Next
Finalize the migrate/archive decision before the export begins. Write it down — specifically the cutoff date, the record types in scope, and the accounts prioritized for full history migration. Share it with the sales manager for sign-off.
Once the decision is documented, your export scope is defined. For exporting cleanly from Salesforce, the Task and Event queries will use the cutoff date as a filter. For exporting cleanly from HubSpot, the Engagements API call will similarly filter by date and engagement type.
And for everything that doesn't make the migration cut, long-term archiving of legacy system data covers how to keep the source system accessible without paying full licensing costs indefinitely.
Learn More

Head of Enterprise Solutions