Word Counter — Words, Characters, Reading Time, Keyword Density
- when33.9%
- art11.3%
- away11.3%
- behind11.3%
- counter11.3%
- dense11.3%
- description11.3%
- dragging11.3%
- editor11.3%
- enough11.3%
- every11.3%
- fit11.3%
- great11.3%
- greatness11.3%
- here11.3%
- hit11.3%
- idea11.3%
- live11.3%
- medium11.3%
- meta11.3%
A word counter sounds like a trivial utility — surely the only thing it has to do is split on whitespace and count the result. Anyone who has shipped a long essay, edited a marketing landing page, written subtitle files for a video, drafted a Twitter thread, or wrestled a SERP-friendly meta description into 155 characters knows that the actual job is much richer than that. The word counter is the metronome behind every disciplined writing workflow: it tells you when a paragraph is dragging, when a tweet is still under the limit, when a Medium minimum has been hit, when an academic essay has padding to trim, when a product description is long enough to rank but short enough to read. It enforces craft constraints the same way a sheet-music staff enforces rhythm: not by being loud, but by being constantly visible. This page is built around that idea — every metric updates as you type, so you stop noticing the tool and start noticing your writing.
There are six numbers worth tracking on any draft, and this page surfaces all six at once instead of hiding them behind tabs. Words is the headline, but it depends on a definition of "word" that holds up across languages — split on whitespace alone breaks the moment you hit Turkish suffixes, French elisions, em-dashes between phrases, or hyphenated compounds like "long-running" and "state-of-the-art". The counter on this page uses Unicode word boundaries via the `\p{L}\p{N}` character class, which captures letters and digits across every language Unicode supports — Turkish, Polish, Cyrillic, Greek, CJK — and treats apostrophes and inner hyphens as word-internal rather than word-breaking. Characters is two numbers, not one: with-spaces and without-spaces. The first is what Twitter, X, Mastodon, Bluesky, and SMS gateways count; the second is what most academic citation styles and some database VARCHAR limits count. Showing both removes the ambiguity that breaks pasting flows.
Sentences is harder than it looks. The naive answer is to split on `.!?`, but real prose is full of edge cases: the period at the end of "Mr." or "Dr." or "e.g." or "U.S." or "Ph.D." or "etc." or "vs." is not a sentence terminator, ellipses (the `…` character or three or more periods) often cap a thought without ending a sentence in the grammatical sense, and quoted dialogue can put the period on either side of the closing quote depending on house style. The counter on this page applies the AP-style heuristic — periods inside common abbreviations are skipped, ellipses normalize to a single terminator, and runs of `?` or `!` collapse to a single sentence boundary. It is a heuristic, not a parser, but it produces the same number a careful human editor would on 95%+ of real prose, and it errs in the same direction across languages, which is what matters for relative comparisons during editing. Paragraphs is the simplest of the lot — split on blank lines (one or more `\n\s*\n` sequences) and count non-empty groups — but it is also one of the most useful early-warning signals when prose is collapsing into a single wall of text.
Reading time is the metric copywriters and SEO editors care about, because it is what Medium, Substack, LinkedIn, and most content marketing analytics surface to readers. The standard reading speed for English prose is 200 words per minute, with 250 wpm marking a fast reader and 300 wpm marking a skim. Different content types deserve different rates: dense technical or academic prose is closer to 150 wpm, fiction and conversational marketing copy is closer to 250 wpm, and reference material being scanned for a specific fact is well above 300 wpm because the reader is not actually reading. The dropdown on this page lets you toggle between 200, 250, and 300 wpm so the metric matches your audience. Speaking time is a separate beast — the conversational speaking rate for podcasts, narration, and conference talks is between 130 and 160 words per minute; news anchors push toward 160; voiceovers for video tend to land at 130. The dual readout makes this page useful both for written copy and for scripts, ad reads, and podcast outlines, because the same draft has very different time costs depending on which channel it is heading to.
The reading-time math is the part that catches people. The rule of thumb "divide words by 200 for minutes" is correct, but the rounded display is what readers actually see, and a five-second swing in the displayed estimate can change whether someone clicks. This counter shows minutes-and-seconds rather than rounding to whole minutes for short copy, which keeps the estimate honest for tweets, ads, and short newsletters where the entire piece reads in well under a minute. For longer copy the seconds matter less, but the readout still uses the same format so the relationship between word count and time stays linear and intuitive — doubling the words doubles the time, and the reader's expectation tracks the metric.
Keyword density is the metric SEO writers, content strategists, and academic editors all care about for very different reasons. In SEO terms, density tells you how often your target query appears compared to filler — too low and the page underperforms in search, too high and modern relevance models flag the prose as keyword-stuffed and demote it. In academic editing, density catches inadvertent repetition that a pass of prose review would miss. In product copy and brand writing, it surfaces the words you reach for instinctively so you can either lean into them deliberately or replace them with more precise vocabulary. The keyword-density panel on this page sorts your text into 1-grams, 2-grams, and 3-grams — meaning single words, two-word phrases, and three-word phrases — with the count and percentage of each. Toggling between the three lets you see both the raw vocabulary and the phrase patterns that are emerging in your draft.
Stop-word filtering is essential to keyword density being a useful metric instead of a noise floor. In any English text the most frequent tokens are "the", "a", "and", "of", "to", "in", and a handful of other functional words; in any Turkish text the equivalent set is "ve", "bir", "bu", "için", "ile", and similar particles. Without filtering, the top 20 keywords on every text in either language would look almost identical and tell you nothing about the actual subject matter. This page ships built-in stop-word lists for both English and Turkish — covering articles, prepositions, conjunctions, common pronouns, and the modal/auxiliary verbs that crowd the top of any unfiltered count — and toggles them on by default. Turn the filter off when you specifically want to see the raw distribution, for example to check that a particle is not being overused or to verify that a discourse marker ("however", "therefore", "moreover") is being deployed at the right cadence.
Readability is the bonus metric on the right-hand panel. For English text, this page computes the Flesch Reading Ease score, the most widely cited readability metric in publishing and SEO. The formula combines average sentence length and average syllables per word into a single number from 0 to 100: 90+ is sixth-grade easy reading, 60–70 is conversational standard prose, 30–50 is academic or business writing, and below 30 is dense legal or scientific prose. The Yoast plugin, the Hemingway editor, and most major content marketing platforms surface a Flesch score because it correlates well with both engagement and comprehension. The Turkish locale on this page marks the metric as N/A because the Flesch coefficients were tuned on English syllable structure and produce misleading numbers on agglutinative languages without locale-specific calibration; that calibration is a planned addition rather than a silent approximation, because giving you a wrong number is worse than giving you no number.
Privacy is the reason to use a client-side word counter instead of a hosted one. The text you paste into the counter on this page never leaves your browser — there is no server-side request, no analytics ping that includes your prose, no caching layer that retains the bytes after you close the tab. You can verify this in the browser DevTools Network panel: open it, paste a paragraph, and watch zero outbound requests for the content. For most utility-grade copywriting this does not matter, but for a non-trivial slice of writers it does — drafts of unannounced product copy, internal memos, embargoed press releases, paid client deliverables, sensitive correspondence, and academic work-in-progress all benefit from a tool that does not need to trust a vendor's privacy policy. WordCounter.net and most popular alternatives run server-side; this page runs entirely in the browser, which makes it usable inside corporate firewalls and on offline devices without a single byte going to a third party.
Common writing constraints are worth memorizing because they show up everywhere and are usually wrong by a few characters in popular reference tables. Twitter / X: 280 characters, but URLs are auto-shortened to 23, so a tweet with one link has 257 useful characters. Bluesky: 300 characters. Mastodon: 500 by default, configurable per instance. LinkedIn: 3,000 character post limit, but engagement falls off a cliff above 1,300. Instagram caption: 2,200 characters, with the first 125 visible without expansion. Facebook: 63,206 characters, but engagement peaks at 40–80 characters. YouTube title: 100 characters. YouTube description: 5,000 characters, with the first 157 visible above the fold. Email subject line: 60 characters before mobile clients truncate. SMS / RCS: 160 GSM characters or 70 if you use any non-Latin character. SEO meta description: 155–160 characters before truncation in Google. SEO title tag: 50–60 characters. Schema.org Article headline: 110 characters. Open Graph title: 60 characters. Twitter Card title: 70 characters. The counter on this page lets you watch any of these limits in real time as you type.
Academic and editorial workflows have their own constraints. AP style abstract: 200 words. MLA term paper: 1,500–2,500 words for a typical undergraduate assignment, 250 words per double-spaced page as a working assumption. APA abstract: 150–250 words. NYT op-ed: 600–1,200 words. Medium ideal article: 1,600 words at 7 minutes reading time, the engagement peak Medium published in 2014. Substack newsletter: typically 800–1,500 words for high-engagement issues. Newsletter cadence: weekly newsletters at 1,000–1,500 words consistently outperform sporadic 3,000-word essays. PhD dissertation: 60,000–80,000 words depending on the field. NaNoWriMo novel: 50,000 words in 30 days, or 1,667 words per day. The word counter is the only constant across all of these workflows; everything else (formatting, voice, citation style) is variable.
There are a handful of edge cases worth being explicit about because they affect the numbers in ways that surprise people. Em-dashes ("—") between phrases are not word boundaries but are character-counted as one character; this matches how Twitter and SMS gateways count them. Hyphenated compounds like "state-of-the-art" are counted as one word, not three; this matches the AP and Chicago Manual conventions. URLs are counted as one word and the full character length, which means a long URL inflates both metrics — most newsletter platforms shorten URLs before counting, so the on-platform count will be lower than the count here for prose with embedded links. Turkish agglutination means a single Turkish word can encode what would be three or four English words ("evlerimizden" = "from our houses"); the word count therefore reads lower for Turkish prose than for English prose carrying the same information density, and that is correct rather than a bug. Numbers like "123,456" are counted as one word; "123" and "456" separately would be two. Emoji are counted as one character each at the code-point level (Array.from preserves the grapheme cluster) but as zero words. Code blocks: copy-pasted code counts every keyword and identifier as a word, so if you are estimating reading time for a technical post, mentally subtract code-block words from the total, since readers skim code rather than read it linearly.
Compared to wordcounter.net and similar tools, this page has three small but useful differences. First, it is client-side: nothing leaves your browser, which matters for any text you would not paste into a public form. Second, it surfaces all six metrics simultaneously rather than behind tabs, so editing decisions that depend on multiple metrics (tightening a paragraph that is too long, but only by trimming the high-frequency filler word the keyword-density panel surfaces) become a single-glance loop instead of a tab-switching workflow. Third, it ships English and Turkish with proper Unicode handling, so it works correctly for Turkish writers and bilingual workflows without falling back to whitespace splitting that breaks on accented characters. The trade-off is that this page is a single-tool word counter — it does not bundle a thesaurus, paraphraser, or AI rewrite assistant. If you want those, the Text Cleaner and Regex Tester pair naturally with this counter for serious editing work.
Practical patterns worth committing to muscle memory: paste before typing when checking an existing draft, so the metric jump tells you what you started with and what you ended with; toggle 1-gram → 3-gram to find phrase tics ("in order to", "the fact that", "due to the fact") that bloat prose without adding meaning; disable stop-words once per draft to verify that no functional word is unusually overused (a high count on "however" or "therefore" suggests the prose is leaning on transition markers instead of structural argument); switch reading-time wpm to match audience — 200 for general consumer copy, 250 for tech and marketing audiences, 150 for academic and legal prose; and target Flesch 60+ for any consumer-facing copy unless your brand voice is deliberately formal. None of these patterns require a paid tool — they require a counter that updates fast enough to make the feedback loop tight, which is the entire reason this page exists.
- Trim a Twitter / X post to 280 characters without re-counting in your head.
- Hit a Medium 1,600-word target or a Substack 1,000-word cadence.
- Pace a podcast script at 130 wpm or a conference talk at 160 wpm.
- Trim a meta description to 155 characters before publishing.
- Spot keyword stuffing or filler-word habits via 1-gram and 2-gram density.
- Estimate reading time for a Medium / blog post header.
- Check that an academic abstract sits within an APA / MLA word range.
- Watch the live Flesch reading-ease score and tighten dense English prose.
- Count Turkish prose with proper Unicode word boundaries (Turkish accented chars handled).
- Edit copy under NDA without uploading the text to a third-party server.
- 1Paste or type your text into the textarea — the page ships with a sample so it is interactive on first load.
- 2Watch all six stat tiles (words, characters with/without spaces, sentences, paragraphs) update on every keystroke.
- 3Pick a reading-rate (200 / 250 / 300 wpm) and speaking-rate (110 / 130 / 160 wpm) for the time tiles.
- 4Open the keyword-density panel, toggle 1-gram / 2-gram / 3-gram, and turn stop-word filtering on or off.
- 5For English prose, read the Flesch Reading Ease score on the right and aim for 60+ on consumer copy.
- 6Copy, download as .txt, clear, or restore the sample with the action buttons above the textarea.