"Telegram scraping" is a category of techniques for extracting publicly available metadata about members of Telegram groups: their username, display name, last-seen bucket, profile photo presence, and sometimes their bio. The data sits behind Telegram's standard MTProto API and is the same data any group member can see by tapping the group header.
What makes scraping interesting (or risky) is what you do with the extracted list. Used as a seed for a high-relevance, opted-in newsletter, it is a legitimate lead-generation tactic. Used for unsolicited bulk DMs, it is the fastest way to burn a sender account and earn a spam complaint that lives in your compliance file forever.
This guide walks through scraping the right way: with documented consent, with quality filters that improve both reply rates and compliance posture, with warm sender accounts that survive the inevitable report or two, and with a per-account daily cap that keeps your trust score positive.
Step 1: Confirm the legal and ToS basis for your outreach
Budget: 5 minutes (one time). Three frameworks simultaneously govern Telegram scraping for outreach: the platform's own Terms of Service, the major data-protection laws (GDPR, KVKK, CCPA, CASL, CAN-SPAM), and any sector-specific rules (HIPAA, GLBA). None of them flatly ban scraping; all of them constrain what you can do with the result.
For a documented lawful basis you have three realistic options:
- Consent. The cleanest option but rarely available before scraping (the whole point is reaching people who have not yet consented). Useful for warm communities you operate yourself.
- Legitimate interest. Defensible under GDPR Article 6(1)(f) for B2B outreach to professional contacts who would reasonably expect a relevant message in their area of work. Requires a written legitimate-interest assessment (LIA) on file.
- Contractual necessity. Almost never applies to cold outreach. If a contact has signed up for your product, you do not need to scrape them.
Whatever basis you pick, log it. CRM Solid has a free-text "lawful basis" field on every imported segment; fill it in. If a regulator or an angry recipient asks, you have evidence within 30 seconds.
Important: consumer-targeted scraping (regular people in their personal capacity, not businesses) is a different beast. GDPR's bar is much higher and many jurisdictions require opt-in consent before any commercial message. If your audience is consumers, talk to a lawyer in your region first.
Step 2: Pick groups where your target audience genuinely engages
Budget: 15 minutes. Group selection is the single biggest lever on your eventual reply rate. A 50,000-member crypto news group looks attractive but is the wrong audience for a B2B SaaS pitch; members are there for market info, not for buying enterprise software.
What good groups look like:
- Active in the last 7 days. Scroll the message history. If the last message was a week ago, the group is dead.
- Genuine member engagement. Multiple distinct members posting (not just one admin and bots).
- Topic match with your offer. A "remote work tools" group is a fit for a productivity SaaS; a "remote work jobs" group is a fit for a recruiting tool. Not interchangeable.
- Size between 1,000 and 10,000. Smaller groups feel spammed faster. Larger groups beyond Telegram's 10K member-list cap waste your time (you cannot scrape past 10K anyway).
- English (or your operating language) primary. Mixed-language groups produce mixed-quality cohorts.
Telegram's in-app search now categorizes public groups by topic, but the better search is to ask three customers in your category which Telegram groups they actually read. You will get a higher-signal shortlist in 10 minutes.
Step 3: Join the target groups from a warm account
Budget: 5 minutes per group, then 24+ hours of wait. Telegram's anti-abuse system watches account behavior tightly. One of the loudest signals is the "join → scrape → leave → repeat" pattern. Avoid it.
The right join flow:
- Join from an established sender account that has at least 30 days of normal Telegram usage history (real contacts, real messages, not a freshly-registered shell).
- Stay in the group at least 24 hours before scraping. Ideally, read a few messages, react to one or two, even post a benign comment if appropriate. This makes the join look like a member, not a scraper.
- Limit total group joins per account to 10 per week for the first month. Joining 100 groups in a day is the fastest-known route to a SPAMMER trust-score downgrade.
- Do not leave the group right after scraping. Stay in for at least a week. Leaving immediately is also a flagged pattern.
Step 4: Run a scrape with default filters off
Budget: 2 minutes per group. Open CRM Solid > Scrapers > New > Telegram group. Paste the group username (e.g., @saasfoundersclub) or the invite link.
For your first scrape on each group, leave all filters at default (all members, regardless of activity). The point is to see the distribution of activity levels in the group; that tells you what filter values will yield a useful cohort.
The scraper outputs:
- Total members visible to your account.
- Distribution of last-seen buckets (online now, recently, within a week, within a month, long time ago, hidden).
- Profile-photo presence (yes/no), a proxy for account quality.
- Username presence (some users have no @username and can only be reached if you have their phone number).
- Bio presence, a weak signal but useful for personalization.
# Typical raw distribution from a 10K-member SaaS group
last-seen recently : 1,250 (12.5%)
last-seen within week : 1,820 (18.2%)
last-seen within month : 2,400 (24.0%)
last-seen long ago : 3,180 (31.8%)
hidden : 1,350 (13.5%)
total scraped : 10,000
with profile photo : 6,400 (64.0%)
with @username : 7,250 (72.5%)
with bio : 3,900 (39.0%)Most of the raw 10K is dead weight. The next step turns the raw number into a usable cohort.
Step 5: Apply activity-based filters
Budget: 1 minute. Re-run the scrape with these filters:
- Last-seen: within 7 days.
- Profile photo present: yes.
- Username present: yes.
- Has posted in group: at least 1 message (if the group is large enough to make this distinguishable).
On the 10K-member distribution above, this yields roughly 800-1,200 contacts. That is your real reachable cohort. Reply rates from this cohort typically land in the 8-15% band versus 1-3% from the raw list, a 4-8x lift.
The reasoning behind each filter:
- Last-seen ≤ 7 days filters for users who actually open Telegram. Inactive users never read your DM.
- Profile photo present correlates with real human accounts; throwaway and bot accounts skip this step.
- Username present ensures the contact is addressable without needing their phone number (which you do not have for cold contacts).
- Has posted in group separates genuine community members from passive members who joined and forgot.
Counter-tip: for niche topics with low total audience (e.g., "Russian-speaking F# developers"), relax to last-seen ≤ 30 days. The smaller pool requires more permissive filters or you end up with 40 contacts total.
Step 6: Save as a segment, tag everything
Budget: 1 minute. Click Save as segment. Name it descriptively: saasfoundersclub-active-2026-05-13. Apply tags in bulk:
source:telegram-groupgroup:saasfoundersclubscrape-date:2026-05-13cohort:active-7dpersona:saas-founder(or whatever applies)
These tags do three things. First, they are your audit trail when someone asks where the contact came from. Second, they let you measure per-group, per-scrape-date reply rates over time and prune sources that stop performing. Third, they let you build smart segments, e.g., "all contacts from any SaaS group scraped in the last 90 days who have not replied yet."
Step 7: Warm up your sender accounts
Budget: 14-30 days of patience (zero hands-on time). This is the step everyone wants to skip and the step that decides whether you have a stable channel in six months.
A scraped-cold-contact DM is the highest-report-risk message Telegram sees. If your sender account is brand new (less than 30 days), with no profile photo, no bio, no contacts, and no message history, the first three reports will trigger a temporary send block. The fifth will get you a 7-day suspension. By the time you are unblocked, your campaign is dead.
The 14-day warm-up curve (in detail in our bulk messaging guide):
- Days 1-3: 5 messages per day to warm/known contacts only.
- Days 4-7: 10 messages per day, mixed warm + opted-in.
- Days 8-14: 20 per day, can start small batches of cold-scraped.
- Day 15+: 50 per day full cold-scraped throughput.
Meanwhile, the account should have a real profile photo, a 1-line bio, at least 10 personal contacts in its address book, and a few real conversations in its message history. These are not optional.
Step 8: Send slow, personalized, and with stop-on-reply
Budget: ongoing. Day 1 of outreach to a fresh scraped cohort should be conservative. Settings to use:
- Daily cap per sender: 5 messages to scraped contacts.
- Minimum interval: 5 minutes between sends.
- Multi-account rotation: spread the 5 across 2-3 senders if available.
- Template variation: at least three spintax variants per opener.
- Group-name personalization: reference the source group explicitly to anchor relevance.
- Stop-on-reply: always on. Always.
# Anchored opener that references the source group
{Hi|Hey} {first_name|there}, {noticed|saw} your {post|comment} in
{group_name} {today|recently} about {topic}. We help {persona} solve
that without {pain_point}. Quick check - are you {currently|actively}
looking for that, or just keeping an eye on the space?Watch reply rate and report rate hourly for the first 48 hours. Targets:
- Reply rate ≥ 8%: you have a healthy cohort and a healthy template.
- Report rate ≤ 1 per 200 sends: you are well below the danger threshold.
- If reports spike to ≥ 1 per 50, pause immediately and investigate.
After 48 hours of clean signals, ramp daily cap to 10 per sender, then 20, then 40 over the next two weeks. You should reach steady- state throughput by week three.
Common pitfalls
- Re-using the same opener for 1,000 sends. Telegram fingerprints message content. Spintax is non-optional.
- Sending all day without breaks. Real humans sleep. CRM Solid's rate limiter respects business hours by default; keep it on.
- Ignoring opt-out requests. Anyone who replies "STOP" or "unsubscribe" needs to be flagged in the CRM within minutes. This is automatic in CRM Solid via keyword rules; verify the rule is enabled.
- Re-scraping the same group every week. Telegram tracks this. Once a quarter is plenty.