Blog post to audio: what a 2,000-word article costs in TTS

A 2,000-word article is about 12,000 characters. That is $0.18 on OpenAI tts-1, $0.96 on ElevenLabs v3, and $0.57 on Sume. Prices read 2026-10-03.

4 min readSume
All posts

Turning a blog post into an audio version is a common request. What does it cost? Assume a 2,000-word article and about 6 characters per word including spaces and punctuation, which is an assumption, not a measurement; count your own text. That gives 12,000 characters.

Sume's TTS endpoint takes up to 20,000 characters per request, so this article fits in one call. Characters are billed including spaces and punctuation, at $0.0475 per 1,000, per Sume's catalog.

The price per vendor

Vendor rates are from each company's page, read 2026-10-03: OpenAI's pricing and ElevenLabs' API pricing.

Cost to voice 12,000 characters (vendor lists read 2026-10-03)
OptionPer 1,000 characters12,000 characters
OpenAI tts-1$0.015$0.18
OpenAI tts-1-hd$0.030$0.36
ElevenLabs Flash/Turbo$0.04$0.48
Sume TTS$0.0475$0.57
ElevenLabs v4 launch price (to Oct 12)$0.022$0.26
ElevenLabs v3 or v4 list$0.08$0.96

A weekly publishing budget

Publishing one article a week for a year is 52 articles, or 624,000 characters. On Sume that is $29.64 a year. On OpenAI tts-1 it is $9.36 and on ElevenLabs v3 it is $49.92. For a single publication the voice bill is small whichever you choose.

The better question is what the audio is for. An audio version on a page is one thing; a video with narration and visuals is another, and the video's cost dwarfs the voice. A 60-second narrated clip needs about 800 characters, or $0.038 on Sume.

Edge cases

Articles with code blocks, tables or long URLs should be cleaned before sending: you are billed per character, so the text you do not want read aloud still costs money. Strip it first. Articles over 20,000 characters need splitting across requests on Sume.

Count characters and price the call with this snippet.

text = 'Replace this with your article text. ' * 300
chars = len(text)
print(f'{chars} characters')
print(f'sume: ${chars / 1000 * 0.0475:.3f}')
print(f'openai tts-1: ${chars / 1000 * 0.015:.3f}')
print('one request OK' if chars <= 20000 else 'split into several requests')

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume