Telegram Group Scraper avatar

Telegram Group Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Telegram Group Scraper

Telegram Group Scraper

Extract all members from any Telegram supergroup. Get username, phone, bio, premium status, last seen and more. Built on User API — not Bot API. Pay-per-result, no monthly fee. MCP/AI Agent compatible.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

opportunity-biz

opportunity-biz

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

15 days ago

Last modified

Share

Telegram Group Members Scraper — Bio, Phone, Premium & More

Extract all members from any Telegram supergroup, including bio, phone number, premium status, last seen, language code, and more.

This is an actively maintained alternative to abandoned Telegram scrapers on the Apify Store. Built with Telethon using the Telegram User API — the only API that gives you full access to group members and their complete profiles.

Pay-per-result pricing — no monthly subscription.

⚠️ Important: This Actor works only with supergroups — groups where you can see the member list inside the Telegram app. It does not work with broadcast channels (like @telegram or news channels). If you can tap "Members" in the group info screen, it will work.


📊 Output Example

Telegram Group Scraper — real output sample

Real output from a live run — 500+ members extracted with username, phone, bio, premium status and last seen.


🔑 Why User API — Not Bot API

Most Telegram scrapers on the market (including popular ones on this Store) are built on the Telegram Bot API. This Actor is fundamentally different: it uses the Telegram User API (MTProto), the same protocol used by the official Telegram app.

This is not a minor technical detail — it determines what data you can access:

CapabilityBot API (other scrapers)User API (this Actor)
List all group members❌ Bots cannot see the member list✅ Full member list
bio / profile description❌ Not accessible✅ Available with fetchBio: true
phone number❌ Not accessible✅ When visible by the user
lastSeenStatus❌ Not accessible✅ 5 distinct statuses
isPremium❌ Not accessible
isVerified, isScam, isFake❌ Not accessible
langCode❌ Not accessible
accessHash (for direct messaging)❌ Not accessible
groupMembersCount (accurate)✅ via GetFullChannelRequest

The Bot API was designed for building chatbots, not for data extraction. Telegram intentionally restricts bots from reading member lists to protect user privacy. The User API, used by the official Telegram clients, has no such restriction — it's how the app itself works.

The practical result: with this Actor you get a complete, enriched member dataset. With a bot-based scraper, you get a partial list with almost no profile data.


✨ What Makes This Different

FeatureThis ActorOther scrapers
Based on User API (not Bot API)❌ Usually Bot API
bio field (profile description)fetchBio: true❌ Never available
groupTitle + groupMembersCount❌ Usually missing
lastSeenStatus❌ Usually missing
isPremium / isVerified / isScam❌ Usually missing
accessHash (for direct contact)❌ Usually missing
scrapedAt timestamp❌ Usually missing
Exclude bots / deleted accounts
Resume from page (startPage)
SOCKS5 proxy support
MCP / AI Agent compatible
Clear error for broadcast channels
Actively maintained (2026)❌ Last updated 7+ months ago

🚀 Use Cases

  • Lead generation — export members of niche crypto, trading, or marketing groups
  • Community analysis — understand group demographics and activity levels
  • Sales outreach — find premium members and verified accounts in your industry
  • AI Agent workflows — MCP-compatible for use in LangChain, n8n, and similar tools
  • Research — track group growth over time using groupMembersCount + scrapedAt

📋 Input

FieldTypeRequiredDescription
groupUrlstringGroup @username or t.me/... link (supergroup only)
sessionStringstringTelethon StringSession (generate locally, see below)
maxMembersintegerMax members to extract (default: 1000, max: 50000)
startPageintegerStart page to resume interrupted runs (default: 1)
fetchBiobooleanFetch each member's bio. ⚠️ Slow: ~8 min per 500 members. Default: false
excludeBotsbooleanSkip bot accounts (default: false)
excludeDeletedbooleanSkip deleted accounts (default: true)
proxyIpstringSOCKS5 proxy IP
proxyPortintegerSOCKS5 proxy port
proxyUsernamestringProxy username
proxyPasswordstringProxy password

fetchBio: performance trade-off

fetchBio: false (default)fetchBio: true
Speed (500 members)~30 seconds~8 minutes
Extra API calls0500
bio field in output"" (empty)text or ""
Ban riskminimallow but present

Enable fetchBio only when you specifically need profile descriptions (e.g. for lead qualification or persona analysis).


