On-device AI — professional-grade, fully private.

Keyword and Word Frequency Tool

Word frequency with density and phrases — nothing uploaded.

  • Runs on your device
  • Phrases up to four words
  • Free to 25 MB · Pro compares 20 files

Drop a text file, or browse

.txt · .md · .markdown · .csv · .tsv · .log · .json · .srt · .vtt · up to 25.0 MB free

0 characters

Start with
Preset
Preset

A starting point. Every control below stays adjustable.

Table
Count
Count
Phrase length
Phrase length

Phrases never cross a sentence end.

226 function words in the selected language.

Minimum word length
1

Applies to the first and last word of a phrase.

Minimum occurrences
1

Set this to 2 to hide everything that appears once.

Sort by
Show top
Search results
What counts as a wordChanging these re-counts the document

These change the tokens themselves, so the table is recounted.

Export
Format
Format
Analyse up to 20 documents side by side and download every table at once.
Pro
Nothing added yet

How to count word frequency

  1. 1

    Add your text

    Paste it into the box, or drop a .txt, .md, .csv, .tsv, .log, .json, .srt or .vtt file. Short pastes are counted as you type; longer documents and files are counted when you press Analyze. Nothing is uploaded.

  2. 2

    Choose words or phrases

    One word gives you a classic frequency list. Two, three or four words gives you phrase frequency — the view that shows repeated wording rather than repeated vocabulary.

  3. 3

    Tune the filters

    Turn stop words off to see the raw list, or leave them on to bring content words to the top. Raise the minimum length to drop short tokens, raise the minimum occurrences to hide one-offs, and search inside the results to isolate a term.

  4. 4

    Read the density column

    Density is that term's share of everything counted. For phrases the denominator is the number of phrase positions, not the word count, so a two-word density is directly comparable with another two-word density.

  5. 5

    Export it

    Download CSV for a spreadsheet, JSON when you want the settings recorded alongside the counts, or plain text to paste somewhere. The export contains every row the filters admit, not just the rows on screen.

What counts as a word here

A frequency table is only as trustworthy as its definition of a word, so this one is written down rather than left to a regular expression nobody reads. A word is a run of letters, digits and combining marks. An apostrophe or a hyphen joins two runs into one word when a word character follows it, so don't, it’s, well-known and state-of-the-art are each a single entry, while dogs' keeps its apostrophe outside the count and end--start stays two words.

The rules, in full

  • Letters and marks travel together. Devanagari matras, Arabic harakat, Hebrew niqqud and decomposed Latin accents are part of the word they attach to, not separators. A counter that treats them as punctuation reports हिन्दी as three fragments.
  • Numbers are optional. Turn them off and 2026, 1,200 and v1.2 stop producing entries, which is what you want in a manuscript and not what you want in a log file.
  • Case is optional. Off by default, so The and the are one word. Switch it on and the counters above the table change with it — unique words and lexical diversity are recomputed, not left showing the case-insensitive answer.
  • Nothing is stemmed. run, runs and running are three entries. Stemming is language-specific and wrong often enough on names and technical terms that a silent guess is worse than an honest split.
  • Sentences end at a terminator plus a space. A full stop between digits or inside a domain does not end a sentence, so 3.14 and example.com stay whole — which matters because phrases are never built across a sentence end.

Phrases: two, three and four words

Single-word frequency finds repeated vocabulary. Phrase frequency finds repeated writing, which is usually the thing you actually wanted to know. Set the phrase length to two and a page that says improve your workflow eleven times stops hiding behind eleven ordinary-looking counts of improve, your and workflow.

Two rules that make the phrase table honest

  • A phrase never crosses a sentence boundary or a line break. "…finish the report. The next step…" cannot produce report the, because nobody wrote it. Every online phrase counter checked while this tool was rebuilt slides its window over the whole document and does produce phrases like that; they are noise at the top of the table, and the shorter the sentences the more of them there are.
  • With stop words on, a phrase is removed only when it starts or ends with one. Interior stop words are kept, so state of the art, point of view and rule of thumb stay in the table while of the and in a leave it. A rule that dropped any phrase containing a stop word would delete all three.

Density, and what a healthy number looks like

Every row carries a density: that term's share of everything counted, as a percentage. For single words the denominator is the word count. For phrases it is the number of phrase positions, which is a smaller number, so a two-word density is comparable with another two-word density and not with a single-word one. The tool does the bookkeeping; the interpretation is the part worth being careful about.

