What the shipping notifier costs
The notifier is one of the cheapest systems in this whole series. The scheduled check reads a CSV from S3, does some simple comparisons, writes a few rows to DynamoDB, and sends a handful of emails. It calls no models on the check. Bedrock fires only when somebody forwards a carrier email and once a month for the summary. At typical SMB volume, the bill is a couple of dollars a month, fixed cost essentially zero.
Key takeaways
- Around $2.40/month at typical SMB volume (around 300 orders a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- The scheduled check costs pennies — no model calls.
- Bedrock fires only on forwarded carrier emails (a few a month) and the monthly summary.
- At 1,500 orders the bill is around $7. At 3,000 orders it’s around $14.
Cost at three volumes
Where the dollars actually go
Lambda runtime (the bulk). The notifier runs every 30 minutes during the day. Each check reads the order list CSV from S3, iterates the rows, compares each order’s status to what was last sent, and decides on a move. At 300 orders, that’s a few hundred milliseconds per check. At 3,000 orders it’s a couple of seconds. Add the sender Lambda firing for each update, the webhook Lambda handling carrier posts, the Function URL Lambda for unsubscribes, and the drive-sync Lambda every few minutes — the Lambda total still lands under a couple of dollars at all three volumes.
SES (every update sent). Outbound email is $0.10 per thousand sent. A typical order gets three to four updates over its life (shipped, out for delivery, delivered, and occasionally delayed). At 300 orders that’s around a thousand emails a month — about ten cents. At 3,000 orders it’s ten thousand emails, around a dollar. Inbound for the forwarding lane is the same $0.10 per thousand, and far fewer messages. Email is the second-biggest slice but still small.
DynamoDB on-demand. Three small tables: sn-sends, sn-prefs, sn-audit. Reads are dominant during each check (one read per order per check). Writes are sends, preference changes, and audit rows. Pennies a month at any of these volumes.
S3 + Storage. The mirrored order CSV plus the archived emails from any forwarded carrier messages. A few hundred KB total at SMB volume. Effectively free.
EventBridge Scheduler. The recurring check rule plus deferred-send rules from the quiet-hours gate. A few dozen invocations a day. Pennies.
Bedrock (only when something fires it). The scheduled check uses no Bedrock. The inbox forwarding lane fires Haiku 4.5 once per forwarded email: a few hundred input tokens (the email body) and a few output tokens (the status JSON), so a tiny fraction of a cent per read. At a few forwarded emails a month, Bedrock costs cents. The monthly summary is one larger call: write a paragraph that summarizes the month’s shipments, deliveries, and delays; a couple of cents.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the carrier webhook and the unsubscribe link.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. The notifier wakes up, runs for a second or two, and sleeps.
- A Knowledge Base. The order list is structured rows, not free text — deterministic lookup beats vector search here. No embeddings, no Knowledge Base, no S3 Vectors needed.
- Models on the check. The scheduled decision is plain Python. Bedrock fires only on forwarded emails and the monthly summary.
How the cost scales
Lambda runtime grows roughly with order count, because every order is evaluated on every check. SES grows with order count too, since more orders mean more update emails. DynamoDB grows linearly. Bedrock is uncorrelated with order count — it only fires when somebody forwards an email or it’s the first of the month. So the bill at 6,000 orders is around $28; at 12,000 it’s around $55. Past those volumes you’d probably move the check to only re-evaluate orders that aren’t yet delivered, which trims the dominant cost — but that’s an optimization for high-volume shops, not a redesign.
Set an AWS Budgets alarm at $20/month so anything unusual pages you before the bill matters. The notifier’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, DynamoDB schemas, the carrier webhook flow, and EventBridge Scheduler config.
All posts