Telegram Messages Scraper
Pricing
from $2.49 / 1,000 results
Telegram Messages Scraper
Scrape messages from any Telegram group, channel, or public chat — message text, media links, views, reactions, dates, and sender metadata without login.
Pricing
from $2.49 / 1,000 results
Rating
0.0
(0)
Developer
ScrapeAI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
💬 Telegram Messages Scraper
Telegram Messages Scraper is a high-speed Apify Actor to extract posts and messages from any public Telegram group, channel, or chat. Obtain message text, date timestamps, view counts, emoji reactions, media URLs (photos, videos, documents), forwarded origins, and channel metadata without requiring Telegram login or API keys.
✨ Features
- 🚀 No Login or API Key Needed: Scrapes public Telegram channels and group web previews effortlessly.
- 📝 Full Message Content: Extracts message text, clean HTML formatting, post ID, message URL, and posting timestamp.
- 📊 Reactions & Views: Retrieves view counts and reaction breakdowns (emojis and counts).
- 🖼️ Media Attachments: Pulls photo URLs, video download links, attached document info, and external hyper-links.
- ↪️ Forwarded Source Tracking: Identifies original source channel/author when messages are forwarded.
- ⚡ Dynamic Output Format: Output fields adjust dynamically based on your
input.jsontoggles or custom field filters. - 🔍 Keyword & Date Filtering: Filter posts by target search keywords or date ranges (
startDate/endDate). - 📦 Flat & Nested Formats: Export dataset as 1 record per message (flat) or 1 record per channel with message array (nested).
📥 Input Configuration
The Actor accepts input parameters via JSON configuration:
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | Array | [{"url": "https://t.me/s/durov"}] | List of Telegram URLs or channel links to scrape. |
channels | Array | ["durov"] | List of channel handles or usernames (e.g., durov, @telegram). |
maxMessagesPerChannel | Integer | 50 | Maximum messages to scrape per channel/chat (0 for unlimited). |
searchKeywords | Array | [] | Filter messages by specific keywords. |
startDate | String | "" | Filter posts after date (YYYY-MM-DD). |
endDate | String | "" | Filter posts before date (YYYY-MM-DD). |
includeMedia | Boolean | true | Include photo, video, document, and hyperlink attachments. |
includeReactions | Boolean | true | Extract emoji reaction counts. |
includeViews | Boolean | true | Extract message view counts. |
includeForwardedFrom | Boolean | true | Extract source channel name if message was forwarded. |
includeChannelMetadata | Boolean | true | Include channel header details (title, handle, bio, subscribers, avatar). |
fields | Array | [] | Optional list of specific output fields (e.g. ["messageId", "text", "date", "postUrl"]). If set, output JSON dynamically contains only these keys. |
outputFormat | String | "flat" | "flat" (1 item per message) or "nested" (1 item per channel). |
proxyConfiguration | Object | {"useApifyProxy": true} | Apify proxy configuration options. |
💡 Example Input (input.json)
{"startUrls": [{"url": "https://t.me/s/durov"}],"channels": ["durov"],"maxMessagesPerChannel": 10,"searchKeywords": ["telegram", "update"],"includeMedia": true,"includeReactions": true,"includeViews": true,"includeForwardedFrom": true,"includeChannelMetadata": true,"outputFormat": "flat","proxyConfiguration": {"useApifyProxy": true}}
📤 Output Dataset
The output is dynamically generated according to your input.json settings.
Sample Output (Flat Mode)
{"channelTitle": "Pavel Durov","channelUsername": "durov","channelUrl": "https://t.me/durov","subscriberCount": "1.2M","subscriberType": "subscribers","messageId": 245,"postUrl": "https://t.me/durov/245","date": "2024-03-15T14:30:00.000Z","text": "Today we are introducing a major update to Telegram...","views": "450.2K","reactions": [{"emoji": "👍","count": "15.4K"},{"emoji": "🔥","count": "8.2K"}],"photos": ["https://cdn4.cdn-telegram.org/file/example_photo.jpg"],"videos": [],"documents": [],"links": ["https://telegram.org/blog/update"],"scrapedAt": "2026-08-06T13:55:00.000Z"}
⚡ Dynamic Data Outputs
When providing the optional fields array in input.json, output objects are dynamically filtered:
// Input with custom fields selection:{"channels": ["durov"],"fields": ["messageId", "date", "text", "postUrl"]}// Resulting Dynamic Output:{"messageId": 245,"date": "2024-03-15T14:30:00.000Z","text": "Today we are introducing a major update to Telegram...","postUrl": "https://t.me/durov/245"}
🛡️ Disclaimer
This actor is intended for public web scraping research, data analysis, and automation. Users must comply with target platform terms of service and applicable data protection regulations.