🔐 How to Get Your Credentials (5 minutes, one time only)

This Actor requires three values: api_id, api_hash, and sessionString. You only need to do this once — the session string never expires unless you explicitly log out.

Step 1 — Get your API ID and API Hash (2 minutes)

  1. Open my.telegram.org in your browser
  2. Log in with your Telegram phone number (you'll receive a confirmation code in the Telegram app)
  3. Click "API development tools"
  4. Fill in the form — App title and Short name can be anything (e.g. MyApp / myapp)
  5. Click "Create application"
  6. You will see your api_id (a number like 12345678) and api_hash (a string like a1b2c3d4e5f6...)

Copy both values and keep them safe. You'll paste them into the script below.

⚠️ Do not share your api_id and api_hash publicly. They are tied to your Telegram account.

Step 2 — Generate your Session String (2 minutes)

You need Python installed on your machine. If you don't have it, download it from python.org — the installer takes about 2 minutes.

Install Telethon (run once in your terminal / command prompt):

$pip install telethon

Create a file called gen_session.py and paste this code:

import asyncio
from telethon import TelegramClient
from telethon.sessions import StringSession
API_ID = 12345678 # ← replace with your api_id
API_HASH = 'your_hash' # ← replace with your api_hash
async def main():
async with TelegramClient(StringSession(), API_ID, API_HASH) as client:
print("\n" + "="*60)
print("✅ Your session string (copy everything between the lines):")
print("="*60)
print(client.session.save())
print("="*60 + "\n")
asyncio.run(main())

Run it:

$python gen_session.py

Telegram will ask for your phone number and then send a confirmation code to your Telegram app. After you enter it, the script prints your session string — a long string starting with 1BV... or similar.

Copy the entire session string and paste it into the sessionString field in the Actor input.

Step 3 — Paste into Actor input

  • sessionString → paste the long string from Step 2
  • groupUrl → paste the @username or t.me/... link of the group you want to scrape
  • All other fields are optional

That's it. Click Run and your dataset will be ready in seconds.

The session string never expires. You generate it once and reuse it for every future run. It only becomes invalid if you manually log out from that session in Telegram Settings → Devices.

How to check if a group is a supergroup

Open the group in the Telegram app → tap the group name → if you see a "Members" section with a list of users, it's a supergroup and this Actor will work. If you only see a subscriber count with no member list, it's a broadcast channel and this Actor cannot scrape it.


📦 Output Fields

Each item in the dataset contains:

{
"id": "202577853",
"accessHash": "-2127225199806290195",
"firstName": "Pavel",
"lastName": "Tsyganov",
"username": "Tsyganov_pro",
"usernames": [],
"phone": null,
"langCode": null,
"lastSeenStatus": "UserStatusRecently",
"bio": "Crypto trader | Telegram signals",
"isBot": false,
"isPremium": false,
"isVerified": false,
"isDeleted": false,
"isScam": false,
"isFake": false,
"isRestricted": false,
"photoId": "870065253985134518",
"photoDcId": 2,
"groupTitle": "Crypto Live Feed",
"groupMembersCount": 4821,
"scrapedAt": "2026-03-12T09:42:00Z"
}

Note: bio is only populated when fetchBio: true. All other fields are always present.


⚙️ Technical Notes

  • Built with Python 3.11 and Telethon — no Apify SDK (avoids SDK conflicts)
  • Uses User API (MTProto + StringSession), not a bot token — required to read group members and profile data
  • groupMembersCount fetched via GetFullChannelRequest — accurate even as a non-admin member
  • Works only on supergroups, not broadcast channels
  • bio is fetched via a separate GetFullUser call per member — enable with fetchBio: true
  • Rate limiting: 1 second delay between batches and between bio calls to avoid Telegram flood errors
  • Supports SOCKS5 proxy for IP rotation or geo-restricted access
  • If a group has privacy restrictions, some members may not be visible — this is a Telegram limitation

💳 Pricing

  • Model: Pay-per-result (PAY_PER_EVENT)
  • Price: $1.00 per 1,000 members extracted
  • Example: Scraping 10,000 members costs ~$9.00

Much cheaper than flat-rate competitors charging $25/month regardless of usage.


🤝 Support & Maintenance

This Actor is actively maintained by opportunity-biz. Issues are answered within 24 hours. If you find a bug or need a feature, open an issue on GitHub.