What the chargeback responder costs
This is one of the cheapest systems in the series, and the reason is worth stating plainly: catching the dispute, gathering the evidence, watching the deadline, and filing the response are all but free — they’re plain Python, a few API calls, and some storage. The whole bill is one variable line, the Bedrock call that assembles each packet, sitting on top of two tiny fixed costs. This post breaks down exactly where the $2.40 a month goes, what changes at ten times the volume, and why the maths is lopsided in your favour.
Key takeaways
- Around $2.40/month at typical SMB volume (about 25 disputes a month).
- Fixed AWS cost is essentially zero. No always-on compute, no NAT Gateway, no API Gateway.
- Catching, gathering, watching, and filing are all but free — plain code, a few API calls, a little storage.
- The one real variable is the Bedrock call that assembles each packet; everything else rounds to pennies.
- At 100 disputes it’s around $6; at 250 it’s around $13. One recovered order pays for a year of it.
Cost at three volumes
The breakdown at ~25 disputes a month
| Component | What it does | ~/month |
|---|---|---|
| Bedrock (Haiku 4.5) | One packet-assembly call per dispute | $0.95 |
| Secrets Manager | Two secrets — processor key, carrier key — at $0.40 each | $0.80 |
| Lambda | webhook, gather, assemble, file, guard, ack, summary | $0.20 |
| DynamoDB on-demand | disputes, evidence index, deadlines | $0.10 |
| S3 | Gathered evidence + packet PDFs | $0.10 |
| SES + SQS + EventBridge | Owner alerts, work queue, dispute events, Scheduler | $0.10 |
| CloudWatch + Budgets | Logs at 7-day retention, one cost alarm | $0.15 |
| Total | ~$2.40 |
Where the dollars actually go
Bedrock (the bulk). Each dispute gets one Haiku 4.5 call to assemble the rebuttal: the prompt carries the dispute, the reason-code playbook entry, and the gathered evidence — a few thousand input tokens — and returns the structured packet, a couple of thousand output tokens. At Haiku pricing that’s a few cents per dispute. Across 25 disputes it’s under a dollar. The monthly summary adds one larger call — a narrative of disputes received, value defended, and win rate by reason code — for a couple of cents. This is the only line that grows with volume, because it’s the only thing done once per dispute that isn’t plain arithmetic.
Secrets Manager (the fixed floor). Two secrets — the processor API key and the carrier API key — at $0.40 each. This is the largest fixed cost in the system, which tells you how cheap everything else is. It doesn’t grow with disputes; it’s the same $0.80 whether you handle five disputes or five hundred.
Lambda runtime. The webhook, gather, assemble, file, deadline-guard, ack-handler, and summary functions are all small and short. The webhook answers in well under a second; gather spends most of its time waiting on the carrier and the inbox; the guard runs at most once per dispute. The Lambda total lands around $0.20 at this volume — arm64 and tight memory sizing keep it there.
DynamoDB on-demand. Three small tables — cbr-disputes, cbr-evidence, cbr-deadlines. A handful of writes per dispute and a few reads. Pennies a month at any SMB volume.
S3 and storage. The raw gathered evidence and the packet PDFs — a few MB per dispute, a few hundred MB a year. Effectively free, even with versioning on and a multi-year lifecycle for the audit trail.
SES, SQS, EventBridge, CloudWatch. Outbound owner alerts at $0.10 per thousand; the work queue with its dead-letter queue; the dispute-event rule and the one-off Scheduler jobs; logs at 7-day retention. Each is cents a month here.
What doesn’t cost money
- API Gateway. Replaced by two Lambda Function URLs — one for the webhook, one for the file/hold buttons.
- NAT Gateway. Nothing is in a VPC. No NAT, no $32/month minimum.
- Always-on compute. No EC2, no Fargate. Everything is event- or schedule-driven.
- A scheduled poller. Disputes arrive by webhook, so there’s nothing to poll. The only schedule is the one-off deadline guard per dispute.
- Models on the decisions. Whether to file and the deadline maths are plain code. Bedrock fires only to assemble the rebuttal and write the monthly summary.
How the cost scales — and why the maths is lopsided
Only Bedrock grows with dispute count, and it grows linearly: a few cents per dispute. So 100 disputes a month lands around $6, 250 around $13, and 1,000 around $40 — at which point you’d look at batching the summary and caching playbook entries, but the assembly call itself stays the cost. Everything else is flat or rounds to nothing.
Now weigh that against what a chargeback costs. A single disputed order is the amount itself — £85, £200, whatever it was — plus a non-refundable dispute fee of £15–20 that you pay win or lose. Recover one £85 order a month and the system has paid for itself roughly thirty times over. Set an AWS Budgets alarm at $25/month so anything unusual pages you, and the normal-volume bill sits comfortably underneath it. The cheapest part of this system is the system; the expensive part is the chargebacks you were already losing.
Last post in the series: the engineering reference. Same system, drawn for engineers — service names, Lambda inventory, IAM scopes, DynamoDB schemas, the SES setup, the EventBridge rule, and the Scheduler deadline-watch config.
All posts