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
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