Part 6 of 7 · Social inbox unifier series ~3 min read

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

Monthly cost at three message volumes, broken out by component A stacked-bar chart showing monthly cost in US dollars at three message volumes. The leftmost bar represents 1,500 messages a month and shows a total around $3, dominated by the Bedrock slice — the one per-message label call — with a smaller slice for the data services (SQS, DynamoDB, S3), a tiny fixed sliver, and a small everything-else slice. The middle bar represents 5,000 messages a month and shows a total around $7, with the same shape — the Bedrock slice grows roughly linearly with message count because there is one label call per new message. The rightmost bar represents 10,000 messages a month and shows a total around $12, with Bedrock still the dominant slice; the fixed costs stay flat and the data and everything-else slices grow gently. Below the chart is a legend explaining the four sections of each bar: Bedrock (one label per new message), data services (SQS, DynamoDB on-demand, S3), Secrets Manager and AWS Budgets (small fixed amounts), and an everything-else bucket for Lambda runtime, Function URLs, EventBridge Scheduler, and CloudWatch. A note at the bottom: the per-message label is the dominant cost, and even that is a fraction of a cent per message. $0 $5 $10 $15 $20 1,500 msgs ~$3 5,000 msgs ~$7 10,000 msgs ~$12 Bedrock (one label per new message) Data services (SQS, DynamoDB, S3) Secrets Manager + AWS Budgets (fixed) Everything else (Lambda, Function URLs, Scheduler, CloudWatch) The per-message label is the dominant cost — and even that is a fraction of a cent per message.
Fig 6. Monthly cost at three message volumes. The Bedrock label call is the dominant slice and grows with message count; the data services and everything-else buckets grow gently, and the fixed costs stay flat.

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