A practical lead deduplication workflow for agencies: resolve identity, assign conversation owners and review CRM imports before another message goes out.
Two campaign lists can look different and still contain the same person. One row has a work email, another has a LinkedIn URL, and a third lives in the client's CRM under an older company. If each operator treats their file as a new audience, the prospect can receive several introductions from the same business.
Preventing that collision takes more than removing identical spreadsheet rows. You need a shared decision about identity, ownership and whether another message should be sent. This guide proposes a practical review process for agencies running LinkedIn and email outreach. The workflow is an editorial recommendation, not a claim that AllProfiles automatically performs CRM deduplication.
Separate identity from permission to contact
Start with three questions:
- Identity: do these records refer to the same person?
- Ownership: who is responsible for the current conversation?
- Contact status: should this person receive another message in this campaign?
A duplicate check answers the first question. It does not answer the other two. A unique record might belong to an existing customer, be in an active sales conversation, or carry a do-not-contact instruction. A duplicate record might contain a useful update that should be reviewed rather than discarded.
Make these separate fields in your working list. Otherwise, “not a duplicate” quietly becomes “approved to send,” which is a different decision.
1. Choose the scope before comparing lists
For a single client, compare proposed leads with that client's existing contacts, active campaigns and relevant suppression records. Give the campaign lead access to the systems needed for that review.
For an agency serving several clients, keep client data boundaries explicit. Do not place every client's CRM export in a broadly shared master spreadsheet. Any cross-client conflict review needs an agreed purpose, restricted access and a clear owner. A company appearing in two clients' markets does not automatically justify sharing their contact histories.
Write down the scope at the top of the review: client, campaign, source files, CRM export time and reviewer. A clean comparison against an old export can still miss yesterday's conversation.
2. Use an identity ladder, not a name-only match
Keep an internal contact ID as the reference for records you have already resolved. For incoming rows, compare the available evidence in a consistent order.
| Evidence | Suggested decision | What to watch for |
|---|---|---|
| Existing CRM record ID from a trusted export | Match within that CRM and client scope | IDs from different systems are not interchangeable |
| Exact email already attached to a known contact | Review as a strong candidate | Shared inboxes and reassigned addresses can mislead |
| Same profile URL after harmless formatting cleanup | Review as a strong candidate | Preserve the original URL and confirm the person |
| Name plus company and role | Send to manual review | Names repeat; companies and roles change |
| Company domain alone | Group at company level | Colleagues are different people |
Normalize a comparison copy while preserving the source values. Trim accidental surrounding spaces. For URLs, parse the address and remove only tracking parameters you know are irrelevant; avoid rewriting arbitrary paths. For emails, do not invent provider-specific rules such as removing dots or plus suffixes from every address.
Never merge two people solely because their names look similar. Where evidence conflicts, keep both records and pause campaign enrollment until a reviewer decides.
3. Check what your CRM actually deduplicates
CRM behavior depends on how records enter it. Test the import or integration route you will use.
HubSpot documents email-based contact deduplication and domain-based company matching, with important exceptions. A contact import without an email or another unique identifier can create a new record for each row. Its documentation also states that companies created through the API are not deduplicated by the Company domain name property. Record IDs or supported unique-value properties can help match imports. See HubSpot's deduplication reference.
Salesforce separates matching rules, which identify possible duplicates, from duplicate rules, which determine what happens next. Depending on configuration, a duplicate rule can warn or block creation. Confirm the active settings with your administrator instead of assuming a warning prevents another record. See Salesforce's Duplicate Management overview.
These are examples of product behavior, not a complete implementation guide. Before a large import, use a small controlled sample in a test environment or an administrator-approved test process. Include one known match, one new contact and one ambiguous candidate. Inspect the resulting records and activity history before approving the full file.
4. Assign one conversation owner
Once identity is resolved, choose an owner for the active conversation. A contact appearing in two campaign segments should not independently enter two sending queues.
Use explicit dispositions:
- Ready: identity reviewed, owner assigned and contact status checked.
- Already active: another operator owns a current conversation.
- Suppressed: a recorded instruction or campaign rule excludes contact.
- Needs review: identity or ownership remains uncertain.
- Update existing: new information belongs on a known record and needs review before enrollment.
Check this status immediately before enrollment, not only when the list is first assembled. When someone replies, update the shared record before another operator schedules a follow-up. A small team can use a controlled sheet and one enrollment owner; larger teams should enforce the same decision in their CRM or campaign integration.
This complements a reply-handling workflow: the reply must change the next action everywhere that campaign is being operated.
5. Review merges without losing history
A merge should preserve the information needed to understand the relationship. Before changing records, decide which ID survives, how conflicting values are resolved, and what happens to tasks, notes, ownership and contact restrictions.
Do not let a newer import silently erase a do-not-contact instruction. Equally, an old job title should not win merely because it was on the first record. Keep the source and review date for disputed facts, and route uncertainty to a person rather than guessing.
Save an audit entry with the surviving record ID, retired ID, reviewer, date and reason. Use your CRM's supported merge process and inspect its documented effects before executing it. Keep any recovery export restricted and subject to your team's retention policy; it should not become another unmanaged prospect list.
An illustrative campaign review
The following numbers are invented to show the workflow, not measured AllProfiles results.
An operator receives 120 rows for one client. Review identifies 12 repeated rows within the file, leaving 108 distinct candidates. Of those, 8 are already in active conversations, 3 are suppressed and 5 need identity review. That leaves 92 candidates ready for the next eligibility check.
| Review stage | Count in this illustration |
|---|---|
| Incoming rows | 120 |
| Repeated rows removed | 12 |
| Distinct candidates | 108 |
| Already active | 8 |
| Suppressed | 3 |
| Needs review | 5 |
| Ready for the next check | 92 |
Here the three exclusion groups are mutually exclusive. In a real report, a contact may satisfy several conditions. Assign one primary disposition or report overlapping groups explicitly, so subtraction does not count the same person twice.
The useful client update is “92 candidates passed this review; five await a decision,” not “120 new leads ready.” Readiness still depends on campaign relevance and your team's other launch requirements.
A handoff your next operator can use
Keep a short review record with the campaign owner, source date, matching method, unresolved cases and approval time. Link to the authoritative CRM records instead of pasting their full histories into several tools.
Before handing over the campaign, confirm that the next operator can answer four questions: which record represents this person, who owns the conversation, what is the current contact status, and what evidence supports it?
Use the same distinct-contact definition in your client outreach report. Then a refreshed list, a returning operator or an added channel can build on the existing relationship instead of starting it again.


