Telegram Group Scraper
Pricing
from $1.00 / 1,000 results
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
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

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:
| Capability | Bot 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
| Feature | This Actor | Other 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
| Field | Type | Required | Description |
|---|---|---|---|
groupUrl | string | ✅ | Group @username or t.me/... link (supergroup only) |
sessionString | string | ✅ | Telethon StringSession (generate locally, see below) |
maxMembers | integer | — | Max members to extract (default: 1000, max: 50000) |
startPage | integer | — | Start page to resume interrupted runs (default: 1) |
fetchBio | boolean | — | Fetch each member's bio. ⚠️ Slow: ~8 min per 500 members. Default: false |
excludeBots | boolean | — | Skip bot accounts (default: false) |
excludeDeleted | boolean | — | Skip deleted accounts (default: true) |
proxyIp | string | — | SOCKS5 proxy IP |
proxyPort | integer | — | SOCKS5 proxy port |
proxyUsername | string | — | Proxy username |
proxyPassword | string | — | Proxy password |
fetchBio: performance trade-off
fetchBio: false (default) | fetchBio: true | |
|---|---|---|
| Speed (500 members) | ~30 seconds | ~8 minutes |
| Extra API calls | 0 | 500 |
bio field in output | "" (empty) | text or "" |
| Ban risk | minimal | low 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)
- Open my.telegram.org in your browser
- Log in with your Telegram phone number (you'll receive a confirmation code in the Telegram app)
- Click "API development tools"
- Fill in the form — App title and Short name can be anything (e.g.
MyApp/myapp) - Click "Create application"
- You will see your
api_id(a number like12345678) andapi_hash(a string likea1b2c3d4e5f6...)
Copy both values and keep them safe. You'll paste them into the script below.
⚠️ Do not share your
api_idandapi_hashpublicly. 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 asynciofrom telethon import TelegramClientfrom telethon.sessions import StringSessionAPI_ID = 12345678 # ← replace with your api_idAPI_HASH = 'your_hash' # ← replace with your api_hashasync 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 2groupUrl→ 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:
biois only populated whenfetchBio: 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
groupMembersCountfetched viaGetFullChannelRequest— accurate even as a non-admin member- Works only on supergroups, not broadcast channels
biois fetched via a separateGetFullUsercall per member — enable withfetchBio: 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.