Skip to main content

CLI utility for downloading Telegram chat history to JSON

Project description

Telegram Chat Downloader

PyPI License: MIT Python Version

A powerful command-line utility to download and analyze Telegram chat history in multiple formats.

Features

  • Download complete chat history from any Telegram chat, group, channel or Telegram export archive
  • Save messages in JSON format with full message metadata
  • Generate human and LLM readable TXT exports with user-friendly display names
  • Filter messages by date range and specific users
  • Extract sub-conversations from message threads
  • Cross-platform support (Windows, macOS, Linux)
  • Optional graphical user interface (GUI) for easier interaction

Use Cases

Learning and Research

  • Download study group discussions for offline review
  • Archive Q&A sessions for future reference
  • Collect data for linguistic or social research

Team Collaboration

  • Archive work-related group chats
  • Document important decisions and discussions
  • Create searchable knowledge bases from team conversations

Personal Use

  • Backup important personal conversations
  • Organize saved messages and notes
  • Analyze your own communication patterns over time

Data Analysis

  • Export chat data for sentiment analysis
  • Track topic trends in community groups
  • Generate statistics on message frequency and engagement

Content Creation

  • Collect discussions for content inspiration
  • Reference past conversations for accuracy
  • Archive community feedback and suggestions

Installation

Prerequisites

  • Python 3.8 or higher
  • pip (Python package manager)

GUI Version (Optional)

For those who prefer a graphical interface, a GUI version is available. To use it:

  1. Install with GUI dependencies:

    pip install "telegram-download-chat[gui]"
    
  2. Launch the GUI:

    telegram-download-chat gui
    

The GUI provides an easy-to-use interface with the following features:

  • Download chat history with configurable options
  • Convert exported JSON data to other formats
  • Real-time log viewing
  • File preview functionality
  • Browse and open downloaded files

Install from PyPI (recommended)

pip install telegram-download-chat

Using uvx (alternative package manager)

uvx install git+https://github.com/popstas/telegram-download-chat.git

Configuration

API Credentials

To use this tool, you'll need to obtain API credentials from my.telegram.org:

  1. Go to API Development Tools
  2. Log in with your phone number
    • Important: Do not use a VPN when obtaining API credentials
  3. Create a new application
  4. Copy the api_id and api_hash to your config.yml

Configuration File

The configuration file is automatically created on first run in your application data directory:

  • Windows: %APPDATA%\telegram-download-chat\config.yml
  • macOS: ~/Library/Application Support/telegram-download-chat/config.yml
  • Linux: ~/.local/share/telegram-download-chat/config.yml

Example Configuration

# Telegram API credentials (required)
settings:
  api_id: your_api_id       # Get from https://my.telegram.org
  api_hash: your_api_hash   # Get from https://my.telegram.org
  session_name: session     # Optional: Custom session file name
  request_delay: 1          # Delay between API requests in seconds
  max_retries: 5            # Maximum number of retry attempts
  log_level: INFO           # Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  log_file: app.log        # Path to log file (relative to app dir or absolute)

# Map user IDs to display names for text exports
# Names for users and bots are automatically fetched and stored here
users_map:
  123456: "Alice"
  789012: "Bob"

You can also specify a custom config file location using the --config flag.

Usage

For the first run, you will need to log in to your Telegram account. A browser window will open for authentication.

Basic Commands

# Download chat by username
telegram-download-chat username

# Download chat by numeric ID (negative for groups/channels)
telegram-download-chat -123456789

# Download chat by invite link
telegram-download-chat https://t.me/+invite_code

# Download chat by phone number (must be in your contacts)
telegram-download-chat +1234567890

Advanced Usage

# Download with a limit on number of messages
telegram-download-chat username --limit 1000

# Download messages until a specific date (YYYY-MM-DD)
telegram-download-chat username --until 2025-05-01

# Filter messages by specific user
telegram-download-chat group_username --user 123456

