Word Counter
Words, characters, sentences and reading time — counted by the rules of your script, not by counting spaces. Arabic, Indic, Chinese, Japanese, Thai and Latin text all measured correctly.
What a Latin word counter gets wrong
Almost every word counter online splits text on spaces and counts characters with JavaScript’s .length. Both shortcuts are fine for English and quietly wrong for most of the world’s writing. Below is what actually breaks, script by script — each of these is handled correctly by the counter above.
| Script | What breaks in a space-splitting counter | What this page does |
|---|---|---|
| Arabic | Harakat (fatha, damma, kasra, shadda, sukun) are separate Unicode code points, so a vocalised word like مُحَمَّد is reported with far more characters than it has letters. Tatweel (ـ) inflates the count further while adding no letter at all. | Letters and harakat are counted on separate lines, and tatweel is reported apart from both. |
| Devanagari, Bengali, Tamil, Telugu, Kannada, Malayalam, Gujarati, Gurmukhi | Matras are combining marks, not letters. कि is one syllable written with two code points, so a naive counter reports two characters where a reader sees one unit. The virama that forms conjuncts is counted as a third. | Base letters, matras and viramas are each reported, and the character count uses grapheme clusters so कि counts as one. |
| Chinese, Japanese | There are no spaces between words. Splitting on whitespace returns 1 word for an entire paragraph — the single most common failure in the category. | Real word segmentation via the browser’s own ICU tables, plus a character count, since character count is the metric these languages actually use. |
| Thai, Khmer, Lao, Burmese | Same no-space problem, made worse because line-breaking rules differ from word rules. Most counters return 1. | Dictionary segmentation for words; characters reported alongside, which is what publishers count. |
| Emoji and flags | 👨👩👧 is one picture built from three emoji joined by two zero-width joiners: 5 code points, 8 UTF-16 units. Counters report 8, or 5, almost never 1. | Counted as one grapheme cluster, the way a reader sees it — with the code-point figure shown separately when the two disagree. |
| Any script above the Basic Multilingual Plane | JavaScript strings are UTF-16, so .length returns 2 for a single mathematical, historic or emoji character. Character counts silently double. | Characters are grapheme clusters; code points and UTF-16 units are shown as extra rows so you can see all three when they differ. |
Where the reading times come from
Most word counters state a reading time without ever saying what rate produced it, and the figure most of them use — 200, 250 or 300 words per minute — traces back to no particular study. The numbers on this page come from two published sources, and where a value has to be inferred, that is said outright rather than hidden.
| Rate | Value | Source |
|---|---|---|
| Silent reading, English non-fiction | 238 words/min | Brysbaert (2019), a meta-analysis of 190 studies covering 18,573 participants — the largest review of reading rate published. |
| Silent reading, English fiction | 260 words/min | Same meta-analysis. Fiction is faster because its words are shorter, not because it is easier. |
| Reading aloud, English | 183 words/min | Same meta-analysis, drawn from 77 studies and 5,965 participants. |
| Reading aloud, 17-language mean | 184 words/min · 863 characters/min | The IReST standardised texts (Trauzettel-Klosinski & Dietz, 2012), measured on 436 native speakers across German, English, Arabic, Chinese, Spanish, Finnish, Flemish, French, Hebrew, Italian, Japanese, Polish, Portuguese, Russian, Slovenian, Swedish and Turkish. |
The honest gap: no equivalent silent-reading study exists for most non-Latin scripts. For those, this page takes the measured oral rate and scales it by 1.30 — the silent-to-oral ratio Brysbaert reports for English (238 ÷ 183). That is an assumption, not a measurement, and it is stated here rather than presented as a fact. Character-based scripts are timed at 863 characters per minute, since counting their words is the less meaningful of the two figures.
The limit that matters is not the limit
Every platform publishes a maximum, and almost nobody hits it. The number that decides whether a post gets read is the visible window — how much shows before the feed collapses the rest behind “more”. A LinkedIn post may hold 3,000 characters, but the first 210 do the work. The counter above marks both, so you can see where your text gets cut, not just whether it fits.
| Field | Maximum | Visible before truncation |
|---|---|---|
| X / Twitter post | 280 characters (free tier) | All of it. Premium raises the ceiling to 25,000, which almost nothing in the feed rewards. |
| Instagram caption | 2,200 characters | About 125 — roughly one and a half lines. |
| LinkedIn post | 3,000 characters | About 210 on desktop before “see more”. |
| TikTok caption | 4,000 characters, raised from 2,200 | Roughly 100–150 in the feed. |
| YouTube title | 100 characters | About 60 in search and suggested listings. |
| YouTube description | 5,000 characters | About 150 before “Show more”. |
| SEO page title | No hard limit | Google truncates near 60 characters. |
| Meta description | No hard limit | Google truncates near 155–160 characters. |
One caution for non-Latin writers: these ceilings are counted in characters, not bytes, on every platform above — so Arabic, Hindi and Chinese text is not penalised the way it is in SMS, where a single non-Latin character switches the whole message to UCS-2 encoding and cuts the segment length from 160 characters to 70.
Three different things called “a character”
When two tools disagree about a character count, it is almost always because they are measuring different units. There are three, and they only coincide for plain English:
Grapheme clusters are what a reader perceives as one character — é, कि, 👍🏽, مُ. This is the count shown in the Characters tile, because it is the only one that matches what someone sees on the page.
Code points are the Unicode values behind them. é may be one code point (U+00E9) or two (e + U+0301) depending on how the text was normalised — identical on screen, different in storage. Copy the same accented word from two apps and you can genuinely get two different counts from the same tool, and neither is a bug.
UTF-16 code units are what JavaScript’s .length returns and what most naive counters report. Anything outside the Basic Multilingual Plane — emoji, historic scripts, mathematical alphanumerics, some CJK extensions — takes two units each, so the count comes out roughly double for emoji-heavy text.
Database fields, form validators and API limits do not agree on which of the three they enforce, which is why a caption that passes one check fails another. The counter above shows all three whenever they diverge, so you can tell which limit you are actually near.
About this word counter
This tool runs entirely in the browser. Text is never uploaded, never logged, and never leaves the device — which matters if what you are counting is a draft contract, a thesis chapter, or client work under NDA. Closing the tab is the whole delete process.
The segmentation is done with Intl.Segmenter, the browser’s own interface to the ICU library that Unicode maintains — the same segmentation data that Chrome, Safari and Firefox use to decide where a double-click selects a word. That is why Chinese, Japanese and Thai return real word counts here rather than the number 1: the dictionary doing the work already ships inside the browser, and most counters simply never call it.
Counting words is older than the tools that do it. Word limits in journalism came from the physical width of a newspaper column; character limits in software came from the size of a database field. Both survive as habits after the constraint disappeared — which is why a modern platform can allow 4,000 characters while showing 150, and why the useful question is rarely “how many” but “how many before it stops being visible”.
Frequently Asked Questions
Why does this give a different word count than Microsoft Word?
Why do other counters say my Chinese text is one word?
Does it count Arabic harakat as letters?
ـ — is reported separately too, since it adds width but no letter.How is one emoji counted?
Is my text uploaded anywhere?
Where does the reading time number come from?
Why is the reading time for my language marked as an estimate?
What counts as a sentence?
۔, the Devanagari danda ।, the Burmese ။ and the ellipsis. Abbreviations such as "Dr." will still be read as sentence ends — no counter solves that without a dictionary of abbreviations per language, and any tool claiming otherwise is guessing.Does it work for Hindi, Bengali, Tamil and other Indic scripts?
कि counts as one character rather than two — which is what a reader sees and what a page-layout estimate needs.Can I use it to check an SEO title or meta description?
Why does the platform bar show two markers?
Do character limits count bytes or characters?
What is keyword density and is the 2% rule real?
Does it count words in a PDF or Word file?
Why do two tools disagree about my character count?
.length returns — and they only agree for plain unaccented English. This page shows all three whenever they diverge, so you can see which one a given form or database field is enforcing.