What the survey analyzer costs
The survey analyzer leans on AI more than most systems in this series — it embeds every answer, checks every answer for urgency, and writes one summary — so the bill is a little higher than a pure date-arithmetic system. It is still small. The grouping pass runs once a week, not on every answer. The urgent check uses the cheap model. Only the weekly summary uses the heavier one, and only once. At typical SMB volume, the bill is a few dollars a month, fixed cost essentially zero.
Key takeaways
- Around $3.20/month at typical SMB volume (around 500 responses a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- Bedrock is the biggest slice: embeddings on every answer, plus a cheap urgent check on each.
- The summary is one larger Sonnet call a week — a few cents, not the bulk of the bill.
- At 1,000 responses the bill is around $6. At 5,000 it’s around $18.
Cost at three volumes
Where the dollars actually go
Embeddings (a big slice). Every answer is turned into a vector with Amazon Titan Text Embeddings V2. A survey answer is short — usually well under 200 tokens — so each embedding is a fraction of a cent. The cost grows straight in line with response count, because every answer gets one. At 500 responses a month it’s well under a dollar; at 5,000 it’s a few dollars.
Bedrock chat (the other big slice). Two callsites. The urgent check fires Claude Haiku 4.5 once per answer — a short prompt and a one-word answer, so a tiny fraction of a cent each, but it runs on every response, so it tracks volume like the embeddings do. The weekly summary fires Claude Sonnet 4.6 once a week: it reads the grouped themes and writes a paragraph, a few thousand input tokens and a few hundred output tokens, so a couple of cents per run — about a dime a month. The naming calls inside the grouper (Haiku, one per theme) add a handful of cents.
Lambda runtime. The intake Lambda fires per answer (cheap and brief). The grouper runs once a week and is the heaviest single invocation — it embeds and clusters the whole period — but even at 5,000 answers that’s seconds of compute. Add the drive-sync Lambda every fifteen minutes and the summary Lambda once a week, and the Lambda total still lands under a dollar at all three volumes.
S3 + S3 Vectors. The mirrored answer CSV, the raw MIME from forwarded feedback, and the vector index. A few MB at SMB volume. S3 Vectors is priced for exactly this — storing and searching a modest set of embeddings without running a database — so it stays in the cents.
DynamoDB on-demand. The answer store plus the sa-flags and sa-runs tables. Writes on intake, reads on the weekly pass. Pennies a month at any of these volumes.
SES and SNS. SES sends one summary email a week and the occasional forwarded-feedback receipt: a couple of cents a year. SNS fans out the urgent flags: $0.50 per million publishes, so effectively free at a handful a week. Both negligible.
What doesn’t cost money
- API Gateway. Replaced by a Lambda Function URL for the form-submit endpoint.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The grouper runs once a week and the intake only when an answer lands.
- A managed vector database. S3 Vectors stores the embeddings; there’s no always-on search cluster to pay for.
- Sonnet on every answer. The heavy model writes one summary a week. Per-answer work uses Haiku and Titan, the cheap paths.
How the cost scales
Embeddings and the urgent check grow straight in line with response count, because both run on every answer. The weekly summary and the theme-naming calls barely move — they’re tied to the number of themes, not the number of answers. So the bill at 10,000 responses a month is around $35; at 25,000 it’s around $80. Past those volumes you’d batch the embeddings and maybe move the urgent check to a cheaper keyword pre-filter that only escalates borderline answers to the model — optimizations, not redesigns.
Set an AWS Budgets alarm at $30/month so anything unusual pages you before the bill matters. The analyzer’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, the S3 Vectors index, DynamoDB schemas, and EventBridge Scheduler config.
All posts