Price an SQS queue from message volume, payload size and batch size, and quantify how much batching up to 10 messages saves.
SQS bills per API request, not per message, and every message normally costs three requests over its life: send, receive and delete. Batching folds up to ten messages into one call, but a request is metered per 64 KB, so ten 8 KB messages in one call bill as two requests rather than one — batching still wins, just not by the full factor of ten. Long polling matters because an empty ReceiveMessage is a billed request that delivers nothing. Confirm the standard and FIFO per-million rates for your region. At scale SQS looks nearly free per message and then surprises people, because the bill tracks API calls: a poller on a one-second loop against an idle queue burns 2.6 million billed empty receives a month for no work at all.
SQS Cost
billed requests = (send calls + receive calls + delete calls) × ceil(batch payload KB ÷ 64) + empty receives, where send calls = messages ÷ batch size.
Batching benefit
batching saving = cost at batch size 1 − cost at your batch size; the ceiling is a 10x reduction in call count.
billed requests = (send calls + receive calls + delete calls) × ceil(batch payload KB ÷ 64) + empty receives, where send calls = messages ÷ batch size. SQS bills per API request, not per message, and every message normally costs three requests over its life: send, receive and delete. Batching folds up to ten messages into one call, but a request is metered per 64 KB, so ten 8 KB messages in one call bill as two requests rather than one — batching still wins, just not by the full factor of ten. Long polling matters because an empty ReceiveMessage is a billed request that delivers nothing. Confirm the standard and FIFO per-million rates for your region.
At scale SQS looks nearly free per message and then surprises people, because the bill tracks API calls: a poller on a one-second loop against an idle queue burns 2.6 million billed empty receives a month for no work at all.
This calculator takes 9 inputs: Messages per month, Average message size, Messages per API call, Receive attempts per message, Empty receive calls per month, Queue type, Standard price per million requests, FIFO price per million requests, Apply the 1 M request free tier. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.
A short-polling consumer looping every 100 ms makes about 26 million calls a month per poller. The same consumer with a 20-second WaitTimeSeconds makes at most about 130,000. On an idle or bursty queue that is the difference between a rounding error and a real line item.
Only if you genuinely need ordering or deduplication. FIFO also caps throughput at 300 API calls per second per message group without batching, so it constrains design as well as cost — many workloads are better served by a standard queue plus an idempotent consumer.