Dev Mode Login
Enter your API secret to get a session token. Requires DEV_AUTH=true in .env — never enable in production.
Invalid secret — check API_SECRET in .env
TG Monitor
Group Intelligence
Accounts
Loading…
Total Users
—
loading…
Active Members
—
in any group
Msgs (week)
—
vs last week
DMs Sent
—
reply rate
Activity — last 14 days
Top users this week
Loading…
Loading…
Configure forwarding per group. Each group can forward to a different channel.
Changes apply only after you tap Save, and the listener picks them up within 60 seconds. The listening account must be allowed to post in the target channel.
Loading…
Rate limit: max 15 DMs/hour with 30–90s delays. Always preview before sending.
Active: still a member of the selected group(s) and posted ≥ min messages in total across the lookback window and the selected groups. Inactive: current members who have posted at least once, but not within the lookback window. Always excluded: our own accounts, bots, members who never posted, and anyone DM'd by any campaign in the last 14 days (cooldown; inactive targets: at least the lookback window).
Summed across all weeks of the lookback window and all selected groups.
How many weeks of activity to evaluate. 1 = last 7 days, max 52.
Loading…
A flood-wait over 15 min means Telegram is heavily rate-limiting this account. Stopping is safer: resending right when the wait ends is the pattern that gets accounts restricted. You get a bot alert and can re-send later with the same name — people already DM'd are skipped.
Either way, these always stop the campaign: PeerFlood (Telegram has flagged the account as spam — every further send would fail and only add evidence, which can escalate to a ban) and a banned/deactivated account. Nothing is sent during sleep hours, because night-time sending looks like a bot.
—
users would receive this
Import from CSV
Upload the exported CSV (or your hand-filtered copy). Every row with a user_id is DM'd the message below. Activity targeting and group selection are ignored — the file is the recipient list. Users already contacted under the same campaign name are skipped. Bots, our own accounts, people who never posted and anyone DM'd by any campaign in the last 14 days are skipped too. The On long flood-wait option above applies here as well.
Recent campaigns
Loading…
To find a group's ID, forward any message from the group to @userinfobot. Supergroup IDs are large negative numbers like -1001234567890.
Tap the on any group to import its past 7 or 30 days of messages.
The members: … · synced … line shows the last weekly member sync: complete (full list read), partial (Telegram returned only part of a large or hidden-member group) or flood_wait (rate-limited, retried later).
Add Group
Loading…
Download message data as CSV or Excel. Dates are optional — leave them empty to export everything. Large ranges may take a few seconds, and an export holds at most 200,000 rows.
Filters
Data available: …
Loading…
Columns: message_id · user_id · username · display_name · date · time · message_body · message_type · sender_type · group_name
TG Monitor — group intelligence & outreach dashboard.
Tap any section to expand it.
Getting Started

TG Monitor listens to your designated Telegram groups as a regular member — no admin access required. It records who posts, how often, and when, then gives you this dashboard to act on that intelligence.

What you can do

  • See who is active (or inactive) across all monitored groups
  • Automatically forward specific messages to a private channel
  • Send targeted direct messages to active or lapsed members
  • Track reply rates for every DM campaign

Access & security

Only the account registered as the admin can open this dashboard. Every API request is validated server-side — your session expires automatically after 24 hours.

If the dashboard stops loading data, close and reopen it to re-authenticate with a fresh session.
Overview Dashboard

Accounts card

