SMOG readability index calculator
The SMOG readability index estimates how many years of education a reader may need to understand a passage.
Run — free
This calculator identifies complete sentences, estimates syllables in English words, counts words with three or more syllables, and applies the standard SMOG formula. It returns the index alongside the sentence, word, and polysyllable counts, making the result easy to inspect. Use it to compare drafts, set an audience target, or check whether public-facing information has become unnecessarily difficult.
What the SMOG result means
SMOG stands for Simple Measure of Gobbledygook, a readability formula designed to estimate the education level needed for a reader to understand English prose. Its central signal is the number of polysyllabic words: words estimated to contain three or more syllables. The formula adjusts that count for the number of sentences and expresses the result as an approximate school-grade level. A score near eight, for example, suggests that the language may suit someone with roughly eight years of formal schooling, while a substantially higher score indicates denser vocabulary. Treat that number as an estimate, not a certification of comprehension. The index does not know whether a technical term is familiar to your audience, whether instructions are logically organized, or whether a sentence explains its ideas well. It measures visible linguistic features consistently. That makes it especially useful for comparing revisions of the same document, monitoring a publishing standard, or spotting sections that deserve a closer editorial review. The supporting counts help explain why the score changed instead of presenting an unexplained grade alone.
How this calculator counts the text
The calculator first identifies sentences that end with a period, question mark, or exclamation mark. It then extracts English words and estimates the syllables in each word with a deterministic spelling heuristic based on vowel groups and common silent endings. A word estimated at three syllables or more contributes one polysyllable to the formula. The SMOG calculation is 1.043 multiplied by the square root of the polysyllable count times thirty divided by the sentence count, plus 3.1291. The result is rounded to two decimal places, and the nearest whole grade is returned as estimated education years. Pronunciation is not perfectly predictable from spelling, so names, acronyms, loanwords, and irregular English words may differ from a dictionary-based count. Hyphenated and apostrophized forms are handled by counting their written parts. Because the same rules run every time without a model or network service, comparisons remain repeatable. Supply clean prose rather than markup, menus, source code, or navigation labels, since unrelated text changes both the sentence denominator and the vocabulary count.
Choose a useful sample and interpret it carefully
The original SMOG procedure is most dependable with a sample of at least thirty sentences, conventionally drawn from different parts of a document. This calculator can still produce an estimate for a shorter passage, but it returns sample_recommended as false so that the limitation remains visible. Short samples are unusually sensitive to a single long word or sentence, and they should not be compared as if they carried the same stability as a full sample. Preserve normal sentence punctuation, because the formula needs a sentence count; text without a complete punctuated sentence is rejected instead of receiving an invented denominator. For a practical editing workflow, measure the current draft, revise long or avoidably specialized wording, and calculate it again. Keep necessary terminology when precision depends on it, then explain that terminology in nearby plain language. Readability is only one part of accessibility: structure, typography, context, prior knowledge, translation quality, and factual accuracy also matter. Use the score as a repeatable signal for review, combine it with human testing when consequences are important, and record the exact sample when tracking changes over time.
What you can do with it
Review public health information
Estimate whether patient instructions use vocabulary that may exceed the intended audience's education level, then send difficult passages for human review.
Compare edited drafts
Run the same section before and after editing to see whether fewer polysyllabic words produce a lower, more approachable grade estimate.
Monitor a content standard
Add a deterministic SMOG check to an editorial workflow and flag documents that exceed an organization's chosen review threshold.
FAQ
What is the SMOG readability formula?
It is 1.043 times the square root of the polysyllable count multiplied by 30 and divided by the sentence count, plus 3.1291.
What counts as a polysyllabic word?
This calculator counts an English word as polysyllabic when its spelling is estimated to contain at least three syllables.
Why are thirty sentences recommended?
SMOG was designed around a thirty-sentence sample. A shorter passage can be scored, but one sentence or complex word has a larger effect on the estimate.
Does the score prove that everyone at that grade will understand the text?
No. It estimates linguistic difficulty and does not measure a reader's background knowledge, the clarity of the ideas, factual accuracy, or document design.
Can I use it for languages other than English?
The syllable heuristic and interpretation are intended for English. Results for other languages are not reliable.
What does the API cost?
Each API request costs $0.002. The same deterministic calculation can run in the browser for free.
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/smog-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Clear instructions help readers act. Complicated terminology can increase cognitive difficulty. Editors revise important documents carefully."}'const res = await fetch("https://api.kit.forhosting.com/str/smog-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Clear instructions help readers act. Complicated terminology can increase cognitive difficulty. Editors revise important documents carefully."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/smog-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Clear instructions help readers act. Complicated terminology can increase cognitive difficulty. Editors revise important documents carefully."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/smog-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Clear instructions help readers act. Complicated terminology can increase cognitive difficulty. Editors revise important documents carefully."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Clear instructions help readers act. Complicated terminology can increase cognitive difficulty. Editors revise important documents carefully."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/smog-index", 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": "Clear instructions help readers act. Complicated terminology can increase cognitive difficulty. Editors revise important documents carefully."
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.smog_index",
"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. |