A fast, accurate PyQt6 desktop application for extracting WhatsApp and Telegram contact information from websites.
- 🚀 High performance: async processing with aiohttp (≈0.5s per domain with default settings)
- 🎯 High accuracy: strict validation to reduce false positives
- 🎨 Modern UI: tabbed interface with light/dark theme support
- 📁 Multiple input formats: TXT, CSV, XLSX, or paste directly
- 💾 Multiple export formats: Excel (.xlsx), CSV, JSON
- 🧵 Multi-threaded: configurable concurrent connections (default: 50)
- ✅ Smart extraction: context-aware matching and filters for false positives
See IMPROVEMENTS.md for technical details and QUICKSTART.md for a usage guide.
Modern tabbed interface with input methods, settings, results, and logs.
- Real-time progress tracking and live results display
- Comprehensive logging
- Clone the repository:
git clone https://github.com/Erp4759/chat-data-exporter.git
cd chat-data-exporter- Create a virtual environment and install dependencies:
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -r requirements.txt- Run the application:
python main.py-
File upload
- Click "Browse" to select a file (supported: TXT, CSV, XLSX)
- Drag and drop files onto the application
-
Paste domains
- Switch to the "Paste domains" tab and paste one domain per line
- Load domains via file upload or paste
- Configure settings if needed (threads, user-agent, proxy)
- Click "Start Processing" and monitor progress in the Results tab
- Excel (.xlsx) — default, includes all columns
- CSV (.csv)
- JSON (.json)
- Options: auto-open after export, custom save location
Settings tab options:
- Threads: Adjust concurrent connections (1–100, default 50)
- User-Agent: Toggle random user agents
- Proxy: Optional proxy configuration
- Must be 10–15 digits
- Valid country codes only
- No repeating or suspicious sequences (e.g., 1414, 0000)
- Russian numbers: normalized to 79xxxxxxxxx when applicable
- US numbers: expected length and format (11 digits where applicable)
- Only extracts from t.me links or when found near "telegram" keywords
- Minimum 5 characters; blacklist filters reduce false positives
- Framework: PyQt6 with QThread for background processing
- HTTP client: aiohttp with connection pooling
- HTML parser: BeautifulSoup4 with lxml backend
- Data processing/export: pandas, openpyxl
- Regex patterns and validators: patterns.py, validators.py
chat-data-exporter/
├── main.py # Application entry point
├── design.ui # PyQt6 UI design file
├── requirements.txt # Python dependencies
├── README.md # This file
├── LICENSE # MIT License
├── STRUCTURE.md # Detailed architecture docs
└── src/ # Source modules
├── __init__.py
├── gui.py
├── worker.py
├── parser.py
├── extractors.py
├── validators.py
├── patterns.py
└── styles.py
- Python 3.8+
- PyQt6 >= 6.0
- aiohttp >= 3.9.0
- beautifulsoup4 >= 4.12.0
- pandas >= 2.0.0
- openpyxl >= 3.1.0
- fake-useragent >= 1.4.0
- lxml >= 4.9.0
See requirements.txt for the complete list.
Run from source:
source .venv/bin/activate # Linux/Mac
# or
.venv\Scripts\activate # Windows
python main.pyContributions are welcome. Please follow the guidelines:
- Follow PEP 8
- Add type hints to new functions
- Include docstrings
- Add tests for new behavior
- Update documentation
This project is licensed under the MIT License — see the LICENSE file for details.
- Built with PyQt6, aiohttp, and BeautifulSoup4
- Modern tabbed UI with light/dark theme support
- Multiple input formats (TXT, CSV, XLSX, paste)
- Multiple export formats (Excel, CSV, JSON)
- Async processing with configurable threads
- Strict validation for phone numbers
- Context-aware Telegram extraction
- Real-time progress tracking and logging
Made with ❤️ for efficient contact extraction