Character Frequency Counter
Count how often each character appears in your text - a sortable table of counts and percentages, with case-folding, ignore-spaces, and letters-only options.
- Free, no account
- No watermark
- No usage limit
About the Character Frequency Counter
Paste any text and you get a ranked table of every character in it, how many times each one appears, and its percentage share of the total. Free, instant, and it runs entirely in your browser, so nothing you paste ever leaves your machine.
A basic count is easy. What separates a frequency counter you can trust from the rest is how it handles the two things most of them botch: emoji and invisible characters. A single emoji is one character to a human, but a lot of counters report it as two, because of how text is stored at the byte level, not what shows on your screen. This one counts the way you read, by code point: an emoji is one, an accented é is one, a Chinese character is one. It also shows every character, not just the visible ones. Every distinct character gets its own row, spaces and tabs and rarer stuff included, each labeled so you can tell them apart.
How to use
- Paste or type your text into the box. The table updates as you go, no button to press and no "analyze" step to wait on.
- Set the toggles to match your question. Ignore case folds A and a into a single count. Ignore spaces drops spaces, tabs, and line breaks so they stop crowding the top of the list. Letters only strips out everything that isn't a letter, which is what you want for language or cipher work.
- Read the table. Each row shows the rank, the character, its raw count, and a bar for its percentage share. Space, tab, newline, and return each get a small labeled badge, so the ones you normally can't see become visible.
- Glance at the two stats up top. Total characters is the count that survived your filters. Distinct characters is how many different ones turned up, often the more telling number.
- Export it. Copy table puts a tab-separated version on your clipboard, ready to paste into a spreadsheet. Copy CSV or Download CSV gives you a comma-separated file for Excel, Google Sheets, or a script.
Every character gets a row, even the ones you can't see
The letters are what most people came to count. But the whitespace matters just as much, along with the invisible characters mixed into it.
A CSV import fails, or a name typed into a form refuses to match the same name in your database, and the two strings look identical on screen, character for character. Except one of them has a non-breaking space where the other has a normal space, or a trailing tab, or a zero-width character that came along when somebody copied out of a PDF. You cannot see it, so you lose twenty minutes staring at text that looks correct.
Paste both versions into this tool and the difference becomes visible. A normal space shows up as a row labeled Space. A tab shows up labeled Tab. And that odd non-breaking space? It lands in its own separate row, distinct from the regular Space, so an unexpected entry in the list tells you an extra character is present that you could not see. Once you know it's there, you can go back to your text and remove it. This works because the tool never merges characters that only look alike, it counts them as the genuinely different code points they are.
What counts as one character
Ask a naive counter how long the string 😀 is and it answers two. It's reporting how the character is stored in memory rather than what shows on screen. Plenty of characters outside the plain A to Z set, most emoji, a lot of Chinese, Japanese, and Korean characters, some math and music symbols, each take up two storage slots. A counter that walks those raw slots double-counts every single one, and its totals come out wrong on any text with emoji or non-Latin script in it.
This tool walks the text by code point instead, the unit that matches what a person calls one character. Counted that way, an emoji, a composed é, and 中 all count as one character. That's why the distinct-character number stays accurate on international or emoji-heavy text, where the naive approach inflates everything.
One caveat, and it's a real limit worth naming. Some characters can be built two ways. An é might arrive as a single code point, or as a plain e followed by a separate combining accent, two code points your screen draws as a single mark. A flag or a skin-toned emoji is often several code points combined into one. This tool counts by code point, so a decomposed é shows up as an e plus an accent, and a compound emoji may show as its pieces. For ordinary text and standalone emoji you'll never run into this. For heavy combining-mark content, just know the count is by code point, which is the one definition everyone agrees on.
Letter frequency, and where it actually helps
Turn on Letters only and you can line your text up against how English really distributes its letters. E leads, at roughly 12.7% of all letters, better than one in eight. T, A, O, I, N follow, and the rest trail off from there. If your sample puts E on top near that mark, it reads like ordinary English. If some other letter dominates instead, say one is sitting at 10%, your text probably isn't plain English at all. It might be another language, structured data like product codes, or a cipher.
That last one is the old trick that still works. A simple substitution cipher swaps every letter for a fixed stand-in, but it can't disguise how often each one appears, so the most common symbol in the ciphertext is almost certainly a masked E. Match the shape of your distribution against English and the message opens up letter by letter. It is worth being clear about the limits, though. It needs a decent amount of text before the percentages settle, and it fails against a modern cipher or a polyalphabetic one like Vigenère, which flattens the distribution on purpose to kill exactly this attack. For the substitution puzzles that fill puzzle books and escape rooms, it's still the first move to try.
If your real question is which words repeat rather than which characters, the Word Frequency Counter tallies whole words instead. And when you only need a running total for a character limit, not the full breakdown, the plain Character Counter or Word Counter gets you there in one number.
Frequently asked questions
Why is the space at the top of my results?
Because ordinary prose runs about one space per word, which makes the space more common than any single letter, E included. So with every toggle off, a space parked at rank one is the literal truth of your text rather than a glitch. Flip on Ignore spaces to push letters and punctuation to the top, or Letters only for nothing but letters.
Does *Letters only* also remove numbers and punctuation?
Yes. Letters only is the strict filter: it keeps letters and discards everything else, so digits, punctuation, symbols, and whitespace all vanish together. Ignore spaces is narrower, it only drops the whitespace and leaves your numbers and punctuation counted. The two stack, so you can run letters only with case merged for a clean alphabet tally.
Will it work on languages other than English?
The counting works on anything. The Letters only filter uses the Unicode definition of a letter, so accented characters, Greek, Cyrillic, Arabic, and CJK all count as letters. The one English-specific piece is the 12.7% baseline, that distribution is measured on English, so comparing another language against it won't mean much.
How are ties in the count broken?
Count decides the order first, highest to lowest. When two characters share the exact same count, they fall back to their code point, so the ordering is fixed and reproducible. Run the same text with the same options twice and you get an identical table, which matters if you're comparing two versions or citing a result somewhere.
Can it handle a whole book, or is there a size limit?
There's no cap, since the work happens on your device with nothing to upload. A few paragraphs or a whole novel both count fine. Very large pastes, several megabytes of text, may make the browser pause for a second while it retallies, but the result is the same.
Do I need to worry about my text being saved?
No. Reading, counting, sorting, and exporting all happen locally in your browser, never on a server. Close the tab and the text is gone with it. That's what makes it safe for a client document, a private message, or a password sample you'd never want to hand to a random website.