What the invoice chaser costs
The chaser is one of the cheapest systems in this whole series. The daily tick reads a CSV from S3, does some date arithmetic, writes a few rows to DynamoDB, and sends a handful of emails. It calls no models on the tick. Bedrock fires only when somebody forwards an invoice PDF and once a month for the cash-flow summary. At typical SMB volume, the bill is a couple of dollars a month, fixed cost essentially zero — against the working capital it frees up by getting you paid faster.
Key takeaways
- Around $2.40/month at typical SMB volume (around 200 open invoices).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- The daily tick costs pennies — no model calls.
- Bedrock fires only on inbound PDF parsing (a few times a month) and the monthly summary.
- At 500 open invoices the bill is around $5. At 2,000 invoices it’s around $13.
Cost at three volumes
Where the dollars actually go
Lambda runtime (the bulk). The chaser runs once a day. Each tick reads the invoice CSV from S3, iterates the rows, computes days_past_due for each, and decides on a move. At 200 invoices, that’s a few hundred milliseconds. At 2,000 invoices it’s a couple of seconds. Either way it’s pennies a month. Add the sender Lambda firing for each reminder (around twenty to sixty sends a month at 200 invoices, a few hundred at 2,000), the Function URL Lambda for pay-links and owner actions, the webhook Lambda for new invoices, and the drive-sync Lambda every fifteen minutes — the Lambda total still lands a little over a dollar at all three volumes.
DynamoDB on-demand. Three small tables: ic-sends, ic-state, ic-audit. Reads are dominant during the daily tick (one read per invoice per tick, plus chase history). Writes are send events and audit rows. Pennies a month at any of these volumes.
S3 + Storage. The mirrored invoice CSV plus the archived MIME from any forwarded invoices. A few hundred KB total at SMB volume. Effectively free.
EventBridge Scheduler. The daily tick rule plus deferred send rules from quiet-hours, weekend, and holiday gates. A few invocations a day. Pennies.
SES. Inbound for the forwarding lane: $0.10 per thousand received messages (so a couple of cents a year for an SMB). Outbound for reminder emails: $0.10 per thousand sent. Even at a few hundred reminders a month, this is cents.
Bedrock (only when something fires it). The daily tick uses no Bedrock. The inbound parsing lane fires Haiku 4.5 once per forwarded PDF: a few thousand input tokens (the Textract output) and a few hundred output tokens (the proposed row JSON), so a fraction of a cent per parse. At a few forwarded invoices a month, Bedrock costs cents. The monthly summary is one larger call: write a paragraph that summarizes the month’s outstanding balance, oldest invoices, and biggest at-risk amounts; a couple of cents.
Textract (only on forwarded PDFs). Per-page pricing; a typical invoice is one or two pages. A cent or two per parse. At a few PDFs a month, Textract is a few cents. At 2,000 open invoices with twenty PDFs forwarded per month, it lands around a couple of dollars.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the pay-link, webhook, and owner-action endpoints.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The chaser sleeps 23.99 hours a day.
- A Knowledge Base. The invoice list is structured rows, not free text — deterministic lookup beats vector search here. No embeddings, no Knowledge Base, no S3 Vectors needed.
- Models on the tick. The daily decision is plain Python. Bedrock fires only on the inbound parsing lane and the monthly summary.
How the cost scales
Lambda runtime grows roughly linearly with invoice count, because every open invoice is evaluated on every tick. DynamoDB grows linearly too. Bedrock and Textract are uncorrelated with invoice count — they only fire when somebody forwards a PDF or it’s the first of the month. So the bill at 5,000 open invoices is around $30; at 10,000 it’s around $60. Past those volumes the daily-tick model probably stops being right (you’d switch to a partial-tick that only evaluates invoices at or past their due date), but those are optimizations for very large ledgers — not redesigns.
Set an AWS Budgets alarm at $15/month so anything unusual pages you before the bill matters. The chaser’s normal-volume bill stays well under that ceiling — and well under the cost of one invoice slipping to 90 days late.
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 EventBridge Scheduler config.
All posts