# Download messages from a specific thread/reply chain
telegram-download-chat group_username --subchat 12345

# Specify custom output file
telegram-download-chat username -o custom_output.json

# Enable debug logging
telegram-download-chat username --debug

# Show current configuration
telegram-download-chat --show-config

Command Line Options

usage: telegram-download-chat [-h] [-o OUTPUT] [--limit LIMIT] [--until DATE] [--subchat SUBCHAT] 
                            [--subchat-name NAME] [--user USER] [--config CONFIG] [--debug] 
                            [--show-config] [-v]
                            [chat]

Download Telegram chat history to JSON and TXT formats.

positional arguments:
  chat                  Chat identifier (username, phone number, chat ID, or URL)

options:
  -h, --help            show this help message and exit
  -o, --output OUTPUT    Output file path (default: chat_<chat_id>.json)
  -l, --limit LIMIT     Maximum number of messages to download (default: 0 - no limit)
  --until DATE          Only download messages until this date (format: YYYY-MM-DD)
  --subchat SUBCHAT     Filter messages by thread/reply chain (message ID or URL)
  --subchat-name NAME   Custom name for subchat directory
  --user USER           Filter messages by sender ID
  -c, --config CONFIG   Path to config file
  --debug               Enable debug logging
  --show-config         Show config file location and exit
  -v, --version         Show program's version number and exit

Advanced Features

Extract Messages from Telegram Archive

You can extract messages from a Telegram export archive (result.json) that you've downloaded from Telegram Desktop:

# Extract all messages from all chats
telegram-download-chat "/path/to/Telegram Desktop/DataExport/result.json"

# Extract only messages from a specific user (by their Telegram ID)
telegram-download-chat "/path/to/Telegram Desktop/DataExport/result.json" --user 123456

# Save to a custom output file
telegram-download-chat "/path/to/Telegram Desktop/DataExport/result.json" -o my_exported_chats.json

This feature is particularly useful for:

  • Processing your full Telegram data export
  • Extracting specific conversations from the export
  • Converting the export to a more readable format
  • Filtering messages by user or date range (using --until)

The tool will process the archive and generate both JSON and TXT files with the exported messages.

Resuming Interrupted Downloads

If the download is interrupted, you can simply run the same command again to resume from where it left off. The tool automatically saves progress to a temporary file.

User Mapping

Display names for users and bots are collected automatically. You can override them in the users_map section:

users_map:
  123456: "Alice Smith"
  789012: "Bob Johnson"

Chat Mapping

Titles for group and channel chats are fetched automatically. Use chats_map only if you want to override them:

chats_map:
  100123456: "MyGroup"

Subchat Extraction

Extract conversations from specific threads or reply chains:

# Extract messages from a specific thread
telegram-download-chat group_username --subchat 12345 --subchat-name "Important Discussion"

# Or use a direct message URL
telegram-download-chat group_username --subchat "https://t.me/c/123456789/12345"

Graphical User Interface (GUI)

For users who prefer a visual interface, the application includes an optional GUI that provides an intuitive way to download Telegram chats.

Launching the GUI

# Launch the GUI application
telegram-download-chat --gui

GUI Features

The GUI provides all the functionality of the command-line interface with additional user-friendly features:

Main Interface

  • Chat Input: Enter chat identifier (username, phone number, chat ID, or URL)
  • Output Directory: Select where to save downloaded files
  • Download Options: Configure limit, date filters, and other parameters
  • Progress Tracking: Real-time progress bar showing download status
  • File List: View all downloaded files with easy access

Advanced Options

  • Message Limit: Set maximum number of messages to download
  • Date Filter: Download messages only until a specific date
  • User Filter: Filter messages by specific sender
  • Subchat Extraction: Extract messages from specific threads
  • Debug Mode: Enable detailed logging for troubleshooting

Smart Download Management

  • Pause/Resume: Stop and resume downloads at any time
  • Message Saving: When you stop a download, all messages that were already fetched are automatically saved
  • Progress Persistence: Downloads can be resumed from where they left off
  • File Organization: Downloaded files are automatically organized and displayed

