Part 6 of 7 · Survey analyzer series ~3 min read

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

Monthly cost at three response volumes, broken out by component A vertical stacked-bar chart showing monthly cost in US dollars at three response volumes. The leftmost bar represents 100 responses a month and shows a total around $1.20, with a roughly even split between the embeddings slice, the Bedrock-chat slice (the per-answer urgent check plus the weekly summary), a small fixed slice, and an everything-else slice. The middle bar represents 500 responses and shows a total around $3.20, with the same shape — embeddings and the per-answer urgent check grow roughly linearly with response count because both run on every answer. The rightmost bar represents 5,000 responses and shows a total around $18, with embeddings and Bedrock-chat together dominant; the fixed slice stays tiny and everything-else grows modestly. Below the chart is a legend explaining the four sections of each bar: Embeddings (Titan V2 on every answer), Bedrock chat (Haiku urgent check on every answer plus the weekly Sonnet summary), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3 and S3 Vectors, EventBridge Scheduler, SES, SNS, and CloudWatch. A note at the bottom: the per-answer work — embedding and the urgent check — is the dominant cost, and even that is fractions of a cent per answer. $0 $5 $10 $15 $20 100 / mo ~$1.20 500 / mo ~$3.20 5,000 / mo ~$18 Embeddings (Titan V2, every answer) Bedrock chat (urgent check + weekly summary) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, Vectors, SES, SNS) The per-answer work — embedding and the urgent check — is the dominant cost, and still fractions of a cent each.
Fig 6. Monthly cost at three response volumes. Embeddings and the per-answer urgent check are the biggest slices because both run on every answer. The weekly summary is one larger call. The fixed cost stays near zero.

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