Part 6 of 7 · Feedback collector series ~3 min read

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

Monthly cost at three ask volumes, broken out by component A vertical stacked-bar chart showing monthly cost in US dollars at three ask volumes. The leftmost bar represents 300 asks a month and shows a total around $1.80, dominated by the everything-else slice (Lambda, DynamoDB, S3, EventBridge Scheduler, CloudWatch) with a tiny sliver for Bedrock and a tiny sliver for SES sending. The middle bar represents 1,000 asks a month and shows a total around $5, with the same shape — the everything-else slice and the SES sending slice grow roughly linearly with the number of asks. The rightmost bar represents 3,000 asks a month and shows a total around $13, with everything-else still dominant; Bedrock stays small in absolute terms because it only fires on the free-text minority of replies and the monthly summary. Below the chart is a legend explaining the four sections of each bar: Bedrock (only on free-text replies and the monthly summary), SES sending (the asks, nudges, and owner pings), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, EventBridge Scheduler, and CloudWatch. A note at the bottom: sending the asks is the dominant cost, and even that is a fraction of a cent per ask. $0 $5 $10 $15 $20 300 asks ~$1.80 1,000 asks ~$5 3,000 asks ~$13 Bedrock (free-text replies + monthly summary) SES sending (asks, nudges, owner pings) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, Scheduler, CloudWatch) Sending the asks is the dominant cost — and even that is a fraction of a cent per ask.
Fig 6. Monthly cost at three ask volumes. Bedrock is a small sliver because it only fires on the free-text minority of replies and the monthly summary. The dominant cost is the everything-else bucket plus SES sending: one message per finished visit.

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