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.

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.
| Option | Per 1,000 characters | 12,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
- BytePlus Seedance 2.5 plans: how many 30-second 480p clips fit
BytePlus lists Seedance 2.5 plans valid for 3 months with about 120 to 10,000 seconds of 480p video. What that means in 30-second clips, and the Sume side.
- Caption a week of Shorts: the batch cost at $0.20 a clip on Sume
Each standalone Sume caption job reserves $0.20 for videos up to 60 seconds. A week of one, three or five Shorts a day costs $1.40 to $7.00 to caption.
- Captions app credits cost 5 cents each on every paid tier
Max is $24.99 for 500 credits and Frontier 1x is $69.99 for 1,400: both work out to about $0.05 a credit, so the bigger tiers buy volume, not a lower rate.
- Carousel vs 15-second Reel: cost per post and per 30-post month
An 8-slide carousel costs $0.13 on GPT Image 2.5 medium; a finished 15 s Reel $2.31 on Wan 3.0. 30-post month priced three ways, with the full stack.
Written by Sume