Free Telegram tool

Telegram Username to ID Lookup

Resolve any public Telegram @username to its permanent numeric ID. Just paste a public @username to look up the user, bot, channel or group ID, type and title — instantly, free, and no bot token needed.

No bot token needed — we resolve it for you. Works for any public @username: users, bots, channels and groups.

How it works

Paste any public @username — a user, bot, channel or group (or a full t.me/name link) — and we resolve it to its permanent numeric ID, type and title, with no bot token. Unlike a plain bot lookup, this resolves personal users too — the only accounts we can’t find are ones with no public @username at all.

How to use it

  1. Type the public @username into the field — you can also paste a full t.me/name link and we’ll normalise it.
  2. Press Look up ID. We resolve it for you — no bot token needed — and show the permanent numeric ID, the chat type and the title or name.
  3. Hit Copy ID to copy the number, ready to drop into your bot’s code or config.

Any public @username resolves — users, bots, channels and groups alike. Only accounts with no public username stay private. Building a bot? Create a free TeleCrow bot — no code, hosting included.

Common uses — when you need a numeric ID

  • Allow-listing admins. Hard-code your own numeric user ID so only you can run privileged bot commands — usernames can change, IDs can’t.
  • Posting to a channel. Resolve a channel’s @username to its -100… ID to use as the chat_id when your bot calls sendMessage.
  • Storing customers reliably. Save the numeric ID (not the @username) in your database so records survive username changes.
  • Debugging webhooks. Confirm exactly which user, bot, channel or group an @username points to before wiring up automations.

Technical notes & gotchas

  • The method. This resolves the @username through TeleCrow’s MTProto (user-account) resolver server-side, returning the permanent numeric ID for any public account — users, bots, channels and groups — with no bot token. A plain Bot API getChat can only resolve public channels, groups and bots, not arbitrary users; the MTProto resolver can.
  • ID ranges. Users and bots have positive IDs (bots can be told apart by the is_bot flag). Channels and supergroups carry a -100 prefix, e.g. -1001234567890; pass that whole value as the chat_id.
  • Public only. Any account with a public @username resolves — personal users included. Accounts with no public @username (and genuinely private channels or groups) can’t be resolved from a username by anyone; get their ID by forwarding one of their messages to @userinfobot or @RawDataBot — no bot token needed.
  • IDs are permanent. The numeric ID never changes, so it’s safe to cache; the @username can be reassigned to a different account, so treat it as display text, not a key.
  • Rate limits. Read-only calls still count toward Telegram’s per-bot limits — fine for ad-hoc lookups, but cache results if you resolve usernames in bulk.

New to chat IDs? Our getting the chat ID for your bot guide explains every ID type in plain language. Ready to build? Create a free TeleCrow bot — no code, hosting included.

No public username? Get the ID by forwarding a message

The only accounts that can’t be resolved above are ones with no public @username at all (and genuinely private channels or groups). To get their numeric ID with no bot token:

  1. Forward one of the person’s messages (or any message from the private chat) to @userinfobot or @RawDataBot.
  2. Read the numeric "id" it replies with — that’s the permanent ID.
  3. Already run your own bot? You can instead read the "from".id from your bot’s getUpdates feed after they message it.

Frequently asked questions

How do I convert a Telegram username to a user ID?

Just enter the public @username above — we resolve it server-side (no bot token) to the permanent numeric ID, chat type and name. It works for any public account: users, bots, channels and groups.

Why can’t I resolve a private user’s ID?

Telegram does not expose a private account’s numeric ID through getChat — there has to be a prior interaction. If the person has no public @username, ask them to message your bot and read their ID from getUpdates, or forward one of their messages to a bot like @userinfobot. See the manual method above.

Do I need a bot token?

No. We resolve public @usernames for you server-side, so you just paste the handle — no token, no setup. It works for users, bots, channels and groups alike; only accounts with no public @username stay private.

Can I look up a personal user’s ID from their @username?

Yes — as long as they have a public @username, this tool resolves a personal user’s numeric ID just like a channel or bot. A plain bot can’t do that, but we resolve it for you server-side. The only accounts we can’t find are ones with no public username at all.

Does the username ID ever change?

No. A Telegram user, bot, channel or group ID is permanent for the lifetime of the account, even if the @username is later changed or removed. That makes the numeric ID the reliable identifier to store in your bot.

Is this tool free and do I need an account?

It is completely free with no sign-up, login, email or bot token required — just paste a public @username and look up the ID. There are no usage caps for normal use beyond Telegram’s own rate limits. You only need a TeleCrow account if you later want to build and host a bot, not to use this converter.

Why does a channel or supergroup ID start with -100?

Channels and supergroups use a numeric ID prefixed with -100, for example -1001234567890. The leading minus marks it as a chat (not a user), and the 100 prefix distinguishes supergroups and channels from older basic groups. When you call the Bot API you pass the full -100… value as the chat_id; this tool returns the ID in that ready-to-use form.

I got “chat not found” — what does that mean?

Telegram returns “Bad Request: chat not found” when getChat can’t see that @username: it doesn’t exist, was typed wrong, was recently changed, or belongs to a private account with no public link. Double-check the exact spelling (usernames are case-insensitive but must match) and confirm the account is actually public. Private users can’t be resolved this way — use the getUpdates method described above.

Can I resolve the ID of a private channel or group?

Not from its @username, because a private channel or group has no public username to resolve. Add your bot to the chat as a member or admin, then read the chat ID from an incoming update (getUpdates) or by calling getChat with the numeric ID once you have it. The numeric ID, not the invite link, is what you store in your bot.

What is the difference between getChat and getMe?

getMe and getChat are Bot API calls you’d make from your own bot: getMe returns your bot’s own identity, and getChat returns a chat your bot can already see. This tool uses neither — it resolves the @username you enter through TeleCrow’s MTProto resolver server-side, so no bot or token is involved.

Are there rate limits I should know about?

Telegram applies broad per-bot rate limits (roughly 30 messages per second overall, with tighter per-chat limits), and read-only calls like getChat count toward them. For one-off lookups in this tool you’ll never hit them. If you script bulk username resolutions, space the calls out and cache the numeric IDs, since they never change.

Build a no-code Telegram bot with TeleCrow

Create, host and manage Telegram bots without writing code — start on the free plan.

Get started free