Skip to main content

Users

The Users page lists the unique users who interacted with your bot within the selected time range.

What this page shows

Every row of the table contains:

FieldDescription
Platform User IDThe identifier the producer recorded the event under. For private chats this is the user's Telegram ID; for group messages the MTProto worker records the chat ID here, and the real author is in $tg.from_id — which is what the user metrics count
Events in RangeNumber of events for this user in the selected period
First SeenDate of the first interaction
Last SeenDate of the last interaction
AdditionalProperties from the user profile (configurable)

Column setup

Click Columns at the top of the page to add or remove columns with user properties.

The $tg.username column is shown by default. You can:

  • Add any property from the user profile (for example, $tg.first_name, $tg.lang)
  • Enter an arbitrary property key manually
  • Remove the columns you do not need

Your column selection is stored in the browser and restored the next time you open the page.

User profile properties ($tg.*)

When you connect with a Telegram bot token, Metriox automatically stores the user's properties from Telegram:

PropertyTypeDescription
$tg.telegram_user_idnumberThe user's Telegram id
$tg.first_namestringFirst name
$tg.last_namestringLast name (if set)
$tg.usernamestringTelegram username (if set)
$tg.language_codestringLanguage code (for example, "ru", "en")
$tg.is_premiumbooleanPremium status (if Telegram reports it)

Where a profile comes from, and why it can be empty

Most Telegram accounts have no @username, and a name arrives only on updates where Telegram attached the from object. So a user can appear in the list with nothing but an identifier — they exist and are counted everywhere, there is simply nothing to call them yet.

What fills a profile:

  • Mini AppinitData carries the full identity, so the profile is always filled.
  • Server SDK (Bot API) — identity arrives when you pass the whole update to the SDK (see SDK). Without that Metriox still recovers @username from the events themselves, but the name, language and Premium flag stay unknown.
  • Bot token connection (MTProto) — Telegram does not hand a bot its private chats, so this path fills no profiles for DMs; in groups and channels it does.

History from before Metriox cannot be recovered: Telegram has no method that returns the list of people who have written to a bot. Only what happens after connecting is counted.

Periods in attribute breakdowns

A breakdown by language, Premium or campaign counts the users who were active in the selected period, and reads their profile as of now. Someone whose profile was written six months ago but who wrote yesterday appears in yesterday's report. Someone active but still nameless lands in the "unset" bucket.

The /start parameter

If the user opened the bot through a /start <parameter> deep link, Metriox stores:

PropertyTypeDescription
$tg.start_rawstringThe /start parameter exactly as received
$tg.start.<key>stringParsed key=value pairs from the parameter

Example: if the user followed the link https://t.me/YourBot?start=ref_123%26campaign_promo, then:

$tg.start_raw  = "ref_123&campaign_promo"
$tg.start.ref = "123"
$tg.start.campaign = "promo"
Data freshness

The user profile is updated on every interaction. The table shows the latest known snapshot.

Filtering users

The Users page uses the same filters as widgets. Use event predicates to find users who performed specific actions.

User card

Click a user row to open their card, which shows:

  • All profile properties
  • The event history for the selected period

What's next?

  • Filters — segment users by events and properties
  • Metrics — more about the Events, Users, and Events per User metrics
  • Automatic setup — how to enable automatic profile capture