What the order status responder costs
A responder that costs more than the time it saves is a toy. This post is the cost breakdown: every AWS service this system touches, what each one adds up to at around 500 enquiries a month, and why the total lands near $2.80 — plus what happens to the bill when the volume goes up tenfold.
Key takeaways
- About $2.80/month at roughly 500 enquiries, and the fixed cost is essentially zero — nothing runs when no one is asking.
- The single biggest line is Bedrock: one small Haiku 4.5 call per reply. Everything else is cents.
- The one fixed cost worth naming is Secrets Manager, at $0.40 per secret per month for the carrier and SMS keys.
- At ten times the volume (around 5,000 enquiries) the bill lands near $20 — it scales with use, not with idle time.
- Carrier tracking API fees are separate and depend on your courier contracts; they aren’t an AWS cost.
Where the money goes
The responder is serverless end to end, so there’s no instance ticking over at 3am and no idle bill. You pay for a message only when a message arrives. At a typical small-shop volume — call it 500 enquiries a month, of which perhaps 450 get an automatic reply and the rest escalate — here’s the whole bill, line by line.
| AWS service | What it does here | Monthly |
|---|---|---|
| Bedrock (Claude Haiku 4.5) | One reply-writing call per answered enquiry (~450) | $1.35 |
| Secrets Manager | Two secrets — carrier API key, SMS-provider key ($0.40 each) | $0.80 |
| DynamoDB (on-demand) | Orders mirror, tracking cache, threads, audit — small reads and writes | $0.20 |
| CloudWatch Logs | Function logs, 7-day retention | $0.15 |
| SES (inbound + outbound) | Receiving email enquiries and sending email replies | $0.12 |
| Lambda (Python 3.14, arm64) | Intake, match, tracking, replier, escalator, sweep, drive-sync | $0.10 |
| S3 | Raw inbound email and the Drive-sheet mirror file | $0.05 |
| SQS + DLQ | Buffering between intake and processing | $0.02 |
| EventBridge Scheduler | 15-minute Drive sync, daily stuck-order sweep | $0.01 |
| AWS Budgets | Cost alarm (first two budgets are free) | $0.00 |
| Total | ~500 enquiries/month | $2.80 |
The shape of that bill is the point. The reply writer — the one place a model runs — is the largest single cost, and it’s still well under half the total. The matching and the tracking lookup, which do the actual work of answering the question, cost almost nothing, because they’re plain Python and a single API call. The only fixed line worth naming is Secrets Manager: $0.40 per secret per month, whether you handle one enquiry or ten thousand, which is why two carrier and provider keys quietly make up the bulk of what you pay before any message arrives.
The one real fixed cost
It’s worth dwelling on Secrets Manager, because it’s the only thing here that costs money while the system sleeps. Two secrets at $0.40 each is $0.80 a month no matter what — more than a quarter of the bill at this volume. If you used more carriers you’d add more secrets; if you used one, you’d shave $0.40 off. Everything else on the list is genuinely usage-priced and rounds to zero at idle, which is exactly what you want from a system that only does work when a customer asks a question.
One cost that is not on this table: the carriers’ own tracking APIs. Some couriers include tracking calls in your shipping contract; others meter them. Those fees sit with your carrier accounts, not with AWS, and they vary too much to put a single number on — but the brief cache from Part 3 is there precisely so a busy day of repeat “any update?” messages doesn’t turn into a pile of billable carrier calls.
What ten times the volume costs
Push this to a busy shop — 5,000 enquiries a month, ten times the volume — and the bill lands somewhere near $20, not $28. It’s sub-linear because the fixed lines don’t move: Secrets Manager stays at $0.80, the schedules stay at a cent, and AWS Budgets stays free. What scales is the genuinely usage-priced work — roughly $13.50 of Bedrock for ten times the replies, a couple of dollars more of DynamoDB, a bit more SES, Lambda, and logs. Even then, the dominant cost is still the one model call per reply, and the thing answering the actual question — match plus tracking — remains close to free.
The honest way to read this: the AWS bill is rounding error against the alternative. A person answering 500 “where’s my order?” messages a month by hand is hours of dull lookups; the same hours at 5,000 is a part-time job. $2.80, or even $20, buys those hours back — and the few messages that genuinely need a human still get one, with the full context already gathered.
Design rules that shaped the cost
- Pay per message, not per hour. No always-on compute means no idle bill.
- Spend the model sparingly. One Haiku call per reply, and only to write — never to match or to track.
- Cheap work stays cheap. The match and the tracking lookup are plain Python and one API call.
- Know your one fixed cost. Secrets Manager is the only line that bills while the system sleeps.
- Cache to protect the carrier bill. The tracking cache keeps repeat asks from becoming repeat charges.