Part 6 of 7 · Applicant screener series ~3 min read

What the applicant screener costs

The screener is a cheap system to run. Each application is read once by a model, its result is written to a couple of small tables, and the card is placed in a queue a human opens in a browser. There’s no always-on part, nothing waiting around, nothing in a private network running up a meter. At typical small-business volume the bill is a couple of dollars a month, fixed cost essentially zero. The one cost that grows with hiring is the per-application model read — and even that is a fraction of a cent each.

Key takeaways

  • Around $2.40/month at typical small-business volume (around 200 applications a month).
  • Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
  • The dominant cost is one Bedrock read per application — a fraction of a cent each.
  • Textract fires only when a resume arrives as a scanned PDF, not on every application.
  • At 500 applications the bill is around $5. At 1,000 it’s around $11.

Cost at three volumes

Monthly cost at three application volumes, broken out by component A stacked-bar chart showing monthly cost in US dollars at three application volumes. The leftmost bar represents 200 applications a month and shows a total around $2.40, dominated by the Bedrock slice (one read per application) with a smaller everything-else slice (Lambda, DynamoDB, S3, SES, CloudWatch), a tiny Textract sliver for scanned PDFs, and a tiny fixed sliver. The middle bar represents 500 applications and shows a total around $5, with the same shape — Bedrock grows roughly linearly with application count because every application is read once. The rightmost bar represents 1,000 applications and shows a total around $11, with Bedrock still dominant; Textract stays small in absolute terms because only some resumes arrive as scanned PDFs, and the fixed costs barely move. Below the chart is a legend explaining the four sections of each bar: Bedrock (one read per application), Textract (scanned PDFs only), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, SES, and CloudWatch. A note at the bottom: the per-application model read is the dominant cost, and even that is a fraction of a cent per application. $0 $5 $10 $15 $20 200 apps ~$2.40 500 apps ~$5 1,000 apps ~$11 Bedrock (one read per application) Textract (scanned PDFs only) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, SES, CloudWatch) The per-application model read is the dominant cost — and even that is a fraction of a cent per application.
Fig 6. Monthly cost at three application volumes. Bedrock is the dominant slice because every application is read once; Textract is small because only some resumes arrive as scanned PDFs; the fixed costs barely move. The bill scales with how many people apply.

Where the dollars actually go

Bedrock (the bulk). One Haiku 4.5 read per application: a few thousand input tokens (the stripped resume plus the must-haves) and a few hundred output tokens (the per-must-have result). That’s a fraction of a cent each. At 200 applications a month it’s about a dollar and a half; at 1,000 it’s a handful of dollars. Because the read happens once per application and never on a loop, the cost tracks hiring activity exactly — a quiet month costs almost nothing.

Lambda runtime. The intake, the reader call, the router, and the Function URL behind the manager’s queue and buttons. Each runs briefly, only when there’s an application to handle or a button to process. Pennies a month at all three volumes.

DynamoDB on-demand. A couple of small tables for the scores, the cards, and the audit trail. Reads when the manager opens the queue, writes on each score and each decision. Pennies a month.

S3 + storage. The original resumes, the stripped text, and the mirrored rubric. A few hundred KB to a few MB at small-business volume. Effectively free.

SES. Inbound for the apply lane: $0.10 per thousand received messages. Outbound for the interview invites and declines a human chooses to send: $0.10 per thousand. Both are negligible at this scale.

Textract (only on scanned PDFs). Per-page pricing, and it only fires when a resume is a scanned image rather than real text. Most resumes are already text, so this slice stays small. A handful of cents at 200 applications; a dollar or two at 1,000 if many arrive as scans.

What doesn’t cost money

  • API Gateway. Replaced by Lambda Function URLs for the careers upload and the manager’s queue and buttons.
  • NAT Gateway. Nothing is in a private network. No NAT, no $32/month minimum.
  • Always-on compute. No EC2, no Fargate. Nothing runs between applications.
  • A search index. The rubric is a short list of must-haves, read straight; no embeddings, no vector store needed.
  • A second model on the decision. The label is plain Python counting against your pass marks. The one model call is the read; the deciding is a human’s.

How the cost scales

The bill grows with applications, because each application is read once. Double the applications, roughly double the Bedrock slice; the rest barely moves. So 2,000 applications a month lands around $20, and 5,000 around $45. Those are busy-hiring numbers for a small business, and even then the cost is a rounding error next to the time saved and the good candidates that don’t get missed. If you ever ran far higher volumes, you’d batch the reads — but that’s a tuning step, not a redesign.

Set an AWS Budgets alarm at $15/month (raise it if you hire at higher volume) so anything unusual pages you before the bill matters. At normal small-business hiring volume the screener 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, the SES inbound rule set, and the Bedrock model IDs.

All posts