Social media character limits, and how each platform counts
Every platform’s text limit in one table, and why the same post can fit on one and be too long for another.
3 minute read By SocialHelper team
Every social network caps how long a post can be, and the caps vary a lot: Snapchat allows 160 characters while Facebook allows over sixty thousand. What surprises people more is that the platforms don’t agree on what a character is. The short promo further down counts as 95 on one network and 84 on another, which is why a post that fits everywhere in your head gets rejected somewhere in practice.
The limits
These are the limits SocialHelper checks before it posts, read from the code that talks to each platform. Each name links to a counter that counts the same way.
| Platform | What it limits | Limit | How it counts |
|---|---|---|---|
| Post | 63,206 | Unicode characters | |
| YouTube | Video description | 5,000 | Bytes |
| Telegram | Post | 4,096 | UTF-16 code units |
| Post | 3,000 | UTF-16 code units | |
| Post | 2,200 | Unicode characters | |
| TikTok | Caption | 2,200 | UTF-16 code units |
| Discord | Post | 2,000 | Unicode characters |
| Google Business Profile | Post | 1,500 | Unicode characters |
| Post | 800 | Unicode characters | |
| Threads | Post | 500 | Characters; emoji by bytes |
| Mastodon | Post | 500 | What you see; links 23 |
| Bluesky | Post | 300 | What you see |
| X | Post | 280 | Weighted; links 23, emoji 2 |
| Snapchat | Post | 160 | Unicode characters |
One post, counted 7 different ways
Here’s a short promo with one emoji and one link:
Spring sale starts Friday 🌸 Everything in the shop is on it: https://example.com/spring-sale
You’d count it as 92 characters. This is what each platform counts:
| Platform | Counts it as |
|---|---|
| Facebook, Instagram, Pinterest, Snapchat, Discord and Google Business Profile | 92 |
| X | 85 |
| YouTube | 95 |
| TikTok, LinkedIn and Telegram | 93 |
| Threads | 95 |
| Bluesky | 92 |
| Mastodon | 84 |
Three things cause the differences: links, emoji and the way text is stored.
Links
X and Mastodon count every link as 23 characters, however long it is, because they treat links as shortened. On X that includes bare domains like example.com. Every other platform here counts a link’s full length, so a long tracking link can use a good part of a short limit. On Bluesky, where the limit is 300, a 120-character link leaves 180 for everything else.
Emoji
An emoji you see as one symbol is often several pieces joined together. The family emoji 👨👩👧👦 is four people and three invisible joiners, and a flag is two letters. Platforms count those pieces differently:
- Bluesky and Mastodon count what you see, so any emoji is 1.
- X counts every emoji as 2, however it’s built.
- Facebook, Instagram and others count Unicode characters, so the family emoji is 7.
- LinkedIn, TikTok and Telegram count UTF-16 units: most emoji are 2 and the family emoji is 11.
- Threads counts each emoji by its size in bytes, so a plain 🌙 is 4 and the family emoji is 25.
A caption with a row of emoji can therefore be well within the limit on Bluesky and over it on Threads.
Accents and other alphabets
Most platforms count an accented letter or a Japanese character as 1. Two don’t. X counts Chinese, Japanese and Korean characters as 2 each, which is why posts in those languages hit the limit at about half the length. YouTube limits a video description to 5,000 bytes, where an accented letter takes 2 and a Japanese character takes 3.
Limits that aren’t about length
- Bluesky also caps a post at 3,000 bytes, which only matters for long posts full of emoji or non-Latin text.
- Telegram allows 4,096 characters for a text message, but when you attach images the text becomes a caption, and captions are limited to 1,024.
- Instagram, YouTube, TikTok, Pinterest and Snapchat won’t take a text-only post: each one needs an image or a video.
- On YouTube the text is the video description. The title is a separate field.
Writing one post for every platform
If the post is going everywhere, write it for the strictest platform you use and check it before you schedule anything. The free checker counts a post against every platform at once, each its own way, and nothing you type leaves your browser.
When one version can’t fit all of them, keep the long version and write a shorter one for the platforms that need it. In SocialHelper that’s a per-platform version of the same post: the composer lets you change the text for one platform, and the API takes it as an override. Before anything goes out, every version is checked against its platform, and if one doesn’t fit, nothing is posted.