Character Counter is a live text analyser built for people who write against character limits. Type or paste any text and the tool instantly shows characters (with and without spaces), space count, word/sentence/paragraph counts, UTF-8 and UTF-16 byte sizes, and grapheme count (what a human sees as one character — a family emoji is 1 grapheme but 4+ code points). It then measures your text against real platform limits: SEO title tags and meta descriptions, X/Bluesky/Threads/LinkedIn/Instagram/YouTube/TikTok posts, GSM-7 vs UCS-2 SMS segments, and Google Ads headline/description limits. A top-character frequency chart, adjustable reading and speaking time estimates, and Unicode-aware counting round it out. Everything runs in your browser — nothing is uploaded.
What Character Counter measures
The tool gives you three layers of counts. The primary counts — characters, characters without spaces, spaces, words, sentences, paragraphs, lines — cover the everyday case. The encoding counts — UTF-8 bytes, UTF-16 bytes, and graphemes — cover technical use cases: fitting text into database columns, JSON payloads, or SMS segments. The platform limits panel then measures your text against real-world caps: SEO title tags and meta descriptions, every major social network, SMS (both GSM-7 and UCS-2), and Google Ads copy. A top-character frequency chart and reading/speaking time estimates round it out. Everything updates on every keystroke and runs entirely in your browser.
Characters, code units, code points, and graphemes
The characters count in this tool matches what most word processors show — the length of the string in JavaScript, which is the number of UTF-16 code units. This is what SMS providers count, what database VARCHAR limits count, and what X/Twitter counts (with weight adjustments).
The graphemes count matches what a human sees. A family emoji like 👨👩👧 is a single visual character, but it's actually eight code points glued together with zero-width joiners. If you want to know 'how many characters will my user see', use the grapheme count. Character Counter uses Intl.Segmenter to compute it, which follows the official Unicode grapheme cluster algorithm.
UTF-8 bytes tells you the wire size in the encoding used by almost all modern web APIs. A plain ASCII letter is 1 byte, most Latin-with-accents characters are 2 bytes, Chinese/Japanese/Korean characters are 3 bytes, and most emoji are 4 bytes.
SEO character limits
- Title tag: 50–60 characters before Google truncates in SERPs. The exact cutoff is measured in pixels (~580px on desktop), so wide characters like W and M can push a 55-character title over. Use 60 as a safe cap.
- Meta description: 155–160 characters on desktop, ~120 on mobile. Google rewrites descriptions ~70% of the time, but a well-crafted description still influences click-through when it's kept.
- URL slug: 75 characters before it's likely to be truncated in SERP snippets. Shorter is better for readability and shareability.
Character Counter shows all three limits with green/amber/red status bars so you can see at a glance whether your copy is safe, close to the edge, or over.
Social media character limits (2026)
Current limits at time of writing:
- X / Twitter: 280 characters for non-verified accounts. Premium subscribers can post up to 25,000, but 280 is the visible-in-feed cap.
- Bluesky: 300 characters.
- Threads: 500 characters.
- Instagram bio: 150 characters. Instagram caption: 2,200 characters (only the first 125 show without a 'more' click).
- LinkedIn post: 3,000 characters (only the first ~140 show above the fold).
- YouTube title: 100 characters (first 60 show in most surfaces). YouTube description: 5,000 characters.
- TikTok caption: 2,200 characters.
- Facebook post: 63,206 characters — practically unlimited but engagement drops sharply past ~80 characters.
SMS: GSM-7 vs UCS-2 and segment counting
SMS is more complicated than a simple character limit because messages are encoded in one of two ways:
- GSM-7 is a 7-bit encoding that fits 160 characters per segment. It supports the basic Latin alphabet, digits, common punctuation, and a handful of European accented characters. A few extra characters (
{,},[,],|,~,\,^,€) each count as 2 characters in GSM-7. - UCS-2 is a 16-bit encoding that fits 70 characters per segment. If your message contains even one character outside GSM-7 (an emoji, a curly quote, a Chinese character, an é in a way that breaks GSM), the whole message switches to UCS-2 and your per-segment budget drops from 160 to 70.
Messages longer than one segment use concatenation, which reserves 7 characters per segment for a header — that's why the per-segment cap drops from 160 to 153 (GSM-7) or 70 to 67 (UCS-2) once you go multi-part. Character Counter auto-detects encoding, shows current segment fill, and tells you exactly how many segments will be sent.
Google Ads character limits
- Headline: 30 characters. Search ads have up to 15 headlines; Performance Max campaigns need 3–15.
- Long headline: 90 characters (Performance Max only, shown in wide placements).
- Description: 90 characters. Search ads have up to 4 descriptions; PMax needs 1–5.
These are hard limits — Google will reject asset uploads that exceed them. Character Counter shows each limit as its own progress bar so you can write against all three at once.
Character frequency and why it matters
The character frequency chart shows the twelve most-used characters in your text with counts and percentages. It's most useful for spotting overused characters in ad copy, checking letter distribution when localising into a new language, or as a quick sanity check when you suspect your text is skewed towards a particular symbol (a spike in # means you've probably over-hashtagged). Toggle between 'Letters & digits' (case-insensitive, ignores punctuation) and 'All characters' (counts every code point including spaces, punctuation, and emoji).
Privacy and offline use
Every count runs in your browser. Nothing is uploaded, no request goes to a server, and the tool works with your network disconnected. That means it's safe for unpublished drafts, client-confidential material, and anything else you'd rather not paste into a third-party service. Open your browser's Network tab and type — you'll see zero requests fire.