guides
How to Deduplicate Leads Collected From Multiple Telegram Prospecting Tools

Merge exports from several Telegram scrapers into one clean list by keying on the numeric Telegram user ID, not the username, and keep source tags for each lead.
Key takeaways
Use the numeric Telegram user ID as your dedupe key, because Telegram's Bot API describes it as the unique identifier while username is optional.
Apify's Telegram Member Scraper dedupes on user ID and keeps group_id and found_in on every row.
HubSpot's default duplicate matching does not include Telegram handles, so add a unique custom property.
Keep a source column so you never lose which group or tool found each lead.
To deduplicate Telegram leads from several tools, normalize every export into one sheet and match rows on the numeric user ID. Fall back to username and phone only when the ID is missing, then merge while keeping every source tag. Do this before you import anything into your CRM.
Why should you dedupe on Telegram user ID instead of username?
Dedupe on the numeric user ID, because usernames change and the ID is the stable identifier. Telegram's Bot API defines the User id as a unique identifier and marks username as optional.
Telegram's updateUserName update carries a user_id plus new names and usernames, so the names change while the user_id stays. One account can also hold several active usernames, according to the Telegram Fragment docs.
Store the ID as a 64-bit integer or text. The Bot API says it has at most 52 significant bits, so spreadsheets that round long numbers can corrupt it. Format that column as plain text before pasting.
How do you merge exports from different scrapers into one sheet?
Map every export to the same columns first, then stack the rows. A shared schema is what makes matching possible at all.
The tools return different fields. The TelegramScraper.shop toolkit exports seven columns: Name, ID, Username, Phone Number, Access Hash, Group Name and Group ID. The Mastros Chrome extension exports names, @handles, user IDs, roles, bios and phone numbers where shown.
Create columns: user_id, username, name, phone, source_tool, source_group, found_in.
Rename each export's columns to match.
Fill source_tool with the tool name for every row.
Stack all files into one sheet.
Sort by user_id and flag repeated values.
Leave blanks blank. Optional fields are often empty, and filling them with guesses creates false matches later.
Which scrapers already remove duplicates for you?
Apify's Telegram Member Scraper by AgentX dedupes on numeric user ID, so a person found in both the member list and message authors appears once. Its product page says each row keeps group ID, username, title and found_in, which lets you merge several exports without losing provenance.
Mastros says it removes people who appear twice when you save more than one group in a single export. That only covers one export run, not files from other tools.
Built-in dedupe stops at the tool boundary. Two different scrapers still produce overlapping files, so you need your own pass across them.
Watch the found_in field. The AgentX docs state that found_in=messages proves authorship in scanned history, not current membership.
How do you match leads that have no user ID?
Match on phone number first, then on username, and review the rest by hand. Treat these as weaker keys than the ID.
Normalize phones to one international format before comparing.
Lowercase usernames and strip the @ sign.
Check collisions manually, because a reused or changed username can point to a different person.
Once matched, copy the user ID onto the surviving row.
Keep the old username in a notes column, since accounts can carry several.
If you only have phone numbers from Apollo or Clay, crmchat includes a phone number to Telegram username converter that turns prospect phone numbers into usernames for outreach sequences. Per the crmchat help center, the average enrichment rate is 50% for India, CIS and MENA, and 30% for the EU, UK and Americas.
For more on joining sources, see cross-referencing LinkedIn exports.
How do you stop duplicates inside your CRM?
Add a unique custom property for the Telegram user ID, then import against it. Most CRMs do not match on Telegram by default.
HubSpot's duplicate manager compares first name, last name, email, IP country, phone, zip code and company name, and none of these is a Telegram identifier. HubSpot says unique-value properties can be used to dedupe through import, but the duplicate manager needs a Professional or Enterprise subscription.
Zoho CRM's Deduplicate Leads tool lets you choose up to 3 match fields, per a Zoho partner article, and merges cannot be undone. Dedupely matches on any native or custom fields and also works on CSV files, with pricing that scales by record count (check their site for current details).
crmchat is built on Telegram natively, so leads are Telegram contacts from the start. crmchat lets you add leads from Telegram folder sync, forwarded messages, QR scans and a Group Parser, all inside one pipeline, as described in the help center guide. That removes one round of exporting between tools, and the crmchat API is there if you need to push cleaned data in.
What is a repeatable dedupe routine for every new batch?
Run the same five checks on every batch before it touches your CRM or outreach sequences. Consistency matters more than any single tool.
Convert the new export to your shared schema.
Compare user IDs against your master list and drop exact matches.
Compare phones, then usernames, for rows without an ID.
Append new rows with their source tags.
Log the batch date so you can trace problems.
Duplicates also hurt outreach, since one person can get the same message twice from different accounts. If you run several sender accounts, read this martech stack guide and the note on second account setup.
FAQ
What is the best key for deduplicating Telegram leads?
The numeric Telegram user ID. Usernames are optional and can change, while the Bot API describes the ID as the unique identifier for the user.
Can I dedupe Telegram leads in Excel or Google Sheets?
Yes. Stack all exports under one schema, format the user ID column as text, then use remove-duplicates or a COUNTIF flag on that column. Keep source columns so nothing is lost.
Do Telegram scrapers remove duplicates across different tools?
No. Apify's scraper dedupes on user ID within its own output and Mastros dedupes within one export, but files from different tools still overlap and need a combined pass.
Does HubSpot dedupe by Telegram username?
Not by default. Its duplicate manager compares fields such as email, name and phone, so create a unique custom property for the Telegram user ID and import against it.



