Part 6 of 7 · Proposal generator series ~3 min read

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

Monthly cost at three proposal volumes, broken out by component A stacked-bar chart showing monthly cost in US dollars at three proposal volumes. The leftmost bar represents 30 proposals a month and shows a total around $3, dominated by the Sonnet draft slice (one draft call per proposal) with a small slice for the Haiku and Titan steps, a small slice for retrieval and storage, and a tiny fixed slice. The middle bar represents 80 proposals a month and shows a total around $6.50, with the same shape — the Sonnet draft slice grows roughly linearly with proposal count because one draft is written per proposal. The rightmost bar represents 150 proposals a month and shows a total around $12, with the Sonnet draft slice still dominant; the cheap steps and storage stay small in absolute terms. Below the chart is a legend explaining the four sections of each bar: Sonnet draft call (one per proposal), Haiku and Titan (tidy the brief and embed for search), retrieval and storage (S3 Vectors plus S3 for past proposals and PDFs), and AWS Budgets and Secrets Manager (small fixed amounts). A note at the bottom: the draft call is the dominant cost, and even that is a few cents per proposal. $0 $5 $10 $15 $20 30 / mo ~$3 80 / mo ~$6.50 150 / mo ~$12 Sonnet draft call (one per proposal) Haiku + Titan (tidy + embed) Retrieval + storage (S3 Vectors, S3) AWS Budgets + Secrets Manager (fixed) The draft call is the dominant cost — and even that is a few cents per proposal.
Fig 6. Monthly cost at three proposal volumes. The Sonnet draft call dominates because one is written per proposal. The cheap steps, retrieval, and storage are small slivers that barely grow.

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