Part 6 of 7 · Receipt organizer series ~3 min read

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

Monthly cost at three receipt volumes, broken out by component A horizontal stacked-bar chart showing monthly cost in US dollars at three receipt volumes. The leftmost bar represents 200 receipts a month and shows a total around $3, split between a Textract slice (reading each receipt), a Bedrock slice (categorizing each receipt and the monthly summary), a small fixed slice, and an everything-else slice for Lambda, DynamoDB, S3, SQS, SES, and CloudWatch. The middle bar represents 500 receipts and shows a total around $7, with Textract and Bedrock both growing roughly linearly with the number of receipts because both fire once per receipt. The rightmost bar represents 2,000 receipts and shows a total around $26, with Textract the largest slice; the everything-else bucket stays small because Lambda and DynamoDB work per receipt is tiny. Below the chart is a legend explaining the four sections of each bar: Textract (reads every receipt), Bedrock (categorizes every receipt plus the monthly summary), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, SQS, SES inbound, and CloudWatch. A note at the bottom: the cost scales with receipts, not with a daily sweep — and per receipt it is a couple of cents. $0 $10 $20 $30 $40 200 receipts ~$3 500 receipts ~$7 2,000 receipts ~$26 Textract (reads every receipt) Bedrock (categorize each + monthly summary) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, SQS, SES, CloudWatch) The cost scales with receipts, not a daily sweep — and per receipt it is a couple of cents.
Fig 6. Monthly cost at three receipt volumes. Textract and Bedrock are the slices that grow, because both fire once per receipt. The everything-else bucket stays small — the Lambda and database work per receipt is tiny.

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