What the onboarding guide costs
The guide is one of the cheapest systems in this whole series. The daily tick reads a CSV from S3, does some date arithmetic, writes a few rows to DynamoDB, and sends a handful of emails. It calls no models on the tick. Bedrock fires only when a step message needs a small personalized rewrite 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.10/month at typical SMB volume (around 150 customers onboarding at once).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- The daily tick costs pennies — no model calls.
- Bedrock fires only on the occasional rewrite (a few a month) and the monthly summary.
- At 500 active onboardings the bill is around $5. At 2,000 it’s around $12.
Cost at three volumes
Where the dollars actually go
Lambda runtime (the bulk). The guide runs once a day. Each tick reads the onboarding CSV from S3, iterates the rows, computes days_since_signup for each, checks step state, and decides on a move. At 150 customers, that’s a few hundred milliseconds. At 2,000 it’s a couple of seconds. Either way it’s pennies a month. Add the sender Lambda firing for each message, the Function URL Lambda for the signup webhook and the done links, and the drive-sync Lambda every fifteen minutes — the Lambda total still lands under a dollar at all three volumes.
DynamoDB on-demand. Three small tables: og-sends, og-state, og-audit. Reads are dominant during the daily tick (a read or two per customer per tick). Writes are send events and audit rows. Pennies a month at any of these volumes.
S3 + Storage. The mirrored onboarding CSV plus the archived MIME from any forwarded welcome emails. A few hundred KB total at SMB volume. Effectively free.
EventBridge Scheduler. The daily tick rule plus deferred send rules from quiet-hours and weekend gates. A few invocations a day. Pennies.
SES. Outbound for the step and nudge emails: $0.10 per thousand sent. A starter customer gets three or four emails over their onboarding; even at 2,000 active customers that’s a few thousand emails a month, so a few cents. Inbound for the forwarding lane is negligible. This is the one slice that grows with how many customers you onboard, and it’s still tiny.
Bedrock (only when something fires it). The daily tick uses no Bedrock. A personalized rewrite fires Haiku 4.5 only when the rules doc asks for it on a particular step — a few hundred input and output tokens, a fraction of a cent per rewrite. At a handful a month, Bedrock costs cents. The monthly summary is one larger call: write a paragraph that summarizes the month’s sign-ups, finishes, and drop-offs; a couple of cents.
The fixed services. AWS Budgets and Secrets Manager together cost well under a dollar a month and don’t move with volume. They’re the flat floor under the whole bill.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the signup webhook and the done-link endpoints.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The guide sleeps 23.99 hours a day.
- A Knowledge Base. The onboarding list is structured rows, not free text — deterministic lookup beats vector search here. No embeddings, no Knowledge Base, no S3 Vectors needed.
- Models on the tick. The daily decision is plain Python. Bedrock fires only on the occasional rewrite and the monthly summary.
How the cost scales
Lambda runtime grows roughly linearly with customer count, because every active onboarding is evaluated on every tick. DynamoDB grows linearly too. SES grows with the number of messages sent, which tracks customer count but stays cheap. Bedrock is uncorrelated with count — it only fires on a flagged rewrite or the first of the month. So the bill at 5,000 active onboardings is around $28; at 10,000 it’s around $55. Past those volumes the daily-tick model probably stops being right (you’d switch to a partial-tick that only evaluates customers with a step coming due), but those are optimizations for very large lists — not redesigns.
Set an AWS Budgets alarm at $15/month so anything unusual pages you before the bill matters. The guide’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