# Telegram Ads Scraper - Sponsored Messages Library (`myagizm/telegram-ads-scraper`) Actor

Search Telegram Sponsored Messages (ads): text, button, destination link, advertiser, niche, country, language, payment method (TON/EUR), first/last seen dates and reach estimates. Look up advertisers too. Managed infrastructure, no login.

- **URL**: https://apify.com/myagizm/telegram-ads-scraper.md
- **Developed by:** [MYM](https://apify.com/myagizm) (community)
- **Categories:** Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 ad results

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 Ads Scraper — search Telegram Sponsored Messages and advertisers (No Login, No API Key)

<p align="center">
  <img src="https://img.shields.io/badge/Apify-Actor-00b96b?logo=apify&logoColor=white" alt="Apify Actor">
  <img src="https://img.shields.io/badge/No%20API%20Key-required-blue" alt="No API Key required">
  <img src="https://img.shields.io/badge/No%20Login-needed-blue" alt="No Login needed">
  <img src="https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel%20%7C%20XML-orange" alt="Export formats">
  <img src="https://img.shields.io/badge/MCP-AI%20agents-8A2BE2" alt="MCP AI agents">
  <img src="https://img.shields.io/badge/Pricing-pay%20per%20result-success" alt="Pay per result">
</p>

**Search the Sponsored Messages that run in large public Telegram channels.** You don't need a Telegram account, a bot token or an API key. Filter by keyword, advertiser, niche, category, country, language, payment method, destination type and date range. Every ad comes back as a clean row with its headline, full text, call-to-action button, destination link, advertiser, niche, first and last seen dates and reach figures. Switch to **advertiser mode** to get an advertiser's total ad count, the number of channels it promoted in, its primary niche and linked domains. Export everything to JSON, CSV, Excel or XML, or pull it live through the Apify API.

> **Get your first ads in under a minute.** Type a keyword such as `vpn`, click **Start**, and download the results. No setup, no login, no credit card needed to try.

Telegram Sponsored Messages are the short ads with a button that appear at the bottom of big public channels. They are how crypto projects, VPNs, trading groups, bots, mini apps, casinos, shops and course sellers buy attention on Telegram. This actor turns that ad stream into a searchable, filterable dataset so you can study competitors, find new offers, and track campaigns over time.

***

### Table of contents

- [What can it do?](#what-can-it-do)
- [Who uses it?](#who-uses-it)
- [What data can I scrape?](#what-data)
- [Input fields](#input-fields)
- [How to use it](#how-to)
- [Input example](#input-example)
- [Output example](#output-example)
- [Pricing](#pricing)
- [Free plan limits](#free-plan)
- [Tips](#tips)
- [Want other Telegram data?](#want-other-data)
- [AI agents (MCP)](#mcp)
- [Integrations & API](#integrations)
- [Support](#support)
- [FAQ](#faq)
- [Related searches](#related-searches)
- [Disclaimer](#disclaimer)
- [Resources](#resources)
- [中文说明](#chinese)

***

### What can the Telegram Ads Scraper do? {#what-can-it-do}

- 📢 **Search Telegram ads by keyword.** Full-text match on the ad title and text, e.g. `vpn`, `crypto signals`, `casino`, `esim`, `forex`.
- 🗂️ **Browse without a keyword.** Leave the keyword empty and use only filters to list every ad in a niche, country or language.
- 🏷️ **Filter by niche and category.** Trading, crypto, gambling, betting, casino, vpn, bots, education, retail, fashion, gaming, news, tech, health, finance, real estate, jobs, travel, marketing and more.
- 🌍 **Filter by country and language** of the targeted audience with two-letter ISO codes (`RU`, `IN`, `IR`, `AE`, `DE`, `US`, `en`, `ru`, `fa`, `es`...).
- 💳 **Split by payment method.** TON (Telegram Ad Platform) or EUR (Telegram Ads cabinet). The split tells you whether an advertiser is a small self-serve buyer or a larger account.
- 🔗 **Get the destination.** Button text, destination URL, host, the target channel or bot username, the target's title, and flags for Telegram targets and mini apps.
- 🕒 **See when an ad ran.** First seen, last seen, and the time it became visible.
- 📈 **Get reach figures.** Placements, impressions and estimated reach where available.
- 🕵️ **Spot cloaking.** A `cloakingSuspected` flag with reasons marks ads that seem to hide their real destination.
- 🎁 **Invoice and giveaway details.** Payment-invoice ads and giveaway ads come with their amount, currency, prize, winners and end date.
- 🧑‍💼 **Look up advertisers.** Total ads, channels promoted in, primary niche, domains, public promo posts and first/last seen, for up to 50 advertisers per run.
- 🧭 **Sort four ways.** Newest first, popular, highest reach, or proven (long-running) ads.
- 📤 **Export** to JSON, CSV, Excel or XML, or read the dataset through the API.

***

### Who uses the Telegram Ads Scraper? {#who-uses-it}

- 📊 **Media buyers and growth teams** see which offers competitors promote on Telegram right now and copy what works.
- 🕵️ **Ad-intelligence and affiliate researchers** track the landing pages, bots and mini apps behind Telegram campaigns.
- 🛡️ **Brand-safety and fraud teams** spot cloaked or suspicious ads that point to external sites or impersonate brands.
- 🧪 **Crypto, VPN and fintech marketers** benchmark creatives, hooks and calls to action in their niche.
- 📣 **Channel owners and ad sellers** find active advertisers who already buy Telegram traffic and pitch them directly.
- 🧑‍💻 **Agencies** build weekly competitor reports for clients across many countries and languages.
- 🎓 **Analysts and journalists** study the Telegram advertising market by country, language and niche.
- 🤖 **AI and data teams** feed fresh ad copy into classifiers, trend dashboards and LLM agents.

***

### What data can I scrape? {#what-data}

#### Ads mode

| Field | Type | Description |
|---|---|---|
| `adId` | string | Stable ad identifier. Use it to de-duplicate across runs |
| `title` | string | Ad headline, usually the promoted channel or bot name |
| `text` | string | Full ad text |
| `advertiserName` | string | Display name of the advertiser, when known |
| `advertiserUsername` | string | Telegram username of the advertiser, when known |
| `advertiserKey` | string | Normalised advertiser key, handy for grouping |
| `niche` | string | Topic of the ad, e.g. `crypto`, `vpn`, `trading` |
| `category` | string | Broad group of niches, e.g. `finance`, `tech`, `gambling` |
| `country` | string | Targeted country (ISO code), when detected |
| `language` | string | Language of the ad text (ISO code) |
| `paymentMethod` | string | `TON` or `EUR` |
| `buttonText` | string | Call-to-action button, e.g. `VIEW CHANNEL`, `VIEW BOT`, `OPEN APP` (shown in the ad's language) |
| `destinationUrl` | string | Where the button leads |
| `destinationHost` | string | Host of the destination, e.g. `t.me` or an external domain |
| `destinationUsername` | string | Target Telegram channel or bot username |
| `destinationTitle` | string | Title of the target channel or bot |
| `destinationIsTelegram` | boolean | `true` when the button opens a Telegram channel, group or bot |
| `destinationIsMiniApp` | boolean | `true` when the button opens a Telegram mini app |
| `destinationMonthlyUsers` | number | Monthly active users of the target bot, when known |
| `firstSeenAt` | string (ISO date) | When the ad was first seen |
| `lastSeenAt` | string (ISO date) | When the ad was last seen |
| `visibleAt` | string (ISO date) | When the ad became visible |
| `placements` | number | Number of placements (estimate) |
| `impressions` | number | Impressions (estimate) |
| `estimatedReach` | number | Estimated audience reach |
| `hasMedia` | boolean | Whether the ad has an image or video |
| `mediaType` | string | `photo`, `video` or empty |
| `mediaUrl` | string | Media link, when available |
| `hasSponsorPhoto` | boolean | Whether the sponsor avatar is shown |
| `accentColor` | number | Colour index used for the ad card |
| `textEntities` | array | Mentions, links and custom emoji positions inside the text |
| `intentStrength` | string | How strongly audience targeting was detected |
| `intentReasons` | array | Why that targeting was detected |
| `cloakingSuspected` | boolean | Signs that the ad hides its real destination |
| `cloakingReasons` | array | Why cloaking is suspected |
| `minDisplaySeconds`, `maxDisplaySeconds` | number | Display time limits, when set |
| `isPaymentInvoice` | boolean | Whether the ad is a payment invoice |
| `invoiceTitle`, `invoiceAmount`, `invoiceCurrency` | string / number | Invoice details, when present |
| `giveawayPrize`, `giveawayWinners`, `giveawayMonths`, `giveawayUntil` | string / number | Giveaway details, when present |
| `relevance` | number | Match score for keyword searches, when available |
| `searchQuery` | string | The keyword you searched |
| `scrapedAt` | string (ISO date) | When this row was collected |

#### Advertiser mode

| Field | Type | Description |
|---|---|---|
| `name` | string | Advertiser display name |
| `username` | string | Telegram username |
| `advertiserKey` | string | Normalised advertiser key |
| `totalAds` | number | Number of ads seen for this advertiser |
| `channelsPromotedIn` | number | Number of channels the advertiser's ads appeared in |
| `primaryNiche` | string | Main topic of the advertiser's ads |
| `domain` | string | Main website linked to the advertiser |
| `domains` | array | All websites linked to the advertiser |
| `publicPostsCount` | number | Public promo posts counted for the advertiser |
| `firstSeenAt` | string (ISO date) | First activity |
| `lastSeenAt` | string (ISO date) | Latest activity |
| `scrapedAt` | string (ISO date) | When this row was collected |

The dataset has two ready-made views in the Apify Console: **Ads** and **Advertisers**.

***

### Input fields {#input-fields}

| Field | Type | Description |
|---|---|---|
| `mode` | string | `ads` (search the ad library) or `advertiser` (profile lookup). Default `ads` |
| `query` | string | Keyword searched in ad title and text. Leave empty to browse with filters only |
| `advertiser` | string | Ads mode: only ads from this advertiser username |
| `advertisers` | array | Advertiser mode: usernames or `t.me` links, up to 50 per run |
| `niche` | string | Topic filter, e.g. `crypto`, `vpn`, `gambling` |
| `category` | string | Broad category: `finance`, `gambling`, `tech`, `content`, `commerce`, `life` |
| `country` | string | Two-letter country code of the targeted audience |
| `language` | string | Two-letter language code of the ad text |
| `paymentMethod` | string | `all`, `ton` or `eur` |
| `destination` | string | `all`, `telegram` (channel/bot) or `external` (website) |
| `sort` | string | `new`, `popular`, `reach` or `proven` |
| `days` | integer | Only ads first seen in the last N days (0 = no limit, max 365) |
| `dateFrom` | string | Only ads first seen on or after this date (YYYY-MM-DD) |
| `dateTo` | string | Only ads first seen on or before this date (YYYY-MM-DD) |
| `maxItems` | integer | Hard cap on results per run, 1 to 1,000. Default 100 |

### Errors & billing

Input errors finish with status SUCCEEDED, no results and no charge; see the OUTPUT record for the reason.

***

### How to scrape Telegram ads {#how-to}

1. **Open the actor** in the Apify Console and choose **What to scrape**: *Ads* or *Advertisers*.
2. **Ads mode:** type a **Keyword**, or leave it empty to browse. Add filters such as niche, category, country, language, payment method, destination or a date range.
3. **Advertiser mode:** paste Telegram usernames or `t.me` links into **Advertisers** (up to 50).
4. **Pick the sort order.** `new` for fresh ads, `proven` for long-running ads with the best reach data.
5. **Set Max results** to cap your spend, then click **Start**.
6. **Watch the run.** Rows appear in the dataset as they are collected; a typical run finishes in seconds.
7. **Download** the dataset as JSON, CSV, Excel or XML, or read it through the API.
8. **Automate it.** Add an Apify Schedule to rerun hourly or daily and build a running archive of new ads.

***

### Input example {#input-example}

Keyword search with filters:

```json
{
  "mode": "ads",
  "query": "vpn",
  "country": "RU",
  "paymentMethod": "all",
  "destination": "all",
  "sort": "new",
  "days": 7,
  "maxItems": 200
}
```

Browse a whole niche without a keyword:

```json
{
  "mode": "ads",
  "niche": "crypto",
  "language": "en",
  "sort": "proven",
  "maxItems": 500
}
```

Advertiser lookup:

```json
{
  "mode": "advertiser",
  "advertisers": ["rhymestg", "@sui_token_bot", "https://t.me/scottmelkerchanneloff"]
}
```

***

### Output example {#output-example}

A real row from a `crypto signals` search:

```json
{
  "adId": "9e0974f988e56249d369",
  "title": "🐋 Scott Melker Official Channel 📈",
  "text": "Discover profitable crypto signals. Receive expert insights and strategies in real-time to elevate your trades and maximize profits. Begin now.",
  "advertiserName": "@scottmelkerchanneloff",
  "advertiserUsername": "scottmelkerchanneloff",
  "advertiserKey": "scottmelkerchanneloff",
  "niche": "crypto",
  "category": "finance",
  "country": null,
  "language": "en",
  "paymentMethod": "TON",
  "buttonText": "VIEW CHANNEL",
  "destinationUrl": "https://t.me/ScottMelkerChannelOff",
  "destinationHost": "t.me",
  "destinationUsername": "scottmelkerchanneloff",
  "destinationTitle": "🐋 Scott Melker Official Channel 📈",
  "destinationIsTelegram": true,
  "destinationIsMiniApp": false,
  "firstSeenAt": "2026-09-29T08:43:46.747Z",
  "lastSeenAt": "2026-09-29T11:12:51.928Z",
  "visibleAt": "2026-09-29T08:43:46.747Z",
  "placements": 0,
  "impressions": 0,
  "estimatedReach": 0,
  "hasMedia": false,
  "hasSponsorPhoto": true,
  "cloakingSuspected": false,
  "cloakingReasons": [],
  "isPaymentInvoice": false,
  "searchQuery": "crypto signals",
  "scrapedAt": "2026-09-29T11:24:13.900Z"
}
```

A real row from advertiser mode:

```json
{
  "name": "@rhymestg",
  "username": "rhymestg",
  "advertiserKey": "rhymestg",
  "totalAds": 9831,
  "channelsPromotedIn": 5281,
  "primaryNiche": "retail",
  "domain": null,
  "domains": [],
  "publicPostsCount": 0,
  "firstSeenAt": "2026-09-10T20:15:50.149Z",
  "lastSeenAt": "2026-09-29T11:11:08.597Z",
  "scrapedAt": "2026-09-29T11:19:22.536Z"
}
```

***

### How much will it cost? {#pricing}

Pricing is **pay per result**: you pay for the ads or advertisers you receive, not for compute time.

| Apify plan | Price per result | Price per 1,000 results |
|---|---|---|
| Free | $0.002 | $2.00 |
| Bronze | $0.002 | $2.00 |
| Silver | $0.0018 | $1.80 |
| Gold, Platinum, Diamond | $0.0015 | $1.50 |

- 💸 **Pay per result.** Your budget is results × rate, so you can estimate spend before you click Start.
- 🎯 **`maxItems` caps the bill.** A run with `maxItems: 100` never charges for more than 100 rows.
- 📉 **Volume discounts.** Higher Apify plans get lower rates automatically.
- 🆓 **Free to try.** New Apify accounts include monthly free usage.
- 🚫 **No hidden fees.** No add-ons, no API key to buy, no minimum spend.

See the live rate on the [Apify store page](https://apify.com/myagizm/telegram-ads-scraper).

***

### Free plan limits {#free-plan}

Free Apify plan users get **40 results per day** from this actor (resets at 00:00 UTC) and a shallower search depth per query. When the daily limit is reached, the run finishes cleanly and the status message tells you so. **Any paid Apify plan is unlimited** and pages deep into every query, up to 1,000 results per run.

***

### Tips {#tips}

- 🆕 **Use `sort: new` with `days: 1`** to see ads that started today.
- 🏆 **Use `sort: proven`** for long-running ads. They have the best reach figures and usually the best-performing copy.
- 🔗 **Filter `destination: external`** to find landing pages outside Telegram, then check `cloakingSuspected`.
- 🧑‍💼 **Run advertiser mode on the `advertiserUsername` values** from an ads run to size up each competitor.
- 🌍 **Combine `country` and `language`** to isolate one market, e.g. `country: IN` and `language: en`.
- 💳 **Compare `paymentMethod`.** EUR advertisers often run bigger, steadier campaigns than TON self-serve buyers.
- 🗂️ **Leave the keyword empty** and filter only by niche to map a whole vertical.
- ⏰ **Schedule the actor hourly** and de-duplicate by `adId` to build a running archive of new ads in your niche.
- 📉 **Reach numbers are estimates.** New ads often show 0 until they have been seen for a while.
- 🌐 **Button text is localised.** `VIEW CHANNEL` may appear as `KANALI GÖRÜNTÜLE` or `VISUALIZZA CANALE`; use `destinationIsTelegram` to filter instead of matching the text.

***

### Want other Telegram data? {#want-other-data}

Building a multi-platform ad or social dataset? The same no-login, pay-per-result approach covers other networks:

- 🐦 **[X (Twitter) Tweets Scraper](https://apify.com/myagizm/x-tweets-scraper)** · **[X Profile Scraper](https://apify.com/myagizm/x-profile-scraper)** · **[X Trends Scraper](https://apify.com/myagizm/x-trends-scraper)**
- 📸 **[Instagram Profile Scraper](https://apify.com/myagizm/instagram-profile-scraper-v2)** · **[Instagram Post Scraper](https://apify.com/myagizm/instagram-post-scraper-v2)** · **[Instagram Hashtag Scraper](https://apify.com/myagizm/instagram-hashtag-scraper-v2)**
- 🎵 **[TikTok Search Scraper](https://apify.com/myagizm/tiktok-search-scraper-v2)** · **[TikTok Hashtag Scraper](https://apify.com/myagizm/tiktok-hashtag-scraper-v2)** · **[TikTok Video Scraper](https://apify.com/myagizm/tiktok-video-scraper-v2)**
- 🤖 **[Reddit Scraper](https://apify.com/myagizm/reddit-scraper-v2)** · **[Reddit Search Scraper](https://apify.com/myagizm/reddit-search-scraper-v2)** · **[Reddit Subreddit Scraper](https://apify.com/myagizm/reddit-subreddit-scraper-v2)**
- 👔 **[LinkedIn Company Scraper](https://apify.com/myagizm/linkedin-company-scraper)** · **[LinkedIn Profile Posts Scraper](https://apify.com/myagizm/linkedin-profile-posts-scraper)** · **[LinkedIn Jobs Scraper](https://apify.com/myagizm/linkedin-jobs-scraper)**
- 📘 **[Facebook Page Scraper](https://apify.com/myagizm/facebook-page-scraper)**
- ▶️ **[YouTube Channel Scraper](https://apify.com/myagizm/youtube-channel-scraper)** · **[YouTube Comment Scraper](https://apify.com/myagizm/youtube-comment-scraper)**
- 🔎 **[Google Search Results Scraper](https://apify.com/myagizm/google-search-results-scraper)** · **[Google Trends Scraper](https://apify.com/myagizm/google-trends-scraper)** · **[Google News Scraper](https://apify.com/myagizm/google-news-scraper)**
- ⭐ **[Trustpilot Scraper](https://apify.com/myagizm/trustpilot-scraper)** · **[Website Content Crawler](https://apify.com/myagizm/website-content-crawler)**

Browse everything on the **[myagizm store profile](https://apify.com/myagizm)**.

***

### Use the data with AI agents (MCP) {#mcp}

The Telegram Ads Scraper is available through the **Apify MCP server**, so AI assistants can call it as a tool and pull live Telegram ads on demand.

- 🧩 **Claude** — add the Apify MCP server and let Claude search and analyse Telegram ads.
- 🤖 **ChatGPT** — use the actor as a tool inside research and reporting workflows.
- 🖊️ **Cursor** — pull structured ad data straight into your coding sessions.

Common AI-agent recipes:

- 📊 **Weekly digest** — "list this week's VPN ads targeting Russia and group them by advertiser."
- 🏆 **Top spenders** — "which crypto channels advertise the most, and how many channels do they reach?"
- 🔗 **Landing-page watch** — "show new ads that link outside Telegram and flag suspected cloaking."
- ✍️ **Copy research** — "summarise the hooks used in the 50 longest-running trading ads."

***

### Integrations & API {#integrations}

Connect the actor to the tools you already use: **Make, Zapier, n8n, Slack, Airbyte, Gumloop, CrewAI, IFTTT, Lindy, GitHub, Google Sheets and Google Drive**, plus webhooks, Apify Schedules and the MCP server.

#### Run synchronously and get the dataset (Apify API)

```bash
curl -X POST "https://api.apify.com/v2/acts/myagizm~telegram-ads-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "ads", "query": "vpn", "sort": "new", "maxItems": 100}'
```

#### Start a run asynchronously

```bash
curl -X POST "https://api.apify.com/v2/acts/myagizm~telegram-ads-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "advertiser", "advertisers": ["rhymestg", "sui_token_bot"]}'
```

#### Fetch dataset items later

```bash
curl "https://api.apify.com/v2/acts/myagizm~telegram-ads-scraper/runs/last/dataset/items?token=YOUR_APIFY_TOKEN&format=csv"
```

Change `format` to `json`, `csv`, `xlsx` or `xml` to export in your preferred format. The Apify Console also generates ready-to-paste **JavaScript, Python and CLI** snippets plus an **OpenAPI** spec for this actor.

***

### Support {#support}

Questions, feature requests, or something not looking right? Open an issue on the actor's **[Issues tab](https://apify.com/myagizm/telegram-ads-scraper/issues)**. Please include the input you used so we can reproduce and fix it quickly.

***

### FAQ {#faq}

#### I got "Rate limit reached - please wait 1 minute and run again". What should I do?

Wait one minute and start the run again. The run still ends as succeeded and you are not charged for results that were not delivered. If you schedule the actor, space the runs at least one minute apart.

#### Do I need a Telegram account, bot token or API key?

No. Enter your input and run. There is nothing to log in to.

#### What are Telegram Sponsored Messages?

They are the short text ads with a button shown at the bottom of large public Telegram channels. Advertisers use them to promote channels, bots, mini apps and websites.

#### How fresh is the data?

New ads usually appear within minutes of first being shown. Every run reads the current data; nothing is cached from an old run.

#### Can I search without a keyword?

Yes. Leave `query` empty and use only filters such as `niche`, `country` or `language` to browse all matching ads.

#### How many results can one run return?

Up to 1,000 ads per run on paid plans. Free plans get 40 results per day and a shallower window per query.

#### Why are impressions or reach 0 for some ads?

These are estimates. They fill in over time, so brand-new ads often show 0. Use `sort: proven` for ads with the best reach data.

#### Why is `advertiserName` empty for some ads?

Not every ad is linked to a known advertiser. In that case use `destinationUsername` or `destinationUrl` to see who is promoted.

#### Why did an advertiser return nothing?

No ads have been seen for that username, or the username is misspelled. The run log lists every input that returned no data.

#### Can I get the list of channels an ad ran in?

This actor returns the count (`channelsPromotedIn`). A per-channel list is not included.

#### What is the difference between TON and EUR ads?

TON ads are bought self-serve on the Telegram Ad Platform. EUR ads are bought through the Telegram Ads cabinet, which is usually used by larger advertisers.

#### What does `cloakingSuspected` mean?

It flags ads that seem to hide their real destination, for example a harmless-looking button that redirects elsewhere. `cloakingReasons` explains why.

#### Why is the button text in another language?

The button is shown in the language of the ad audience, e.g. `KANALI GÖRÜNTÜLE` for Turkish. Filter with `destinationIsTelegram` instead of the text.

#### Can I filter by date?

Yes. Use `days` for "last N days", or `dateFrom` and `dateTo` for an exact window based on first-seen date.

#### How do I avoid duplicates across scheduled runs?

De-duplicate on `adId`. It stays the same for the same ad in every run.

#### Can I export to CSV or Excel?

Yes. Export JSON, CSV, Excel or XML from the Console, or set the API `format` parameter.

#### Can I use it with the Apify API?

Yes. See the three `curl` examples above, or use the Apify JavaScript and Python clients.

#### Is there an MCP server for AI agents?

Yes. The actor works as a tool through the Apify MCP server in Claude, ChatGPT, Cursor and other MCP clients.

#### Can I schedule runs?

Yes. Add an Apify Schedule (hourly, daily or a cron expression) and connect a webhook, Slack or Google Sheets to receive new ads.

#### How much does a typical run cost?

100 ads cost $0.20 on Free and Bronze plans, $0.18 on Silver and $0.15 on Gold and above.

#### Is it legal to scrape Telegram ads?

The actor only collects ads that are shown publicly. You are responsible for using the data in line with the laws and platform rules that apply to you.

#### Do I need proxies?

No. Everything runs on managed infrastructure and there is nothing to configure.

***

### Related searches {#related-searches}

telegram ads scraper · telegram sponsored messages · telegram ad library · telegram ads spy · telegram ad intelligence · telegram advertiser lookup · telegram ton ads · telegram ads competitor research · telegram crypto ads · telegram vpn ads · telegram casino ads · telegram trading ads · telegram mini app ads · telegram ads export csv · telegram ad monitoring · telegram ad spy tool

***

### Disclaimer {#disclaimer}

This is an independent tool. It is not affiliated with, endorsed by or sponsored by Telegram. All product names and brands belong to their respective owners. Reach and impression figures are estimates. You are responsible for how you use the data.

***

### Resources {#resources}

- 📘 [Apify API documentation](https://docs.apify.com/api/v2) — run actors and fetch datasets programmatically.
- 🤖 [Apify MCP server](https://mcp.apify.com) — use this actor as a tool in Claude, ChatGPT and Cursor.
- 📤 [Dataset export docs](https://docs.apify.com/platform/storage/dataset) — export to JSON, CSV, Excel and XML.
- ⏰ [Scheduling actor runs](https://docs.apify.com/platform/schedules) — keep your ad archive fresh automatically.
- 🔌 [Apify integrations](https://docs.apify.com/platform/integrations) — n8n, Zapier, Make, Slack and more.
- 🏪 [myagizm store profile](https://apify.com/myagizm) — the full family of no-login scrapers.

***

## 中文说明 —— Telegram 广告抓取工具 {#chinese}

### 错误与计费

输入错误会以 SUCCEEDED 状态结束，不返回结果且不收费；原因请查看 OUTPUT 记录。

**搜索 Telegram 大型公开频道中投放的赞助消息（Sponsored Messages）。** 无需 Telegram 账号、机器人令牌或 API Key。可按关键词、广告主、行业、分类、国家、语言、支付方式、落地类型和日期筛选。每条广告返回标题、正文、按钮、落地链接、广告主、行业、首次/最后出现时间和覆盖数据。切换到**广告主模式**可获取广告总数、投放过的频道数、主要行业和关联域名。可导出 JSON、CSV、Excel、XML，或通过 Apify API 实时读取。

> **一分钟内拿到第一批广告** —— 输入 `vpn` 等关键词，点击 Start 即可。无需配置，无需登录。

### 能做什么

- 📢 **按关键词搜索广告**（标题和正文全文匹配），如 `vpn`、`crypto signals`、`casino`。
- 🗂️ **不填关键词也能浏览**，只用筛选条件列出某行业、国家或语言的全部广告。
- 🏷️ **按行业和分类筛选**：交易、加密货币、博彩、VPN、机器人、教育、零售等。
- 🌍 **按国家和语言筛选**（两位 ISO 代码）。
- 💳 **按支付方式区分**：TON（Telegram Ad Platform）或 EUR（Telegram Ads 后台）。
- 🔗 **返回落地信息**：按钮文字、链接、域名、目标频道或机器人、是否为小程序。
- 🕒 **返回投放时间**：首次出现、最后出现、可见时间。
- 📈 **返回覆盖数据**：投放位、曝光、预估覆盖（估算值）。
- 🕵️ **识别伪装跳转**：`cloakingSuspected` 标记及原因。
- 🧑‍💼 **广告主查询**：每次最多 50 个广告主。
- 📤 **导出** JSON / CSV / Excel / XML。

### 谁在用

- 📊 **投放和增长团队**：查看竞品正在 Telegram 上推广什么。
- 🕵️ **广告情报与联盟营销研究者**：追踪落地页、机器人和小程序。
- 🛡️ **品牌安全与反欺诈团队**：发现伪装或可疑广告。
- 📣 **频道主与广告销售**：找到已在购买 Telegram 流量的广告主。
- 🎓 **分析师与记者**：按国家、语言和行业研究 Telegram 广告市场。

### 可以抓取哪些数据

#### 广告模式

| 字段 | 类型 | 说明 |
|---|---|---|
| `adId` | string | 广告唯一 ID，可用于跨次去重 |
| `title` | string | 广告标题 |
| `text` | string | 广告正文 |
| `advertiserName` / `advertiserUsername` | string | 广告主名称与用户名 |
| `niche` / `category` | string | 行业与大类 |
| `country` / `language` | string | 目标国家与语言 |
| `paymentMethod` | string | `TON` 或 `EUR` |
| `buttonText` | string | 按钮文字（随受众语言变化） |
| `destinationUrl` / `destinationHost` | string | 落地链接与域名 |
| `destinationUsername` / `destinationTitle` | string | 目标频道或机器人 |
| `destinationIsTelegram` / `destinationIsMiniApp` | boolean | 落地类型标记 |
| `firstSeenAt` / `lastSeenAt` / `visibleAt` | string | 投放时间 |
| `placements` / `impressions` / `estimatedReach` | number | 覆盖数据（估算） |
| `cloakingSuspected` / `cloakingReasons` | boolean / array | 伪装跳转迹象 |
| `searchQuery` / `scrapedAt` | string | 搜索词与抓取时间 |

#### 广告主模式

| 字段 | 类型 | 说明 |
|---|---|---|
| `name` / `username` | string | 广告主名称与用户名 |
| `totalAds` | number | 广告总数 |
| `channelsPromotedIn` | number | 投放过的频道数 |
| `primaryNiche` | string | 主要行业 |
| `domain` / `domains` | string / array | 关联网站 |
| `firstSeenAt` / `lastSeenAt` | string | 活跃时间段 |

### 使用步骤

1. 选择「广告」或「广告主」模式。
2. 广告模式：输入关键词（可留空），添加行业、国家、语言、支付方式、日期等筛选。
3. 广告主模式：粘贴用户名或 `t.me` 链接（最多 50 个）。
4. 选择排序：`new` 最新、`proven` 长期投放。
5. 设置最大结果数并点击 Start。
6. 导出 JSON / CSV / Excel / XML，或通过 API 读取。

### 输入示例

```json
{
  "mode": "ads",
  "query": "vpn",
  "country": "RU",
  "sort": "new",
  "days": 7,
  "maxItems": 200
}
```

### 输出示例

```json
{
  "adId": "9e0974f988e56249d369",
  "title": "🐋 Scott Melker Official Channel 📈",
  "advertiserUsername": "scottmelkerchanneloff",
  "niche": "crypto",
  "language": "en",
  "paymentMethod": "TON",
  "buttonText": "VIEW CHANNEL",
  "destinationUrl": "https://t.me/ScottMelkerChannelOff",
  "firstSeenAt": "2026-09-29T08:43:46.747Z",
  "lastSeenAt": "2026-09-29T11:12:51.928Z"
}
```

### 价格

按结果计费，只为拿到的广告或广告主付费。

| Apify 套餐 | 每条价格 | 每 1,000 条 |
|---|---|---|
| Free | $0.002 | $2.00 |
| Bronze | $0.002 | $2.00 |
| Silver | $0.0018 | $1.80 |
| Gold / Platinum / Diamond | $0.0015 | $1.50 |

### 免费套餐限制

Apify 免费套餐每天可从本工具获取 **40 条结果**（UTC 00:00 重置），每个查询的检索深度也较浅；任何付费套餐均无限制，每次最多 1,000 条。

### 使用建议

- 🆕 `sort: new` 配合 `days: 1` 查看今天新上的广告。
- 🏆 `sort: proven` 查看长期投放、覆盖数据最完整的广告。
- 🔗 `destination: external` 查找站外落地页，并检查 `cloakingSuspected`。
- ⏰ 定时每小时运行，并按 `adId` 去重，建立广告档案。

### 其他数据

同样免登录、按结果计费的工具还覆盖 X（Twitter）、Instagram、TikTok、Reddit、LinkedIn、YouTube、Google 等平台，详见 [myagizm 店铺主页](https://apify.com/myagizm)。

### 配合 AI 智能体使用（MCP）

本工具可通过 **Apify MCP 服务器**在 Claude、ChatGPT、Cursor 中作为工具调用，例如：「列出本周面向俄罗斯的 VPN 广告」「哪些加密频道投放最多？」。

### 集成与 API

可连接 Make、Zapier、n8n、Slack、Google Sheets 等，也可使用 Webhook 和 Apify 定时任务。

```bash
curl -X POST "https://api.apify.com/v2/acts/myagizm~telegram-ads-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "ads", "query": "vpn", "maxItems": 100}'
```

### 常见问题

- **提示 “Rate limit reached - please wait 1 minute and run again” 怎么办？** 等待 1 分钟后重新运行即可。本次运行仍显示为成功，未交付的结果不会收费。
- **需要登录或 API Key 吗？** 不需要。
- **数据有多新？** 新广告通常在首次展示后几分钟内出现。
- **为什么部分广告曝光为 0？** 曝光与覆盖为估算值，新广告稍后才会更新。
- **每次最多多少条？** 付费套餐每次最多 1,000 条；免费套餐每天 40 条。
- **按钮文字为什么是其他语言？** 按钮随受众语言显示，请用 `destinationIsTelegram` 筛选。
- **如何跨次去重？** 使用 `adId`。
- **需要代理吗？** 不需要，全部为托管基础设施。

### 免责声明

本工具为独立第三方工具，与 Telegram 无任何隶属、认可或赞助关系。曝光与覆盖数据为估算值，数据使用的合规责任由使用者承担。

### 相关搜索

telegram 广告抓取 · telegram 赞助消息 · telegram 广告库 · telegram 广告情报 · telegram 广告主查询 · telegram ton 广告 · telegram 竞品广告 · telegram 加密货币广告 · telegram vpn 广告 · telegram 广告监控

# Actor input Schema

## `mode` (type: `string`):

"ads" searches Telegram Sponsored Messages with the filters below. "advertiser" returns profile stats for each advertiser in "Advertisers".

## `query` (type: `string`):

Full-text search in ad title and text, e.g. "vpn", "crypto signals", "casino". Leave empty to browse all ads with the filters below.

## `advertiser` (type: `string`):

Optional. Telegram username of the advertiser (with or without @), e.g. "rhymestg". Ads mode only.

## `advertisers` (type: `array`):

Advertiser mode only: Telegram usernames or t.me links, up to 50 per run.

## `niche` (type: `string`):

Optional topic filter, e.g. trading, crypto, vpn, gambling.

## `category` (type: `string`):

Optional broad category (groups several niches).

## `country` (type: `string`):

Optional two-letter country code of the targeted audience, e.g. RU, IN, IR, AE, DE, US.

## `language` (type: `string`):

Optional two-letter language code of the ad text, e.g. en, ru, fa, es.

## `paymentMethod` (type: `string`):

How the advertiser paid for the campaign.

## `destination` (type: `string`):

Where the ad button leads.

## `sort` (type: `string`):

Result order. "proven" favours ads that ran for a long time and has the best reach data.

## `days` (type: `integer`):

Only ads first seen in the last N days. 0 = no limit.

## `dateFrom` (type: `string`):

Optional. Only ads first seen on or after this date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Optional. Only ads first seen on or before this date (YYYY-MM-DD).

## `maxItems` (type: `integer`):

Hard cap on ads returned by this run (up to 1,000). Free Apify plan: limited daily results and shallower search depth; any paid plan gets deep results.

## Actor input object example

```json
{
  "mode": "ads",
  "query": "vpn",
  "niche": "",
  "category": "",
  "paymentMethod": "all",
  "destination": "all",
  "sort": "new",
  "days": 0,
  "maxItems": 100
}
```

# Actor output Schema

## `ads` (type: `string`):

Telegram Sponsored Messages matching the input.

## `advertisers` (type: `string`):

Advertiser profiles (advertiser mode).

# 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 = {
    "query": "vpn",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("myagizm/telegram-ads-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 = {
    "query": "vpn",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("myagizm/telegram-ads-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 '{
  "query": "vpn",
  "maxItems": 100
}' |
apify call myagizm/telegram-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,myagizm/telegram-ads-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/PvsHeT7YBCoqXvrKq/builds/0As3wnlQRZDsP0GXw/openapi.json
