Lead deduplication: a single stream of requests from forms, chats, and email
· Source: original
The pain: one client — three requests, three managers, and zero order
A client filled out a form on your website, then messaged you on Telegram, and an hour later — sent an email. In your system, that's three different leads. Manager A calls about the first one, Manager B writes about the second, and Manager C sends a proposal about the third. The client gets three different responses, gets confused, and leaves. Or, even worse, you spend time on the same person three times over.
This isn't rare. In most companies, requests come from at least 3–5 sources: a web form, Telegram/WhatsApp, email, sometimes social media and marketplaces. Each channel writes to its own spreadsheet or its own separate funnel. The data doesn't overlap, duplicates aren't filtered out, and the manager doesn't see the big picture.
Lead deduplication and collecting requests from all channels into a single database isn't a "nice-to-have feature for the future" — it's basic sales hygiene. Without it, you're losing money for no reason: managers clash, the client gets anxious, and your analytics lie. Below is how to build a single flow instead of chaos, and what steps it takes.
What exactly can be automated
Automating request intake doesn't mean "a robot instead of a manager." It handles the routine: receive, check for duplicates, record, notify, remind. Here's a concrete scenario that pays for itself the fastest.
- Intake from a website form. The request hits a webhook, and from there — a handler.
- Intake from a Telegram bot or chat. A message with contact details is recognized, and the email/phone is extracted.
- Intake from email. An email from a form or from a client is parsed, and the contacts are pulled out.
- Data normalization. The phone is brought to a single format, the email — to lowercase, and extra spaces are removed.
- Duplicate check. An existing record in the database is searched for by email and/or phone.
- A single record. If the lead is new — a card is created. If it's a duplicate — the existing one is updated, and the source and a comment are added.
- Notification. The manager gets a message in Telegram/Slack marked "repeat inquiry."
- Reporting. Once a day/week — a summary by channel and conversion.
This kind of pipeline is built in n8n and doesn't require writing code from scratch. The main thing is to design the deduplication logic correctly and not lose a request when something fails.
The solution step by step — how it works
Let's break down the technical part using n8n as an example. The logic also works for Make and for a custom backend, but n8n is convenient because workflows can be imported and quickly adapted.
Step 1. Entry points
Each channel is a separate webhook or trigger. The website form sends a POST request with the fields name, email, phone, message. The Telegram bot receives a message and passes it to the same handler. The email trigger (IMAP) reads incoming messages and parses the email body. It's important that all channels converge at a single point — then the rest of the logic is unified.
Step 2. Normalization
Before checking for duplicates, the data needs to be brought to a single form. Phone: remove parentheses, hyphens, spaces, bring it to the format +7XXXXXXXXXX. Email: trim + lowercase. Name: remove extra spaces. This reduces the risk that "Ivan" and "ivan " will be treated as different people.
Step 3. Deduplication
The key stage. In n8n, this is done via a search node in the database (Google Sheets, Airtable, Notion, Bitrix24). The algorithm is simple:
1. Search for a record by email.
2. If not found — search by phone.
3. If found — it's a duplicate, update the existing card.
4. If not — create a new one.
Sometimes a check by name+phone is added, but that's risky: people can share names. It's better to rely on email and phone — they're unique in most cases. If the client has neither — create a lead marked "needs clarification."
Step 4. A single record
All channels write to a single table or CRM. Fields: date, name, email, phone, source (form/Telegram/email), status, comment, ID. On a repeat inquiry, we update the source to "repeat" and add a comment like "Previously contacted via the form on 05/12." The manager sees the history, not three scattered cards.
Step 5. Notifications and error handling
After recording, we send a notification to Telegram/Slack: "New lead" or "Repeat lead." If the recording node fails — the request must not disappear. In n8n, there's error handling and retries for this. A good practice is to put "failed" requests into a separate table so nothing gets lost.
You can take a ready-made setup with intake from forms, Telegram, and email, deduplication, and writing to Airtable/Notion as a foundation — that's the n8n lead pipeline: 7 workflows with deduplication, CRM, and notifications. It already includes entry points, normalization, and duplicate logic.
If you have Bitrix24 or Google Sheets instead of Airtable, a different set will work — lead automation: n8n workflows for Bitrix24, Google Sheets, Telegram/Slack, and email. It includes deduplication, error handling, and retries.
What the business gets
When requests flow as a single stream, not only the tech changes, but also the team's behavior.
- No duplicates. One client — one card. Managers don't waste time on repeat calls.
- No conflicts. It's clear who took the lead into work. A repeat inquiry is visible in the history.
- The full picture. The manager sees which channel the client came from and how they move through the funnel.
- Response speed. The notification arrives immediately, not when the manager checks their email.
- Clean analytics. You can calculate conversion by channel without double counting.
In most cases, after just a week of running this setup, it becomes clear which channels bring real requests and which are just noise. This affects budget and priorities.
Where to start
You don't need to automate everything at once. Start small and expand.
1. Choose one channel. For example, the website form. Set up request intake into a single table.
2. Add deduplication. Checking by email and phone is the minimum viable logic.
3. Connect a second channel. Telegram or email. Make sure duplicates are caught.
4. Set up notifications. So the manager sees the request right away.
5. Add error handling. So not a single request is lost when something fails.
6. Connect reporting. A simple daily summary is already useful.
If you don't want to build this from scratch, there's a ready-made set of 7 workflows: a bundle of 7 n8n workflows: intake, deduplication, qualification, and lead reports for micro-agencies. It covers the path from request to CRM and notifications.
Conclusion
Chaos with requests isn't an employee problem — it's an architecture problem. When each channel writes to its own table, duplicates are inevitable. Lead deduplication and a single database solve this without heroic effort: just set up the flow once and maintain it.
Automating request intake doesn't require a big team or expensive development. Start with one channel, add duplicate checking, connect notifications — and you'll see the difference. And if you want to speed things up, check out all Automation solutions — there are ready-made scenarios for different stacks.