A Python CLI tool for exporting Telegram group member lists to JSON files using your personal account. Uses Telethon (Telegram user API, not Bot API) with built-in safety features: sequential processing, rate-limit handling, session persistence, and automatic deduplication.
/telegram-exporter --list # List all groups
/telegram-exporter --id 2805943040 # Export one group
/telegram-exporter --ids 123,456,789 # Export multiple groups
/telegram-exporter --names "GroupName" # Export by name
Type /telegram-exporter --help for full documentation.
# 1. Create and activate virtual environment
python -m venv venv
source venv/bin/activate # macOS/Linux
# or
venv\Scripts\activate # Windows
# 2. Install dependencies
pip install -r requirements.txt
# 3. Set up .env (see below)
cp .env.example .env
# Edit .env with your credentials
# 4. Run
python run.py --list-groups # List all groups
python run.py --group-id 2805943040 # Export group by ID
python run.py --names "GroupName" # Export by nameOn first run, you'll be prompted to:
- Enter a verification code sent to your Telegram account
- Enter your 2FA password (if enabled)
The session is saved locally in telegram_session.session and reused on subsequent runs.
- Your personal Telegram account is used (not a bot)
- You need valid API credentials from my.telegram.org
- Member data is exported to local JSON files
✅ Safety features built-in:
- Sequential processing (no parallel requests)
- 2-second delays between requests + random jitter
- Automatic rate-limit detection and graceful stop
- Session file stays local (not transmitted)
- Conservative by default (safe settings for main accounts)
- Transparent logging of all actions
Best practices:
- Keep your
.envfile private (in.gitignore) - Use strong 2FA on your Telegram account
- Review exported JSON before sharing
- Don't commit
.envor session files to version control
Create .env with these required variables:
# REQUIRED - Get from https://my.telegram.org/apps
TELEGRAM_API_ID=your_api_id
TELEGRAM_API_HASH=your_api_hash
TELEGRAM_PHONE=+1234567890 # Your phone number with country code
# OPTIONAL - Defaults shown
OUTPUT_DIR=./exports # Where to save JSON files
DELAY_BETWEEN_REQUESTS_MS=2000 # Wait between requests (ms)
DELAY_JITTER_MS=1000 # Random jitter to avoid patterns
DRY_RUN=false # Test without saving files
MAX_GROUPS=0 # Limit groups (0 = no limit)
MAX_MEMBERS_PER_GROUP=0 # Limit members per group (0 = no limit)
One JSON file per group in exports/:
{
"group_name": "GroupName",
"members": [
{
"telegram_username": "user123",
"telegram_userhandle": "@user123"
}
],
"exported_at": "2026-03-18T12:00:00Z",
"total_members": 1
}Features:
- Only members with public usernames are exported
- Automatically deduplicated
- Empty/invalid entries filtered out
- Users in
exclude_list.jsonare skipped
Create exclude_list.json to filter out specific users:
["@spam_bot", "@fake_user", "another_handle"]telegram-exporter/
├── .claude/skills/telegram-exporter/ # Claude Code skill
├── src/ # Source code
├── run.py # Main entry point
├── requirements.txt # Dependencies
├── .env.example # Config template
├── .env # Your actual config (gitignored)
├── exclude_list.json.example # Exclude list template
├── exports/ # Output folder (auto-created)
└── README.md # This file
- Telethon - Telegram user API client
- Python 3.8+ - Runtime
- asyncio - Async/await for efficient I/O
- python-dotenv - Environment variable management
MIT