Part 6 of 7 · Waitlist manager series ~3 min read

What the waitlist manager costs

The waitlist manager is one of the cheapest systems in this whole series. It does nothing between slots — the engine wakes only when a slot frees up, runs some filtering and sorting, sends a text or two, and waits on a timer. It calls no models on the offer path. Bedrock fires only when somebody forwards a booking request 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 $2/month at typical SMB volume (around 200 waitlist entries a month).
  • Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
  • The offer path costs pennies — no model calls; the bulk is the texts and emails.
  • Bedrock fires only on inbound parsing (a few times a month) and the monthly summary.
  • At 1,000 entries the bill is around $6. At 2,000 entries it’s around $13.

Cost at three volumes

Monthly cost at three waitlist-entry volumes, broken out by component A vertical stacked-bar chart showing monthly cost in US dollars at three waitlist-entry volumes. The leftmost bar represents 200 entries a month and shows a total around $2, dominated by the everything-else slice (Lambda, DynamoDB, S3, EventBridge Scheduler, SNS texts, SES, CloudWatch) with a tiny sliver for Bedrock and a tiny sliver for Textract. The middle bar represents 1,000 entries a month and shows a total around $6, with the same shape — the everything-else slice grows roughly linearly with entry count because the texts and the per-offer writes scale with how many offers go out. The rightmost bar represents 2,000 entries a month and shows a total around $13, with everything-else still dominant; Bedrock and Textract stay small in absolute terms because they only fire on the inbound parsing lane (a handful of forwarded requests per month) and the monthly summary. Below the chart is a legend explaining the four sections of each bar: Bedrock (only on inbound parsing and monthly summary), Textract (only on attachments forwarded to the inbox), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, EventBridge Scheduler, SNS, SES, and CloudWatch. A note at the bottom: the offer texts are the dominant cost, and even those are a fraction of a cent each. $0 $5 $10 $15 $20 200/mo ~$2 1,000/mo ~$6 2,000/mo ~$13 Bedrock (inbound parsing + monthly summary) Textract (forwarded attachments only) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, Scheduler, SNS, SES, CloudWatch) The offer texts are the dominant cost — and even those are a fraction of a cent each.
Fig 6. Monthly cost at three waitlist-entry volumes. Bedrock and Textract are small slivers because they only fire on the inbound parsing lane and the monthly summary. The dominant cost is the everything-else bucket: the offer texts and the per-offer writes.

Where the dollars actually go

SNS texts and SES email (the bulk). Each freed slot sends one offer per person tried — usually one to three texts before the slot fills or rolls out. A text in most regions is a fraction of a cent. At 200 entries a month, with maybe 60 to 100 slots freeing and a couple of offers each, that’s a few hundred messages — well under a dollar. Email fallback through SES is $0.10 per thousand, so cheaper still. This is the one line that scales with how busy you are, which is exactly the line you want to grow, because every text is a chance to fill a chair.

Lambda runtime. The engine, the sender, the claim handler, the drive-sync every few minutes, and the inbound parser. Each invocation is short — read a small CSV, filter and sort a list of dozens, do a write or two. Even at 2,000 entries a month the Lambda total lands under a dollar.

DynamoDB on-demand. Three small tables: wl-offers, wl-slots, wl-audit. Writes are offers, claims, and audit rows; reads are the engine’s eligibility lookups and the conditional-write claim. Pennies a month at any of these volumes.

S3 + storage. The mirrored waitlist CSV plus the archived raw email from any forwarded requests. A few hundred KB total at SMB volume. Effectively free.

EventBridge Scheduler. The claim-window one-off timers (one per offer) plus the daily housekeeping tick and the drive-sync rule. A handful of invocations per freed slot. Pennies.

Bedrock (only when something fires it). The offer path uses no Bedrock. The inbound parsing lane fires Haiku 4.5 once per forwarded request: a few thousand input tokens and a few hundred output tokens, so a fraction of a cent per parse. At a few forwarded requests a month, Bedrock costs cents. The monthly summary is one larger call — a paragraph on slots freed, slots filled, and revenue recovered — a couple of cents.

Textract (only on forwarded attachments). Per-page pricing; most forwarded requests are plain email text with no attachment, so Textract fires rarely. A few cents per parse when it does. At SMB volume, a few cents to a dollar.

What doesn’t cost money

  • API Gateway. Replaced by Lambda Function URLs for the claim link and the web form.
  • NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
  • Always-on compute. No EC2, no Fargate. The engine does nothing between slots.
  • A Knowledge Base. The waitlist is structured rows, not free text — deterministic filter-and-sort beats vector search here. No embeddings, no Knowledge Base, no S3 Vectors needed.
  • Models on the offer path. The offer decision is plain Python. Bedrock fires only on the inbound parsing lane and the monthly summary.

How the cost scales

The messaging line grows with how many slots free up and how many people each offer is tried on, so it tracks how busy the business is — which is the right thing to scale with. Lambda and DynamoDB grow roughly linearly too. Bedrock and Textract are uncorrelated with volume — they only fire when somebody forwards a request or it’s the first of the month. So the bill at 5,000 entries a month is around $30; at 10,000 it’s around $60. Past those volumes you’re a busy multi-location operation and the texting cost dominates — at which point negotiating a messaging rate matters more than any AWS tuning.

Set an AWS Budgets alarm at $15/month so anything unusual pages you before the bill matters. The waitlist manager’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, the conditional-write claim, and EventBridge Scheduler config.

All posts