Flesch Reading Ease score calculator for English text
The Flesch Reading Ease calculator turns an English passage into a familiar readability score based on sentence length and syllables per word.
Run — free
Higher scores generally indicate writing that is easier to read, while lower scores point to denser language. Alongside the score, the result shows the sentence, word, and syllable counts used in the calculation, plus a plain-language rating. That detail makes the number easier to audit and helps you decide whether shorter sentences or simpler words could improve a draft.
What the score tells you
Flesch Reading Ease summarizes two measurable features of English prose: the average number of words in each sentence and the average number of syllables in each word. A high score usually corresponds to shorter sentences and familiar, compact words. A low score usually reflects longer sentence structures, longer words, or both. The calculator also assigns the conventional descriptive bands, ranging from Very easy through Standard to Very difficult, so you can interpret the number without memorizing thresholds. Treat that label as a useful signal rather than a verdict on quality. Legal terms, technical names, citations, and necessary specialist vocabulary can lower a score even when a passage is accurate and appropriate for its readers. Conversely, a high score does not guarantee that an argument is coherent, complete, or engaging. Use the result to locate possible friction, then reread the passage in context. The displayed counts make comparison practical: when an edit raises the score, you can see whether the change came from sentence structure, word choice, or both.
How this calculator counts text
The calculation uses the standard Flesch Reading Ease equation: 206.835 minus 1.015 times words per sentence, minus 84.6 times syllables per word. Words are English letter sequences that may include an internal apostrophe or hyphen. Sentences are separated by terminal periods, question marks, or exclamation marks; a passage with words but no terminal punctuation is treated as one sentence. Syllables are estimated locally with a documented English heuristic. It counts vowel groups, handles a usually silent final e, preserves consonant-plus-le endings such as table, and adjusts a small class of pronounced vowel endings. Every word receives at least one syllable. This method is deterministic, fast, and suitable for repeatable comparisons, but syllable estimation is not a pronunciation dictionary. Names, abbreviations, loanwords, dialectal pronunciations, and unusual compounds may be counted differently from the way a particular speaker says them. Because the exact sentence, word, and syllable totals are returned, you can spot surprising results and understand precisely which inputs produced the score.
How to improve readability responsibly
Start by measuring a complete passage that represents what your reader will actually encounter. If the score is lower than your target, inspect the longest sentences first. Splitting one overloaded sentence can help more than replacing every long word, especially when that sentence contains several independent ideas. Next, replace abstract phrases with direct verbs and remove qualifications that do not change the meaning. Keep necessary technical vocabulary and define it where it first appears; swapping an exact term for a vague short word can make the score rise while making the content less useful. Compare revisions of the same document instead of treating scores from unrelated genres as a competition. A product tutorial, academic abstract, contract, and children’s story serve different audiences and should not share one universal target. Automated workflows can call the API for $0.002 per item to flag drafts that merit human review, while the browser version supports quick individual checks. Pair the score with editorial judgment, reader feedback, accessibility checks, and subject expertise before publishing. Readability is one dimension of communication, not a substitute for correctness or purpose.
What you can do with it
Review public guidance
Check whether instructions use manageable sentence lengths and words for a broad audience before publication.
Compare draft revisions
Measure the same passage before and after editing to see how structural and vocabulary changes affect readability.
Add an editorial signal
Use the score and component counts in a content pipeline to route unusually dense drafts for human review.
FAQ
What is a good Flesch Reading Ease score?
It depends on the audience and genre. Scores from 60 to 70 are conventionally labeled Standard, but specialist writing may appropriately score lower.
Can the score be above 100 or below zero?
Yes. The formula is not clamped, so very simple text can exceed 100 and especially dense text can fall below zero.
How are syllables counted?
A deterministic English vowel-group heuristic handles common silent-e and consonant-plus-le patterns. It is repeatable but may differ from dictionary pronunciation for names or unusual words.
Does punctuation affect the result?
Terminal periods, question marks, and exclamation marks determine sentence boundaries. Other punctuation may separate words but does not create a new sentence.
How much does the API cost?
Each item costs $0.002. You can also run an individual calculation in the browser.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/str/flesch-reading-ease \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"The cat sat on the mat. It was a sunny day."}'const res = await fetch("https://api.kit.forhosting.com/str/flesch-reading-ease", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "The cat sat on the mat. It was a sunny day."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/flesch-reading-ease",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "The cat sat on the mat. It was a sunny day."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/flesch-reading-ease", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"The cat sat on the mat. It was a sunny day."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"The cat sat on the mat. It was a sunny day."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/flesch-reading-ease", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "The cat sat on the mat. It was a sunny day."
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.flesch_reading_ease",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_chars | 100000 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |