Output Costs
The Markdown Token Tax
Markdown makes AI answers readable, but every formatting character is a billable token: headers, bold markers, bullet symbols, table pipes, code fences. In a long, heavily formatted response, syntax alone can be 8–12% of the output tokens. The rule of thumb: keep markdown for humans, strip it for machines.
Where the Tax Hides
Formatting characters are invisible to a reader skimming a nicely rendered answer, and very visible to the billing meter. The worst offenders:
- Tables. A markdown table spends tokens on every pipe, every dash in the separator row, and the whitespace used to align columns. A 10-row, 4-column table can carry several hundred tokens of pure scaffolding around a handful of values.
- Nested lists. Deep bullet trees repeat indentation and list markers on every line. Three levels of nesting means every item pays for its ancestry.
- Code fences. Triple-backtick blocks add fence lines and a language tag around content you could often read raw — and models frequently fence things that are not code at all.
- Decorative emphasis.
**bold**on every other phrase, horizontal rules, and header hierarchies four levels deep add tokens without adding meaning.
On a long formatted answer, the difference is measurable: a response that is 4,200 tokens with full markdown formatting typically carries the same content in about 3,700 tokens as plain text. Across heavy output days that gap is worth roughly $90 a year — and more if formatted output gets fed back into the model, where it is billed again as input on every subsequent turn.
Keep Markdown for Humans, Strip It for Machines
The decision rule is about who consumes the output:
- You're reading it? Keep the formatting. Headers and tables genuinely speed up human comprehension, and that value usually exceeds the token cost.
- A script, pipeline, or follow-up prompt consumes it? Ask for plain text. Machines don't benefit from bold. Add "respond in plain text, no markdown" to the prompt, and the syntax tax vanishes at the source.
- Feeding a formatted answer back into the model? Strip it first. This is the highest-value case, because re-pasted output is billed as input on every later turn. Terse's Aggressive mode strips markdown from anything you paste automatically — headers, emphasis markers, and rules removed, short bullet lists folded into sentences, code inside fences left byte-for-byte untouched.
Small Data Doesn't Need a Table
A surprising share of the table tax comes from tables that never needed to exist. Two or three values do not need pipes and a separator row — a sentence is cheaper and just as clear:
Table (≈60 tokens): | Metric | Value | |---------|-------| | Latency | 42ms | | Errors | 0.2% | Sentence (≈14 tokens): "Latency 42ms, error rate 0.2%."
The same instinct applies to output you request: telling the model "answer in one paragraph, no headings" for a simple question routinely halves the response size. Verbose formatted output is also a compounding cost in agent history — the model re-reads its own decorations on every turn. This is the same economics that drives telegraph compression on the input side: strip what carries no meaning, keep everything that does. For how the tokenizer actually prices those # and | characters, see Tokenization 101.
Strip the Syntax Automatically
Terse's Aggressive mode removes markdown overhead from anything you feed back into a model — while never touching the code inside fences. On-device, free to start.
Download TerseFrequently Asked Questions
How many tokens does markdown formatting add?
In long, heavily formatted responses, syntax characters — headers, bold markers, bullet symbols, table pipes, fences — typically account for 8-12% of output tokens. Tables and deeply nested lists are the biggest contributors.
Should I always ask AI models for plain text?
No. Keep markdown when a human reads the answer — formatting aids comprehension. Ask for plain text when the output feeds a script, a pipeline, or another prompt, where formatting is pure cost.
Does stripping markdown risk breaking code blocks?
Not with a rule-based stripper that treats fenced content as immutable. Terse simplifies the fences themselves but never modifies the code inside them — code, quoted strings, and URLs are protected regions.
Further Reading
- Terse Blog — all token optimization guides
- Tokenization 101 — why syntax characters cost what they do
- The Politeness Tax — the input-side equivalent
- Telegraph Compression — maximum reduction for agent sessions