What the social inbox unifier costs
This is one of the cheaper systems in the series. Most of it is plain code: a webhook catches a message, a connector normalizes it, a queue holds it, a few rows go to DynamoDB, and a thread shows up in the inbox. The only model call is one short label per new message. So the bill tracks how many messages you get — not how many apps you connect — and at typical SMB volume it’s a few dollars a month, fixed cost essentially zero.
Key takeaways
- Around $3/month at typical SMB volume (about 1,500 messages a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- The biggest single line is the per-message label call to Bedrock — and even that is a fraction of a cent each.
- The webhooks, queue, dedupe, and routing are plain code — pennies in total.
- At 5,000 messages a month the bill is around $7. At 10,000 it’s around $12.
Cost at three volumes
Where the dollars actually go
Bedrock label call (the bulk). Each new message gets one Haiku 4.5 call — a few hundred input tokens (the message text plus a short instruction) and a few dozen output tokens (the labels). That’s a fraction of a cent per message. Multiply by your real new-message count and you get the largest single line on the bill: roughly $1.80 at 1,500 messages, $8 at 10,000. Duplicates don’t get a call — the fingerprint check from Part 3 drops them first — so you only pay to label genuinely new messages.
Data services. SQS holds each message briefly: the first million requests a month are free, and an SMB rarely leaves that tier. DynamoDB on-demand backs the dedupe table, the thread state, the per-teammate counts, and the audit trail — a handful of small reads and writes per message. S3 (versioned) keeps message snapshots and any attachments. Together: pennies to a dollar at these volumes.
Lambda + Function URLs (everything else). The connectors, the labeler, the router, and the reply endpoint are all small, short Lambda runs on arm64. The webhooks and the reply endpoint are Lambda Function URLs — no API Gateway in the path. Even at 10,000 messages a month, the compute total stays under a dollar.
EventBridge Scheduler. One daily-digest rule, plus any deferred re-routes when a thread sits too long. A few invocations a day. Pennies.
Secrets Manager + AWS Budgets (fixed). A few stored secrets (one set of platform credentials per channel, plus the Slack token) and one budget alarm. A small fixed amount that doesn’t move with volume — the only part of the bill that isn’t basically free.
What doesn’t cost money
- API Gateway. Replaced by Lambda Function URLs for the webhooks and the reply endpoint.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. Everything runs only when a message arrives or a teammate acts.
- A second, bigger model. No reply is ever drafted by a model, so there’s no costly generation step — just the one tiny label call.
- A Knowledge Base. The system labels and routes; it doesn’t answer from documents. No embeddings, no vector store.
How the cost scales
Almost everything grows with message count, because the work is per-message: one label call, a few DynamoDB rows, a short Lambda run. The fixed costs stay flat no matter how many channels you connect — connecting a fourth platform adds a connector, not a recurring bill. So the cost at 25,000 messages a month is around $28; at 50,000 it’s around $55. Past those volumes you’d look at batching the label calls or caching labels for near-identical messages, but those are tunings for high-traffic accounts — not redesigns.
Set an AWS Budgets alarm at $20/month so anything unusual 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, the webhook setup, and the SQS config.
All posts