What the receipt organizer costs
The organizer is one of the cheaper systems in this whole series, but it has a twist the others don’t: it does real work on every single receipt — reading it with Textract and categorizing it with a small AI model. So unlike a system that sweeps a list once a day, this one’s cost grows with how many receipts you send. The good news is that per receipt the cost is fractions of a cent, so at typical small-business volume the bill is still a few dollars a month, fixed cost essentially zero.
Key takeaways
- Around $3/month at typical SMB volume (roughly 200 receipts a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- Textract is the line that grows with receipts — a cent or two each.
- Bedrock Haiku fires once per receipt to categorize, and once a month for the summary.
- At 500 receipts the bill is around $7. At 2,000 receipts it’s around $26.
Cost at three volumes
Where the dollars actually go
Textract (the line that grows). Every receipt is read once with Textract’s receipt-and-invoice feature. The price is per page, and a receipt is almost always one page. At a cent or two per receipt, 200 receipts a month is a couple of dollars; 2,000 receipts is the largest single line on the bill. This is the cost of the system doing the actual reading you’d otherwise do by hand — and it’s the cheapest part of the whole job.
Bedrock Haiku 4.5. Two callsites. The big one is categorizing — one small call per receipt that doesn’t match a vendor hint. The input is the read fields and the chart of accounts (a few hundred tokens), and the output is one category, a reason, and a score (a few dozen tokens), so it’s a fraction of a cent each. Because the vendor-hint lane handles the regulars with no AI call at all, the share of receipts that reach the model shrinks over time. The second callsite is the monthly summary: one larger call that writes a short spend-by-category note. A couple of cents a month.
Lambda runtime. The capture, reader, categorizer, filing, and action-handler Lambdas each do a small amount of work per receipt — pull an image, call Textract, call Bedrock, write a row. Each runs for a second or two. Across all of them, the Lambda total stays under a dollar even at 2,000 receipts.
DynamoDB on-demand. Three small tables: ro-receipts, ro-review, ro-audit. A handful of reads and writes per receipt. Pennies a month at any of these volumes.
S3 + storage. The stored receipt images, filed by month, plus the raw inbound email. A receipt image is small; even 2,000 a month is a modest amount of storage. A few cents.
SQS and SES. The intake queue is essentially free at this scale. SES inbound for the email-forward lane is $0.10 per thousand messages received — cents a year for an SMB.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the upload and review-action endpoints.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. Everything runs only when a receipt arrives.
- A Knowledge Base. Categorizing picks from a short, structured chart of accounts — a small prompt beats vector search here. No embeddings, no Knowledge Base, no S3 Vectors needed.
- A heavy model on every receipt. Categorizing is a small, well-framed job, so it uses the cheap, fast Haiku model — not a larger one.
How the cost scales
Textract and Bedrock both grow roughly linearly with the number of receipts, because both fire once per receipt. So the bill at 5,000 receipts a month is around $65; at 10,000 it’s around $130. The everything-else bucket barely moves — the database and Lambda work per receipt is tiny. The one lever that lowers cost is the vendor-hint list: every receipt that matches a hint skips the Bedrock call entirely, so a business that trains its hints well over a few months sees the Bedrock slice shrink even as receipts climb.
Set an AWS Budgets alarm at $30/month for a typical SMB so anything unusual pages you before the bill matters — raise the ceiling if your receipt volume is genuinely high. The normal-volume bill stays well under that line.
Last post in the series: the engineering reference. Same system, drawn for engineers — service names, Lambda inventory, IAM scopes, DynamoDB schemas, SES rule set, and the queue and Function URL config.
All posts