How to read it without fooling yourself

  • There is no correct density. No search engine publishes a target and no threshold separates good writing from bad. A number is only meaningful next to a comparison — the same page before an edit, or a page that already ranks for the same query.
  • A single word above roughly 4–5% in ordinary prose usually means repetition a reader will notice, not an optimisation. Read the sentences before you change anything: the fix is normally rewriting one paragraph, not deleting instances.
  • Long documents dilute everything. A term at 0.4% in a 5,000-word page can be far more prominent than a term at 2% in a 200-word one, because prominence is about placement as much as proportion.
  • Compare like with like. Switch stop words on before comparing two documents, or the comparison mostly measures which one used more articles.

Stop words, and when to switch them off

Stop words are the words a language cannot do without and a frequency table cannot do anything with: articles, pronouns, auxiliaries, copulas, common prepositions and conjunctions. They are the top of every unfiltered list in every language, which is why the filter is on by default.

The lists here cover the closed class properly rather than sampling it — 226 entries for English, 172 for German, 154 for Spanish, 151 for French, 141 for Portuguese and 118 for Indonesian — and each contraction appears in both apostrophe forms, because every word processor produces the typographic apostrophe and a list holding only the ASCII one silently fails on anything pasted out of one. Content words are never on a list, however common they are: time, people and work carry meaning and belong in your table.

Turn them off when

  • You are studying style rather than subject. Function-word rates are the basis of most authorship and readability work, and filtering them removes the signal.
  • The text is not prose — code, logs, CSV columns, subtitle files. A stop-word list built for a language does nothing useful to a column of identifiers.
  • You are working in a language the selector does not cover. Choose None rather than filtering with the wrong language's list, which removes a scattering of unrelated words and looks like it worked.

Why use a word frequency counter?

Because repetition is invisible from the inside. A writer reading their own draft has seen every sentence a dozen times and cannot hear the word they have used on every page; a marketer reviewing a landing page cannot tell whether a phrase reads as emphasis or as padding. A frequency table is the cheapest possible outside opinion.

What it is good for

  • Catching a tic. Every writer has one. Sort by frequency with stop words on and it is usually in the first ten rows.
  • Comparing drafts. Export a table per revision and diff them in a spreadsheet: what rose, what fell, what disappeared entirely.
  • Sketching keyword balance. Not a rank tracker and not a substitute for one, but it answers whether a page is about what you think it is about.
  • Reading a corpus you did not write. Competitor pages, survey responses, support tickets, transcripts. The top forty terms are a summary you did not have to read for.
  • Teaching. The table makes tokenisation, Zipf's law and type-token ratio visible in about ten seconds, on the class's own text.

How to read the table

Six counters sit above the results, and each one answers a different question. They are all computed from the same pass the table is, so they cannot disagree with it — including under case-sensitivity, where the tool this replaced kept reporting the case-insensitive answer.

  • Words. Every token counted, filters not applied. The size of the thing you are looking at.
  • Unique. Distinct entries, honouring the case setting. Together with the first number this is the vocabulary.
  • Sentences. Boundaries found by the same rule the phrase pass uses, so the two can never disagree.
  • Appear once. The hapax count. A high share means varied vocabulary or a lot of proper nouns; a low one means a document that repeats itself.
  • Diversity. Unique divided by total, the type-token ratio. Useful for comparing texts of similar length and misleading across very different ones, because it falls as documents get longer.
  • Filtered out. Occurrences your current filters removed, search included. It is the difference between what was counted and what you are looking at, and it moves when any filter moves.

When to use it

Editing passes, light SEO work, research summaries, classroom demonstrations, and any moment where you have a document and no idea what is in it.

  • Before an editing pass. Find the repeated words and phrases first, then edit with a list in front of you rather than by feel.
  • After a rewrite. Export before and after; the diff tells you whether the rewrite changed the vocabulary or only the sentences.
  • On a competitor's page. Paste the text and read the four-word phrases. It is the fastest way to see the structure someone else chose.
  • On transcripts and subtitles. Drop the .srt or .vtt directly. Timestamps and cue numbers are counted as what they are — numbers — and turning numbers off removes them in one click.
  • On logs. A .log file's top terms are its recurring messages, which is a rough triage you can do before opening a log viewer.

Best practices

Four habits that make the difference between a table and an answer.

  • Look at the phrase view before the word view. Single words are noisier and the interesting repetition is usually two or three words long.
  • Set the minimum occurrences to two before you draw any conclusion. Everything that appears once is vocabulary, not pattern, and on a long document it is most of the table.
  • Keep the raw text. Filters change what you see, never what you have, but a document you edited while reading a filtered table is easy to over-prune.
  • Export as JSON when you intend to compare later. It records the settings and the totals with the rows, and two tables produced under different settings are not comparable however similar they look.

