What the quote follow-up costs
The quote follow-up is one of the cheapest systems in this whole series. The daily check reads a CSV from S3, does some date arithmetic, writes a few rows to DynamoDB, and queues a handful of drafts. It calls no model on the check. Bedrock fires only to read each incoming reply and to draft each nudge — both small, both occasional. At typical SMB volume, the bill is a couple of dollars a month, fixed cost essentially zero.
Key takeaways
- Around $2.40/month at typical SMB volume (around 200 open quotes).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- The daily check costs pennies — no model calls.
- Bedrock fires only to read a reply and draft a nudge — a few cents at this volume.
- At 1,000 open quotes the bill is around $9. At 3,000 it’s around $15.
Cost at three volumes
Where the dollars actually go
Lambda runtime (the bulk). The timer runs once a day. Each check reads the quote CSV from S3, iterates the rows, computes the day counts for each, and decides on a move. At 200 quotes, that’s a few hundred milliseconds. At 3,000 quotes it’s a couple of seconds. Either way it’s pennies a month. Add the sender Lambda firing for each nudge (a handful a day), the reply Lambda for each incoming answer, the Function URL Lambda for webhook intake and approvals, and the drive-sync Lambda every fifteen minutes — the Lambda total still lands under a couple of dollars at all three volumes.
DynamoDB on-demand. Three small tables: qf-nudges, qf-reply, qf-audit. Reads are dominant during the daily check (one read per quote per check). Writes are nudge sends, reply outcomes, and audit rows. Pennies a month at any of these volumes.
S3 + storage. The mirrored quote CSV plus the archived MIME from forwarded quotes and incoming replies. A few hundred KB total at SMB volume. Effectively free.
EventBridge Scheduler. The daily check rule plus deferred send rules from quiet-hours and weekend gates. A few invocations a day. Pennies.
SES. Inbound for the BCC lane and the customer replies: $0.10 per thousand received messages (so a couple of cents a year for an SMB). Outbound for the nudges: $0.10 per thousand sent. Both are negligible at this scale.
Bedrock (nudge drafting). The bigger of the two model lines. Each nudge is one short Haiku 4.5 call — a few hundred input tokens (the template plus the quote details) and a few hundred output tokens (the draft) — so a fraction of a cent per draft. At a few hundred nudges a month, this is cents to a dollar or two.
Bedrock (reply classify). The smaller line. Each incoming reply is one tiny Haiku 4.5 call that returns a single label — a handful of tokens. Even at thousands of replies a month, this stays in the low single dollars.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the webhook and approval endpoints.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The timer sleeps 23.99 hours a day.
- A Knowledge Base. The quote 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 check. The daily timing decision is plain Python. Bedrock fires only to draft a nudge and read a reply.
How the cost scales
Lambda runtime grows roughly linearly with quote count, because every open quote is evaluated on every check. DynamoDB grows linearly too. The Bedrock lines grow with activity — more quotes mean more nudges drafted and more replies read — but each call is so cheap that they stay slivers. So the bill at 5,000 open quotes is around $25; at 10,000 it’s around $50. Past those volumes the daily-full-scan model probably stops being right (you’d switch to a partial check that only evaluates quotes inside an active cadence window), but those are optimizations for very large pipelines — not redesigns.
Set an AWS Budgets alarm at $25/month so anything unusual pages you before the bill matters. The system’s normal-volume bill stays well under that ceiling.
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