Software cutover
How to switch LinkedIn outreach tools without messaging the same people twice

To switch LinkedIn outreach tools without repeating messages, stop new work in the old system, preserve the evidence of what already happened, reconcile a small import, and review each next action before anything resumes. A successful contact import is only one part of the cutover. It does not prove that previous messages, pending invitations or contact restrictions moved with the records.
This guide covers a software change. If the provider is changing too, use the agency handover guide for responsibilities, access and deliverables. If the problem is only duplicate records in one workspace, start with duplicate-lead reconciliation.
Stop new work and record the last confirmed action
Choose a cutover owner and record a cutoff time with its timezone. Pause affected campaigns and stop new enrollments in the old tool. Check scheduled work, retries and integrations that can add people or trigger actions. Closing a browser window is not proof that every process has stopped.
Look for work that was already in progress when you paused. A queued message, a failed attempt and a confirmed send are different states. If the final result is uncertain, hold that person out of new actions until it is resolved. Do not interpret a missing success event as permission to send again.
Keep an export snapshot from the cutoff and a separate record of later changes. A prospect can reply or accept an invitation after a campaign stops. Review those changes before approving the receiving system's next action. Otherwise even a correct export becomes stale during the move.
LinkedIn's prohibited-software policy applies throughout the change: tools that automate or scrape LinkedIn can lead to restrictions. Switching vendors does not establish LinkedIn's approval of the method. Decide what activity is permitted before restarting it.
Export the records and inspect what the files omit
Keep an unchanged, access-restricted copy of the exports you are authorized to retain. Work from a separate mapping copy. Record the source workspace, campaign or list, export time, selected filters and row count so a later reviewer can reproduce the scope.
For each person, preserve the profile reference and any stable source ID, campaign, sender, last confirmed action and timestamp. Also retain the decision-relevant reply context, outstanding promise, next owner and contact restrictions through an authorized route. A prospect record and the history needed to decide what happens next may live in different exports.
HeyReach illustrates why the export route matters. Its Leads Screen Overview says list CSV exports contain default columns and omit custom variables. Its campaign export instructions list the sender, last action, action time, sender status, tags and failure information. Campaign exports are scoped to one campaign at a time.
Those documented fields do not establish a complete message transcript or full sequence history. Inspect an actual authorized sample before assuming either is present. Preserve missing context separately or mark it unresolved. The same documentation says IS_CONNECTION is a connection check, not evidence that an invitation was sent.
Build an omissions list with an owner for each gap. For example, a missing custom variable may require a separate approved source; a missing reply may require a permitted conversation review. Do not convert a blank exported cell into “never contacted.”
Match identities without erasing conflicting history
Use the verified LinkedIn profile URL and source identifiers to trace the same person across files. Do not merge people solely because their names match. Review malformed or changed URLs and conflicting employer details before deciding that two rows represent one person.
When one profile appears in multiple campaign exports, keep every source row linked to the reconciled person. One row may show an older invitation while another contains a later reply. Deduplicating the contact should not discard that later evidence or the sender responsible for it.
Keep operational states separate from your review decision. “Connected” does not mean “send the opening message again.” “Replied” does not tell you whether the person requested information or declined further contact. “Failed” does not by itself prove no earlier message was delivered. Missing or conflicting evidence means hold and investigate.
Map a sample into a new unassigned list
In OutreachGenie, start with a new list that is not assigned to any campaign. Check the assignment before importing. Import completion can synchronize campaigns attached to the destination list, so a campaign's existing list is unsuitable for a migration rehearsal. Also check whether any matched prospects already belong to active campaigns elsewhere.
The current Upload prospects flow accepts CSV or XLSX, then shows Review mapping before confirmation. The limits are 20 MB, 10,000 data rows and 64 columns; XLSX files must have one worksheet. Other parsing and cell-size checks can also reject a file. Stay well below those limits for the sample and inspect the preview:
- Map the profile column to LinkedIn URL, the required identity field. Check several values, including the difficult rows.
- Map supported prospect details such as names, company, title, email and phone only where the source is reliable and retention is authorized.
- Inspect custom-field mappings and Unmapped columns. Preserve necessary omitted context in your controlled migration record rather than dropping it silently.
- Review Existing matches, File duplicates, invalid rows and warnings. Existing prospects can have blank fields filled and be attached to the destination list. Do not assume the file replaces populated values.
For a fictional mapping sample, profile_url maps to LinkedIn URL and given_name to First name. Keep last_sender in the retained cutover record unless deliberately mapped as custom prospect context. It must not become the prospect's first name or be treated as a receiving-system sender assignment. Check the values as well as the headers.
These imports move prospect fields and list membership. They do not restore another tool's running campaign, sequence position, pending jobs or sender assignments. Retaining an old campaign name in a custom field stores context; it does not recreate that campaign.
A custom field called “do not contact” is also not an automatic suppression control. Keep restricted and unresolved people out of any audience approved for new actions, and check the actual controls and campaign membership before work resumes. A label in a spreadsheet or CRM is not enough.
Reconcile the sample at both row and person level
Consider this fictional paper rehearsal, not a live import or customer result. The IDs below are worksheet keys, not LinkedIn URLs. An old export has six rows:
- SAMPLE-A: Ada requested a document. Keep that request and assign someone to fulfill it; do not restart an introduction.
- SAMPLE-B: Ben declined further contact. Preserve the restriction and exclude him from the import sample and new outreach.
- SAMPLE-C: Cleo has a pending invitation. Keep the state on hold; do not send another invitation while reconciling it.
- SAMPLE-D: Dev already exists in the receiving workspace. Review the existing record and its campaign memberships before deciding what to add.
- SAMPLE-A again: Ada also appears in a second campaign export. Keep that provenance, reconcile the history and treat the second occurrence as a duplicate person.
- SAMPLE-X: a row has no usable profile URL. Include it in this fictional test file to check invalid-row handling. The preview should reject it; hold it for identity repair instead of guessing a match from the name.
In this exercise, Ben and Cleo stay outside the test file. The remaining four rows deliberately test a new person, an existing match, a repeated row and an invalid identifier. The expected reconciliation is one new prospect, one existing prospect processed, one in-file duplicate and one invalid row. It is an expectation to check, not a promised result from every upload.
At source level, six rows equal two excluded before import plus four submitted. At import level, four submitted rows equal the four outcomes above. Count source rows and distinct people separately. A duplicate is a row outcome; it is not another person to contact.
The receiving list should account for Ada and Dev, subject to the confirmed result. Inspect both records. Ada's actual request must still be available, and Dev's existing context must not be mistaken for a clean outreach history. A reviewer must also be able to find why Ben and Cleo were excluded before upload, and why SAMPLE-X was submitted but rejected as invalid in the preview. Keep that rejected row on hold for identity repair.
Completion metrics can overlap: an existing prospect may be both updated and attached to the list. Do not add every displayed metric together as if all were separate people. Reconcile row identities and membership, then explain each discrepancy before increasing the batch size.
Approve each next action before releasing a new audience
Keep the old system paused while a second person checks the sample against the retained evidence. Check a restriction, an existing conversation, a pending action, an identity problem and an existing destination record. A sample containing only untouched new contacts cannot test the main migration risks.
For each released person, the reviewer should be able to identify the previous sender, the last verified event, anything still owed, any contact restriction and the exact proposed next action. Fulfill an existing request through its owner where appropriate. Do not put everyone at step one merely because the new tool starts there.
Repeat the reconciliation after the final export and import, including changes since the cutoff. Release only the verified subset and keep an exception list for everything else. If the counts or histories cannot be explained, keep new actions paused. Preserve enough access to resolve outstanding evidence before closing the old tool under your agreed retention and access process.
The prospect-list organization guide can help structure the reviewed audience. List membership should reflect the cutover decisions before a campaign uses it.
Common questions
Questions that come up in practice
Does importing contacts migrate the old campaign too?
OutreachGenie's prospect import moves supported prospect fields and list membership. It does not restore another tool's sequence position, pending jobs or sender assignments. Preserve that context separately and review the next action for each person.
Can importing prospects affect an active campaign?
Yes. Import completion can synchronize campaigns attached to the destination list. Use a new list that is not assigned to a campaign for migration review, and inspect any matched prospect's existing campaign memberships as well.
Will a custom do not contact field block outreach?
A custom field with that name is not an automatic suppression control. Preserve the restriction and keep the person out of audiences approved for new actions. Verify actual campaign membership and controls before work resumes.
Should every imported prospect restart at step one?
No. Check the last confirmed event, outstanding requests, pending invitations, contact restrictions and current owner. Hold records with missing or conflicting evidence. A tool change does not make a previous message or invitation new again.
Research used for this guide
Next step