A 10 MB document is counted in about a tenth of a second and a 25 MB one in about a quarter, phrases included, on a mid-range laptop — off the interface thread, so typing never stutters while it works.

Limitations and compatibility

Everything runs on your device, so the ceiling is your device rather than an upload: 25 MB per document on the free plan, and larger on Pro, limited by the memory your browser has available. Files are read as text — .txt, .md, .csv, .tsv, .log, .json, .srt and .vtt. Formats that are really containers are refused at the moment you choose them, with a link to the tool that extracts their text, because a .docx read as text produces a table of markup fragments that looks exactly like a real answer.

What it does not do

  • No stemming or lemmatisation. Surface forms are counted as written.
  • No word segmentation for Chinese, Japanese or Thai. The table is honest about what it measured, but character runs are not words in those scripts.
  • No part-of-speech tagging, so a stop-word list cannot tell the noun that from the conjunction that.
  • No semantic grouping. Synonyms are separate entries, because deciding two words mean the same thing is a judgement, not a count.

Frequently asked questions

How does the word frequency counter work?

It reads your text once, left to right, and builds a table of every distinct word and how many times it appears. A word is a run of letters, digits and marks, optionally joined by an apostrophe or a hyphen, so don't and well-known each count as one word. The table is then filtered, sorted and ranked according to the controls in the settings rail. All of it happens on your device — the text is never sent anywhere.

What are stop words?

Stop words are the closed-class function words a language uses to hold sentences together — the, and, of, is, was, they, from. They dominate any frequency list and say nothing about what a document is about, so switching them off brings the content words to the top. The lists here hold 226 entries for English, 154 for Spanish, 151 for French, 172 for German, 141 for Portuguese and 118 for Indonesian, and they include both apostrophe forms of every contraction, so text pasted out of a word processor is filtered the same as text typed by hand.

What is a two, three or four-word phrase count?

It counts contiguous runs of words rather than single words, which is how you find repeated wording rather than repeated vocabulary. Phrases are never assembled across a sentence boundary or a line break, so the end of one sentence and the start of the next cannot invent a phrase that nobody wrote. When stop words are on, a phrase is dropped only if it begins or ends with one — interior stop words are kept, so state of the art survives while of the does not.

What does the density percentage mean?

Density is a term's share of everything counted, expressed as a percentage. For single words the denominator is the total number of words; for phrases it is the number of phrase positions in the document, so a three-word density can be compared with another three-word density directly. There is no universal target — density is only useful next to a comparison, either against another draft of the same page or against something you already rank for.

What do the minimum length and occurrence filters do?

Minimum word length hides tokens shorter than the value you set, which clears initials and stray letters out of a scanned or converted document. Minimum occurrences hides terms that appear fewer times than the threshold, which is what turns a list of thousands of one-off words into the handful that repeat. Both apply to the first and last word of a phrase rather than to every word inside it, so raising them never deletes a phrase for the sake of a short word in its middle.

Can I export the results?

Yes, on the free plan. CSV opens directly in a spreadsheet and carries a byte-order mark so accented and non-Latin words survive Excel on Windows. JSON records the settings and totals alongside the rows, which is what makes two exports comparable weeks apart. Plain text is the quickest thing to paste into a document. Every export contains every row your filters admit, not only the rows visible on screen.

Is my text private?

Yes. The document is read and counted on your device and no part of it is sent over the network, which you can confirm by opening your browser's network panel while the tool runs. That also means the tool keeps working with no connection once the page has loaded, and that the size of your document is limited by your device rather than by an upload.

How is this different from a word counter?

A word counter gives you totals — words, characters, sentences, reading time. This gives you the distribution: which words, how often, and how that compares with everything else in the document. Use the word counter when you need to hit a length, and this when you need to know what a piece of writing is actually made of.

Does it group run, runs and running together?

No. There is no stemming or lemmatisation, so each surface form is counted separately, and that is deliberate: stemming is language-specific, lossy and frequently wrong on proper nouns and technical terms. If you want the forms grouped, search within the results for the shared stem and read the counts together — the search box accepts a partial word for exactly this.

What about Chinese, Japanese and Thai?

Those scripts do not put spaces between words, so a counter that splits on character class counts runs of characters rather than words. The tool will still produce a table and the counts in it are honest about what they measured, but they are not word counts in the sense a Latin-script document gives you. For those languages a segmenter trained on the language is the right tool, and no browser-side counter is a substitute for one.

4.7out of 5

from 250 ratings

Rate this tool

Tap a star — it takes a second