Free · no sign-up · nothing leaves your browser
Word & Character Counter
Type or paste your text and watch words, characters, sentences, paragraphs, reading time and keyword density update on every keystroke — with an exact over/under check against X/Twitter, metadata and essay limits.
Count your text
0 words
How it works
Three steps, all inside your browser.
Drop in a tweet, meta description, essay paragraph or caption. No upload, no round-trip.
Words, characters, sentences, paragraphs, reading time and keyword density recompute on every keystroke.
Pick X/Twitter, metadata or a custom limit and see exactly how many characters you have left — or how many you are over.
Built for exact limits
Counting is plain JavaScript on your device. Your text is never sent to a server, logged or stored.
Toggle “exclude spaces” when a form counts characters without whitespace, and the limit meter follows your choice.
Set your own words-per-minute (50–1000) for a realistic read time, plus a speaking estimate at 130 wpm.
Enter a focus keyword to get its count and density %, and see the top repeated words with stopwords filtered out.
Words split on whitespace and punctuation, so Latin, Cyrillic, Greek, Chinese and Arabic text all count correctly.
No account, no cookie wall, no paste round-trip — open the page and the counter is already running.
FAQ
Is my text saved or uploaded?
No. The counter runs entirely in your browser, so nothing is transmitted, stored or logged.
How are characters counted?
Every character counts, including spaces and line breaks. Tick “exclude spaces” to count only non-whitespace characters — the limit meter uses the same number.
How is reading time estimated?
Reading time is words ÷ your reading speed (default 200 wpm; the 200–250 wpm range is typical for adults). Speaking time is fixed at 130 wpm.
What counts as a paragraph?
Blocks of text separated by a blank line. A single block of text with normal line breaks is one paragraph.
How is keyword density calculated?
Density is keyword occurrences ÷ total words × 100, matched case-insensitively as a substring.