Channel
/api/telegram/channels/{username}
Title, description, avatar, verified badge and subscriber string for a public channel. The username parameter also accepts @handle and public host URLs
Read public Telegram channels and groups as structured JSON: channel metadata, post history with pagination, in-channel search, and single post details with reactions, views and media. No Telegram account and no Bot API credentials required. This is not the official Telegram Bot API or MTProto.
Try it now
Use the first endpoint in this API family with a Scrappa API key. Every account includes 500 free monthly credits, so you can validate the response shape before buying credits.
curl -X GET "https://scrappa.co/api/telegram/channels/telegram/posts?username=telegram" \
-H "Accept: application/json" \
-H "X-API-KEY: YOUR_API_KEY"
{
"success": true,
"data": {
"channel": {
"username": "telegram",
"permalink_url": "https://t.me/telegram",
"preview_url": "https://t.me/s/telegram"
},
"posts": [
{
"id": 459,
"channel": "telegram",
"post_key": "telegram/459",
"permalink": "https://t.me/telegram/459",
"date": "2026-07-16T20:45:25+00:00",
"edited": false,
"text": "Post body text.",
"views": {
"raw": "14.3K",
"is_approximate": true
},
"reactions": [
{
"emoji_id": "5265077361648368841",
"glyph": "🎉",
"count": 41,
"is_paid": false
}
],
"media": {
"photos": [
{
"url": "https://cdn.example/media/photo-459.jpg",
"width": 320,
"height": 240
}
],
"videos": [],
"documents": [],
"album": null
},
"poll": null
}
],
"count": 1,
"next_before": 459,
"has_more": true
},
"meta": {
"duration_ms": 744,
"attempts": 1
}
}
Structured data for real applications. Here are some ideas.
Follow public channels programmatically: poll the newest posts on a schedule, detect new posts by id and stay inside a bounded window instead of walking an entire history.
Search inside a channel across its full history and pull the matching posts with their text, dates and media, without maintaining a browser scraper.
Measure engagement per post from reaction counts, view strings and media types, then compare channels that cover the same topic.
Confirm that a handle renders a public channel preview, resolve the channel title and subscriber string, and archive posts as structured records.
Everything you need in one API.
/api/telegram/channels/{username}
Title, description, avatar, verified badge and subscriber string for a public channel. The username parameter also accepts @handle and public host URLs
/api/telegram/channels/{username}/posts
Post history, newest first, with backwards pagination
/api/telegram/channels/{username}/search
Search posts inside a public channel, up to 20 results
/api/telegram/posts/{username}/{post_id}
A single post with reactions, views, media and poll
See how Scrappa compares to the official API.
| Feature | Scrappa | Telegram Bot API / MTProto |
|---|---|---|
| Telegram account required | ||
| Bot token required | ||
| Read public channel history | ||
| Channel metadata without joining | ||
| Reactions and view counts | ||
| Structured data | JSON | JSON |
| Unified with other APIs | Yes (same key) | N/A |
No. These endpoints read the public channel preview only. There is no login, no bot token, and no MTProto connection at any point.
No. The Bot API and MTProto are separate products from Telegram and are not used here. Scrappa returns the public preview data as structured JSON from one API key.
Public channels and public groups. A private or members-only channel is addressed by invite token rather than by handle, so it is not reachable through these endpoints.
You get 200 with found set to false and post set to null. Absence is decided from the data itself, never from the status code, so a missing post is never reported as a server error.
The public preview only publishes rounded view strings such as 14.3K. The response returns the raw string with an is_approximate flag; an exact integer is never invented.
Yes. Every Scrappa account includes 500 free credits per month with no credit card required. Failed requests are never billed.