You scraped a group of 4,000 members. The export is sitting there, and the first thing you want to do is sort by last seen and message the top 500. It feels like the obvious move: those people are online, so those people will reply.
They usually don't. Being active on Telegram means someone uses Telegram. That is all. The person online three minutes ago might be a student in a completely different market, and the one showing "within a month" might be the operations lead you have been trying to reach for a year, who simply keeps their status private.
So what should you filter on instead? Here is the order that works, from the cheap mechanical pass to the judgement calls that are actually worth your time.
The simple rule
Drop the broken records first, then filter on what the person actually does, not on when they were last online. "Last seen recently" only tells you the account is real and in use. It says nothing about whether your offer is relevant to them, and sorting your whole list by it is the fastest way to fill a campaign with polite people who have no reason to answer.
What to look for
01Why "last seen" is the weakest signal in your export.
02The four things worth filtering on instead.
03What to do with profiles you genuinely cannot read.
04A quick way to tell whether your filter is working.
First, throw out what isn't usable
This pass needs no judgement at all, so get it out of the way.
Deleted accounts, obvious bots, anyone already in your contacted list, and anyone who asked not to hear from you should never reach a campaign. Neither should a contact belonging to another client's workspace, if you run outreach for several clients.
In TeleBoost this happens while you scrape: bots and deleted accounts are skipped, people you have already contacted are recognised, and each client's contacts stay in their own workspace. Working from a spreadsheet, do this pass by hand before anything else. It is boring, and skipping it is how the same person ends up getting three messages from three campaigns in one week.
Worth remembering: a clean list is not a qualified list. So far you have only removed records that would have failed anyway.
What "last seen" actually tells you
Telegram lets everyone decide who can see their online status, and a lot of people restrict it.
When they do, the API returns something deliberately vague: "recently", "within a week", "within a month", or nothing at all. That is a privacy setting, not a measurement of how active someone is.
Which means the profile showing "last seen a long time ago" may well be online right now with their status hidden. Filter those people out and you are not removing inactive accounts. You are removing careful people, and careful people are disproportionately the ones running something worth talking about.
| What you see | What it reasonably suggests | What it does not tell you |
|---|---|---|
| Online, or last seen recently | The account is real and in use | Whether your offer means anything to them |
| "Within a week" or "within a month" | Usually a privacy setting, not real absence | How often they actually open Telegram |
| Posts regularly in the group | They care about the topic | Whether they decide anything, or just enjoy the chat |
| No visible status at all | They restricted it, like millions of people do | That they are unreachable or that the account is dead |
The rule: use activity as a tiebreaker between two equally relevant people. Never use it as the filter that builds the list in the first place.
Filter on the person, not the timestamp
One question does most of the work here: looking at this profile, can you say in a single sentence why your offer is relevant to this specific person?
If you can, they belong in the campaign. If the best you can manage is "they're in a crypto group, so probably crypto", they don't, and no amount of clever copy will rescue that message.
What you are reading is whatever the person chose to make public: a bio naming their role or company, a linked channel or site, and above all the kind of questions they ask in the group. Someone asking how to handle payouts for their affiliates has told you what they do far more precisely than any online indicator ever will.
- A role you can name. "Runs an affiliate program" or "handles support for a casino brand" beats "seems senior".
- A problem you can connect to. Their visible situation should have an obvious link to what you sell.
- Context from where you found them. A 200-member group about affiliate payouts tells you something real. A 90,000-member general crypto chat tells you close to nothing.
- An opener you can write honestly. If you cannot explain in your first line why you are messaging *them*, the targeting is wrong, not the copy.
On job titles: "founder" covers a solo freelancer, a fifty-person company, and a project abandoned in 2021. Treat it as a hint, and look for a second signal before you commit.
The pile you can't read
Every list has profiles with a first name, no bio, and nothing else. The instinct is to message them all or delete them all. Both waste the list.
Split them instead. Someone who posted something relevant in the source group goes into a "maybe" list worth a second look when you have time. Someone with no bio, no posts and nothing but a username goes to the bottom of the pile, and stays there while you work through the people you can write a decent opener for.
This is also the honest answer to the volume question everyone asks. A smaller list of people you actually understand will outperform a large one you don't, because your message can never be more relevant than your reason for sending it.
A habit worth keeping: save a one-line note on the contact explaining why you included them. When the reply lands three weeks later, that line is the difference between a sharp follow-up and a generic one.
How to tell whether your filter is working
Reply rate on its own will mislead you.
A vague message sent to 500 people gets replies too, mostly "who is this?", and those cost you time without going anywhere. Watch the *kind* of replies instead. Interested, not right now, wrong person, and no thanks are all useful outcomes that tell you something.
The signal that your filter is broken is confusion: people asking why you contacted them, or answering as though you have mistaken them for someone else. That is a targeting problem, and rewriting your opener will not fix it.
- Compare results by source group, not just overall. One group usually produces most of your good conversations.
- Note the reason behind each no. "Not my department" and "we already use something" point to two very different mistakes.
- Drop any filter rule you have never actually used to exclude anyone.
How we checked this guide
Everything above works from what people publish about themselves and from the group they chose to join. It is a way to decide who is worth contacting, not a claim that contacting them is appropriate everywhere: group rules, local marketing law, and ordinary courtesy still apply, and anyone who asks not to be contacted should go on your suppression list straight away.
Try it on your next group
Take the last list you built and ask which filter did the real work. If the answer is a date column, you were sorting rather than qualifying, and the reply quality probably showed it.
The payoff for filtering properly is not only a better reply rate. It is that answering your message stops feeling like an interruption to the person on the other end.
Filter once, keep the context: TeleBoost lists and lead management keep the source group, your notes, and the reply history attached to each contact, so a lead you qualified in March still makes sense in June.
Keep learning