# Email Word Counter and Structure Analyzer

> Count subject, preheader, and visible body copy separately; estimate body reading time with an editable rate; inspect sentence and paragraph load, repetition, links, CTA-like anchors, images, missing alt text, headings, lists, and supplied HTML size. Use the metrics as editorial evidence, not as a quality or engagement score.

- **Canonical page:** [https://emailbump.com/tools/email-word-counter](https://emailbump.com/tools/email-word-counter)
- **Interactive tool:** [Open the email word counter](https://emailbump.com/tools/email-word-counter)
- **Category:** Email writing and structure
- **Updated:** July 2026
- **Privacy:** Parsing, counting, and exports run locally in the browser
- **Input modes:** Plain text and HTML

## The central principle

Word count measures volume. It does not measure value.

A short email can fail because it omits information the recipient needs. A long email can succeed because readers deliberately subscribed for detailed analysis. The useful question is not:

> What is the universally ideal email word count?

It is:

> Does this message contain the necessary information and action in a structure that this audience can navigate?

The tool therefore avoids a quality score and does not claim that a generic word range predicts:

- Open rate
- Click-through rate
- Conversion
- Reply rate
- Revenue
- Complaints
- Deliverability
- Inbox placement
- Reader satisfaction

It reports the artifact's measurable shape and preserves every assumption.

## What the interactive tool accepts

The operator supplies:

- Editorial intent
- Plain-text or HTML source mode
- Subject
- Preheader
- Complete body source
- Reading-rate assumption
- Lower and upper house planning-band values

All metrics update locally as the source changes.

## Editorial intents

The built-in intents are:

- Promotion
- Newsletter
- Welcome
- Transactional
- Outreach
- Custom

Selecting an intent loads an initial planning band.

These ranges are editorial starting points. They are not universal performance benchmarks and are not presented as research-backed guarantees.

### Promotion

Initial planning band:

```text
50–150 visible body words
```

The prompt assumes one focused offer and action. A complex regulated product, material terms, eligibility, or required disclosures can justify more.

### Newsletter

Initial planning band:

```text
200–700 visible body words
```

Readers can reasonably expect more editorial substance from a briefing or publication. Some newsletters should be shorter; some intentionally publish complete essays.

### Welcome

Initial planning band:

```text
120–350 visible body words
```

The message can orient the recipient, set expectations, and provide a first useful action. A welcome series can distribute this work across several messages.

### Transactional

Initial planning band:

```text
30–180 visible body words
```

Essential event details should appear first. The real necessary length depends on the transaction, security context, required instructions, and support path.

### Outreach

Initial planning band:

```text
40–160 visible body words
```

The prompt assumes one relevant request, recognizable identity, and enough context for the recipient to evaluate it.

It does not imply that unsolicited outreach is wanted, lawful, or permitted by platform policy.

### Custom

Initial planning band:

```text
0–500 visible body words
```

The operator can replace both boundaries with house values.

## Planning-band logic

The planning band applies only to visible body words.

The lower and upper values are sorted before comparison, so entering them in reverse order does not create an invalid calculation.

States are:

- **Below:** body word count is lower than the smaller boundary
- **Within:** body word count is between the boundaries, inclusive
- **Above:** body word count is higher than the larger boundary

The interface reports the exact difference.

Examples:

```text
Band: 50–150
Body: 42
State: 8 words below
```

```text
Band: 50–150
Body: 106
State: within
```

```text
Band: 50–150
Body: 173
State: 23 words above
```

No points are added or deducted.

## Why subject, preheader, and body are separate

The subject and preheader exist in the inbox before the recipient opens the body.

Combining all three into one number hides the surfaces an editor needs to evaluate independently.

### Subject

The report includes:

- Word count
- Unicode character count
- Exact text

Use the count with:

- Accuracy
- Sender recognition
- Inbox truncation scenarios
- Relationship to preheader
- Message purpose
- Thread framing

### Preheader

The report includes:

- Word count
- Unicode character count
- Exact text

A useful preheader continues or clarifies the subject. Repeating the subject consumes limited preview space without adding information.

### Visible body

The body drives:

- Planning-band state
- Reading-time estimate
- Sentence analysis
- Paragraph analysis
- Frequency analysis
- Character counts
- Structural HTML evidence

## Word tokenization

The tokenizer recognizes:

- Unicode letters
- Unicode numbers
- Internal apostrophes
- Curly apostrophes
- Internal hyphens
- HTTP and HTTPS URLs

Examples treated as one token:

```text
customer's
recipient’s
follow-up
https://example.com/guide
```

Punctuation surrounding an ordinary word is not part of the token.

This is an editorial tokenizer, not a linguistic model for every language.

Languages that do not separate words with spaces, complex scripts, emoji sequences, abbreviations, and specialized notation can require different segmentation.

## Character counts

Visible body characters are counted through Unicode code points rather than JavaScript UTF-16 code units.

The report includes:

- Characters including spaces
- Characters after removing whitespace

Subject and preheader character counts use the same code-point approach.

Grapheme clusters can still contain more than one code point. A visually combined emoji or accented character can therefore count differently from what a user perceives as one symbol.

The tool does not claim exact inbox-client truncation from character count. Font, width, device, client, sender text, and UI affect visible space.

Use the [subject and preheader previewer](https://emailbump.com/tools/subject-line-previewer.md) for width scenarios.

## Reading-time calculation

Reading time uses visible body words only.

The exact formula is:

```text
seconds = ceil(body words / selected words per minute × 60)
```

The default rate is:

```text
225 words per minute
```

The operator can choose:

```text
120–350 words per minute
```

in five-word increments.

Examples:

```text
90 body words at 225 words/minute
= ceil(90 / 225 × 60)
= 24 seconds
```

```text
600 body words at 200 words/minute
= ceil(600 / 200 × 60)
= 180 seconds
= 3 minutes
```

The formatter reports:

- Seconds below one minute
- Minutes and remaining seconds above one minute
- Whole minutes when there is no remainder

It does not round every short message up to “1 minute read.”

## Reading-time limitations

The estimate does not account for:

- Language
- Familiarity
- Technical complexity
- Numerals
- Tables
- Code
- Scanning
- Rereading
- Accessibility technology
- Cognitive load
- Link-following
- Image interpretation
- Recipient distraction
- Mobile rendering

The selected rate is preserved in JSON so another reviewer can reproduce the calculation.

## Plain-text mode

Plain-text mode analyzes the supplied source directly.

It extracts:

- Visible words
- HTTP and HTTPS URLs
- Paragraphs separated by blank lines
- Directional list items beginning with bullets, hyphens, asterisks, or numbered markers

Plain-text mode reports:

- Zero HTML images
- Zero missing-alt findings
- Zero HTML headings
- Zero CTA-like anchor labels

A plain URL can be a call to action, but the tool does not infer intent from an unlabeled URL.

## HTML mode

HTML mode uses the browser's DOM parser.

Before extracting text, it removes:

- `script`
- `style`
- `template`
- `noscript`
- `head`

It converts:

- `br` to a line break
- Common block elements to text boundaries

Block elements include:

- Paragraphs
- Divisions
- Headings
- List items
- Block quotes
- Table rows

This preserves more editorial structure than reading one flat `textContent` string.

## HTML structure evidence

The tool separately counts:

- Anchors with href values
- CTA-like anchor labels
- Images
- Images missing an `alt` attribute
- Headings from h1 through h6
- List items
- Supplied source bytes

### Links

Each link record preserves:

- Visible label
- href value
- Source order

Unlabeled links are reported explicitly.

The tool does not:

- Fetch the destination
- Follow redirects
- Check HTTP status
- Inspect tracking rewrites
- Determine destination reputation
- Prove that the URL is safe

### CTA-like links

CTA-like detection is directional.

It recognizes link labels containing configured action terms such as:

- Buy
- Shop
- Start
- Try
- View
- Review
- Get
- Download
- Register
- Book
- Learn
- Read
- Upgrade
- Confirm
- Activate

A link can be a CTA without these words, and a matched word can appear in a non-CTA link.

The report calls them **CTA-like links**, not definitive calls to action.

### Images and alt attributes

HTML mode counts image elements and reports how many lack an `alt` attribute.

An empty alt attribute can be appropriate for a decorative image and is not classified as missing.

The check does not determine:

- Whether alt text is useful
- Whether an image is decorative
- Whether live text duplicates image text
- Whether CSS background images need another treatment
- Whether the final message is accessible

### Headings

The count includes h1 through h6.

It does not evaluate:

- Heading order
- Visual-heading styles on non-heading elements
- Accessibility tree
- Client transformations

### List items

The count includes HTML `li` elements.

Lists can improve scanning when the items are genuinely parallel. Breaking every sentence into a bullet does not automatically improve comprehension.

### Source bytes

Source size is calculated with:

```text
new TextEncoder().encode(source).length
```

This is the UTF-8 byte size of the supplied body source.

It is not:

- Full MIME message size
- Transfer-encoded size
- Total image download weight
- Compiled-template size
- Provider-rewritten size
- Gmail clipping proof

A dedicated email-size tool should analyze the final compiled message and encoding overhead.

## Sentence splitting

The tool creates sentence boundaries directionally using:

- Period
- Exclamation mark
- Question mark
- Following whitespace
- A plausible uppercase, numeric, or quoted sentence start

It replaces line breaks with spaces before splitting.

This method can make mistakes around:

- Abbreviations
- Initials
- Decimal numbers
- Domain names
- Ellipses
- Lowercase stylistic openings
- Languages without the same punctuation conventions

Every detected sentence appears in a ledger with its exact text and word count.

## Sentence ledger

The ledger uses descriptive emphasis:

- 0–20 words: no emphasis
- 21–28 words: medium visual emphasis
- More than 28 words: stronger visual emphasis

These are review prompts.

A sentence longer than 28 words is not automatically bad. Legal language, precise technical explanation, and intentional rhythm can require more. A short sentence can still be confusing.

The report also includes:

- Average sentence words
- Exact longest sentence
- Longest-sentence word count

## Paragraph analysis

Paragraphs are split on one or more blank lines after visible HTML block extraction.

The report includes:

- Paragraph count
- Word count for each paragraph
- Directional sentence count for each paragraph
- Average paragraph words
- A relative bar chart for the first 12 paragraphs

The longest paragraph receives the full-width bar. Other bars are proportional.

The chart is relative to this message and does not compare against an external benchmark.

## Word-frequency analysis

The analyzer:

1. Lowercases visible body tokens
2. Removes surrounding non-letter and non-number characters
3. Excludes tokens shorter than three characters
4. Excludes a disclosed English stop-word list
5. Excludes HTTP and HTTPS tokens
6. Counts remaining terms
7. Sorts by count, then alphabetically
8. Returns the first ten

Each record includes:

- Word
- Count
- Share relative to the most frequent content word

The bar shows relative count. It does not show percentage of all words.

Frequency helps locate:

- Accidental repetition
- Overused product terms
- Inconsistent terminology
- The dominant topic

Repeated words can be useful for clarity and identity. Frequency is not a penalty.

## Lexical variety

Lexical variety is:

```text
unique normalized body tokens / all normalized body tokens
```

Example:

```text
Tokens: send email send clearly
Unique tokens: send, email, clearly
Variety: 3 / 4 = 0.75 = 75%
```

Short messages naturally produce different ratios from long messages.

The metric is descriptive and should not be used as a writing-quality target.

## Long-word count

The JSON export includes the number of normalized body words containing 12 or more Unicode code points.

The UI does not turn that count into a score.

A long word can be the clearest correct term, especially for:

- Product names
- Technical concepts
- Legal terms
- Medical language
- Languages with compound words

## Built-in examples

### Focused offer

HTML example containing:

- Specific subject
- Complementary preheader
- One heading
- One action link
- Supporting list
- Reply-based support path

It demonstrates visible-text extraction and structural evidence.

### Newsletter

Plain-text example containing:

- Several substantial paragraphs
- Delivery and migration guidance
- One complete URL
- A reply request

It demonstrates paragraph distribution and word frequency.

### Receipt

Plain-text example containing:

- Order-specific subject
- Payment preheader
- Compact transaction details
- Receipt URL
- Support instruction

It demonstrates a short message whose value depends on information completeness rather than marketing-copy length.

## Exported JSON

The JSON handoff includes:

- Tool canonical URL
- Analysis timestamp
- Editorial intent
- Source mode
- Complete subject
- Complete preheader
- Complete body source
- Reading-rate assumption
- Planning-band boundaries
- Subject word count
- Preheader word count
- Body word count
- Total field word count
- Visible-body characters
- Visible-body characters without spaces
- Sentence count
- Paragraph count
- Unique-word count
- Long-word count
- Source bytes
- Reading seconds
- Exact timing formula
- Average sentence words
- Longest sentence
- Average paragraph words
- Lexical variety
- Sentence ledger
- Paragraph ledger
- Top content words
- Link ledger
- Image count
- Missing-alt count
- Heading count
- List-item count
- CTA-like link count
- Planning-band state
- Extracted visible body text
- Method limitations

## Copy actions

### Copy text

Copies the extracted visible body text.

This is useful for:

- Plain-text fallback drafting
- Review handoff
- Comparing source with visible content

It is not a complete production-quality HTML-to-text conversion. Link destinations can be lost when anchor labels differ from href values.

### Copy brief

Copies a compact editorial summary with:

- Intent
- Field counts
- Reading time and rate
- Sentence and paragraph averages
- HTML/text structure
- Planning-band state
- Boundary statement

### Copy JSON

Copies the complete structured report.

### Download

Downloads the same report as:

```text
email-copy-analysis.json
```

## Building house planning bands

Generic advice should be replaced with comparable internal evidence.

### 1. Separate message jobs

Analyze distinct groups such as:

- Receipt
- Password reset
- Security alert
- Welcome message
- Product announcement
- Promotion
- Editorial newsletter
- Sales outreach
- Renewal notice
- Incident update

Do not average all email into one “ideal.”

### 2. Preserve artifact metrics

Record:

- Visible body words
- Reading-rate assumption
- Sentences
- Average and longest sentence
- Paragraphs
- Average and largest paragraph
- Links
- CTA-like links
- Images
- Headings
- Lists
- Template and source identifiers

### 3. Choose an outcome connected to the job

Examples:

- Receipt: task completion and support contacts
- Security alert: account-review completion
- Promotion: qualified clicks and downstream conversion
- Newsletter: engaged clicks, replies, and retention
- Welcome: activation milestone
- Outreach: relevant positive replies

Open rate is normally determined before body length can influence recipient behavior and is affected by measurement limitations.

### 4. Control major differences

Copy-length comparisons can be confounded by:

- Audience
- Offer
- Sender
- Subject
- Timing
- Frequency
- Seasonality
- Creative
- Landing page
- Deliverability
- List source

### 5. Repeat tests

A single test can be noise.

Use the [email A/B test calculator](https://emailbump.com/tools/email-ab-test-calculator.md) to review effect intervals, practical lift, sample balance, and planned sample size.

### 6. Set a working band

Use the range to:

- Start editorial conversations
- Catch accidental template growth
- Compare variants
- Explain exceptions
- Maintain consistency

Do not use it to block necessary information.

## Important limitations

The tool cannot:

- Determine ideal length
- Score writing quality
- Predict engagement
- Predict deliverability
- Predict inbox placement
- Understand every language
- Perfectly segment every sentence
- Emulate every email client
- Render conditional Outlook markup
- Compile templates
- Expand personalization
- Fetch remote content
- Calculate complete MIME size
- Test links
- Validate accessibility
- Identify every CTA
- Determine whether repetition is intentional
- Assess factual accuracy
- Assess legal compliance

## Frequently asked questions

### What is the ideal email length?

There is no universal ideal. The message job, necessary information, audience expectation, hierarchy, and comparable outcome data should determine a planning range.

### Are the preset bands benchmarks?

No. They are editable editorial starting points.

### Does reading time include subject and preheader?

No. It uses visible body words only.

### How is reading time calculated?

The body word count is divided by the selected words-per-minute rate, multiplied by 60, and rounded up to the next second.

### Why is the reading rate editable?

Reading speed varies. An explicit editable assumption is more useful than hiding one fixed value.

### Does HTML code count as words?

No. HTML mode removes non-visible source categories and extracts body text.

### Does alt text count as visible body copy?

Not in the current tokenizer. Image alt attributes are inspected for presence but are not added to visible body words.

### Do URLs count as one word?

Yes. Each detected HTTP or HTTPS URL is one directional editorial token.

### Is a 29-word sentence bad?

Not automatically. It receives stronger visual emphasis so an editor can decide whether the load is justified.

### What is lexical variety?

Unique normalized body tokens divided by all normalized body tokens.

### Does shorter email improve deliverability?

Word count alone does not establish deliverability. Authentication, reputation, complaints, recipient expectation, links, content, message structure, sending behavior, and receiver policy can matter.

### Can the tool convert HTML to production plain text?

It can copy extracted visible text, but a production converter should preserve meaningful link destinations and intentional layout.

### Does source byte size predict Gmail clipping?

No. It measures only the supplied body source before template compilation, MIME construction, transfer encoding, and provider rewriting.

## Related tools and guidance

- [Subject line and preheader previewer](https://emailbump.com/tools/subject-line-previewer.md)
- [Email preheader generator](https://emailbump.com/tools/email-preheader-generator.md)
- [Spam-language and content risk reviewer](https://emailbump.com/tools/spam-trigger-word-checker.md)
- [Email A/B test calculator](https://emailbump.com/tools/email-ab-test-calculator.md)
- [Email signature builder](https://emailbump.com/tools/email-signature-builder.md)
- [Transactional subject-line guide](https://emailbump.com/blog/transactional-email-subject-lines.md)
- [Writing better subject lines](https://emailbump.com/blog/write-better-subject-lines.md)
- [Designing an effective welcome email](https://emailbump.com/blog/design-effective-welcome-email.md)
- [Transactional versus marketing email](https://emailbump.com/blog/transactional-vs-marketing-email.md)
- [Email editor documentation](https://emailbump.com/docs/editor.md)
