Skip to main content

Running ads

Once at least one of your channels is hosting, you can run your own ad across the pool. Your creative is placed in other members' channels, one at a time, spread across a 30-day cycle that repeats until you cancel it β€” or until you stop hosting, which pauses it rather than ending it.

Every campaign carries an OFSE- reference, shown on its row and repeated in every confirmation about it. Running two campaigns at once is normal, so that reference is what tells support β€” or you, at a glance β€” which one a delivery question is about. See Your Onflow Ads IDs.

Hosting comes first β€” and keeps coming first

The exchange is reciprocal. With no active channel, both entrances to the ad side show the Host first gate instead: "The exchange is reciprocal: ads run in members' channels, so you need to be hosting before you can run one. Enrol a channel and agree to receive ads, and the advertising side opens immediately." Press Add my first channel and follow Getting started.

This is checked for as long as your campaigns run, not only at the moment you submit one. Withdraw your last hosting channel and every approved campaign on the account is paused until you enrol another β€” see Withdrawing a channel.

Before you start​

  • At least one channel enrolled and showing Hosting.
  • Room under your plan's limit on ads running at once: 2 on Free, 4 on Lite, 8 on Plus, 12 on Elite, 18 on Master, 25 on Ultimate. The My advertisements header reads "Up to N ads at a time".
  • Your reliability at or above the exchange floor, and your account not cooling down after a strike. Both are shown at the top of the page.
  • Wallet balance, only if you intend to buy a delivery boost or Priority Review on the Delivery step. Everything else is free.
  • No open platform review on your account. An account under review cannot start a new campaign; placements already running are untouched.
  • A pool big enough to carry the ad. Your plan runs an ad in a set number of different channels a cycle (7 on Free up to 18 on Ultimate, before boosts). If fewer eligible channels than that accept your ad right now, the submit is refused β€” see The pool has to be able to carry your ad below.

The pool has to be able to carry your ad​

Every placement of a cycle lands in a different channel, so an ad your plan schedules for 9 placements needs at least 9 eligible channels in the pool β€” channels that accept its level, are not the ad's own topic-blocked or blocklisted, and pass the same filters the matcher applies. An ad the pool cannot carry would sit approved and under-deliver, so the exchange does not take it: the submit comes back with "The exchange can't carry this ad yet", the exact numbers ("your plan runs this ad in 9 different channels a cycle, and only 4 eligible channels accept it right now β€” 5 short"), and nothing is charged β€” no credits, no wallet, no moderation card. The ad is not created, but what you wrote is kept as a draft on this device: a Not submitted yet notice says so, and its Edit the ad button reopens the ad on the Audience step, where a wider audience reaches more of the pool.

Three things then happen, and none of them needs you to remember anything:

  • You are on the list. The hub shows a Waiting for the pool card with the same numbers, updated every few minutes against the live pool. Step 3 of the checklist reads the same way.
  • The pool grows as other members enrol β€” not as you do. An ad is never placed in its own advertiser's channels, so enrolling one of your own raises other members' reach and not your own. Hosting is still always open and still required to advertise at all; it is simply not the lever that ends this wait. What you can change is the ad: the refusal and the card both offer Change the ad, because widening the audience or lowering the content level reaches more of the pool.
  • You are told the moment it can run β€” on Telegram, by email and in your notifications on the site β€” with the numbers then and now. Come back, submit the ad again; the pool is measured live at that moment, so if it has shrunk again in between you simply go back on the list.

The rule holds while the ad runs, too. An approved ad is measured against the live pool every few minutes. If the pool falls below the ad's quota β€” hosts leave, suspensions land, a plan upgrade raises the bar β€” the ad is paused: nothing is charged, placements already live finish their 24 hours, its row on My advertisements says exactly why ("Paused β€” the pool is short: your plan runs this ad in 9 different channels a cycle and only 6 eligible channels accept it right now"), the Why? diagnostic says the same, and you are told on every device. Once the pool recovers the ad resumes on its own β€” within the hour β€” and you are told again. A pause never costs you your place in the cycle: the campaign picks up the schedule it was already on, so if the next placement was not due for another two days, that is still when it goes out, and if one was already due it goes out within a few minutes. The 30-day cycle boundary is kept the same way, so a pause can never start your next cycle early or late. A short hold sits between one change and the next on purpose: a pool hovering exactly at your quota would otherwise stop and start your campaign repeatedly, and tell you about it every time. Nothing to do on your side. Mid-cycle the comparison is against what is left: an ad that has already run eight of its nine placements needs one more channel, not nine, and the eight it has already used are not counted as available again.

The reach line on the Topic and Audience steps says this before you press Submit: "Your plan needs 9 distinct channels to start this ad and 4 are eligible β€” 5 short". Widening the audience filters or lowering the level may be enough on its own, and the line updates as you change them. A swap offer needs only one other channel in the pool that accepts its level.

Step by step​

Open My advertisements and press Create an ad. The builder is a wizard of six steps, named in the strip across the top: 1 Write Β· 2 Media Β· 3 Topic Β· 4 Audience Β· 5 Delivery Β· 6 Review. Back and Continue sit under every step (pinned to the bottom of the screen on a phone), the browser's Back button moves between steps, and a finished step can be reopened by tapping its number.

Your unfinished ad is kept

Everything you write and choose is kept on this device as a draft. Reload the page, or come back later and press Create an ad, and the builder reopens where you left it, with a notice saying so and a Start over action. A picture you attached comes back as an "Image attached" tile β€” it is already on Telegram, so it is not uploaded again; a video has to be attached again. The draft is cleared when the ad is submitted.

1–2. Write and Media β€” "Write your ad", "Add an image or video"​

The creative is the shared post composer Onflow Ads uses in Paid Promotions and Cross-Promotion too, spread over two steps: the words, the link buttons and the AI entrance on Write; the picture or video on Media. The live preview beside the fields updates as you type, footnoted "This is what a host channel's subscribers will see." An ad can be text, a picture, or both β€” but not neither.

Media (optional, step 2). A Creative type bar offers Photo or Video β€” pick the kind first, because a video creative is one item however many photo slots you have. Below it sits an add tile reading Add photo or Add video with the size cap printed on it, and the field's note repeats it: "Optional. JPG, PNG or WebP up to 10 MB, or MP4 up to 50 MB." An attached file shows as a thumbnail with a Remove button on it. The file is sent to Telegram once, its file id is kept, and every later placement re-sends by that id β€” the bytes never sit in our database. Where your plan gives you more than one photo slot, the photos post as a single album and Telegram arranges it from their shapes β€” two wide photos stack one above the other, two tall ones sit side by side. The slots are an upload order, not a layout; the preview beside them shows the arrangement Telegram will use. The full table is in Booking a promotion.

Post text. The counter beside the label reads "N / 4063", or "N / 991" once media is attached, and turns red over the limit. Those ceilings are Telegram's own 4,096 and 1,024 minus the 33 characters the exchange holds back for the attribution line; a note under the editor says exactly that, and the warning below this section explains why it applies on every plan.

Formatting. The text box is a rich editor with a toolbar: Bold, Italic, Underline, Strikethrough, Spoiler, Code, Link and Clear formatting. Formatting is stored as the Telegram-supported subset and rendered exactly as Telegram will render it. Two things to know:

  • The character counter measures the visible text, not the markup, against the same budget.
  • A link you insert with the Link tool is held to the same link policy as a button, and the dialog tells you which class it is β€” "Public Telegram link.", "Private Telegram link." or "External link." β€” before you can insert it.

Link buttons. A field inside the panel, with the note "Up to four tappable buttons under the post β€” your plan sets how many. Every tap is counted, per button." Each row takes a label and a link. Rows past your plan's cap are drawn with a Locked button; pressing it says, in a notice, which plan opens that row. On Free, where the cap is zero, the field is a single locked Inline buttons row. There is no tick box to reveal the rows and nothing to switch on: an empty set simply means "no buttons".

PlanButtons per postA colour per button
Free0β€”
Lite1β€”
Plus2Yes
Elite3Yes
Master4Yes
Ultimate4Yes

