What the renewal negotiator costs
The negotiator is one of the cheaper systems in this series. The daily check reads a CSV from S3, does a little date arithmetic, and decides which accounts are coming due. It calls no model on that check. Bedrock fires once per upcoming renewal to write the draft, and once a month for the summary. Because each account renews about once a year, the model runs a small, steady number of times a month — not on every account every day. At typical SMB volume, the bill is a few dollars a month, fixed cost essentially zero.
Key takeaways
- Around $3/month at typical SMB volume (around 100 accounts renewing across the year).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- The daily check costs pennies — no model calls; the model fires only on a draft per renewal.
- Bedrock is a larger slice here than in pure-alert systems, but still small: one draft per renewal.
- At 500 accounts the bill is around $7. At 1,000 accounts it’s around $14.
Cost at three volumes
Where the dollars actually go
Lambda runtime (the bulk). The drafter runs once a day. Each check reads the registry CSV from S3, iterates the rows, computes days_to_renewal for each, and finds the few coming due. At 100 accounts that’s a few hundred milliseconds; at 1,000 it’s a second or two. Add the drafting Lambda firing once per upcoming renewal, the Function URL Lambda handling approve/edit/skip, the calendar-sync Lambda running hourly, and the drive-sync Lambda every fifteen minutes — the Lambda total still lands around a dollar at all three volumes.
Bedrock (the model). The daily check uses no Bedrock. The drafting step fires Claude Haiku 4.5 once per upcoming renewal: a few thousand input tokens (the account context and voice template) and a few hundred output tokens (the email), so a fraction of a cent per draft. Because each account renews about once a year, only a small slice of your accounts come due in any given month — roughly one-twelfth. So at 1,000 accounts you draft on the order of 80 renewals a month, not 1,000 a day. A handful of tricky accounts use Claude Sonnet 4.6, which costs more per call but stays a minor share. The monthly summary is one larger call. Bedrock is a bigger slice here than in a pure alert system, but it’s still measured in cents to a couple of dollars.
DynamoDB on-demand. Four small tables: rn-offers, rn-queue, rn-audit, and a state table. Reads are dominant during the daily check; writes are queue cards and audit rows. Pennies a month at any of these volumes.
S3 + Storage. The mirrored registry CSV plus the archived MIME from any forwarded contracts. A few hundred KB total at SMB volume. Effectively free.
EventBridge Scheduler. The daily check rule plus deferred owner-ping rules from the quiet-hours gate. A few invocations a day. Pennies.
SES. Inbound for the forwarding lane and outbound for the offer emails: $0.10 per thousand messages each way. At a few dozen offers a month, a few cents.
Textract (only on forwarded contracts). Per-page pricing; a typical contract is two to ten pages. A few cents per parse. At a handful of forwarded contracts a month, Textract is cents.
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 drafter sleeps almost the whole day.
- A Knowledge Base. The registry is structured rows, not free text — deterministic lookup beats vector search here. No embeddings, no Knowledge Base, no S3 Vectors needed.
- Models on the check. The daily find-what’s-due is plain Python. Bedrock fires only on a draft per renewal and the monthly summary.
How the cost scales
Lambda runtime grows roughly linearly with account count, because every account is read on every check. DynamoDB grows linearly too. Bedrock grows with the number of renewals per month — roughly one-twelfth of your accounts — not with the daily read, so it stays a minority slice. So the bill at 5,000 accounts is around $45; at 10,000 it’s around $90. Past those volumes the daily full-read probably stops being right (you’d switch to a partial check that only scans accounts inside the prepare-ahead window), but that’s an optimization for large books — not a redesign.
Set an AWS Budgets alarm at $20/month so anything unusual pages you before the bill matters. The negotiator’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