# Telegram Channel Scraper: Posts, Views, Links, No Login (`themineworks/telegram-channel-scraper`) Actor

Scrape public Telegram channel posts with text, view counts, outbound links and timestamps. Walks full channel history over plain HTTP. No Bot API token, no phone number, no login. Pay per post delivered.

- **URL**: https://apify.com/themineworks/telegram-channel-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Social media, News, MCP servers
- **Features:** Limited permissions
- **Stats:** 17 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 posts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Telegram Channel Scraper: Posts, Views, Links, No Login

[![100 Telegram posts in 14 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/telegram-channel-scraper-hero.png)](https://console.apify.com/actors/eSM99d7K8dbqNHWdQ/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 290,000 runs across 310+ public actors.

Give it public Telegram channels and it returns their posts as clean rows: the post text, the view count both as Telegram shows it (`1.57M`) and as a number you can sort (`1570000`), outside links, a media flag, the publish time and a permalink to each post. It reads Telegram's own public web preview of each channel, so there is no bot token, no phone number and no Telegram account involved.

### Why choose this actor?

- **History, not just the latest screen.** On 1 October our scheduled check pulled 100 posts from the official @telegram channel in 14 seconds, reaching back 20 months, from August 2026 to January 2025. The actor follows Telegram's own cursor back through the archive 20 posts at a time, up to 2,000 posts per channel.
- **Views you can sort and filter.** Every post comes with `views_label` exactly as Telegram prints it and `views` as an integer, so `views > 1000000` works without a parser. In that run, views ranged from 813K to 5.13M per post.
- **$1 per 1,000 posts, nothing for channels that return nothing.** One flat price on every Apify plan, charged only for posts written to your dataset. A private, deleted or misspelled channel costs nothing beyond the $0.005 run start fee, and the summary rows are free.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/eSM99d7K8dbqNHWdQ/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works Social media and video family:** [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Instagram Followers & Following](https://apify.com/themineworks/instagram-followers-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Reddit Search Scraper](https://apify.com/themineworks/reddit-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this into the JSON tab of the input page and press Start:

```json
{
  "channels": ["telegram"],
  "maxPostsPerChannel": 10
}
```

You get the 10 newest posts of the official Telegram News channel in a few seconds.

Give channels in `channels` in any of these forms: a bare username (`durov`), an `@username` (`@telegram`), or any `t.me` link (`https://t.me/telegram`, `t.me/s/telegram`, or a post link such as `https://t.me/durov/540`, which is read as the whole channel). List each channel only once: the list is not deduplicated, so `durov` and `https://t.me/durov` in the same run would scrape and charge the channel twice (with `monitorMode` on, no post is charged twice). `maxPostsPerChannel` caps how many posts each channel returns.

Apify's free plan includes $5 of credit every month, which covers about 4,900 posts at this actor's price ($0.001 a post plus the $0.005 start fee, in runs of 2,000 posts).

#### Copy to your AI assistant

```
themineworks/telegram-channel-scraper on Apify. Reads posts from public Telegram channels through Telegram's public web preview (no login, no bot token) and returns one row per post with text, views as label and integer, outside links, media flag, publish time and permalink. Call ApifyClient("TOKEN").actor("themineworks/telegram-channel-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: channels (string[]: "durov", "@durov" or "https://t.me/durov"; list each channel once, duplicates are scraped and charged twice; with monitorMode true no post is charged twice). Optional: maxPostsPerChannel (1 to 2000, default 100). Posts come newest first. Rows with _type "summary" or "info" are run reports and are never billed. Private channels, groups and DMs are not supported. Full spec: GET https://api.apify.com/v2/acts/themineworks~telegram-channel-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **11 to 12 fields per post.** `channel`, `channel_title`, `subscribers`, `post_id`, `post_url`, `text`, `views_label`, `views`, `has_media`, `links` (when the post has outside links), `posted_at` and `scraped_at`.
- **Up to 2,000 posts per channel, many channels per run.** Each page of Telegram's preview holds 20 posts; the actor walks back page by page with a short pause until it reaches your cap or the start of the public history.
- **Outside links pulled out for you.** Up to 10 distinct links per post, with Telegram's own links (`t.me` and `telegram.org`) left out, so `links` holds only where the post sends readers.
- **A media flag on every post.** `has_media` is `true` when the post carries a photo, video, document, voice message or sticker. In the @telegram run, 79 of 100 posts did.
- **Plain HTTP, no login, no proxy needed.** Telegram serves every public channel as a server rendered page at `t.me/s/<channel>`. The actor reads that page directly and retries a slow or rate limited request twice before moving on. There is no account that could be restricted.

### How to use it

#### Basic: the latest posts of one channel

```json
{
  "channels": ["durov"],
  "maxPostsPerChannel": 50
}
```

#### A watch list of channels in one run

```json
{
  "channels": ["telegram", "durov", "@tginfo", "https://t.me/s/bbcrussian"],
  "maxPostsPerChannel": 40
}
```

Channels run one after another, and each gets its own cap of 40 posts. A channel that is private, renamed or does not exist simply returns no posts and costs nothing.

#### Daily brand or market monitoring

```json
{
  "channels": ["channel_one", "channel_two", "channel_three"],
  "maxPostsPerChannel": 30
}
```

Save it as a task and schedule it daily (for example `0 8 * * *`). Set `maxPostsPerChannel` a little above the number of posts the busiest channel publishes in a day, so each run covers the gap since the last one without paying for much overlap. Without `monitorMode` the actor has no memory between runs, so drop rows you already have by `post_url` when you load them; a post's `views` keep rising for days, so the overlap also gives you fresher view counts. With `monitorMode` on, each run delivers and charges only posts you have not received before (see "Run it on a schedule").

#### Archive a channel for research or an AI knowledge base

```json
{
  "channels": ["telegram"],
  "maxPostsPerChannel": 2000
}
```

Up to 2,000 posts, newest first, each with its permalink and publish time. Feed `text` and `post_url` into a search index or an assistant that answers "what did this channel say about X?" and cites the post.

#### Find the posts that travelled furthest

Sort a run by `views` to rank posts by reach, or divide `views` by the subscriber figure in `subscribers` (text such as `9.43M subscribers`, so parse the number first) to compare reach across channels of different sizes.

### Input parameters

| Parameter | Type | Default | What it does |
| --- | --- | --- | --- |
| `channels` | array of strings | required (form prefill: `durov`, `telegram`) | Public channels as a username, `@username` or `t.me` link. Each entry is scraped once per time it appears, so list each channel once. Private channels, groups and direct messages are not supported. |
| `maxPostsPerChannel` | integer (1 to 2,000) | `100` (form prefill: `40`) | Most posts to return for each channel. History is read 20 posts per page, so this is your main cost and runtime control. |

"Form prefill" values fill the Console form for you but are not defaults: an API call that leaves `maxPostsPerChannel` out gets 100 posts per channel.

**Run options.** The default memory is 512 MB and the default timeout is 3,600 seconds, which is plenty: 100 posts took 11 to 20 seconds in our runs.

### What data do you get?

One row per post, newest first within each channel. Empty values are left out of the row rather than sent as empty strings or `null`.

**The channel**: `channel` (the username as you gave it), `channel_title` (display name), `subscribers` (as Telegram shows it, for example `9.43M subscribers`).

**The post**: `post_id` (the post's number inside the channel, as text), `post_url` (public permalink), `text` (the post text with formatting removed and line breaks kept; left out for posts with no text, such as a photo without a caption), `has_media`, `links` (outside links, only on posts that have any), `posted_at` (publish time with time zone), `scraped_at`.

**Reach**: `views_label` (exactly as shown, such as `891K` or `1.57M`) and `views` (the same figure as an integer, such as `891000`). Telegram rounds large counts, so `views` is as precise as the label, no more.

Each run ends with a `_type: "summary"` row (`channels_processed`, `posts_delivered`, `charged_for`, `charge_failures`) and, when posts were delivered, a `_type: "info"` row. Neither is a post and neither is ever charged. Skip rows that have a `_type` field when you load the data.

#### Stable fields for automations

These 11 fields were present in all 100 post rows of our latest scheduled run. `text` is left out only for posts with no text at all.

| Field | What it holds |
| --- | --- |
| `channel` | Channel username as given in the input |
| `channel_title` | Channel display name |
| `subscribers` | Subscriber count as Telegram shows it, text |
| `post_id` | Post number inside the channel, text; unique only within one channel |
| `post_url` | Public permalink; unique across channels, the key to deduplicate on |
| `text` | Post text without formatting |
| `views_label` | Views as shown, such as `1.57M` |
| `views` | Views as an integer |
| `has_media` | `true` if the post has a photo, video, document, voice message or sticker |
| `posted_at` | Publish time, ISO format with time zone |
| `scraped_at` | ISO timestamp when the row was captured |

We will not rename these fields. New fields may be added over time; existing ones keep their names.

#### Output examples

Real rows from our scheduled run of the live build on 1 October 2026 (`channels: ["telegram"]`, 100 posts).

A post with media and no outside link:

```json
{
  "channel": "telegram",
  "channel_title": "Telegram News",
  "subscribers": "9.43M subscribers",
  "post_id": "459",
  "post_url": "https://t.me/telegram/459",
  "text": "Signed Gifts. You can now add your signature and a comment to gifts you buy via the gift marketplace.\n\nAugust Features\n1 • 2 • 3 • 4 • 5 • More",
  "views_label": "1.39M",
  "views": 1390000,
  "has_media": true,
  "posted_at": "2026-08-26T19:12:24+00:00",
  "scraped_at": "2026-10-01T09:01:57.351Z"
}
```

An older post with an outside link in `links`:

```json
{
  "channel": "telegram",
  "channel_title": "Telegram News",
  "subscribers": "9.43M subscribers",
  "post_id": "394",
  "post_url": "https://t.me/telegram/394",
  "text": "Funding Suggested Posts. When suggesting a post, you may offer Telegram Stars or Toncoin in exchange for posting the message.\n\nToncoin can quickly be added to your Telegram account via Fragment.\n\nJuly Features\n1 • 2 • 3 • 4 • 5 • 6 • 7 • 8 • 9 • More",
  "views_label": "2.37M",
  "views": 2370000,
  "has_media": true,
  "links": ["https://fragment.com/ads/topup"],
  "posted_at": "2025-07-03T12:51:54+00:00",
  "scraped_at": "2026-10-01T09:02:03.860Z"
}
```

The summary row of the same run (never charged):

```json
{
  "_type": "summary",
  "channels_processed": 1,
  "posts_delivered": 100,
  "charged_for": 100,
  "charge_failures": 0,
  "scraped_at": "2026-10-01T09:02:08.158Z"
}
```

### Pricing

Pay per event: you pay for each post delivered to your dataset, plus a small start fee per run. The price is the same on every Apify plan.

| Event | Free | Bronze | Silver | Gold and above |
| --- | --- | --- | --- | --- |
| `post-scraped`, per post | $0.001 | $0.001 | $0.001 | $0.001 |
| `post-scraped`, per 1,000 posts | $1.00 | $1.00 | $1.00 | $1.00 |
| `apify-actor-start`, per run | $0.005 per GB of run memory, minimum one event | same | same | same |

**The start fee, exactly.** Apify's `apify-actor-start` event is charged once when a run starts, at $0.005 for each GB of memory the run uses, with a minimum of one event. This actor runs on 512 MB by default, so a default run pays one event: $0.005. The actor gains nothing from more memory.

**Worked examples.** 100 posts from one channel cost $0.10 plus $0.005. A daily watch of 10 channels at 30 posts each costs $0.30 plus $0.005 a day. A 2,000 post archive of one channel costs $2.00 plus $0.005.

**Never charged:** channels that are private, missing or empty, posts that appear twice on overlapping pages of the same channel (delivered once), failed requests, and the `summary` and `info` rows. Note that a channel listed twice in `channels` is scraped twice and its posts are charged twice, unless `monitorMode` is on. A run that delivers no posts pays only the start fee.

There is no scheduled price change for this actor. The Pricing tab on this page always shows the rate for your plan; if it and this table ever differ, the Pricing tab is right.

### Run it on a schedule

Turn on `monitorMode` and each run delivers only the posts you have not received before, so a daily run costs you only for what is new.

1. Enter your input, switch on **Monitor mode** and click **Save as a task**.
2. In Apify Console open **Schedules**, click **Add schedule** and pick **Daily** (or any time and timezone you like).
3. Under **Actors or tasks to run**, add the task you saved and save the schedule.

```json
{
  "channels": [
    "channel_one",
    "channel_two",
    "channel_three"
  ],
  "maxPostsPerChannel": 30,
  "monitorMode": true
}
```

The first run delivers everything it finds. After that, each run delivers only posts that were not in an earlier run with the same input, and posts it skips are never charged. The summary row at the end shows `new_this_run` and `skipped_duplicates`. Changing the input starts a fresh history; changing only the result limit does not. Each channel is read from its newest post back, and the walk for a channel stops at the first page of 20 posts with nothing new, so a quiet day costs one page per channel and no post is charged. Each post is sent once, so its `views` are the count from the run that first delivered it.

### FAQ

**Where does the data come from?**
From `t.me/s/<channel>`, the public web preview Telegram publishes for every public channel. It is the page anyone can open in a browser without the app or an account, and it carries each post's text, views, time and media.

**Do I need a Telegram account, a bot token or a phone number?**
No, none of them. The actor never signs in to Telegram, so there is no account that could be limited or banned. You need only an Apify account.

**Can it read private channels, groups or direct messages?**
No. Those need a signed in session, and this actor deliberately reads public channels only. A private or invite only channel returns no posts and is not charged. Groups, public or private, are not supported.

**How far back can it go?**
Up to 2,000 posts per channel per run, walking back 20 posts at a time. The walk also ends at the first post of the channel, or when a page comes back with fewer than 20 posts, which normally means the start of the public history; on a channel with many deleted posts it can end a little sooner. For very old posts of a long running channel, check that they are visible on its `t.me/s/` page.

**Why did a channel return fewer posts than I asked for?**
The channel has fewer public posts than your cap, its history is broken up by deleted posts, or the username is wrong or private (then it returns none). The run log has one line per channel with the number of posts it returned.

**How fresh is the data?**
Live. Every run reads the channel pages at that moment, and `scraped_at` records when. View counts keep climbing for days after a post goes out, so a later run gives higher `views` for the same post.

**Are view counts exact?**
They are exactly what Telegram publishes, and Telegram rounds large numbers (`1.57M`). `views` converts that label to an integer, so it carries the same rounding.

**Which proxy does it use?**
None is needed. Telegram serves these preview pages openly, and the actor fetches them directly with short retries for slow or rate limited answers.

**Can I monitor channels on a schedule?**
Yes. Save your input as a task, then in Apify Console go to Schedules, Create new, and pick a time or a cron expression. By default the actor does not remember earlier runs, so each run returns the newest posts up to your cap; deduplicate on `post_url` when you store them, and keep the cap close to a day's posts so you do not pay for much overlap. With `monitorMode` on, each run delivers and charges only posts that no earlier run with the same input delivered (see "Run it on a schedule").

**How do I export the data?**
From the run's Storage tab as JSON, CSV, Excel, XML or HTML, or through the Apify API. Drop rows that have a `_type` field if you want posts only.

**How do I find channels to scrape?**
Use [Telegram Channel Finder](https://apify.com/themineworks/telegram-channel-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral): give it a keyword and it returns matching public channels with their usernames, ready to paste into `channels` here.

**Can I use it from Claude, ChatGPT or another AI assistant?**

- Connector URL: `https://mcp.apify.com/?tools=themineworks/telegram-channel-scraper`.
- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http telegram-channel-scraper "https://mcp.apify.com/?tools=themineworks/telegram-channel-scraper"`.

**Is it legal to scrape Telegram channels?**
The actor reads only posts that channel owners have published openly on the web, the same pages anyone can open without signing in, and it does not get past any login. Posts can still mention or quote people, so you are responsible for how you use the data, including Telegram's terms and data protection laws such as GDPR and CCPA. This is general information, not legal advice.

### Integrations

- **Google Sheets:** export a run to a sheet, or use Apify's Google Sheets integration to append each scheduled run's posts.
- **Make, Zapier and n8n:** use the Apify app or node to start a run on a schedule and send posts above a view threshold, or posts that mention a keyword, to Slack, email or a CRM.
- **Webhooks:** have Apify call your URL when a run succeeds, then read the dataset.
- **API and client libraries:** start runs and read datasets from Python, JavaScript or any HTTP client. The "Copy to your AI assistant" block above has the exact call.
- **MCP clients:** Claude, ChatGPT, Cursor, VS Code and Claude Code can call the actor as a tool through `https://mcp.apify.com`.

### More from The Mine Works

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Followers & Following](https://apify.com/themineworks/instagram-followers-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Search Scraper](https://apify.com/themineworks/reddit-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Twitter / X Scraper](https://apify.com/themineworks/twitter-x-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Xiaohongshu (RED) Scraper](https://apify.com/themineworks/xiaohongshu-explore-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [YouTube Transcript](https://apify.com/themineworks/youtube-transcript-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Telegram Channel Finder](https://apify.com/themineworks/telegram-channel-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Pinterest Profile Scraper](https://apify.com/themineworks/pinterest-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Pinterest Search Scraper](https://apify.com/themineworks/pinterest-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [JustDial Scraper](https://apify.com/themineworks/justdial-business?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [data.gov.in Scraper](https://apify.com/themineworks/india-data-gov-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Carsales.com.au Scraper](https://apify.com/themineworks/carsales-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [World Bank Trade Scraper](https://apify.com/themineworks/global-trade-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [Tennis Match & Player Data Scraper](https://apify.com/themineworks/tennis-match-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Hotels Prices Scraper](https://apify.com/themineworks/google-hotels-prices-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LandWatch Scraper](https://apify.com/themineworks/landwatch-land-for-sale-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Capterra Reviews Scraper](https://apify.com/themineworks/capterra-software-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a channel that returns the wrong posts, or need a field we do not return yet? Open an issue on the Issues tab of this page with the channel and the run ID, and we will reply there. To ask for a new data source, email dmineworks@gmail.com. A guide for this actor also lives at [themineworks.com](https://themineworks.com/actors/telegram-channel-scraper/).

*Telegram Channel Scraper turns public Telegram channels into clean post rows with sortable view counts and links, at $1 per 1,000 posts and no login.*

# Actor input Schema

## `channels` (type: `array`):

Public Telegram channels. Accepts a bare username, @username, or any t.me link, e.g. "durov", "@telegram", or "https://t.me/telegram". Private channels, groups and direct messages need an authenticated session and are not supported.

## `maxPostsPerChannel` (type: `integer`):

Hard cap per channel. History is walked backwards 20 posts at a time, so this is your main cost and runtime control.

## `monitorMode` (type: `boolean`):

Run on a schedule and deliver ONLY posts not seen in a previous run. You are charged per new post, not for the whole feed each time. Ideal for daily monitoring. Requires the same input across runs.

## Actor input object example

```json
{
  "channels": [
    "durov",
    "telegram"
  ],
  "maxPostsPerChannel": 40,
  "monitorMode": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "channels": [
        "durov",
        "telegram"
    ],
    "maxPostsPerChannel": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/telegram-channel-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "channels": [
        "durov",
        "telegram",
    ],
    "maxPostsPerChannel": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/telegram-channel-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "channels": [
    "durov",
    "telegram"
  ],
  "maxPostsPerChannel": 40
}' |
apify call themineworks/telegram-channel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/telegram-channel-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eSM99d7K8dbqNHWdQ/builds/BHdEiOB7vVANjRgzb/openapi.json
