What the proposal generator costs
The generator only does real work when you start a draft. It reads a brief, searches your past proposals, runs some Python for the price, makes one bigger model call to write the proposal, and renders a PDF. Everything else is idle. The one Claude Sonnet 4.6 draft call is the bill; the cheap tidy and search steps, the storage, and the build Lambdas are slivers. At typical SMB volume, that’s a few dollars a month, fixed cost essentially zero.
Key takeaways
- Around $3/month at typical SMB volume (about 30 proposals a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- One Sonnet 4.6 draft call per proposal is the dominant cost — cents per proposal.
- The cheap Haiku tidy, Titan embeddings, and S3 Vectors retrieval are small slivers.
- At 80 proposals a month the bill is around $6.50. At 150 it’s around $12.
Cost at three volumes
Where the dollars actually go
Bedrock Sonnet draft (the bulk). One Claude Sonnet 4.6 call writes the whole proposal — five sections — per draft. That’s a few thousand input tokens (the brief, the retrieved past sections, the templates) and a couple of thousand output tokens (the proposal prose). At Sonnet pricing that’s a few cents per proposal. Thirty proposals a month is a couple of dollars; this single call is most of the bill at every volume.
Bedrock Haiku + Titan (the cheap steps). The brief tidy, the voice touch-ups in Gate 1, and the scope classify all run on Haiku 4.5 — a fraction of a cent each. Titan Text Embeddings V2 embeds each brief and each new past proposal — also a fraction of a cent. Together these are a small sliver next to the Sonnet draft.
Retrieval + storage. S3 Vectors holds the embeddings of your past proposal sections and answers the nearest-match query during each draft — pennies a month at this scale. S3 holds the past proposals, the rendered PDFs, and the forwarded email threads — a few MB total, effectively free.
Lambda runtime. The build job, the brief intake, the drive-sync every fifteen minutes, the render-and-send Lambda, the ack-handler. None run for long. The whole Lambda total lands well under a dollar at all three volumes.
DynamoDB on-demand. Three small tables: pg-briefs, pg-drafts, pg-audit. A handful of reads and writes per proposal. Pennies a month at any of these volumes.
SES. Inbound for the forwarding lane and outbound for the approved proposals: $0.10 per thousand messages either way. A few cents a year for an SMB.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the brief form and the approve button.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The generator only runs when you start a draft.
- A separate vector database. S3 Vectors handles retrieval without a running cluster to pay for.
- A model on the price. The price summary is plain Python. No model call, and no risk of a made-up number.
How the cost scales
The Sonnet draft call grows linearly with proposal count, because one draft is written per proposal. Everything else — storage, the cheap steps, the build Lambdas — barely moves. So the bill at 300 proposals a month is around $24; at 600 it’s around $45. Past those volumes you’re writing twenty proposals a day, which is a great problem to have, and the only optimization worth making is caching the retrieved sections for repeat client types — an optimization, not a redesign.
Set an AWS Budgets alarm at $15/month so anything unusual pages you before the bill matters. At typical SMB volume the generator’s bill stays comfortably 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 setup, DynamoDB schemas, and EventBridge config.
All posts