Telegram Messages Scraper avatar

Telegram Messages Scraper

Pricing

from $2.49 / 1,000 results

Go to Apify Store
Telegram Messages Scraper

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

ScrapeAI

Maintained by Community

Actor 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.json toggles 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:

FieldTypeDefaultDescription
startUrlsArray[{"url": "https://t.me/s/durov"}]List of Telegram URLs or channel links to scrape.
channelsArray["durov"]List of channel handles or usernames (e.g., durov, @telegram).
maxMessagesPerChannelInteger50Maximum messages to scrape per channel/chat (0 for unlimited).
searchKeywordsArray[]Filter messages by specific keywords.
startDateString""Filter posts after date (YYYY-MM-DD).
endDateString""Filter posts before date (YYYY-MM-DD).
includeMediaBooleantrueInclude photo, video, document, and hyperlink attachments.
includeReactionsBooleantrueExtract emoji reaction counts.
includeViewsBooleantrueExtract message view counts.
includeForwardedFromBooleantrueExtract source channel name if message was forwarded.
includeChannelMetadataBooleantrueInclude channel header details (title, handle, bio, subscribers, avatar).
fieldsArray[]Optional list of specific output fields (e.g. ["messageId", "text", "date", "postUrl"]). If set, output JSON dynamically contains only these keys.
outputFormatString"flat""flat" (1 item per message) or "nested" (1 item per channel).
proxyConfigurationObject{"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.