Part 6 of 7 · Newsletter composer series ~3 min read

What the newsletter composer costs

The composer is one of the cheaper systems in this whole series. The weekly run reads a CSV from S3, counts a handful of items, makes one Bedrock call to write the issue, and sends one email per subscriber. The gathering and the daily checks are pennies. The two real line items are the weekly draft and the email send. At typical SMB volume, the bill is a couple of dollars a month, fixed cost essentially zero.

Key takeaways

  • Around $2.80/month for one issue a week to a small list (a few hundred subscribers).
  • Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
  • The weekly Bedrock draft is the single biggest line item — and it’s one call per issue.
  • SES email sends scale with your list size, not with how clever the issue is.
  • At one issue a week to a larger list the bill is around $6. At a daily issue it’s around $14.

Cost at three volumes

Monthly cost at three sending volumes, broken out by component A stacked-bar chart showing monthly cost in US dollars at three sending volumes. The leftmost bar represents one issue a week to a small list and shows a total around $2.80, led by the Bedrock draft slice, then the SES email-send slice, then a small fixed slice and a small everything-else slice. The middle bar represents one issue a week to a larger list and shows a total around $6, the same shape but with the SES send slice and the Bedrock slice both larger as the list and item count grow. The rightmost bar represents a daily issue to a large list and shows a total around $14, with the Bedrock draft slice now the tallest because there are many more drafts per month, the SES slice large because there are far more sends, and the fixed and everything-else slices staying small. Below the chart is a legend explaining the four sections of each bar: Bedrock (the weekly Sonnet draft plus item tidy-ups and the monthly summary), SES (one email per subscriber per issue), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, and EventBridge Scheduler. A note at the bottom: the draft and the send are the two real line items — everything else is rounding error. $0 $5 $10 $15 $20 weekly small list ~$2.80 weekly larger list ~$6 daily large list ~$14 Bedrock (weekly draft + tidy-ups + monthly summary) SES (one email per subscriber per issue) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, Scheduler) The draft and the send are the two real line items — everything else is rounding error.
Fig 6. Monthly cost at three sending volumes. The Bedrock draft and the SES email send are the two slices that matter; fixed cost and everything-else stay small. More issues a month means more drafts and more sends, which is what grows the bill.

Where the dollars actually go

Bedrock (the draft). The single biggest line item, and still small. Once a week the composer makes one Sonnet 4.6 call to write the whole issue: the prompt is your voice doc plus a dozen short items (a few thousand input tokens), and the output is the finished issue (a thousand or so output tokens). That’s a few cents per issue. Add the cheaper Haiku 4.5 calls that tidy forwarded updates in Part 2 (a fraction of a cent each, a handful a month) and the monthly summary (one small call). Weekly, that’s pennies a month. A daily issue is seven times the drafts, which is why Bedrock is the tallest slice in the daily bar.

SES (the send). Outbound email is $0.10 per thousand messages. One issue to 500 subscribers is 500 messages — five cents. Four issues a month is twenty cents. The send cost scales with your list size and how often you send, not with anything clever. Even a 10,000-person list sent weekly is four dollars a month in SES. This is the slice that grows with a big list.

Lambda runtime. The weekly composer run, the hourly feed-sync, the every-15-minute drive-sync, the SES inbound parser for forwarded updates, and the Function URL handler for the buttons. None of them run long. The Lambda total lands well under a dollar at all three volumes.

DynamoDB on-demand. Three small tables: nc-items-state, nc-issues, nc-audit. A few reads and writes per run and per action. Pennies a month at any of these volumes.

S3 + Storage. The mirrored item CSV, the voice and rules docs, the stored drafts, and any raw forwarded MIME. A few hundred KB total at SMB volume. Effectively free.

EventBridge Scheduler. The weekly run, the hourly and 15-minute syncs, and the one-off cooling-off and quiet-hours rules. A handful of invocations a day. Pennies.

SES inbound. For the forwarding lane: $0.10 per thousand received messages. A few forwarded updates a month is a fraction of a cent.

What doesn’t cost money

  • API Gateway. Replaced by Lambda Function URLs for the approve, edit, and skip endpoints.
  • NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
  • Always-on compute. No EC2, no Fargate. The composer sleeps almost the entire week.
  • A separate email platform. SES sends the issue directly — no per-seat newsletter tool subscription on top.
  • A model on every item. The issue is one draft call, not one call per item. Item tidy-ups use the cheaper Haiku 4.5, and only on forwarded updates.

How the cost scales

Two things move the bill: how often you send, and how big your list is. Sending more often multiplies the Bedrock drafts; a bigger list multiplies the SES sends. Both scale linearly and both are cheap. A weekly issue to a few hundred people is under three dollars. A weekly issue to a few thousand is around six. A daily issue to a large list — which is more newsletter than most small businesses want to write — is around fourteen. Past that you’re in real publishing territory, and the cost is still dominated by sends, which any email platform charges for too.

Set an AWS Budgets alarm at $15/month so anything unusual pages you before the bill matters. The composer’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