Word and Character Counter
Count words, characters, sentences and paragraphs live, with reading time and platform limits.
This word and character counter updates every number live as you type or paste, all inside your browser. It walks the text by Unicode code point, so one emoji counts as one character, then reports characters with and without spaces, words, sentences, paragraphs, lines and average word length. You also get reading time at 225 words per minute and speaking time at 150, a keyword density table that filters stopwords to surface the words you actually lean on, and a live limits row that checks the text against the 280-character X cap, the 160-character SMS segment, the meta description and the title tag. Nothing is uploaded, and closing the tab wipes the text.
100% in your browser. Nothing you type ever leaves this page.
Live word and character counter
Start typing, or paste whatever you're working on. Every count below updates as you go: characters with and without spaces, words, sentences, paragraphs, lines, plus reading and speaking time. There's a keyword density table for spotting the word you've leaned on too hard, and a limits row that tells you whether the text still fits a tweet, a meta description or an SMS. All of it runs in your browser. Nothing you type leaves this page.
100% client-side. The counting happens in JavaScript inside your tab, so nothing is sent to any server. Paste freely.
Platform limits, live
| Platform | Cap | Used | Left | Status |
|---|
Counts here are plain character counts (with spaces). X weights URLs at 23 characters and some scripts at 2, so its composer can disagree slightly. The title tag cap is really a pixel width; 60 characters is the safe proxy.
Keyword density (top 10)
| Word | Count | Density |
|---|
Words longer than 3 letters, with common English stopwords filtered out, so the table shows the words that actually carry your meaning.
Reading the numbers
- Reading time assumes 225 words per minute, an average adult silent-reading pace.
- Speaking time assumes 150 words per minute, a comfortable presentation pace.
- Sentences end on a period, an exclamation point, a question mark, or the end of the text. Decimals like 3.14 won't split.
- Paragraphs are blocks separated by a blank line. Lines count every line break.
- Average word length is letters per word after punctuation is stripped.
How the counts work, and where they get weird
Counting characters sounds trivial until you paste an emoji. JavaScript's default string length counts UTF-16 code units, which makes one smiley face count as two characters. That's wrong for humans, so this tool walks the text by Unicode code point instead. One emoji, one character. Accented letters, same deal.
Words are split on whitespace, then punctuation gets stripped off each end before anything is counted. So "well-known" is one word, "(seriously)" is one word, and a stray quote mark on its own is zero words. That matches what Word and Google Docs do, more or less. Not exactly, because nobody matches anybody exactly in this game, but close enough that the difference is noise.
Sentences are the honest mess. The counter splits on terminal punctuation and protects decimals, so "Pi is 3.14." reads as one sentence, not two. But abbreviations like e.g. or Dr. will still fool it. Every sentence counter you've ever used has this problem; the ones that claim otherwise just hide it better. Treat the sentence count as an estimate and you'll be fine.
One more edge case worth knowing: some emoji are stitched together from several code points (family emoji, flag emoji, skin tone modifiers). Those count as more than one character here. Most platforms count them the same way, so it usually works in your favor.
The reading time math, in plain numbers
Reading time is just words divided by 225, converted to minutes and seconds. Why 225? Research on adult silent reading of nonfiction puts the typical range somewhere around 200 to 260 words per minute, and 225 sits comfortably in the middle. Medium uses a similar figure for its read-time badge.
So a 1,000 word blog post is roughly 4 and a half minutes of reading. Spoken aloud at 150 wpm, the same text runs just under 7 minutes. That gap matters more than people expect. I've watched someone write a "5 minute talk" that was actually 11 minutes out loud, because they timed it by reading it silently. Don't be that person. If the text is going to be spoken (a video script, a presentation, a wedding toast), use the speaking time and add a margin for pauses.
Dense technical content drags the real pace down hard, sometimes under 150 wpm. Skimmable listicles push it up. The estimate is a planning number, not a promise.
Why every platform picked a different character limit
The limits aren't arbitrary, they're archaeology. SMS is capped at 160 characters because that's what fits in one GSM signaling segment using the 7-bit GSM-03.38 alphabet. Go over, and your "one" text silently becomes two billed segments. Worse: drop in a single emoji or a curly quote and the encoding switches to UCS-2, which cuts the per-segment cap to 70 characters. That's the trap this counter can't fully warn you about, so if SMS cost matters to you, keep the text plain ASCII.
X's 280 is doubled from the original 140, which itself existed to fit a tweet plus a username inside one SMS. History stacked on history. And X doesn't count plain characters: every URL costs a flat 23, and characters from some CJK ranges count as 2.
The title tag's "60 characters" and the meta description's "160" aren't enforced by anyone. Google truncates titles by pixel width (around 580px on desktop) and rewrites descriptions whenever it feels your version doesn't match the query. The character caps are just proxies that keep you out of truncation territory most of the time. LinkedIn allows 3,000 characters in a post, but folds everything after roughly the first 200 behind a "see more" link, so the cap that actually matters is the fold, not the ceiling.
Writing tighter with the density table
The keyword density table started as an SEO feature and turned out to be a better editing tool. When a single word claims 3 or 4 percent of your text, you've found a verbal tic. Mine is "actually". Yours might be "leverage" or "solution". The table makes the tic visible, and once you see it you can't unsee it.
For SEO, the old advice about hitting a magic density percentage is dead and has been for years. What the table is still good for: confirming that your main topic word appears at all (you'd be surprised), and catching the moment a synonym pass turned into keyword stuffing. If your target term tops the table at a sane count and the prose still reads like a human wrote it, you're done. Stop optimizing.
Honestly, the fastest tightening trick isn't in any table. Write the draft, then delete the first sentence of every paragraph and see which ones the text doesn't miss. Usually about half.
Frequently asked questions
Does it count emoji and accented characters correctly?
Yes, mostly. The counter walks the text by Unicode code point, so a smiley counts as one character instead of two, and accented letters count as one. There's a catch: some emoji are built from several code points joined together, like family emoji and flags. Those show up as more than one here, and most platforms count them that way too.
Why does my count differ from the official X composer?
X does its own weighting. Every URL counts as a flat 23 characters no matter its real length, and characters in some CJK ranges count as 2. This tool gives you the plain code point count, which matches X for ordinary text but drifts once links or those ranges get involved. Use the 280 row as a first check, then trust the composer for the final call.
How accurate is the reading time estimate?
It's an average, not a stopwatch. 225 words per minute is a reasonable middle for adult silent reading of general text. Dense technical writing slows people down a lot, light skimmable content speeds them up. I'd trust it within 20 percent either way, which is plenty for planning a post or a talk.
Are hyphenated words counted as one word or two?
One. The counter splits on whitespace, so well-known stays a single word, the same way most word processors handle it. Slashed pairs like read/write also count as one word because there's no space inside. If that bothers you, add the space.
Does my text get uploaded anywhere?
No. Everything runs in JavaScript inside your browser tab. Nothing is posted to a server and closing the tab wipes the text. You could load the page, cut your connection, and the counter would keep working.