Part 6 of 7 · Social scheduler series ~3 min read

What the social scheduler costs

The scheduler is one of the cheapest systems in this whole series. The daily tick reads a CSV from S3, does some date arithmetic, writes a few rows to DynamoDB, and books a handful of sends. It calls no models on the tick. Bedrock fires only when you ask the draft-helper to rough out a post and once a month for the recap. At typical SMB volume, the bill is a couple of dollars a month, fixed cost essentially zero.

Key takeaways

  • Around $2/month at typical SMB volume (around 60 posts a month across a few channels).
  • Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
  • The daily tick costs pennies — no model calls.
  • Bedrock fires only on the optional draft-helper (a few times a month) and the monthly recap.
  • At 200 posts a month the bill is around $4. At 600 posts it’s around $9.

Cost at three volumes

Monthly cost at three post volumes, broken out by component A horizontal stacked-bar chart showing monthly cost in US dollars at three post volumes. The leftmost bar represents 60 posts a month and shows a total around $2, dominated by the everything-else slice (Lambda, DynamoDB, S3, EventBridge Scheduler, SES, CloudWatch) with a tiny sliver for Bedrock and a tiny sliver for image transfer. The middle bar represents 200 posts a month and shows a total around $4, with the same shape — the everything-else slice grows roughly linearly with post count because each post is read, queued, and sent. The rightmost bar represents 600 posts a month and shows a total around $9, with everything-else still dominant; Bedrock and image transfer stay small in absolute terms because Bedrock only fires on the draft-helper (a handful of drafts per month) and the monthly recap. Below the chart is a legend explaining the four sections of each bar: Bedrock (only on the draft-helper and monthly recap), image transfer (only when a post carries an image), AWS Budgets and Secrets Manager (small fixed amounts), and an everything-else bucket for Lambda runtime, DynamoDB on-demand, S3, EventBridge Scheduler, SES outbound, and CloudWatch. A note at the bottom: the send and tick Lambdas are the dominant cost, and even that is fractions of a cent per post. $0 $5 $10 $15 $20 60 posts ~$2 200 posts ~$4 600 posts ~$9 Bedrock (draft-helper + monthly recap) Image transfer (posts with images only) AWS Budgets + Secrets Manager (fixed) Everything else (Lambda, DDB, S3, Scheduler, SES, CloudWatch) The send and tick Lambdas are the dominant cost — and even that is fractions of a cent per post.
Fig 6. Monthly cost at three post volumes. Bedrock and image transfer are small slivers because Bedrock only fires on the draft-helper and the monthly recap. The dominant cost is the everything-else bucket: the daily tick and the per-post sends.

Where the dollars actually go

Lambda runtime (the bulk). The scheduler runs once a day. Each tick reads the posts CSV from S3, iterates the rows, computes when each is due, and books the day’s sends. At 60 posts a month, that’s a few hundred milliseconds a day. Add the Sender Lambda firing for each post (60 to 600 sends a month), the Function URL Lambda for approvals, the template-sync Lambda, and the drive-sync Lambda every five minutes — the Lambda total still lands under a couple of dollars at all three volumes.

DynamoDB on-demand. Three small tables: ss-status, ss-sends, ss-audit. Reads are dominant during the daily tick (one read per post per tick). Writes are send results and audit rows. Pennies a month at any of these volumes.

S3 + storage. The mirrored posts CSV plus the images for any posts that carry one. A few MB total at SMB volume. Effectively free, plus a small transfer cost when an image is fetched for a send.

EventBridge Scheduler. The daily tick rule plus one one-off rule per queued post for its exact send minute. A few dozen invocations a month at 60 posts. Pennies.

SES. Outbound for the review cards and the reports: $0.10 per thousand sent. A handful of emails a day, so a couple of cents a year. Negligible at this scale.

Bedrock (only when something fires it). The daily tick uses no Bedrock. The draft-helper fires Haiku 4.5 once per draft request: a short note in, a few hundred output tokens out, so a fraction of a cent per draft. At a few drafts a month, Bedrock costs cents. The monthly recap is one larger call: write a short paragraph summarizing the month’s posts; a couple of cents.

Image transfer (only on posts with images). Fetching an image from S3 and handing it to each channel is a small data-transfer cost per post. A few cents a month at 60 posts; a bit more at 600. Posts without images skip it entirely.

What doesn’t cost money

  • API Gateway. Replaced by Lambda Function URLs for the approval endpoints.
  • NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
  • Always-on compute. No EC2, no Fargate. The scheduler sleeps almost all day.
  • A per-seat subscription. No monthly tool fee per user — you pay AWS for what you actually post, not a flat rate.
  • Models on the tick. The daily decision is plain Python. Bedrock fires only on the draft-helper and the monthly recap.

How the cost scales

Lambda runtime grows roughly linearly with post count, because every post is read on every tick and every send is one Sender run. DynamoDB grows linearly too. Bedrock is uncorrelated with post count — it only fires when you ask the draft-helper or it’s the first of the month. So the bill at 1,500 posts a month is around $20; at 3,000 it’s around $38. Past those volumes you’re posting far more than a small business usually does, and a few targeted optimizations (batching the tick, caching channel rules) keep it flat — those are tweaks, not redesigns.

Set an AWS Budgets alarm at $15/month so anything unusual pages you before the bill matters. The scheduler’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 channel-token setup, and EventBridge Scheduler config.

All posts