The actual billing mechanics behind Amazon Comprehend

Most people look at the AWS pricing page and see a simple per-character rate, then they get confused when their bill doesn't match that math. The reality is that Comprehend has at least five different pricing tiers depending on what APIs you call, and there are hidden multipliers in how character counts are calculated. I learned this the hard way after running a sentiment analysis pipeline on customer support tickets for three months straight.

The base rate for synchronous (real-time) APIs like DetectDominantLanguage and DetectEntities is $0.0001 per character. That sounds trivial until you process 500 million characters a month and suddenly you're looking at $50, just for language detection and entity extraction on raw input. Then there are the asynchronous APIs like DetectSentimentBatch and AnalyzeSyntaxBatch which cost slightly more per character but allow much larger payloads. I found that switching our batch detection workloads from synchronous to async APIs dropped our monthly spend from about $2,300 down to roughly $1,400, and the latency difference was basically irrelevant for our use case since we were processing overnight anyway. Custom entity recognition and custom classification are where the pricing model changes completely. These aren't charged per character. Instead, you pay per training hour for the custom model, plus a higher per-character rate for inference. As of the latest pricing, custom entity recognition inference runs at roughly $0.001 per character, which is ten times the standard entity detection rate. Custom classifier inference sits around $0.0005 per character. I built a custom PII detection model that processed about 80 million characters monthly, and my inference costs alone hit $40,000 a month before I even factored in training time. That number made me seriously reconsider whether Amazon Comprehend was the right tool or if I should have been using a different approach entirely. There are a few non-obvious things that inflate your bill that nobody mentions in the documentation. The first is that Comprehend charges for every character in the input text, including whitespace and special characters. If you're pulling raw JSON from an API and sending the entire payload through Comprehend instead of parsing out just the text fields you need, you're paying to analyze brackets, colons, and newline characters. I once had a dev send me a complaint about a $300 spike on a single day, and when I traced it, the script was passing full JSON objects through the DetectSentiment API instead of extracting the message body field first. Stripping the JSON overhead cut that day's Comprehend costs by about 60 percent.

Another hidden cost is concurrent request limits. The default service quota for most Comprehend APIs is 10 concurrent requests per region. If you're processing large volumes and hitting throttling, you'll either need to request a quota increase through the AWS Service Quotas console or you'll end up queuing jobs and potentially running duplicate calls as fallback attempts. I spent two weeks troubleshooting why our sentiment analysis throughput was plateauing at around 600 requests per minute before someone on the team realized we were hitting the concurrency limit and retrying requests, which doubled our effective charge. The fix was a straightforward quota increase request and a retry backoff strategy that eliminated the duplicate calls. Then there's the cross-region data transfer angle. Comprehend APIs are regional, and if your application is in us-east-1 but your Comprehend calls are going to us-west-2, you're paying for cross-region data transfer on top of the API costs. For text workloads this isn't a huge amount, but it adds up when you're moving hundreds of gigabytes of raw text through the network each month. Keep your Comprehend calls in the same region as your compute layer whenever possible.

Batch vs real-time and why it matters for your bill

Amazon Comprehend offers both synchronous and asynchronous endpoints, and picking the wrong one for your workload can double your costs without any change in accuracy. Synchronous APIs return results immediately but have stricter payload limits of 5,000 bytes per request. Asynchronous APIs accept larger payloads and batch multiple documents in a single submission, which reduces the per-document overhead significantly. The async batch APIs charge the same per-character rate but the effective cost drops because you're eliminating repeated API call overhead for smaller documents. When you send 50 separate 100-byte requests to the synchronous endpoint, you're paying for 50 separate API calls. When you batch those same 50 documents into a single async submission, you're paying for one API call and the same total character count. For document-heavy workloads like analyzing support tickets, contracts, or medical records, the async path is almost always cheaper. I switched our entire document processing pipeline from sync to async and saw a 35 percent reduction in monthly spend with no measurable impact on our output quality.

Get the Full Details

Understanding Amazon Comprehend: AI-Powered Text Analysis Explained ...
Understanding Amazon Comprehend: AI-Powered Text Analysis Explained ...

When Comprehend is the wrong choice

I need to be honest about where this tool falls short. Amazon Comprehend is expensive compared to running your own open-source model on your own infrastructure if you have scale. Once you're processing more than about 200 million characters per month, the math starts favoring a self-hosted solution using something like spaCy, Hugging Face transformers, or T5 fine-tuned on your specific use case. You'd need GPU infrastructure, obviously, but spot instances or reserved GPUs can bring your per-character cost down to fractions of a cent. I moved our custom entity recognition workload to a self-hosted BERT-based model running on preemptible VMs and dropped our monthly text analysis spend from about $42,000 to roughly $3,500. The tradeoff was upfront engineering time and ongoing maintenance, but for sustained high volume it was unavoidable. Another scenario where Comprehend struggles is multilingual text that mixes languages within the same document. The language detection is decent at identifying the dominant language, but if you have code-switching paragraphs where speakers alternate between English and Spanish mid-sentence, the sentiment and entity extraction accuracy drops noticeably. I encountered this with a bilingual customer feedback dataset where about 15 percent of the documents had mixed language content, and the model's confidence scores on entities in those documents were consistently lower than monolingual equivalents. There's no built-in workaround for this in Comprehend, so you'd need to either split the text by detected language first or accept lower accuracy on those documents.

Practical steps to control your costs

The most effective thing I've done to manage Comprehend spending was implementing a two-stage filter. Before sending any text to Comprehend, I run a lightweight local language detection check to filter out documents that are clearly outside our target languages or are too short to be meaningful. Anything under 20 characters or detected as a language Comprehend doesn't support well gets dropped before it ever hits the API. This simple filter eliminated roughly 8 percent of our total character volume that would have been wasted on useless API calls. The second step is cost allocation tagging. AWS allows you to tag Comprehend API usage through the request metadata, and when combined with Cost Explorer's ability to break down service costs by tag, you can see exactly which teams, projects, or pipelines are driving your spend. Without tags, your billing report just shows "AmazonComprehend" as a single line item, which makes it nearly impossible to identify the source of a cost increase. I set up tags for project name, environment, and data source type, and within two weeks we were able to identify a misconfigured pipeline in staging that was accidentally processing production volumes of text. That pipeline alone was accounting for nearly 40 percent of our monthly Comprehend bill. Finally, consider whether you actually need all the features Comprehend offers. Some teams enable PII detection, sentiment analysis, entity recognition, key phrase extraction, and syntax analysis on every document. If you only need sentiment, you're paying for four extra features you never use. Each additional API call is a separate charge, so trimming unused capabilities from your pipeline is one of the fastest ways to reduce your bill. I audited our calls and found we were running DetectEntities on every document even though only about 20 percent of our downstream processes actually consumed entity data. Turning off that call saved roughly $1,800 a month on a single pipeline.