Labels are 1 to 48 characters and may not contain line breaks. A half-filled row is called out under the field as you type β€” "Button 2 needs both a label and a link β€” half-filled rows are not saved." β€” rather than at submit.

Button colours (Plus and above). Each button row carries a small Colour control with four swatches: Default, Blue, Green and Red. Default is Telegram's normal button; the other three tint it. One colour per button, and every button your plan allows may carry one. Below Plus the control is simply not drawn, and a colour that arrives from an old draft on a plan that no longer includes them is dropped rather than refused β€” you lose the tint, never the button. The platform-wide rules are in Post buttons and links.

Write it with AI (optional). One button, Write my ad with AI, opens the shared AI dialog titled "Draft your exchange ad". Inside it, Generate drafts the copy and Image creates a visual, and nothing changes in your post until you press Apply to my post. See AI tools in the exchange.

Press Continue on Media. An empty ad is refused there, under the media field: "Add an image, a video or some text β€” an ad can't be empty."

Every exchange ad may carry the attribution line β€” you cannot buy it off

A placement can carry one extra clickable line, one blank line below your creative, reading exactly advertisement via onflowads.com. Whether it appears is decided by the host β€” the plan of the member whose channel is about to carry that placement β€” read live at the moment of sending. From Plus upward a host's channels run clean; on Free and Lite they carry the line.

Two consequences worth internalising. Your own plan changes nothing about it: an Ultimate advertiser's ad still carries the line in a Free host's channel, and a Free advertiser's ad runs clean in a Plus host's. And because a campaign is matched to many channels over its life, the same ad can run clean in one channel and carry the line in the next. Nothing about the line is frozen onto your campaign.

That is also why 33 characters are held back from your budget on every plan β€” the composer's note says it outright: "33 characters are held back for the advertisement via onflowads.com line, which is added unless the channel that hosts your ad is on a plan that removes it." The exchange cannot know which channel will host the ad until the matcher runs after review, so it reserves the space either way. Reserving costs you a sentence; not reserving would cost a rejected submission after the ad is written.

Every link β€” in a button or inside the post body β€” is classified once, at submission, into one of three classes.

ClassWhat countsWho may use it
Public TelegramAny https:// or http:// URL on t.me, telegram.me, telegram.dog, t.dog or telegram.org, or a subdomain of one, that is not a private destinationEvery plan
Private TelegramAn invite link (/+hash or /joinchat/…) or a private-channel link (/c/<id>/…) on one of those hostsLite and above
ExternalAny other hostAny plan that has bought the External Links add-on, a one-off $1 charged to your wallet

Anything the classifier cannot parse with certainty is rejected rather than guessed at: no tg:// links, no protocol-relative URLs, no bare hosts, no embedded credentials such as https://[email protected], nothing containing whitespace, and nothing over 512 characters.

What you seeWhat it means
"Inline buttons are not available on this account."Your plan's button cap is 0
"Your plan allows up to 2 buttons per post."More rows filled in than your plan permits
"Button text must be 1–48 characters."An empty or over-long label
"Button text cannot contain line breaks."A newline pasted into a label
"Private Telegram links are not available on this account."An invite or private-channel link on Free
"External links need the External Links add-on ($1)."A non-Telegram destination without the add-on
"That link doesn't look valid. Use a full https:// URL."The URL failed classification outright
Buy the add-on from inside the link dialog

When an external link is the only thing blocking you, the link dialog shows an Enable external links β€” $1 button. Pressing it charges your wallet once and unlocks external links immediately for your current tier β€” every open editor picks it up without a reload. The purchase is scoped to the tier you bought it on.

3. Topic & level β€” "Classify your ad"​

"Pick the topic and level this ad belongs to. It will only be placed in channels whose owners accept that level, so an honest answer reaches the right audience β€” a dishonest one gets declined."

  1. Topic. Required. Choose from the 40 topics in the Topic menu, which opens on "Choose a topic…". Some topics enforce a minimum level, and the page says so the moment you pick one: "This topic runs at level 3 or above, so only channels that opted in to it carry it."
  2. Content level. Pick the level this ad belongs to. Choosing one below your topic's minimum is refused at submit: "β€œCrypto & Web3” ads run at Finance, Trading & Crypto (level 3) or above, so only channels that opted in to it will carry them."
  3. Reach estimate. A live line reads "About 1,240 channels currently accept level 2. Your ad spreads across them over the cycle." or, when nothing fits, "No channels currently accept level 3. A lower level reaches a wider pool."
  4. Targeting copilot (optional). Press Targeting copilot for a real count of your eligible pool plus written advice. It spends one AI text action β€” see AI tools in the exchange.

