Phone lists go stale quietly. A sign-up form, an old CRM export, a spreadsheet passed between teams: a share of the numbers on it belong to people who never installed Telegram, and some of the rest belong to people who would rather not be found there. Before anything else happens with that list, someone wants to know which numbers are live. The searches for it come in many shapes, from check if a number is on telegram to telegram phone number filter tool, and they all lead to the same two requests inside Telegram.
How does a Telegram number check actually work?
Through one of two requests that only a user account can send.
Importing the number as a contact
The older path is contact import. Telegram's method contacts.importContacts takes a batch of phone numbers with names attached, saves them to the account's contact list and returns the users it could match. This is what your phone does when it syncs its address book, and it is why the app can tell you which of your contacts are on Telegram. A number that matches comes back as a user with an ID and a name; a number that does not simply never appears in the answer. Used as a checker, the method has a side effect that matters: every number you test lands in the checking account's contacts. Run a few hundred through it and the account is left with a contact list full of strangers, which is why guides on cleaning imported numbers back out of your contacts exist at all.
Resolving the number directly
The newer path is contacts.resolvePhone. It takes a single number and returns the account behind it, without adding anything to a contact list. It is the request a Telegram app sends when you tap a phone number written with its plus sign and country code in a chat, or open a t.me link built from a number. The method page describes it as resolving a number to user info "if their privacy settings allow it". If nobody can be found, it answers with the error PHONE_NOT_OCCUPIED, and the same page asks clients to allow at most one call every three seconds. One number per request is slower than a batch, but each number gets its own answer rather than a silent absence.
The setting that limits both
Here is the part most checker pages leave out. Since September 2019 Telegram users have had a privacy option called Who Can Find Me By My Number. It appears once Who Can See My Phone Number is set to Nobody, and Telegram's announcement of the setting says that choosing My Contacts means random users who add your number are unable to match your profile to it. In the API it is the privacy key privacyKeyAddedByPhone. When an owner picks My Contacts, a stranger's import does not match them and a stranger's resolve comes back PHONE_NOT_OCCUPIED, exactly as if the number had no account. Nothing on the client side can tell the two apart. So a number check reports two buckets, found and not found, and the second bucket always mixes real non-users with people who chose not to be findable. A low hit rate on a list is often that setting doing its job, not a broken run.
For one or two numbers you need no tool at all. Save the number in your phone and see whether Telegram shows the person; the steps for finding one person on Telegram from their phone number cover that route. Or type the number with its plus sign into Saved Messages and tap it, the same trick that lets you start a chat with a number you have not saved. Both are the two requests above, sent by hand. The rest of the ordinary routes, username, QR code, shared contact, are in our notes on the everyday ways to add someone as a contact.
Can a Telegram bot check whether a phone number is registered?
Not with the Bot API. A bot cannot look a number up.
The Bot API reference has no method that takes a phone number and returns a user. The only way a bot ever sees a phone number is when a person hands it over: a keyboard button with request_contact set asks the user to share their own contact, and the bot receives it only if they press it. It rules out the obvious reading of telegram bot check phone number. A bot can receive a number; it cannot check one.
So what is a telegram number checker bot? Typically a front end, whether it calls itself a telegram number check bot or a telegram phone number check bot. You send the bot your list, and behind it a server passes the numbers to ordinary user accounts that run one of the two requests above, then the bot sends back the matches. Websites work the same way. A telegram number checker online runs your list on the operator's accounts, and so does a telegram phone number checker online that asks for a CSV upload, a browser add-on sold as a telegram number checker extension, and most offers of a telegram number checker api. The accounts doing the work belong to whoever runs the service. A telegram number checker bot free of charge, or a telegram phone number checker free to use, is paying for those accounts somehow, and the list you upload is the obvious candidate. Telegram's own interface for user accounts is MTProto, the protocol its apps speak, and reaching it from your own code means registering an api_id and api_hash pair of your own and logging in as a user. There is no separate official endpoint that answers "is this number on Telegram" for anyone who asks.
The distinction between a bot and an account runs through this whole niche, and it is the first thing to settle about any tool: whether a piece of marketing software runs on a bot or an account decides what it can reach. For number checks the answer is always the account.
Which way of checking numbers fits which job?
It depends on how many numbers you have and whose accounts you are willing to spend.
Every row in the table is the same mechanism with a different owner. Only three things change: the batch size, who sees your list, and whose account absorbs the limits Telegram applies when one account looks up many numbers it has no connection to.
| Method | Request underneath | Practical batch | Who sees your list | Main limit |
|---|---|---|---|---|
| Phone address-book sync | Contact import | Your own contacts | You and Telegram | Adds every number to your contacts |
| Tap the number in Saved Messages | Resolve one number | A handful | You and Telegram | One at a time, by hand |
| Checker bot or website | Either, on the operator's accounts | Whatever the operator allows | The operator too | Your list leaves your hands |
| Your own MTProto script | Either, on your accounts | Set by Telegram's limits | You and Telegram | You write and maintain the code |
| Desktop software on your accounts | Either, on your accounts | Split across accounts | You and Telegram | Accounts can be rate-limited |
Why bulk checks hit limits
A bulk telegram number checker is the first two rows repeated hundreds of times, which is where Telegram's limits enter. The one documented figure is the resolve pace above, one call every three seconds. Contact import admits a cap only indirectly: its result has a retry_contacts field for numbers that "could not be imported due to system limitation" and must wait. Telegram publishes no daily number for either. Operators report the usual ladder: a FLOOD_WAIT error with a wait in seconds, then longer waits, and eventually PEER_FLOOD, which tells the account to stop contacting people it does not know for a while. Figures you see quoted for safe daily lookups are observations, not Telegram policy. The practical answer to check phone numbers telegram bulk is to split the list across several accounts and keep each one's share small, which is also why the question of how many accounts one person can run comes up fast.
A telegram bulk phone number checker that you run yourself keeps the list on your own machine. A hosted one does not. This is the real decision behind telegram phone filter software versus a website: not speed, but where the numbers go and whose accounts take the risk.
How does the Phone Number Checker module run a bulk check?
It resolves one number at a time, on accounts you load, and exports the matches.
Phone Number Checker is the telegram number checker tool inside Telegram Solutions, a Windows desktop suite. It does not use contact import. Each account writes a number into its own Saved Messages, opens the link Telegram makes of it, and reads the profile behind it, so the request underneath is contacts.resolvePhone and nothing is added to the account's contact list. The fields below are the module's own.
- Paste the list. Phone Numbers to Check takes one number per line. Spaces are ignored, the plus sign is added for you, and duplicates are dropped before the run starts.
- Pick the accounts. The module uses your own session files and your own proxies. It supplies neither.
- Set the share per account. Phones Per Account defaults to 20, and Max Concurrent Accounts to 3, so a list of 200 is spread over ten accounts, three working at once.
- Set the pace. Delay Between Numbers defaults to 4 seconds, varied slightly between numbers, which keeps each account just slower than the three-second pace Telegram's own documentation asks for.
- Run and read the report. Each found user is opened once more for a fuller profile, the numbers the run wrote are removed from Saved Messages when Clear Saved Messages Afterwards is on, and the run ends with a summary of why each unmatched number produced nothing.
The walkthrough below shows a full run, from pasting the list to opening the export.
What the export contains
The found numbers come out as an Excel file and a CSV in the same column layout the suite's scrapers use: user ID, phone, username, first and last name, bio, Premium flag, last-seen status and a profile-photo flag, plus a details sheet with the verified flag, the number of profile photos and the time each number was checked. The unmatched numbers are not lost either. The log counts them by reason, invalid number, no account or hidden by privacy, flood wait, and says plainly that the hidden-by-privacy case cannot be told apart from an unregistered number. It is the honest shape of any telegram phone numbers checker tool. The found list is reliable; the not-found list is a mix.
The module's limits matter as much. It cannot see past the privacy setting, and it cannot raise Telegram's limits. If an account gets a flood wait longer than five minutes, or a PEER_FLOOD, the module stops that account rather than pushing on, and the rest of the list stays unchecked on that account. Checking also needs no group membership, so an account can check numbers after leaving every group it was in at once. Accounts can be loaded from session files or converted from Portable and Desktop TDATA folders elsewhere in the suite. The tidy-up step deletes only the messages this run wrote to Saved Messages; it is nothing like wiping a whole chat history.
What should a filtered number list be used for?
For list hygiene, and only on a lawful basis you already have.
A telegram number filter answers a narrow question and leaves the important one to you. A filtered list of numbers with Telegram profiles attached is personal data. Under GDPR, and under CAN-SPAM and its equivalents once you message those people, you need a lawful basis for holding the list and for contacting anyone on it; the telegram number filter software does not provide one. Telegram is direct on the platform side. Its Terms of Service forbid using the service to send spam, and add that Telegram prohibits data scraping under its content licensing terms, which allow access to user content only for ordinary, legitimate use. Building lists of strangers' accounts from phone numbers you bought sits outside that.
The legitimate jobs are ordinary ones. A business with customers who gave their number checks which of them it can reach on Telegram before choosing a support channel. A team that runs an opt-in list removes dead numbers before a send, so it is not paying accounts to message nobody. In that second case the check comes before the sending tool, and it is worth knowing what a mass DM bot actually sends and to whom before going further, because a found number is not a person who agreed to hear from you. Unsolicited bulk messages are exactly what PEER_FLOOD exists to stop.
Some neighbouring jobs need no number at all. Posting to communities is the work of a group blaster, which reaches groups rather than inboxes, and growing a group is a choice between inviting by link and adding members directly. A number check is not a reporting tool either: whether an account deserves a report is a separate question, and what a mass report bot can and cannot do is covered elsewhere. Keep checking accounts apart from accounts that matter. An account that owns your channels, and that you would need for passing channel ownership to someone else one day, is the wrong one to spend on thousands of lookups. If it gets limited, it is limited for everything.
The short version for anyone comparing a telegram phone checker, a telegram numbers checker website and a filter number telegram service: all three ask Telegram the same question through a user account, all three get the same answer, and all three are blind to the same privacy setting. What differs is whose accounts carry the load and who keeps a copy of your list.