Part 6 of 7 · Vendor onboarder series ~3 min read

What the vendor onboarder costs

The onboarder is one of the cheaper systems in this whole series. The daily chase tick reads a small table, does some date arithmetic, and sends a handful of emails. It calls no models. The one part that costs real money is reading the documents a vendor uploads — Textract reads each page and Bedrock pulls the fields — and that fires only a few times per vendor, total. At typical SMB volume, the bill is a couple of dollars a month, fixed cost essentially zero.

Key takeaways

  • Around $2.20/month at typical SMB volume (around 8 new vendors a month).
  • Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
  • The daily chase tick costs pennies — no model calls.
  • Textract and Bedrock fire only when a vendor uploads a document — a few times per vendor.
  • At 20 new vendors a month the bill is around $5. At 40 it’s around $9.

Cost at three volumes

Monthly cost at three new-vendor volumes, broken out by component A vertical stacked-bar chart showing monthly cost in US dollars at three new-vendor volumes. The leftmost bar represents 8 new vendors a month and shows a total around $2.20, dominated by the document-reading slices — Textract and Bedrock — because reading each uploaded file is the only real per-vendor cost, with a small everything-else slice and a tiny fixed slice. The middle bar represents 20 new vendors a month and shows a total around $5, with the same shape — Textract and Bedrock grow roughly linearly with the number of vendors because each new vendor uploads a handful of documents to read. The rightmost bar represents 40 new vendors a month and shows a total around $9, with document-reading still dominant; the everything-else bucket stays small because the daily chase tick, the emails, and the table reads barely cost anything. Below the chart is a legend explaining the four sections of each bar: Textract (reading each uploaded page), Bedrock (pulling the fields off each document), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, EventBridge Scheduler, SES (inbound and outbound), and CloudWatch. A note at the bottom: reading documents is the dominant cost, and even that is a few cents per vendor. $0 $5 $10 $15 $20 8 vendors ~$2.20 20 vendors ~$5 40 vendors ~$9 Textract (reading each uploaded page) Bedrock (pulling the fields off each document) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, Scheduler, SES, CloudWatch) Reading documents is the dominant cost — and even that is a few cents per vendor.
Fig 6. Monthly cost at three new-vendor volumes. Textract and Bedrock are the biggest slices because reading each uploaded document is the only real per-vendor cost. The chase tick, the emails, and the table reads barely register.

Where the dollars actually go

Textract (the bulk). Every uploaded document is read once. Textract is priced per page, and a typical vendor sends a few short documents — bank details, a tax form, a certificate, an agreement — so call it ten to twenty pages per vendor. At 8 new vendors a month that’s a dollar or so; at 40 vendors it scales to a few dollars. This is the single largest line, and it only happens when a vendor actually uploads something.

Bedrock (the second slice). Each uploaded document gets one Haiku 4.5 call to read its type and fields: a few thousand input tokens (the Textract output) and a few hundred output tokens (the proposed fields as JSON), so a fraction of a cent per document. Across a few documents per vendor, it’s cents per vendor. Like Textract, it’s tied to uploads, not to the calendar.

Lambda runtime. The chase tick runs once a day and iterates the vendors still collecting — a few milliseconds each. Add the intake Lambda, the checker Lambda (which fires per upload), the Function URL Lambdas for the upload page and the approve button, and the hourly drive-sync — the Lambda total still lands well under a dollar at all three volumes.

DynamoDB on-demand. Three small tables: vo-vendors (one row per vendor, the checklist), vo-chase (one row per reminder), vo-audit (one row per action). Reads and writes are a handful per vendor. Pennies a month at any of these volumes.

S3 + Storage. The vendor documents themselves plus the raw inbound MIME from forwarded emails. A few megabytes per vendor at most. Effectively free.

SES. Inbound for the forwarding lane: $0.10 per thousand received messages. Outbound for invites and reminders: $0.10 per thousand sent. A few emails per vendor means a couple of cents a month even at 40 vendors.

EventBridge Scheduler. The daily chase rule, the hourly sync, and the occasional deferred-send one-off. A few invocations a day. Pennies.

What doesn’t cost money

  • API Gateway. Replaced by Lambda Function URLs for the upload page 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 chase tick sleeps 23.99 hours a day.
  • A Knowledge Base. The checklist is structured rows, not free text — deterministic lookup beats vector search here. No embeddings, no Knowledge Base, no S3 Vectors needed.
  • Models on the tick. The daily chase is plain Python. Textract and Bedrock fire only when a vendor uploads a document.

How the cost scales

The bill tracks the number of new vendors, not the number of vendors you already have. Once a vendor is approved, the system stops reading and chasing — it costs nothing to keep an approved vendor on file. So the cost is driven entirely by intake: at 80 new vendors a month the bill is around $18; at 160 it’s around $36, still almost all of it Textract and Bedrock reading uploads. A business onboarding that many suppliers a month is unusual for an SMB, and even then the cost is a rounding error against a single mis-paid invoice or a lapsed-insurance claim.

Set an AWS Budgets alarm at $20/month so anything unusual — a vendor uploading a 200-page PDF, a retry loop — pages you before the bill matters. The 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, DynamoDB schemas, SES rule set, and EventBridge Scheduler config.

All posts