Free tool · no sign-up

Social media character counter

Type once and watch every platform’s limit at the same time — counted the way each network really counts, links, emoji and mentions included.

Characters
0
Without spaces
0
Words
0
Sentences
0
Paragraphs
0
Reading time
0 sec

Encoding detail: 0 code points · 0 UTF-16 units · 0 UTF-8 bytes. Characters above are counted as graphemes — what a reader sees — so an emoji counts once, even though it is several code points.

A counter for each platform

Each page states that platform’s limit, how it counts, what happens when you go over it, and the document the number comes from.

Writing for four platforms at once?

MicroPoster cross-posts from X and handles each platform’s limit automatically. Post once where you like, and it splits long text into native threads, fixes links and mentions, and publishes to X, Threads, Bluesky and Mastodon on its own.

See auto-crossposting

7-day free trial · No credit card

Why the numbers differ

Every platform counts differently

A post that fits on Bluesky can be over the limit on X, and a 280-character draft full of links may still fit. These are the rules this counter applies.

Links cost 23 on X and Mastodon

Both platforms rewrite links before counting: a 200-character tracking URL and a 12-character short link cost exactly the same, and on X a bare domain counts as a link too. Everywhere else the whole URL counts.

Emoji and CJK cost double on X

X weighs each character. A post of 280 Japanese, Chinese or Korean characters is 560 on X's own scale — half a post over the limit, which is why so many counters get it wrong.

Bluesky counts what you see

Bluesky counts graphemes, so a family emoji or a flag is one character, not the eleven UTF-16 units your keyboard produced. TikTok charges all eleven.

Threads charges emoji by the byte

Meta's own documentation says an emoji on Threads counts as its number of UTF-8 bytes, so a single 😀 spends four of your 500 characters.

Reference

Social media character limits

Every limit below was read from the platform’s own documentation. Facebook is the exception, and its row says so.

Character limits for X, Bluesky, Threads, Mastodon, LinkedIn, Instagram, Facebook and TikTok, with how each platform counts and where the number is documented. Verified September 8, 2026.
PlatformLimitPaid tierHow it countsSource
X (Twitter)28025,000PremiumLinks cost 23 · emoji and CJK cost 2X developer docs — Counting characters
Bluesky3003,000 bytesCounts graphemes — an emoji is 1AT Protocol lexicon — app.bsky.feed.post
Threads500500 characters · an emoji costs its UTF-8 bytesMeta developer docs — Threads posts
Mastodon500default, per serverLinks cost 23 · mentions drop the domainMastodon docs — Posting
LinkedIn3,000Plain characters · the feed folds at ~210LinkedIn Help — Post and share updates
Instagram caption2,2002,200 characters · 30 hashtags · 20 @ tagsMeta developer docs — IG User Media (caption)
Facebook post63,20663,206 characters · folds at ~477Meta developer docs — Pages API Posts (no limit published)
TikTok caption2,2002,200 UTF-16 units — an emoji costs 2TikTok for Developers — Content Posting API

Last verified: September 8, 2026 · each row links to the document the number comes from.

The limits in one line each

  • X (Twitter): 280 characters, or 25,000 characters on Premium. Links cost 23 · emoji and CJK cost 2.
  • Bluesky: 300 characters. Counts graphemes — an emoji is 1.
  • Threads: 500 characters. 500 characters · an emoji costs its UTF-8 bytes.
  • Mastodon: 500 characters, unless your server raises it. Links cost 23 · mentions drop the domain.
  • LinkedIn: 3,000 characters. Plain characters · the feed folds at ~210.
  • Instagram caption: 2,200 characters. 2,200 characters · 30 hashtags · 20 @ tags.
  • Facebook post: 63,206 characters. 63,206 characters · folds at ~477.
  • TikTok caption: 2,200 characters. 2,200 UTF-16 units — an emoji costs 2.
Questions

Character counting, explained

What is the character limit on each social media platform?

X allows 280 characters on a free account and 25,000 on Premium. Bluesky allows 300. Threads and Mastodon allow 500, though a Mastodon server can raise its own limit. Instagram captions and TikTok video captions allow 2,200. LinkedIn posts allow 3,000. A Facebook post can run to 63,206.

How does X count characters?

X gives every character a weight. Latin, Cyrillic, Greek, Hebrew and Arabic characters weigh 1; emoji, CJK, Hangul, Japanese and most symbols weigh 2. Every link is replaced with a t.co address and always costs exactly 23 characters — even a domain typed without https://. So a 280-character post of English text fits, but 280 Japanese characters is double the limit.

Why do other counters give me a different number for emoji?

Most counters use JavaScript's string length, which counts UTF-16 code units: a single 👨‍👩‍👧‍👦 comes out as 11. Bluesky counts graphemes, so it is 1. X counts it as one emoji weighing 2. Threads charges its UTF-8 bytes, and TikTok charges all 11. We apply each platform's own rule rather than one number for all of them.

What is the character limit on Bluesky?

300 graphemes per post. The AT Protocol record enforces a second cap of 3,000 UTF-8 bytes, which only heavy emoji or non-Latin scripts reach before 300 graphemes. Links count in full, so a long URL eats into the budget.

What is the character limit on Mastodon?

500 characters by default, but each server sets its own — some allow 5,000 or more. Mastodon counts links as 23 characters, and for a remote mention only the username counts, so @user@example.social costs the same as @user. Set your server's limit in the Mastodon row to count against the right number.

How many characters can an X Premium post have?

25,000 characters for long posts on a Premium subscription, against 280 on a free account. Toggle “X Premium” in the X row to count against the higher limit.

Is this character counter free?

Yes. No sign-up, no limits, nothing stored — the counting runs entirely in your browser, so your draft never leaves your device. You can share a draft with the copy-link button, which puts the text in the URL.