How to Paste ChatGPT Text into Telegram Without Broken Formatting
Author: Mira TeamPublished: Updated:
- chatgpt
- markdown
- formatting
TL;DR
- ChatGPT answers in Markdown. A regular Telegram post has no headings, tables or Markdown links, so
#,|and[text](url)stay as symbols. - In a test on Telegram for macOS (2026-10-11),
**bold**,__italic__,~~strike~~,||spoiler||and`code`turned into formatting when the message was sent. Links and quotes did not. - The quickest fix is a prompt that asks for Telegram markers only. Two ready prompts are below.
- Bots have a new option. Since Bot API 10.1, rich messages accept Markdown with headings, lists and tables.
ChatGPT formats answers in Markdown. If text from Claude or Gemini shows ** or # after pasting, it is Markdown too. Telegram understands only part of it. Bold often survives. Headings, tables, links and quotes turn into stray #, | and brackets. To fix it, ask the assistant for Telegram-ready text. Or clean the answer with the table below before you post.
Mira (usemira.pro) is a Telegram bot that finds materials and drafts posts for a channel. We make Mira, so we are not neutral. Everything in this article works without Mira.
We checked the Telegram facts in this article on 2026-10-11. If you find an error, write to us via the contact page.
Why does ChatGPT formatting break in Telegram?
It breaks for two reasons. The assistant and Telegram use different formats, and the clipboard drops most styles.
First, the format. ChatGPT writes Markdown: **bold**, # Heading, tables made of | and -. Telegram stores a post as plain text plus entities. An entity marks a part of the text as bold, a link or a quote (Telegram docs). A regular post has entities for bold, italic, links, quotes and code. It has none for headings, tables or lists (Bot API).
Second, the clipboard. When you copy, the computer stores the text in several forms: plain text, HTML, sometimes RTF. Each Telegram app picks the form it understands. In a test on Telegram for macOS, the app ignored HTML and kept plain text. Our notes from that test are in the next section.
The full list of Telegram styles is in Telegram text formatting.
What survives the paste, element by element?
Bold, strikethrough, spoiler and inline code survive in the form Telegram knows. Headings, tables, links and quotes do not. The table shows each element of an AI answer and what to do with it.
Sources: the Bot API list of entities, and our clipboard test on 2026-10-11. Markers were tested on Telegram for macOS (App Store app). On an iPhone we tested only rich text copied from Safari. We have not tested Telegram Desktop, Android or Telegram Web.
| In the AI answer | In a regular Telegram post | How to fix it |
|---|---|---|
**bold** | Turned bold after sending (macOS test) | Keep it. If stars stay, select the words and make them bold |
*italic* or _italic_ | Not a Telegram marker, expect the symbols to stay | Ask for __italic__, or format by hand |
~~strike~~, `code` | Turned into formatting after sending (macOS test) | Keep them |
||spoiler|| | Turned into a spoiler after sending (macOS test) | Add it yourself where you need it |
# Heading | No headings in a regular post; the # stays | Make the first line bold instead |
- item, 1. item | Stays as plain lines. It reads fine | Keep it, or use • at the start of lines |
Table with | and --- | No tables in a regular post; the symbols stay | Turn each row into a line: "Item — value" |
| Code block in triple backticks | Not tested | Check the preview; if it fails, select the code and make it monospace |
[text](https://…) | The brackets stay as typed (macOS test) | Paste a bare URL, or select the word and add a link |
> quote | The > stays as typed (macOS test) | Select the lines and apply the quote style |
--- divider | The dashes stay | Delete it, leave an empty line |
One detail surprises people. On Telegram for macOS, the stars stay in the input field while you type. They turn into bold only when you send the message.
Copying the rendered answer with the mouse gives a different result. Telegram for macOS ignored the HTML copy and pasted plain text. Only links survived when the clipboard carried RTF. On an iPhone, rich text copied from a Safari page kept bold, italic, underline and strikethrough. Spoiler, monospace, links and quotes did not arrive.
Our advice for Telegram on a Mac: copy the answer with the Copy button under it. It gives Markdown, and Markdown keeps the markers Telegram can turn into formatting. You know you have Markdown when ** and # appear after pasting. We have not tested Telegram Desktop on Windows or Linux, or Android.
How do you ask an AI assistant for Telegram-ready text?
This works the same way in ChatGPT, Claude or Gemini. Tell the assistant which markers Telegram understands and ban everything else. Use the first prompt for a new post. Use the second when you already have an answer in Markdown.
Prompt for a new post:
Write a post for my Telegram channel about [topic].
Audience: [who reads the channel]. Length: up to 1,200 characters.
Format rules (Telegram, not Markdown):
- No headings with #. Put the title on the first line as **Title**.
- Bold: **text**. Italic: __text__. Strikethrough: ~~text~~.
Spoiler: ||text||. Inline code: `text`.
- Never use a single * or _ for emphasis.
- Lists: start each line with "• " or "1. ". No nested lists.
- No tables. Turn table data into short lines: "Item — value".
- No Markdown links. Write each link as a full URL on its own line.
- No > quotes and no --- dividers.
Return only the post text, with no comments before or after it.
Prompt for an answer you already have:
Rewrite your previous answer as a Telegram post.
Keep every fact and number. Do not add new facts.
Apply the same format rules:
**bold**, __italic__, ~~strikethrough~~, ||spoiler||, `code`;
no # headings, no tables, no [text](url) links, no > quotes.
The first line is the title in **bold**.
Return only the post text.
We ran the second prompt in Claude Opus 5.5 on 2026-10-11. We did not run it in ChatGPT or other assistants, and their output may differ. Here is the input. Example, not a real channel.
## Coffee prices in 2026
Prices rose again this autumn. *Arabica* is up the most.
| Bean | Change |
|---------|--------|
| Arabica | up |
| Robusta | flat |
Read the [full report](https://example.com/report).
And here is the output:
**Coffee prices in 2026**
Prices rose again this autumn. __Arabica__ is up the most.
• Arabica — up
• Robusta — flat
Full report:
https://example.com/report
The model kept the facts and replaced the table with lines. The link became a bare URL, which Telegram turns into a link by itself (Bot API). We did not paste this output into Telegram for this article.
A prompt cannot create a link on a word or a quote. The assistant does not know your Telegram app. Add those two by hand after you paste.
How do you clean a pasted answer quickly?
Paste, fix the four things a prompt cannot, then check the preview. This works for an answer from any assistant that writes Markdown.
- Paste into the input field, do not send yet. For a channel, paste into a draft or into Saved Messages first.
- Remove heading signs. Delete each
#and make the title line bold. - Rewrite tables. Turn each row into one line. If the table matters, post it as an image.
- Fix links and quotes. Select a word and add the link. Select the lines and apply the quote style.
- Send to Saved Messages and look. Post the text in the channel only when it looks right.
To bold or link a selected word, use the formatting menu of your Telegram app. Its place differs between apps, so we do not list the exact path here.
You can also paste the answer into our free Telegram post editor. It turns Markdown headings into bold lines and keeps bold, italic and links. Tables stay as plain text, so rewrite them first. We built the editor, so we are not neutral about it.
Free online converters from Markdown to Telegram also exist, for example mdtochat. We have not tested them.
For a post that reads well from first line to sign-off, see how to write a good Telegram post.
Can Telegram now show headings and tables from AI?
Yes, but only in rich messages, not in a regular post. Rich messages came to bots in Bot API 10.1 on 2026-06-11 (changelog). They support headings, lists, tables, quotes, collapsible blocks, footnotes and formulas.
People got a visual Rich Text Editor on 2026-07-14 (Telegram blog). At launch in July 2026, it was available only to Telegram Premium users. A rich message holds up to 32768 characters (Bot API). A regular message holds up to 4096 (Bot API).
What we could not confirm:
- whether the Rich Text Editor converts Markdown pasted from ChatGPT;
- how rich messages look in channels on every app;
- what readers with old apps see. Telegram says outdated apps show a placeholder with an update button (Telegram blog).
Our advice: for a channel post, use the regular format and the prompts above. Try rich messages for long guides, and check them on the apps your readers use.
How should a bot send ChatGPT output through the Bot API?
Do not pass raw model output with parse_mode. Choose one of four paths. Our recommendation comes after the table.
| Path | What you send | What to watch |
|---|---|---|
| Entities | text + entities, no parse_mode | Convert the Markdown first; offsets are counted in UTF-16 |
| HTML | parse_mode: "HTML" | Escape <, > and & in the model text |
| MarkdownV2 | parse_mode: "MarkdownV2" | Escape 18 punctuation characters, or Telegram rejects the message |
| Rich message | sendRichMessage with rich_message.markdown | Headings and tables work; check how your readers' apps show it |
The rules come from Formatting options and Rich messages in the Bot API.
Careful: in a rich message, __text__ is bold, not italic. Use *text* for italic there.
We recommend HTML for a regular post. Only three characters need escaping, and an unclosed tag is easy to spot. MarkdownV2 fails on any unescaped dot or dash, and AI text is full of them. If you want headings and tables, use a rich message.
Escape the model text, then add your own tags around it. These functions do only the escaping:
# Python
import html
import re
def escape_html(text: str) -> str:
return html.escape(text, quote=False)
MDV2_SPECIAL = re.compile(r"([_*\[\]()~`>#+\-=|{}.!\\])")
def escape_markdown_v2(text: str) -> str:
return MDV2_SPECIAL.sub(r"\\\1", text)
// JavaScript
const escapeHtml = (text) =>
text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
const escapeMarkdownV2 = (text) =>
text.replace(/[_*[\]()~`>#+\-=|{}.!\\]/g, "\\$&");
We ran both versions on 2026-10-11 on three test strings with dots, brackets, & and <b>. Python and JavaScript gave the same output. We compared it with the escaping rules in the Bot API. We did not send the results to Telegram through a bot.
To convert Markdown with headings and links, use a library. These are third-party code: we did not review their security or maintenance.
- telegramify-markdown (Python): Markdown to text and entities, to MarkdownV2, or to a rich message.
- chatgpt-md-converter (Python): Markdown to Telegram HTML.
- @gramio/format (TypeScript): Markdown to text with entities.
A long answer needs splitting. A regular message holds up to 4096 characters after entities are parsed. Split at paragraph breaks, never inside a tag or a code block.
Frequently asked questions
Why do I see asterisks when I paste ChatGPT text into Telegram?
Because the answer is Markdown, and Telegram turns only some markers into formatting. In our macOS test, **bold** became bold after sending, but a single * is not a Telegram marker.
Ask the assistant for __italic__ instead of *italic*. Or select the words and format them by hand.
Does Telegram support Markdown?
Partly. In the apps, some markers turn into formatting when you send: **, __, ~~, || and backticks in our macOS test.
Bots can send MarkdownV2 or HTML with parse_mode. Since Bot API 10.1, rich messages also accept Markdown with headings, lists and tables.
How do I keep a table from ChatGPT in Telegram?
A regular post has no tables. Turn each row into one line, such as "Arabica — up". If the table is large, post it as an image.
Rich messages do support tables. People can create them in the Rich Text Editor; at launch it required Telegram Premium. Bots send them with sendRichMessage.
Should my bot use MarkdownV2 or HTML?
We recommend HTML for model output. You escape only <, > and &.
MarkdownV2 needs 18 punctuation characters escaped outside formatting. One missed dot and Telegram rejects the message. Use a rich message if you need headings and tables.
How do I escape characters in Telegram MarkdownV2?
Put a backslash before each of these characters: _ * [ ] ( ) ~ ` > # + - = | { } . ! and before the backslash itself. The rule is in the Bot API section "Formatting options".
Inside code, escape only the backtick and the backslash. Inside the URL part of a link, escape ) and the backslash.
What if the ChatGPT answer is longer than 4096 characters?
Telegram will not send it as one regular message. Ask the assistant for a shorter post, or split the text at paragraph breaks into several messages.
A rich message holds up to 32768 characters. At launch in July 2026, the Rich Text Editor in the apps was available only to Telegram Premium users.
Before you post: one last look
Send the post to Saved Messages first. Look for stray #, |, [ and > symbols, and fix them with the table above. Then post it in the channel.
Mira finds materials for your channel and prepares drafts of posts. You can also write a post yourself in Create. The editor there has formatting buttons and a preview, and Mira publishes posts with real Telegram formatting.
Read how Mira works or our guide on running a channel with AI.