Part 6 of 7 · Return and RMA handler series ~6 min read

What the return and RMA handler costs

A returns desk that costs more to run than the returns it processes is a bad trade. This post is the cost breakdown: every AWS service this system touches, what each adds up to at around 120 returns a month, why the total lands near $2.90, and which two lines — Step Functions transitions and the external label API — are the only ones that move when volume does.

Key takeaways

  • About $2.90/month at roughly 120 returns, and the fixed cost is essentially zero — nothing runs between returns.
  • Only two lines move with volume: Step Functions state transitions, and the carrier label API — and the label API isn’t an AWS cost at all.
  • The one real AWS fixed line is Secrets Manager, at $0.40 per secret per month for the label and webhook keys.
  • Bedrock is optional. Turn the wording off and the bill drops by about $0.75 with no loss of function.
  • At ten times the volume the bill lands near $9 — it scales gently because the fixed lines don’t move.

Where the money goes

The handler is serverless end to end, and a return spends most of its life as a paused state machine that costs nothing while it waits. There’s no instance ticking over, no queue being polled, no idle bill. You pay for a return only when one is actually moving through a stage. At a typical small-shop volume — call it 120 returns a month — here’s the whole bill, line by line.

AWS serviceWhat it does hereMonthly
Secrets ManagerTwo secrets — carrier/label API key, webhook signing key ($0.40 each)$0.80
Bedrock (Claude Haiku 4.5)Optional wording for the RMA and outcome emails (~240 calls)$0.75
S3Label PDFs, inspection photos, and the Drive mirror$0.35
DynamoDB (on-demand)Returns table, orders mirror, audit — small reads and writes$0.25
CloudWatch LogsFunction logs, 7-day retention$0.20
EventBridge (bus + Scheduler)Carrier tracking events, the daily sweep, the Drive sync$0.17
SES (inbound + outbound)Return requests in; RMA, approval, and outcome emails out$0.15
Lambda (Python 3.14, arm64)Intake, eligibility, label, track, inspect, decide, approve, sweep, sync$0.15
Step Functions (Standard)~1,400 state transitions across ~120 executions$0.05
SQS + DLQBuffering between the edges and the workers$0.03
AWS BudgetsCost alarm (first two budgets are free)$0.00
Total~120 returns/month$2.90

The shape of that bill is the surprise. The two services people assume will dominate — Step Functions, which orchestrates the whole thing, and Lambda, which does the actual work — are among the cheapest lines on the list, because Step Functions Standard bills per state transition (a fraction of a cent each) and the Lambdas run for milliseconds. The biggest line is Secrets Manager, which charges a flat $0.40 per secret whether you process one return or a thousand. The second is Bedrock, and that’s optional. Everything that does the genuine logistics — the orchestration, the matching, the decision — rounds to almost nothing.

Monthly cost split at about 120 returns A single horizontal bar divided into proportional segments showing the $2.90 monthly total. From left: Secrets Manager is the largest segment at $0.80; Bedrock $0.75; S3 $0.35; DynamoDB $0.25; CloudWatch Logs $0.20; and a final combined segment for EventBridge, SES, Lambda, Step Functions and SQS at $0.55. Labels sit above and below the segments. A note reads: only Step Functions transitions and the external label API scale with volume; the one real AWS fixed cost is Secrets Manager at $0.40 per secret. Secrets $0.80 Bedrock $0.75 S3 $0.35 DDB $0.25 Logs $0.20 rest $0.55 Monthly cost — ~120 returns — total $2.90 Only Step Functions transitions and the external label API scale with volume; the one fixed cost is Secrets Manager.
Fig 6. The monthly bill at about 120 returns. Secrets Manager and an optional Bedrock are over half of it; the orchestration and the logistics round to cents.

The two things that scale

Only two costs in this system actually move when you do more returns. The first is Step Functions: every return is one execution of around a dozen state transitions, and Standard workflows bill $0.025 per 1,000 transitions, so 120 returns is a few cents and 1,200 is a few more. It scales perfectly linearly and stays tiny — the long waits in the middle, which could last weeks, cost nothing, because a paused execution isn’t transitioning. The second is the carrier’s label API, and that one is genuinely per-return — but it’s a postage cost on your courier contract, not an AWS line, so it doesn’t appear on the table at all. Whatever a return label costs you today, the handler just asks for one per cleared return; it doesn’t add a markup.

The fixed cost, and the optional one

Secrets Manager is the only thing here that bills while the system sleeps: two secrets at $0.40 each is $0.80 a month no matter what, more than a quarter of the total at this volume. Use a single combined key and you’d shave $0.40 off. Bedrock is the other notable line, and it’s entirely optional: it only phrases the customer emails, so turning it off drops the bill by about $0.75 and replaces the wording with templates that read perfectly well. Everything else — S3, DynamoDB, logs, EventBridge, SES, Lambda, SQS — is usage-priced and rounds toward zero at this scale.

Push this to a busy shop — 1,200 returns a month, ten times the volume — and the bill lands near $9, not $29. It’s strongly sub-linear because the fixed lines don’t move: Secrets Manager stays at $0.80, the schedules stay at a cent, Budgets stays free. What grows is the genuinely usage-priced work — more Bedrock calls, more S3 for photos, a bit more DynamoDB and logs, and Step Functions creeping from a few cents to a few more. The honest read: the AWS bill is rounding error against the cost of running a returns desk by hand, where the real money is the refund issued in error and the parcel that quietly went missing — both of which this system is built to stop.

Design rules that shaped the cost

  • Pay per return, not per hour. No always-on compute, and a paused execution costs nothing while a parcel travels.
  • Orchestration is cheap. Step Functions bills transitions, not waiting; the whole flow is a few cents a month.
  • Know your one fixed cost. Secrets Manager is the only line that bills while nothing is happening.
  • AI is optional. Bedrock only writes words; switch it off and the system still runs end to end.
  • The label fee lives with the carrier. The biggest per-return cost is postage on your courier contract, not AWS.
All posts