📊

Word Counter

Paste or type your text to get instant word count, character count (with and without spaces), sentence count, paragraph count, and estimated reading time. Runs entirely in your browser.

Updated July 11, 2026

100% Private & Secure

This tool runs in your browser.
Your data is never uploaded or stored.

0
Words
0
Characters
0
No Spaces
0
Sentences
0
Paragraphs
0 min
Reading Time

How to use

  1. 1

    Paste or type your text into the input area.

  2. 2

    View the statistics update in real time.

  3. 3

    Use Copy or Clear as needed.

When to use it

Hitting a word limit for an essay or abstract

Most submission systems — grant abstracts, conference papers, college essays — cap text at a word count. Paste your draft to see the live count and trim precisely to fit.

A 250-word abstract limit means about 1,250–1,500 characters of body text.

Estimating reading time for a blog post

At an average of 200–250 words per minute, a 2,000-word article reads in roughly 8–10 minutes. Displaying the estimate up front sets reader expectations and improves engagement.

Writing SEO meta descriptions and titles

Google typically truncates meta descriptions around 155–160 characters and titles near 60. Counting characters (with and without spaces) before publishing prevents truncation in search results.

Checking character count for tweets and SMS

SMS segments at 160 characters and a single tweet caps at 280. A live counter shows where the break falls and whether your message fits in one segment.

How it works

What actually counts as a "word"

For English and most space-delimited scripts, a "word" is a run of non-whitespace characters — text.split(/\s+/).filter(Boolean).length in JavaScript. This handles "hello world" as 2 words and "word-count" as 1.

The picture gets harder for scripts that do not separate words with spaces. Chinese, Japanese, Thai, and Khmer run characters together; a naive whitespace split reports the whole paragraph as one word. The Unicode standard addresses this in UAX #29 — Text Segmentation, which defines word boundaries using per-character properties (ALetter, Numeric, MidLetter, and so on). UAX #29 treats each CJK ideograph as its own word by default; real linguistic segmentation needs a dictionary-based tokenizer like jieba or ICU BreakIterator.

  • Whitespace split — fast, correct for Latin/Cyrillic/Greek scripts
  • UAX #29 word boundaries — locale-aware, handles apostrophes and contractions like "don't"
  • CJK — each character is one word under UAX #29; dictionary tokenizers go further

Characters vs bytes — why UTF-8 breaks naive counts

A "character count" usually means UTF-16 code units (JavaScript's string.length) or Unicode code points. A byte count, by contrast, is how many octets the text occupies when encoded — and UTF-8 is variable-width: ASCII is 1 byte, Latin-1 ranges 1–2, most CJK characters are 3, and emoji are 4.

The gap matters in practice. The string "café" is 4 characters and 5 UTF-8 bytes; "🚀" is 2 code units in JavaScript (a surrogate pair), 1 code point, and 4 bytes. Database column limits, URL length caps, and SMS billing all count bytes, not characters.

"café".length              // 4 (code units)
Buffer.byteLength("café")  // 5 (UTF-8 bytes)
"🚀".length                // 2 (surrogate pair)
[..."🚀"].length           // 1 (code point, via iterator)

Reading-time estimates and their assumptions

The common estimate of 200–250 words per minute comes from reading-speed studies on English prose; 238 wpm is a frequently cited average for silent reading of non-technical text. For technical content dense with code or formulas, drop to 100–150 wpm.

The estimate is a rough projection, not a measurement. It assumes adult readers, familiar vocabulary, and continuous reading without re-skimming. It is useful for setting expectations on a blog index, but treat any single number as a range — most tools pick 200 (conservative) or 225 (middle).

Common mistakes & edge cases

Problem

A Chinese paragraph counts as 1 word

Fix

A whitespace split does not work for CJK. Use a UAX #29 word segmenter or a language-specific tokenizer (jieba, MeCab, ICU BreakIterator) to get an accurate count.

Problem

The count disagrees with Microsoft Word or Google Docs

Fix

Word and Docs apply slightly different rules — they count hyphenated words as one, sometimes split on em-dashes. Pick one definition (usually whitespace-split tokens) and document it.

Problem

Emoji or accented characters throw off the count

Fix

You are likely counting UTF-16 code units. For "characters" use code points ([...str].length); for storage size use UTF-8 bytes (new TextEncoder().encode(str).length).

Problem

The reading-time estimate feels off for technical content

Fix

The 200–250 wpm figure assumes prose. Code-heavy or academic text reads slower; lower the rate to 120–150 wpm for those audiences.

Frequently Asked Questions

How is the reading time calculated?
It is based on an average reading speed of 200 words per minute.
Does this tool count words in all languages?
Yes. It counts whitespace-separated tokens, which works well for English and similar languages.
Is my text stored or sent anywhere?
No. All analysis happens locally in your browser.

References & further reading

Related reading

Related Tools

View all tools