Why DeepL's API Pricing Doesn't Scale
An analysis of DeepL API pricing at scale, its hard limits, missing features, and when it makes sense to look at alternatives.
DeepL makes excellent translations. For European languages, it's probably the best NMT engine available. But "best quality" and "best choice for my product" aren't the same thing. Here's where DeepL's API starts to crack.
The Pricing Cliff
DeepL API Pro costs $25 per million characters. That's 25% more than Google Translate ($20/1M) and 67% more than Amazon Translate ($15/1M).
At low volume, this premium is barely noticeable. Translating 2 million characters per month? That's a $50 bill from DeepL vs $40 from Google. Not worth thinking about.
At scale, it's a different story:
| Monthly volume | DeepL | Google | Amazon | Difference (DeepL vs cheapest) | | -------------- | ------- | ------- | ------ | ------------------------------ | | 5M chars | $125 | $100 | $75 | +$50 | | 20M chars | $500 | $400 | $300 | +$200 | | 100M chars | $2,500 | $2,000 | $1,500 | +$1,000 | | 500M chars | $12,500 | $10,000 | $7,500 | +$5,000 |
At 500M characters per month (a realistic volume for a content platform with multiple languages), you're paying $5,000/month more than Amazon Translate for translation quality that, frankly, most users won't notice on the majority of strings.
The Free Tier Is a Dead End
DeepL's free tier gives you 500,000 characters per month. Sounds fair. But there are strings attached:
- The free tier uses a different API endpoint (
api-free.deepl.comvsapi.deepl.com) - It has stricter rate limits
- It has lower priority — requests can be slower during peak times
- You cannot upgrade from Free to Pro seamlessly. You get a different API key. If you hardcoded the free endpoint anywhere, you're rewriting it.
// Don't do this
const DEEPL_URL = "https://api-free.deepl.com/v2/translate";
// Do this instead
const DEEPL_URL = process.env.DEEPL_API_URL; // swap via env var
Missing Features That Matter
No built-in caching
DeepL doesn't cache your translations. Translate "Save changes" to German today, translate it again tomorrow, and you pay for both requests. If your CI/CD pipeline runs translations on every deploy, you're paying for identical work repeatedly.
You'll build a caching layer. Everyone does. But that's engineering time and infrastructure you're maintaining.
No context parameter
DeepL translates text in isolation. You can set formality (formal/informal) for some languages, which is nice. But you can't tell it "this is a button label" or "this is an error message" or "this string appears after the user's name."
Context changes translation. "Close" as a button label should translate differently than "close" as an adjective. DeepL has no way to know which one you mean unless you happen to provide enough surrounding text.
No BYOK (Bring Your Own Key)
If you want to use your own LLM API key (say, an OpenAI key through a translation API), DeepL doesn't support that model. You're locked into their NMT engine. Services like auto18n let you bring your own API keys, so you control the underlying model and costs.
Limited batch translation
DeepL supports sending multiple texts in one request, but there's a request size limit of 128KB. For large-scale batch jobs — translating a database of 100K strings — you need to chunk requests yourself and handle rate limiting.
The Rate Limit Problem
DeepL doesn't publish specific rate limits for Pro accounts. Their documentation says "reasonable usage" and warns against "excessive requests." In practice, I've seen throttling kick in around 50-80 requests per second.
For bulk translation, this matters. If you need to translate 100,000 strings:
- At 50 requests/second with 1 string per request: ~33 minutes
- At 50 requests/second with 50 strings per request: ~40 seconds
Retry-After header that can be 1-60 seconds. Your bulk job just stalled.
Google Cloud Translation has explicit quotas (600K chars/minute default, requestable increases) which are easier to plan around. You know exactly what you're getting.
Where DeepL Still Wins
I don't want to be unfair. DeepL has genuine strengths:
Translation quality for European languages. If your product's main markets are Germany, France, Spain, Netherlands, or Poland, DeepL produces the most natural translations of any NMT service. Period.
Formality control. The formality parameter (available for German, Dutch, Polish, Portuguese, and a few others) lets you switch between formal and informal register. This is actually useful for product copy.
import deepl
translator = deepl.Translator("YOUR_KEY")
# Informal (du/ihr)
result = translator.translate_text(
"How are you?",
target_lang="DE",
formality="less"
)
print(result.text) # "Wie geht's dir?"
# Formal (Sie)
result = translator.translate_text(
"How are you?",
target_lang="DE",
formality="more"
)
print(result.text) # "Wie geht es Ihnen?"
Document translation. DeepL can translate entire documents (PDF, DOCX, PPTX) and preserve formatting. The quality is good and the workflow is simpler than Google's Document AI pipeline.
Simple auth. An API key in a header. No cloud provider setup, no IAM roles, no service accounts.
When to Look for an Alternative
You should consider replacing DeepL when:
- Your monthly translation volume exceeds 50M characters and cost matters
- You need more than 33 languages
- You're re-translating the same content repeatedly and need built-in caching
- You need context-aware translation (product copy, UI strings that change meaning based on usage)
- You want to use your own LLM API keys for translation
Google Translate — if you need more languages and lower per-character cost, and can tolerate the GCP setup.
Amazon Translate — if cost is the primary driver and you're on AWS.
auto18n — if you want LLM-quality translation with context, automatic caching, and a simpler developer experience. The caching alone can bring your effective per-character cost well below DeepL's rate.
Self-hosted LLM translation — if you have the infrastructure and want full control. Running an open-source model like NLLB-200 gives you unlimited translations at the cost of GPU compute.
The Bottom Line
DeepL is a premium product at a premium price. The quality premium is real for European languages, but it's not a premium that scales well. At 100M+ characters per month, you're paying $500+/month more than alternatives for a quality difference that's measurable but rarely business-critical.
If you're early stage and your main markets are European, start with DeepL. The quality will make your product feel more polished. But plan your architecture to be API-agnostic — use an abstraction layer so you can swap providers without touching business logic. You'll thank yourself later.