Press Continue. Missing answers are caught here rather than at submit, each printed under its own field: "Choose the topic that best describes this ad." and "Pick the level this ad belongs to." Declaring a category with a level floor and picking a level under it is caught here too: "You declared this ad as Gambling & casino, which runs at content level 4 or above β€” pick that level."

The on-form estimate narrows as you answer

The reach line is a live estimate: it re-asks the server as you set your level, your topic and the Audience step's filters, so "Eligible now: 12 of 340 channels at this level." already reflects all of them. The one thing it never applies is your competitor blocklist β€” reading your handles back would let the number confirm which of them are enrolled β€” so the estimate can over-count by at most the channels you blocked. The Matching channels step of the Why? diagnostic, available once the ad is approved, is the one that applies everything.

4. Audience β€” "Who should see it"​

"All optional. Leave everything untouched and your ad reaches every eligible host β€” each filter you add makes the pool smaller but better matched."

This step carries the matcher controls and the whole targeting panel: Languages, Countries, Host audience size, Post between, Scheduled start and Competitor blocklist. Each box hides itself on a plan that does not include it, and a lock note underneath names the rung that does.

The Targeting copilot that counts your eligible pool is not here β€” it sits on the Topic step, beside the reach line.

It is a page of its own: Targeting. Read it before you set anything β€” one of the filters currently matches almost nothing, and the page says which.

Press Continue. The whole panel is hidden when the run mode is Swap.

5. Delivery β€” "How it runs"​

"How this ad is delivered, and whether you want it looked at sooner."

  1. How should this run? Choose Broadcast β€” reach the whole eligible pool (the default) or Swap β€” a direct 1:1 with one partner channel. Choosing Swap reveals a picker β€” "Your channel that will host your partner's ad in return" β€” and hides both the targeting panel and the delivery menu, clearing any selection so nothing is charged. See Swaps.
  2. Delivery boost (optional). A menu built from the live catalogue, each option labelled with its price and the placements it will actually add to this campaign: "Standard β€” free", "Boost β€” $0.99 (+2 placements)", and so on. See Delivery boosts.
  3. Priority Review ($2.00) β€” a tick box: "jump the review queue and get looked at first." It rides on any option including Standard.
  4. The summary line states what you are buying, the total and your balance: "+2 placements this cycle and higher priority Β· Priority Review β€” $2.99. Charged from your wallet ($12.40)." Two warnings can join it: "A delivery boost adds nothing here β€” Priority Review still speeds review." and "That's more than your balance β€” top up or choose Standard."

6. Review β€” "Review and submit"​

The ad exactly as a host channel will carry it, beside a summary of everything you chose: topic, level, what you declared, broadcast or swap, the audience filters, the delivery option and the charge. The button says what pressing it does: Submit for review when nothing is charged, Submit and pay $2.99 when a paid option is selected β€” the amount on the button is the agreement, there is no second dialog β€” and Submit anyway when the delivery boost is bigger than the placements left this cycle (it will be refused and nothing is charged; the line under the summary says so).

The closing note is the honest one: "Submitting sends your ad to our reviewers … You'll hear back by email and on Telegram. Nothing runs until a human approves it." A refusal lands on the step that fixes it β€” not enough credits for extra placements on Delivery, a level below what you declared on Topic β€” and a refusal by the automatic content screen is shown on the Review step with an Appeal button.

Review and approval​

Submitting posts your ad as a card into a private moderation channel where a human decides. Reviewers see the creative as sent, your campaign's OFSE- id, any paid flags, your reliability with its band label, how many channels you host, your prior-ad count, the content level, every button with its destination, and the body. Two buttons: Approve and Decline.

The tap on that card is only a relay. The bot carries it to the website β€” signed, and checked there to be a genuine website admin β€” and the website makes the decision: it flips the ad's status, refunds a delivery-boost charge on a decline through its own wallet code, and sends you the approval or decline by Telegram, email and the notifications page. If the website cannot be reached, the reviewer is told to decide on the website instead; the bot never decides on its own.

The confirmation names the queue you landed in, and only one thing decides which: whether you bought Priority Review for this campaign. With it β€” "Your ad OFSE-… is with our reviewers. You're in the priority review queue." Without it β€” "…You'll hear back by email and on Telegram." Your subscription plan does not change that sentence, because it does not change the queue.

Approval arms your first placement about five minutes later.

No review-time promise is enforced

Priority Review flags an individual submission so a reviewer picks it up first β€” your subscription plan does not, and never did. Either way, nothing in the exchange measures or enforces a review deadline. Treat any published review time as a target, not a guarantee.

How long a campaign runs​

An approved broadcast campaign is continuous. When it finishes a cycle, the exchange increments the cycle number, restarts the 30-day clock and arms the next drop. It keeps delivering, cycle after cycle, until you cancel it.

There is also a forced roll-over: if 30 days elapse and the campaign never met its target β€” because the eligible pool is smaller than the target and every channel in it has already had one placement β€” the cycle rolls anyway, handing those channels back for the next one.

A campaign you forget about is still running

Nothing retires a campaign on its own. An ad you submitted months ago is still consuming one of your live-ad slots and still taking host inventory. If you are told "Your plan runs 2 ads at a time. Cancel one before submitting another," an old campaign is usually why. Review My advertisements and cancel what you no longer want.

What each status means​

BadgeWhat it meansWhat you can do
In reviewWaiting for a reviewer's decisionWhy?, Cancel
RunningApproved and in rotation across the pool, cycle after cycleWhy?, Click analytics, Cancel
DeclinedRejected in review β€” the reason is printed in red on the rowAppeal, once

A cancelled campaign is removed from the list entirely rather than shown with a badge.

Rows also carry a Swap pill on swap campaigns, a badge naming any delivery boost you bought (with a star for Featured), and a ⚑ Priority pill if you bought Priority Review.

Tracking performance​

Approved campaigns show a metric strip:

TileWhat the number is
PlacementsDelivered so far out of this cycle's target
Live nowPlacements currently up in channels
ViewsTotal views across all placements, read from Telegram just before each takedown
TapsUnique taps on the links and buttons in your ad (plus, for older placements, clicks through the bot) β€” see the note below
JoinsMembers who joined your own connected channel through your ad's campaign invite links, as Telegram attributes them; how many have since left is shown beside it
MatchA 0–100 score for how well your actual placements fit, averaging a topic component and a size component. It appears only once there is enough data to measure

Under the strip, an ad with buttons shows a per-button line: "πŸ”˜ Join now: 42 Β· πŸ”˜ See the offer: 11".

Broadcast campaigns also show a 30-day cycle bar with "3 of 11 placements this cycle" and either "Next drop 14/09/2026" or "Spread over 30 days". Placements are spaced by the campaign's own target across the cycle β€” an 11-placement campaign aims for roughly every 65 hours, a 7-placement one for roughly every 4.3 days β€” with up to eight hours of jitter either way so the whole pool does not fire on the same minute. Gaps are the design, not a fault.

Taps and joins are people, and totals are all you get

Every link and button in your ad is published, on every placement, as its own onflowads.com/rr/… short link; a tap on one is counted there once per reader per link per day, and the reader is sent straight on. A join into your own connected channel is counted once per member by Telegram itself, through the campaign invite link that short link opens. Neither opens a chat with our bot. And you will never see a list of which channels ran your ad: per-placement rows would identify hosts by implication β€” timing plus subscriber counts are enough β€” so the breakdown stops at totals.

Click analytics on a running or finished ad's row opens the click analytics panel for that ad, across every placement it has had: its taps over 7, 30 or 90 days, by day and hour, by country, device, the app they were opened in and more. See The click analytics panel.

"Why?" β€” the placement diagnostic​