Stop and Save Functionality

One of the key GUI features is the ability to stop downloads while preserving progress:

  1. During Download: Click the "Stop" button to halt the current download
  2. Automatic Saving: The application will save all messages that were already downloaded
  3. User Feedback: You'll see a message like "Stopping download and saving messages..."
  4. File Collection: After stopping, the GUI will display "Messages saved successfully! Found X file(s)."
  5. File Access: All saved files are immediately available in the file list

This feature is particularly useful for:

  • Large chats where you want to preview initial messages
  • Testing downloads before committing to full extraction
  • Situations where you need to stop due to time constraints
  • Recovering partial downloads when issues occur

GUI vs Command Line

Feature GUI Command Line
Ease of use Intuitive interface Requires command knowledge
Progress tracking Visual progress bar Text-based progress
File management Integrated file browser Manual file navigation
Stop/Resume One-click stop with auto-save Manual interruption
Configuration Visual forms Manual config editing
Batch operations One chat at a time Scriptable
Automation Interactive only Fully scriptable

Output Formats

The tool generates the following files for each chat:

JSON Output ([chat_name].json)

Contains complete message data including metadata like:

  • Message IDs and timestamps
  • Sender information
  • Message content (including formatting)
  • Reply information
  • Media and file attachments
  • Reactions and views

Text Output ([chat_name].txt)

A human-readable version of the chat with:

  • Formatted timestamps
  • Display names from your users_map
  • Message content with basic formatting
  • Reply indicators

Example Output Structure

2025-05-25 10:30:15 Alice -> MyGroup:
Hello everyone!

2025-05-25 10:31:22 Bob -> MyGroup (replying to Alice):
Hi Alice! How are you?

2025-05-25 10:32:45 Charlie -> MyGroup:
Welcome to the group!

Troubleshooting

Common Issues

  1. API Errors

    • Ensure your API credentials are correct
    • Try disabling VPN if you're having connection issues
    • Check if your account is not restricted
  2. Missing Messages

    • Some messages might be deleted or restricted
    • Check if you have the necessary permissions in the chat
    • Try with a smaller limit first
  3. Slow Downloads

    • The tool respects Telegram's rate limits
    • Increase request_delay in config for more reliable downloads
    • Consider using a smaller limit parameter
  4. Progress bar

    • progress show 1000 messages by default
    • when current > 1000, set max to 10000, then 50000, then 100000, etc.

Getting Help

If you encounter any issues, please:

  1. Check the logs in app.log (by default in the application directory)
  2. Run with --debug flag for detailed output
  3. Open an issue on GitHub

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

telegram_download_chat-0.4.7.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

telegram_download_chat-0.4.7-py3-none-any.whl (78.1 kB view details)

Uploaded Python 3

File details

Details for the file telegram_download_chat-0.4.7.tar.gz.

File metadata

  • Download URL: telegram_download_chat-0.4.7.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.5

File hashes

Hashes for telegram_download_chat-0.4.7.tar.gz
Algorithm Hash digest
SHA256 2bfcfe5f128228507d644cd3b24afd83c820b26b23157f3a1a8f12705a1b448a
MD5 2896ece2738b540791d4ffd94ee61de4
BLAKE2b-256 2068d6bb8edfe8c61cb427ac08a796d76b3472dd053225eaab8e635b98b664a7

See more details on using hashes here.

File details

Details for the file telegram_download_chat-0.4.7-py3-none-any.whl.

File metadata

File hashes

Hashes for telegram_download_chat-0.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 71161592ad33d7b1567b22f489ea5e6c0492c9d7aa3aed0633e47b9c80de0ede
MD5 7c5f7435915eadcdaf902d131860a0d6
BLAKE2b-256 1be69ac7400e20663ce4abba1001dcf2c59f1e1b0b6321ebf2db2ba5103f3d80

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page