Datagran
All articles

CRM workflows

Prevent duplicate leads in your CRM before duplicate follow-up

Prevent duplicate CRM leads from forms, imports, and API retries. Separate contact matching from repeated submissions with a six-case workflow checklist.

Datagran team ·

A CRM duplicate can start with a perfectly reasonable retry. A form sends a lead, the CRM saves it, and the response never reaches the integration. The integration tries again. Now two records can trigger two follow-ups for one inquiry.

Preventing duplicate leads in your CRM requires two decisions: which person or company the inquiry belongs to, and whether this particular submission has already been processed. Treat those as separate questions throughout the intake workflow.

Separate the contact from the submission

An existing contact can make a new inquiry. Matching their email address should help you find their record, but it should not automatically discard their later request.

Keep three references where your tools support them:

  • CRM record ID: the confirmed contact or company that owns the history.
  • Intake reference: one identifier for a particular submission, preserved when that submission is retried.
  • Opportunity reference: the deal associated with the inquiry, if one exists.

An email address can help match a contact. It is a poor substitute for an intake reference because the same person may submit several legitimate requests. Likewise, finding the contact does not establish whether a new opportunity is needed.

Check every route that creates a lead

List forms, imports, chat, manual entry, and API integrations. For each route, record its matching field, how it handles an existing match, and who reviews uncertain matches. Include any automatic opportunity creation and follow-up triggered by that route.

Rules can differ within the same CRM. HubSpot's deduplication documentation describes contact matching by email and warns that imports without an email or another unique identifier create a record for each row. Company records created through its API are not automatically deduplicated by domain, and custom unique properties are not supported in forms. Check the specific route before assuming a setting protects every intake source.

Use a confirmed CRM record ID when updating a known record. Send ambiguous matches for review: a shared inbox may represent several people, and a changed email address may belong to someone already in the CRM. Do not merge records on a similar name alone.

Resolve an uncertain write before creating again

A timeout means the integration does not know the outcome. It does not prove that the CRM rejected the request.

Preserve the intake reference and record whether the CRM write is pending, confirmed, or needs investigation. When a response is lost, reconcile the remote result before issuing another creation request. If you find the saved record, attach its ID to the intake and continue from the confirmed result.

The actual safeguard depends on the CRM and connector. Check whether they support a unique external reference, an operation that creates or updates by that reference, or another documented way to make repeated requests produce one record. Confirm how that safeguard behaves under simultaneous requests and which intake routes support it.

A lookup followed by a create is not enough on its own: two workers can both find no record and then both create one. The workflow needs a way to enforce one creation for the intake reference when requests overlap. If the connector cannot establish that protection or resolve a lost response, pause the uncertain intake for review instead of repeatedly creating leads.

Retry the failed step, not the whole workflow

Track the CRM write separately from the owner notification. Once the CRM record is confirmed, a failed email or task notification should retry that notification without recreating the lead.

Check follow-up automation separately too. Even one CRM record can receive repeated messages if every retry enrolls it again. Record whether the intake has already triggered its intended handoff or follow-up, and check how the tool handles repeated delivery of that event.

The human handoff guide covers the context and ownership the next person needs. Give that owner the confirmed record and the inquiry that needs attention.

A hypothetical retry example

These identifiers illustrate a workflow; they are not customer records or a claim about a particular CRM.

  1. A form creates intake S-104. The CRM saves the contact, but its response is lost.
  2. The retry keeps S-104. It resolves the saved result through the CRM's supported mechanism and records the confirmed CRM ID. If it cannot resolve the result, the intake goes to review.
  3. The owner notification fails. The workflow retries that step using the confirmed record.
  4. The same person returns with another inquiry, S-105. The workflow can reuse the contact while preserving this new inquiry and deciding whether it needs a separate opportunity.

This separation lets a reviewer tell the difference between a repeated delivery and a new sales request. It also gives them a place to resume after a partial failure.

Keep source history when matching records

Finding an existing contact should not erase the source of a later inquiry. Preserve the original source and the new intake's source, campaign reference, and time according to your attribution policy. Keep sensitive personal details out of public analytics URLs.

Then check how the inquiry connects to an opportunity. Merging contacts, updating a contact, and attributing a deal are different decisions. The lead-to-revenue attribution checklist explains how to keep source history and avoid counting the same closed deal more than once.

Test six cases before rollout

Use test records and inspect the resulting CRM history and follow-up queue:

  • Replay one submission: it resolves to the same intake and confirmed CRM record without repeating its intended follow-up.
  • Deliver the intake to two workers at once: the safeguard prevents two records from being created for that intake.
  • Lose the response after a successful write: the intake resolves the saved record or enters review without a blind creation retry.
  • Fail the owner notification: the retry sends the missing notification without another CRM creation.
  • Submit a new inquiry from an existing contact: the new event remains visible and receives the appropriate review or follow-up.
  • Use a shared inbox or changed email: an uncertain match reaches a named reviewer without an automatic merge.

Write down the expected outcome before each test. Check the actual record count, intake history, opportunity links, and messages afterward; a successful integration status alone does not show whether a duplicate was created.

Datagran's product guide describes connecting conversations with CRM, automation, and analytics. Bring one intake route to a demo and ask how its connector handles repeated submissions, uncertain writes, and handoffs. Use the six cases above to evaluate the proposed workflow before enabling automatic follow-up.

Connect the work in your own business.

Bring your lead, CRM, and reporting workflow to a Datagran demo. We can walk through where context is lost and what your team needs to connect.

Book a demo (opens the booking calendar)