If you are wondering why an ad has not placed yet, press Why? on its row. The diagnostic walks the same gates the scheduler walks, in order, ticking or flagging each. It opens with the campaign's ID chip β€” and, on a swap, the swap's ID too.

StepWhat it tells you
In review"Your ad hasn't been approved yet β€” nothing runs until a reviewer approves it." On a campaign that bought Priority Review it adds "Priority Review is on, so your card is flagged for the reviewer to pick up first."
DeclinedThe reviewer's reason, with a nudge to fix and resubmit
Approved"Your ad is approved and in rotation."
Account standing"Your account is in good standing", or that you are cooling down after an early removal
Reliability"Your reliability clears the exchange floor", or "Your reliability (3.6) is below the 4.0 the exchange needs. Host ads and keep them up to earn it back."
Scheduled startShown only when a future start is set, naming the date
Swap partner"Waiting for a compatible partner channel to join. A swap needs another channel close to yours in size that accepts your level.", "You're matched with a partner β€” both ads run together.", or "This swap has already run." β€” plus the swap's OFSW- reference
Matching channels"12 of the 340 channels that accept level 3 match your targeting." Zero adds "Nothing matches right now β€” widen your targeting or lower the level to reach more of the pool."
On the even schedule"3 of 11 placements so far. Drops are spread across 30 days, never bursted β€” next one around 14/09/2026."
This cycle is complete"All 11 placements for this cycle are done. The next cycle reopens on the 30-day rhythm."

Press Why? again to close the panel.

The diagnostic reads the stable gates only

The Matching channels count mirrors the gates that hold steady β€” level, self-dealing, suspensions, cooldowns, blocked topics, and your language, country and size filters. It deliberately leaves out the ones that change tick to tick: each host's weekly load, per-cycle uniqueness and the 72-hour pair cooldown. So the real pool at any given minute is smaller than the number shown, which is why a campaign with a healthy count can still be between drops.

Cancelling a campaign​

  1. Press Cancel on any campaign that is in review or running.
  2. Confirm: "Cancel this ad? Placements already live will finish their 24 hours."

What happens:

  • Future placements stop immediately, including any waiting on a host's review.
  • Anything already live finishes its full 24 hours. The hold applies to everyone equally, including you.
  • If nothing had delivered yet, the whole delivery charge β€” the delivery upgrade and any Priority Review fee together β€” is returned to your wallet with the exact cash-and-locked split it was taken with. The reply names the amount and the refund: "Ad OFSE-… cancelled. Any placement already live will finish its 24 hours. $2.99 of your delivery charge is back in your wallet β€” OFT-…."
  • If at least one placement had run, the purchases are forfeited and the reply ends after the 24-hours sentence.

Cancelling frees a slot against your live-ad limit, so it is also the fix for "Your plan runs 2 ads at a time. Cancel one before submitting another."

Appealing a decline​

  1. Press Appeal on the declined row.
  2. Answer the prompt β€” "Why do you think this ad was wrongly declined? Our reviewers will read this and take another look." β€” with at least 10 characters. Anything shorter is refused: "Tell us why you think the decline was wrong β€” a sentence or two the reviewer can weigh." Longer than 1,000 characters is trimmed.
  3. The exchange replies "Appeal submitted for OFSE-… β€” our reviewers will take another look and let you know."

The row then shows Appeal pending, and later Appeal accepted or Appeal declined. You get one appeal per ad; a second attempt answers "You've already appealed this ad β€” it's with our reviewers." Appeals are rate limited to 5 an hour. The reviewer's decision on the appeal card is relayed to the website exactly like the original verdict: the website re-approves or declines, resets the ad's delivery to its standard cadence on an accepted appeal, and notifies you.

On Elite plans and above, the appeal card is stamped for priority attention in the review channel.

A won appeal does not restore a delivery boost

A decline refunds the delivery charge straight away. If the appeal then succeeds, the campaign is re-approved and runs on its standard cadence β€” the refunded boost is not reinstated. If the boost mattered, cancel and submit a fresh campaign with it instead.

If something goes wrong​

