What the feedback collector costs
The feedback collector is one of the cheapest systems in this whole series. It sends a short message per finished visit, reads the star taps with plain date-and-number logic, writes a few rows to DynamoDB, and pings the owner only when something’s wrong. It calls no model to receive a reply or to score a star. Bedrock fires only on the minority of replies that are free text, and once a month for the owner summary. At typical SMB volume, the bill is a couple of dollars a month, fixed cost essentially zero.
Key takeaways
- Around $1.80/month at typical SMB volume (around 300 asks a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- Sending the asks and reading the taps costs pennies — no model calls on that path.
- Bedrock fires only on free-text replies (a minority) and the monthly summary.
- At 1,000 asks the bill is around $5. At 3,000 asks it’s around $13.
Cost at three volumes
Where the dollars actually go
Lambda runtime (the bulk of “everything else”). A handful of small functions do all the work: the request builder that schedules each ask, the reply handler that catches taps and emails, the router that buckets each reply, the dispatch piece that sends the right move, plus drive-sync every fifteen minutes and calendar-sync every hour. Each run is a few hundred milliseconds. Even at 3,000 asks a month the Lambda total lands under a dollar — there’s no always-on cost, just a tiny burst per event.
DynamoDB on-demand. Three small tables: fc-feedback, fc-state, fc-audit. One write when an ask goes out, one when a reply lands, one when a move fires. Reads during the daily sweep. Pennies a month at any of these volumes.
S3 + Storage. The mirrored customer-list CSV plus the raw inbound emails from written replies. A few hundred KB total at SMB volume. Effectively free.
EventBridge Scheduler. One one-off rule per ask (it fires at the right moment, then self-deletes), plus the recurring drive-sync, calendar-sync, daily sweep, and monthly summary. A few hundred invocations a month. Pennies.
SES (the asks and the replies). Outbound carries the asks, the happy nudges, and the email owner pings: $0.10 per thousand sent. At 300 asks plus a few hundred nudges and pings, that’s a few cents a month; at 3,000 it’s under a dollar. Inbound catches the written replies: $0.10 per thousand received, so cents. (If you send the ask as a text instead of an email, that part moves to your SMS provider’s per-message price, which is usually the single biggest line — budget for it separately.)
Bedrock (only on free text). Reading a star tap uses no Bedrock. The model fires only when a customer writes words instead of tapping — a minority of replies — and the call is tiny: a sentence in, a small JSON mood-and-confidence out, a fraction of a cent each. The monthly summary is one slightly larger call to write the owner paragraph: a couple of cents. Even at 3,000 asks, Bedrock is a small sliver of the bill.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the star-tap and webhook endpoints.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The system only runs when a visit finishes or a reply lands.
- A Knowledge Base. Reading the mood of one short reply needs no document search — one cheap model call does it. No embeddings, no Knowledge Base, no S3 Vectors needed.
- A model on the common path. Star taps are scored by plain Python. Bedrock fires only on free text and the monthly summary.
How the cost scales
Lambda runtime, DynamoDB, and SES sending all grow roughly linearly with the number of asks, because each finished visit gets one ask and at most one reply to handle. Bedrock grows only with the share of customers who write free text instead of tapping — usually a minority — so it stays a small sliver even as volume climbs. So the bill at 10,000 asks a month is around $40, and most of that is the SMS or email you’re sending anyway. Past those volumes the shape doesn’t change; you’re just sending more messages.
Set an AWS Budgets alarm at $15/month so anything unusual pages you before the bill matters. The collector’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