One row per Telegram account the system runs, read-only. Tap ↻ to refresh.

  • Green — ok or sleeping (night hours; DMs are never sent then).
  • Yellow — flood wait (Telegram is rate-limiting it), daily cap (today's DM limit reached) or warming (new account, DMs held back for its first days).
  • Red — peer flood (Telegram flagged the account as spam; DMs paused 24 h), banned, start failed, or stale (no heartbeat for over 5 min — the service may be down).
  • Second line: heartbeat 12s ago · today 12/40 · age 194d, or the flood-wait / pause end time, or the error for banned / start failed. never reported = that account's service has not started yet.

KPI Cards

  • Total Users — every unique person ever seen across all groups, including those who have since left. The small line shows how many of them have never posted (seen only by joining or by the member sync).
  • Active Members — users who are currently a member of at least one group.
  • Msgs (week) — message count in the current ISO week (Mon–Sun). The ↑/↓ arrow compares to last week.
  • DMs Sent — total direct messages delivered across all campaigns. The percentage is the overall reply rate.

Activity Chart

Shows daily message volume for the last 14 days. A flat or rising line means healthy engagement. A sudden drop may indicate a group going quiet or a monitoring interruption.

Top Users This Week

The 4 most active posters in the current week. The horizontal bar shows each user's share of the most-active user's count — useful for spotting who drives conversation.

If all KPIs show "—", the weekly aggregation job has not run yet. Ask your operator to send /aggregate to the dashboard bot, then reload the overview.
Users Tab

A live, paginated directory of every Telegram user the system has observed, sorted by most-recently-seen first.

Searching

Type in the search box to filter by username or first name. Results update automatically as you type (300 ms debounce).

Reading the list

  • The blue badge shows the last time the user sent a message in any monitored group — e.g., "3h ago" or "12d ago".
  • Users remain visible even after leaving a group. "Last seen" reflects the most recent message observed, not Telegram's own online indicator.
  • Grey never posted badge: known only from joining or the member sync, so they are never DM targets. Red bot: Telegram marks the account as a bot. Yellow own account: one of our own system accounts. All three are always excluded from DM campaigns.
  • The pagination line below the list shows your current page and the total user count.
Message Forwarder

Automatically copies matching messages from monitored groups to a channel or chat of your choice. Each group can forward to a different destination.

Controls (per group)

  • Enable forwarder — on/off switch for this group.
  • Forward all — sends every message without keyword filtering. Use with caution on high-volume groups.
  • Target channel ID — the chat or channel to forward into. Forward any message from the target to @userinfobot to find its ID (a large negative number like -1001234567890).
  • Keywords — only forward messages containing at least one listed word. Case-insensitive. Up to 20 keywords, 50 chars each.

Adding & removing keywords

Type a word in the input field and tap Add or press Enter. Tap the × on any tag to delete it.

Important: tap Save after every change. Unsaved edits are discarded when you leave the tab.
DM Campaigns

Send a direct message to a filtered subset of users observed in your monitored groups.

Step-by-step

  • 1. Campaign name — a unique label (letters, numbers, dashes, underscores only, max 64 chars). The same user will never receive the same campaign name twice, protecting against accidental re-sends.
  • 2. Target — Active users: still a member of the selected group(s) and posted ≥ min messages in total across the look-back window and the selected groups. Reads weekly totals (previous week auto-computed Monday 00:05 UTC; this week needs /aggregate 2). Inactive users: current members who have posted at least once, but not within the look-back window. Always excluded: our own accounts, bots, members who never posted, and anyone DM'd by any campaign in the last 14 days (cooldown; for inactive targets at least the look-back window).
  • 3. Min messages — (active targeting only, 1–1000) summed across all weeks of the look-back window and all selected groups: 2 messages a week for 2 weeks passes a threshold of 3.
  • 4. Message — the DM text sent to each recipient. Max 4,096 characters.
  • 5. Preview targets — run this first. It calculates the recipient list without sending anything. Verify the count looks right.
  • 6. Send Campaign — confirms and queues the job. The server processes it in the background at the rate limits below.

Rate limits

  • Max 15 DMs per hour
  • 30–90 second random delay between each message
  • 100 recipients ≈ ~90 minutes total
  • Short flood-waits pause and resume. A flood-wait over 15 min or a PeerFlood stops the campaign and pauses the account (PeerFlood: 24 h); you get a bot alert. Re-send later with the same name — people already DM'd are skipped.

Why a campaign stops

  • PeerFlood — Telegram has flagged the account as spam and blocks DMs to strangers for now. Every further send would fail and only add evidence, which can escalate to a ban. The campaign always stops and the account is paused 24 h.
  • Long flood-wait (> 15 min) — Telegram is heavily rate-limiting the account; resending right when the wait ends is the pattern that gets accounts restricted. Choose Stop campaign (recommended) or Keep waiting up to N h in the DM tab. With waiting, the campaign sleeps, then re-checks sleep hours and the daily cap before it continues; a wait longer than your limit still stops it.
  • Sleep hours — nothing is sent at night, because night-time sending looks like a bot.

Recent campaigns

The card under Import lists every campaign with its status (running 12/40, done · 38 sent · 2 failed), the flood-wait option it was queued with, and its reply count. A stopped campaign shows the reason in red. Tap a row to see who replied (first 50).

Always preview before sending. Campaigns cannot be cancelled once queued. Your own system accounts, bots, members who never posted and anyone DM'd in the last 14 days are excluded automatically — the preview count already reflects that, and the preview lists how many were left out for each reason.
If an Active preview returns 0 users, recent weeks may not be aggregated yet. Send /aggregate 2 to the dashboard bot (plain /aggregate only does last week), wait a moment, then preview again.
Common Questions

All KPIs show "—" or the page is blank

Your session may have expired or the server is unreachable. Close and reopen the app. If the issue persists, ask your operator to check the server status.

Campaign preview returns 0 users

Activity data is aggregated weekly. Send /aggregate to the dashboard bot, wait 30 seconds, then preview again.

Can I send the same campaign to the same people again?

Not with the same campaign name — the system deduplicates by user+campaign pair. Use a new name (e.g., june_promo_v2) to re-contact them.

What if a user has blocked the account?

The system logs it as "blocked" and continues to the next recipient. Blocked users do not count against the hourly limit.

Is "last seen" the same as Telegram's online status?

No. "Last seen" here is the timestamp of the user's most recent message observed in a monitored group — not their Telegram online/offline indicator.

The forwarder isn't forwarding anything

Check that: (1) Enable forwarder is on for the group, (2) you have entered a valid Target channel ID, (3) you have tapped Save, and (4) the monitoring account is a member of the target channel.

Who can access this dashboard?

Only the Telegram account whose ID matches ADMIN_CHAT_ID on the server. Every request is verified server-side — other users are rejected even if they have the app link.

TG Monitor v1.0  ·  Sessions expire after 24 h  ·  Questions? Contact your operator