What you seeWhat it meansWhat to do
"The exchange is reciprocal β€” add a channel and agree to host ads before you can run one of your own."No active enrolled channelEnrol one β€” see Getting started
"Your plan runs 2 ads at a time. Cancel one before submitting another. Lite raises that to 4."At your live-ad limitCancel an old campaign, or upgrade
"Add an image, a video or some text β€” an ad can't be empty."Nothing in the creativeAdd media or text
"Telegram caps post text at 4063 characters β€” yours is 4210."Over the budget for this post type. The number is Telegram's cap minus the 33 characters held back for the attribution line, so it reads 4063 for a text post and 991 with media ("With an image or video attached, Telegram caps the text at 991 characters β€” yours is …")Trim it, or remove the media for the longer budget
"β€œCrypto & Web3” ads run at Finance, Trading & Crypto (level 3) or above…"Your level is below the topic's minimumRaise the level to the one named
"This ad can't enter the exchange:" followed by the reasonsThe content check refused it (see Prohibited content)Edit the ad, or press Appeal under the reasons
"Choose the topic that best describes this ad."No topic pickedPick one β€” it is required
Any of the link-policy messagesA button or body link is not permitted on your planSee the link policy
"Country targeting is part of Lite. Your ad will still run β€” it just reaches the whole eligible pool instead of the slice you picked."A filter your plan does not includeClear that filter, or upgrade β€” see Targeting
"The Featured delivery upgrade costs $2.99 and your wallet is short."Not enough wallet balanceTop up, or submit on Standard at no charge
"Telegram rejected that image's dimensions. Keep width plus height under 10000px and the aspect ratio under 20:1."Telegram refused the uploadResize the image
"Telegram wouldn't accept that file. Try a different image or video."The file failed Telegram's own checksTry a different file
"Delivery upgrades apply to pool campaigns, not swaps."A boost was selected on a swapSwitch back to Broadcast, or submit the swap on Standard
A "too many requests" answerSubmissions are limited to 10 an hour, uploads to 20 an hourWait, then retry

Nothing is charged when a submission fails. The wallet debit and the campaign row are one transaction β€” either both land or neither does.

Frequently asked​

How many channels will my ad reach?​

Your plan's included placements per cycle β€” 7 on Free, 9 Lite, 11 Plus, 13 Elite, 15 Master, 18 Ultimate β€” scaled by your reliability, plus any delivery boost, and hard-capped at 24. Each placement is a different channel. See Plans, tiers and limits.

My submit was refused because there were not enough channels. Did it charge me?​

No. The pool gate runs before anything is written or charged, so a refused ad costs nothing and appears nowhere β€” there is no campaign to cancel. Enrol your channels (that is what grows the pool), and you are told on Telegram, by email and on the site the moment the exchange can carry the ad. See The pool has to be able to carry your ad.

Can I edit an ad after submitting it?​

No. Cancel it and submit a corrected one. If nothing has delivered, your purchases come back automatically.

Why is my ad approved but showing zero placements?​

Usually the even spread: the next placement is a day or two away. Press Why? for the exact answer.

Can I choose which channels get my ad?​

No, and deliberately so. You choose the level, topic and targeting; the exchange matches. Host anonymity is what keeps the pool supplied. You can, on Plus and above, name channels your ad must never sit beside β€” see Targeting.

Where do I see what happened to each placement?​

In Telegram. The bot sends you a debrief after every placement completes β€” views, clicks, click rate, and that +0.05 was recorded for the clean run for the website to apply. The exchange page has no activity feed. See What the bot sends you.

From the support chat

Cancel my exchange ad cancels an ad that has not run, and appeal my exchange ad because … sends a declined one to review β€” each proposed first and run only after you confirm. What the assistant can do for you has the full list and the confirmation rule.

  • Targeting β€” the builder's Audience step in full, and the filter that currently matches nothing.
  • AI tools in the exchange β€” the two AI entrances in the builder, their quotas and their gates.
  • Swaps β€” the other run mode: one disclosed 1:1 trade instead of a broadcast.
  • Delivery boosts β€” the paid options on the Delivery step, and how refunds work.
  • Hosting ads β€” the attribution line from the other side, which is the side that decides it.