Character Counter for Captions & Bios
Count characters against Instagram, X, TikTok, LinkedIn, and bio limits. See remaining space as you type captions and profile text.
- Characters
- 0
- No spaces
- 0
- Words
- 0
- Hashtags
- 0
- Limit
- 2200
- Remaining
- 2200
Runs in your browser. Nothing you enter is uploaded.
Overview
Character limits are the one constraint in social writing that is completely non-negotiable, and the one you discover last - usually at the moment the composer refuses to accept the sentence you spent ten minutes on. Counting as you write is cheaper than rewriting after you are told.
This counter measures against a specific platform rather than in the abstract. Pick Instagram caption, X, TikTok caption, LinkedIn post, or Instagram bio, and the limit, the remaining allowance, and the warning colour all follow that choice. Alongside them you get characters with and without spaces, a word count, and a hashtag tally.
The counting is deliberately transparent, which also means it is deliberately naive in a couple of places. Knowing where it differs from the platform’s own count is the difference between a tool you can trust and one that surprises you at publish time.
Choosing which limit you are actually writing against
The five presets are not interchangeable views of the same text - they represent genuinely different writing problems. At 2,200 characters an Instagram caption is effectively unconstrained, and the number that matters is not the cap but the roughly 125 characters visible before the "more" cut. At 280 on X every clause is a trade. At 150 in an Instagram bio you are writing a headline, not a paragraph.
So the useful reading depends on the preset. For the long caps, watch the remaining figure only to confirm you are nowhere near it, and spend your attention on the first line. For X and the bio, watch it constantly. The counter turns amber inside the last 40 characters and red once you are over, which is a reasonable prompt to start cutting rather than to start abbreviating.
One practical habit: draft in the preset with the tightest relevant limit. Text written to fit 280 characters can be expanded for LinkedIn far more easily than a 900-character LinkedIn post can be compressed to fit X, and the compression usually destroys the rhythm rather than the content.
- Instagram caption: 2,200 cap, but write for the first ~125 characters.
- X: 280 cap, and the platform counts links and emoji differently from this tool.
- TikTok caption: 2,200 cap shared with hashtags and mentions.
- LinkedIn post: 3,000 cap, with truncation well before it.
- Instagram bio: 150 cap, where every newline and emoji is expensive.
The hashtag tally and what it is counting
The hashtag figure counts occurrences of a hash symbol followed by one or more word characters - letters, digits, or underscores. It is a count of tag-shaped tokens in your text, which is almost always what you want and is worth understanding at the edges. A hash followed by a space is not counted. A tag containing a hyphen is counted only up to the hyphen. Accented characters end the match, so a non-English tag can be undercounted.
Duplicates are counted separately, so pasting the same tag twice reports two. That is useful for catching accidental repetition in a long block, and it means the figure is not a count of distinct tags.
What the tally is for is spotting the two problems that a character count alone hides: a caption whose length is mostly tags rather than writing, and a tag block that has drifted past the platform’s allowance. It does not check whether the tags are relevant, restricted, or spelled correctly - those are separate questions with separate tools.
How each figure in the grid is derived
Characters with spaces is the raw string length, measured in UTF-16 code units. Characters without spaces removes every whitespace character - spaces, tabs, and newlines - and measures what is left. Words is the count of segments after trimming the text and splitting it on any run of whitespace, so an empty field reports zero and hyphenated compounds count as one word.
The limit is looked up from the platform preset you have selected, and remaining is that limit minus the with-spaces count. Unlike the bio preview, this figure is allowed to go negative, and the message below the grid switches from "characters left" to "characters over" when it does. The line colours amber below 40 remaining and red below zero.
Everything recomputes on each keystroke from the same string, locally, with no network request. The one thing worth flagging is that all of it operates on code units rather than on what a reader would call a character: a plain emoji measures two, a flag or skin-tone variant measures four or more, and a combining accent measures separately from the letter it sits on.
One caption measured against two platform tabs
Input
Text: "Restocked the ceramic mugs this morning - 12 in the green everyone kept asking about 🏺 link in bio #ceramics #handmadepottery #smallbatch" Measured first on the Instagram caption preset, then on the X preset.
Output
Instagram caption → Characters 139 · No spaces 121 · Words 20 · Hashtags 3 · Limit 2200 · Remaining 2061 X → same 139 characters · Limit 280 · Remaining 141
The same text, and the two readings prompt completely different decisions. On Instagram, 2,061 characters remaining is irrelevant - what matters is that the mug detail sits after character 125 and may be hidden behind "more". On X there is real room left, but the 139 figure is also the least reliable number here: had the caption contained a link, X would count it as 23 characters regardless of length, while this tool counts every character of it.
Limitations
- Counting is by UTF-16 code unit, so emoji measure two or more and combining accents measure separately from their base letter.
- X’s weighted counting is not applied. Links count as their literal length here rather than as the flat 23 characters X assigns them.
- The presets are fixed. There is no custom limit, and platform caps change without this list changing.
- The hashtag pattern matches only letters, digits, and underscores after the hash, so hyphenated and accented tags are undercounted.
- Duplicate hashtags are counted individually, so the tally is occurrences rather than distinct tags.
- Nothing is checked beyond length - relevance, spelling, restricted tags, and truncation points are all outside what the counter measures.
When not to use this tool
- If your text is heavy on links and destined for X, use a counter that applies X’s weighted length or the figure here will mislead you.
- If you want sentence, paragraph, and reading-time figures for long-form writing, the word counter reports those instead.
How to use it
- 1
Select the platform preset before you start typing so the limit and warnings reflect where the text is going.
- 2
Draft against the tightest relevant limit and expand for longer platforms rather than compressing down.
- 3
On Instagram and TikTok, read the with-spaces figure against roughly 125 characters for the visible portion, not against the cap.
- 4
If the text contains links and is going to X, verify the final length with a weighted counter before publishing.
Questions
Why does the count differ from what the platform shows?
Two reasons, both about weighting. X substitutes a flat 23 characters for any URL and counts most emoji as two, so a post with links reads as shorter there than here. And every platform counts emoji by code unit as this tool does, which is why a caption that looks like 100 characters to you can measure 118.
Should I count hashtags as part of my caption length?
You have no choice - on Instagram and TikTok tags sit inside the caption field and consume the same allowance. That is rarely the binding constraint at 2,200 characters, but it does mean a 30-tag block is eating several hundred characters that could have been writing.
What is the number I should actually watch on Instagram?
Roughly the first 125 characters, which is about what shows before the caption is truncated behind "more". The 2,200 cap almost never binds; the truncation point almost always does, and this counter does not mark it - so watch the with-spaces figure and treat 125 as the line that matters.
Does the word count match what a word processor reports?
Usually, with predictable exceptions. Splitting on whitespace means a hyphenated compound is one word, an em dash surrounded by spaces is one word, and a numeral is one word. Word processors make slightly different choices about each of those, so expect small differences on technical text.
Related tools
Related tools
