Part 6 of 7 · Contract summarizer series ~3 min read

What the contract summarizer costs

The summarizer only spends money when a contract arrives. There’s no daily tick, no always-on anything — the system sleeps until a file lands, reads it, and goes back to sleep. The cost per contract is the read step (Textract on the pages) plus two short model calls (Haiku to pull the terms, Sonnet to read the few risky clauses). At typical SMB volume that’s a few dollars a month, fixed cost essentially zero.

Key takeaways

  • Around $3/month at typical SMB volume (around 40 contracts read a month).
  • Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
  • The cost is per contract — nothing runs when no contracts arrive.
  • Each contract: Textract on the pages, one Haiku call, one Sonnet call on a few clauses.
  • At 120 contracts a month the bill is around $7. At 200 it’s around $13.

Cost at three volumes

Monthly cost at three contract volumes, broken out by component A horizontal stacked-bar chart showing monthly cost in US dollars at three contract volumes. The leftmost bar represents 40 contracts read a month and shows a total around $3, with the model and Textract slices small and an everything-else slice (Lambda, DynamoDB, S3, S3 Vectors, EventBridge, SES) making up the rest. The middle bar represents 120 contracts a month and shows a total around $7, with the same shape — the model and read slices grow roughly linearly because they fire once per contract. The rightmost bar represents 200 contracts a month and shows a total around $13, with the model read and Textract now the larger share because they scale with contract count, while the everything-else bucket stays modest. Below the chart is a legend explaining the four sections of each bar: Bedrock (Haiku term pull and Sonnet risk read, per contract), Textract (reading the pages of every contract), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, S3 Vectors, EventBridge, SES (inbound and outbound), and CloudWatch. A note at the bottom: the per-contract cost is the read plus two short model calls, and even that is a few cents per contract. $0 $5 $10 $15 $20 40 / month ~$3 120 / month ~$7 200 / month ~$13 Bedrock (Haiku term pull + Sonnet risk read) Textract (reading every contract) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, S3 Vectors, SES, CloudWatch) The per-contract cost is the read plus two short model calls — a few cents per contract.
Fig 6. Monthly cost at three contract volumes. Bedrock and Textract grow with contract count because they fire once per contract; the everything-else bucket stays modest. Even at 200 contracts a month the bill lands around $13.

Where the dollars actually go

Bedrock (the bulk as volume grows). Two calls per contract. The Haiku 4.5 term pull reads the clauses and fills the six fields: a few thousand input tokens, a few hundred output, a fraction of a cent. The Sonnet 4.6 risk read sees only the few clauses that matched the flag search — not the whole contract — so even the stronger model handles a small slice of text per contract, a couple of cents. Together, a few cents per contract. That’s the whole reason the system searches first and reads the strong model second: you pay the bigger model only for the paragraphs that earn it.

Textract. Per-page pricing; a typical contract is two to twenty pages. A few cents per contract to turn the pages into text. This grows linearly with how many contracts arrive, which is why the read slice tracks contract count on the chart.

Lambda runtime. The intake, the reader, the summary writer, and the approve/Function URL handlers each run for a second or two per contract. Pennies a month at all three volumes — nothing runs except when a contract is being processed.

DynamoDB on-demand. Two small tables: cs-jobs (one row per contract read) and cs-audit (one row per approve, send-to-human, or hold). A handful of reads and writes per contract. Pennies.

S3 + S3 Vectors. The raw contracts, the cleaned text, and the summaries, all versioned; plus the clause embeddings in the S3 Vectors index used by the flag search. A few MB per contract at most. Effectively free at SMB volume.

SES. Inbound for the forwarding lane and outbound for delivered summaries: $0.10 per thousand messages each way. A couple of cents a year at this scale.

What doesn’t cost money

  • API Gateway. Replaced by Lambda Function URLs for the e-sign webhook 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 system runs only when a contract arrives.
  • A daily tick. Unlike a watcher, there’s nothing to poll. Cost is purely per contract.
  • The strong model on everything. Sonnet reads only the few flagged clauses, never the whole contract. The cheap Haiku model does the plain term pull.

How the cost scales

The bill tracks one number: how many contracts you read. Bedrock and Textract are per-contract, so they grow roughly linearly. The everything-else bucket grows slowly because the work per contract is small and the storage is cheap. So 400 contracts a month lands around $25, and 800 around $48. Longer contracts cost a little more (more pages to read, more clauses to search), but the strong-model cost stays bounded because it only ever sees the flagged clauses, not the full document.

Set an AWS Budgets alarm at $15/month so anything unusual — a stuck retry loop, an accidental batch of a thousand files — pages you before the bill matters. The summarizer’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, the S3 Vectors index, Bedrock model IDs, and the DynamoDB schemas.

All posts