Amazon SQS Pricing: The 64 KB Rule, FIFO Premium, and Why Empty Receives Drive Half the Bill
Quick summary: SQS charges $0.40 per million standard requests and $0.50 per million FIFO requests, but a single 256 KB message counts as four requests under the 64 KB rule. Short polling on idle queues silently quadruples the bill. Cross-region data transfer adds a line many teams never count.
Key Takeaways
- SQS charges $0
- 40 per million standard requests and $0
- 50 per million FIFO requests, but a single 256 KB message counts as four requests under the 64 KB rule
- astro'; Amazon SQS is one of the simplest AWS pricing pages — two queue types, two per-million-request rates, a free tier
- Get the polling configuration wrong and a queue handling 10K logical messages/day generates a million billable requests
Table of Contents
Amazon SQS is one of the simplest AWS pricing pages — two queue types, two per-million-request rates, a free tier. The bill is rarely simple. The reason is structural: SQS does not bill per logical message; it bills per 64 KB chunk of payload, multiplied by each API call against that chunk, multiplied by every consumer polling whether there is anything to receive. Get the polling configuration wrong and a queue handling 10K logical messages/day generates a million billable requests.
This post is the bill story. For queue architecture, error handling, retry semantics, and the SQS Extended Client pattern, see our SQS reliable messaging patterns guide. For the broader event-driven design context, the event-driven async messaging post covers when SQS is the right primitive vs SNS, EventBridge, or Kinesis.
The Five SQS Billing Dimensions
SQS pricing breakdown — us-east-1, June 2026
Prices in us-east-1
The per-million rate is the easy number. Chunking, polling mode, and cross-region data transfer are where the real bill lives.
| Dimension | Unit price | Example workload | Monthly cost |
|---|---|---|---|
| Standard queue requests First 1M free per account per month | $0.40 / million | 500M monthly requests | $200.00 |
| FIFO queue requests 25% premium for exactly-once + ordering | $0.50 / million | 50M monthly requests | $25.00 |
| Extended Client (S3-backed) requests For messages over 64 KB; S3 charges apply separately | $0.40 / million + S3 calls | Large payloads stored in S3 | Per-request rate |
| Data transfer out (cross-region) Plus destination-region SQS request cost | $0.02 / GB | Replicating to a secondary region | Variable |
| Data transfer out to internet Use VPC endpoints to stay in-region | Standard EC2 egress | Cross-region or on-prem consumers | Variable |
Standard queue requests
$200.00First 1M free per account per month
- Unit price
- $0.40 / million
- Example workload
- 500M monthly requests
FIFO queue requests
$25.0025% premium for exactly-once + ordering
- Unit price
- $0.50 / million
- Example workload
- 50M monthly requests
Extended Client (S3-backed) requests
Per-request rateFor messages over 64 KB; S3 charges apply separately
- Unit price
- $0.40 / million + S3 calls
- Example workload
- Large payloads stored in S3
Data transfer out (cross-region)
VariablePlus destination-region SQS request cost
- Unit price
- $0.02 / GB
- Example workload
- Replicating to a secondary region
Data transfer out to internet
VariableUse VPC endpoints to stay in-region
- Unit price
- Standard EC2 egress
- Example workload
- Cross-region or on-prem consumers
Receive, Send, Delete, ChangeMessageVisibility — all SQS API calls are billed at the per-request rate.
The 64 KB Rule Most Teams Never Notice
SQS does not bill per logical message. It bills per 64 KB chunk of payload on each API call. The mechanics:
- A 30 KB message: 1 billable SendMessage + 1 billable ReceiveMessage = 2 requests.
- A 200 KB message: 4 billable SendMessage chunks + 4 billable ReceiveMessage chunks = 8 requests.
- A 256 KB message (the per-message max): 4 + 4 = 8 requests.
- 10 messages of 25 KB each in one ReceiveMessage batch: 10 SendMessage + 10 ReceiveMessage = 20 requests (the batch API does not chunk smaller messages together).
The leverage is in payload size and batching. Keep messages under 64 KB whenever possible; batch up to 10 small messages per call where the API supports it.
Long Polling Is Not Optional at Scale
The single most common SQS waste pattern is short polling on idle or low-volume queues. With WaitTimeSeconds=0 (the default until you explicitly set it), every ReceiveMessage call returns immediately. A consumer in a polling loop on an empty queue can generate one billable request per loop iteration.
The math on an idle worker:
Worker polling an empty queue — short vs long polling
Prices in us-east-1
A single Lambda or EC2 worker. Same code, same workload. The only difference is the WaitTimeSeconds parameter.
| Dimension | Unit price | Example workload | Monthly cost |
|---|---|---|---|
| Short polling (default) Every iteration is a billable empty receive | ~10 requests / second per worker | 1 worker × 1 day idle | ~26M requests/month / worker |
| Long polling (WaitTimeSeconds=20) 99.5% fewer billable requests | ~3 requests / minute per worker | 1 worker × 1 day idle | ~130K requests/month / worker |
| Cost delta (1 worker) Multiply across the fleet | $0.40 / M | 26M vs 130K | ~$10/mo per worker |
| Cost delta (50-worker fleet) No code change beyond one parameter | Same rate | Mostly-idle pool | ~$500/mo savings |
Short polling (default)
~26M requests/month / workerEvery iteration is a billable empty receive
- Unit price
- ~10 requests / second per worker
- Example workload
- 1 worker × 1 day idle
Long polling (WaitTimeSeconds=20)
~130K requests/month / worker99.5% fewer billable requests
- Unit price
- ~3 requests / minute per worker
- Example workload
- 1 worker × 1 day idle
Cost delta (1 worker)
~$10/mo per workerMultiply across the fleet
- Unit price
- $0.40 / M
- Example workload
- 26M vs 130K
Cost delta (50-worker fleet)
~$500/mo savingsNo code change beyond one parameter
- Unit price
- Same rate
- Example workload
- Mostly-idle pool
Long polling is set per-queue (default) or per-call (override). Set it on the queue to ensure no consumer forgets.
Set ReceiveMessageWaitTimeSeconds=20 on the queue itself rather than relying on every consumer to set it on each call. Defaults applied at the queue level are inherited by every consumer; per-call configuration is forgotten in new consumer code.
FIFO vs Standard: When 25% More Is Worth It
FIFO queues bill at $0.50 per million requests vs $0.40 for Standard — a 25% premium. The features FIFO provides:
- Exactly-once processing within the message deduplication interval (default 5 minutes).
- Strict ordering within a message group ID.
- Content-based deduplication when a deduplication ID is computed from the message body.
- Throughput up to 300 messages/second per API action (or 3000/sec with batching) per message group ID — significantly lower than Standard’s near-unlimited throughput.
The right use case for FIFO: ordered state transitions per entity (each entity’s events on its own message group ID), financial workflows where double-processing is unacceptable, fulfillment pipelines where order matters within a customer or shipment.
The wrong use case: general background work, fanout to many consumers, or anything where the consumer can be made idempotent at the application layer. Standard queues with idempotent consumers do the same job at 20% less cost and with no throughput ceiling.
DLQ and Retry Storms
Dead-letter queues use the same per-request pricing as the source queue. The cost driver is retry traffic: a consumer that fails to process a message keeps retrying — each retry is a billable Receive, a billable visibility-timeout extension, and eventually a billable move to DLQ when maxReceiveCount is exhausted.
A 1% failure rate with maxReceiveCount=5 adds roughly 5% to the request bill from retries alone. A poison-message storm (e.g., a deploy with a parse error causing every message to fail) can multiply the request volume by maxReceiveCount overnight until the storm is detected and the bad code rolled back.
Cross-Region and the Hidden Data Transfer Line
SQS has no native cross-region replication. Common patterns to achieve it:
- Lambda forwarder: a Lambda consumes from the primary region’s queue and SendMessage to a replica queue in another region. Pays the standard inter-region data transfer rate ($0.02/GB) plus the destination-region SQS request cost — effectively double-billing each message.
- SNS-to-SQS multi-region fanout: an SNS topic in one region with SQS subscriptions in multiple regions. SNS handles the fanout; data transfer still bills per cross-region delivery.
- Custom replication via DynamoDB Streams: rarely the right answer for messaging but occasionally used when DynamoDB is already the system of record.
Replicate only when the DR pattern genuinely requires it. A 100M-message-per-month queue replicated across two secondary regions adds roughly the source-region bill twice for the request side, plus the inter-region data transfer for the message bodies.
What This Means for Common SQS Bill Patterns
Three common SQS workloads — bill shape
Prices in us-east-1
The same workload can produce very different bills depending on configuration. The polling mode, message size, and queue type drive the multiplier.
| Dimension | Unit price | Example workload | Monthly cost |
|---|---|---|---|
| Background job queue (50K msg/day, 20 KB each) Within or near free tier | Standard + long polling | ~3M requests/month | ~$1/mo |
| Same queue with short polling and 5 idle workers Empty receives dominate | Standard + short polling | ~130M requests/month | ~$52/mo |
| High-volume order pipeline (5M FIFO/day, 30 KB each) FIFO premium + retries add ~10% | FIFO + long polling | ~310M requests/month | ~$155/mo |
| Same with 200 KB payloads (no Extended Client) 4× from chunking; Extended Client recovers most | FIFO + 64 KB chunking | ~1.2B requests/month | ~$600/mo |
Background job queue (50K msg/day, 20 KB each)
~$1/moWithin or near free tier
- Unit price
- Standard + long polling
- Example workload
- ~3M requests/month
Same queue with short polling and 5 idle workers
~$52/moEmpty receives dominate
- Unit price
- Standard + short polling
- Example workload
- ~130M requests/month
High-volume order pipeline (5M FIFO/day, 30 KB each)
~$155/moFIFO premium + retries add ~10%
- Unit price
- FIFO + long polling
- Example workload
- ~310M requests/month
Same with 200 KB payloads (no Extended Client)
~$600/mo4× from chunking; Extended Client recovers most
- Unit price
- FIFO + 64 KB chunking
- Example workload
- ~1.2B requests/month
The configuration deltas — polling mode, payload size, Standard vs FIFO — drive 10–50× cost variance on the same logical workload.
When to Use SQS vs Alternatives
SQS is the default for decoupled async work; reach for SNS for fanout, EventBridge for routing, Kinesis for ordered streaming.
Use when
- Producer-consumer decoupling where the consumer pulls when ready
- Worker pools processing background jobs at variable rate
- Buffer in front of a database or external API to absorb traffic spikes
- DLQ pattern for any async system — SQS is the canonical AWS DLQ target
- FIFO specifically for ordered state transitions per entity (with conservative message-group cardinality)
Avoid when
- Fanout to many independent consumers — SNS-to-SQS is cheaper than DIY replication
- High-cardinality routing rules — EventBridge handles the rule engine more cheaply than custom SQS routing
- Ordered streaming at high throughput where consumers replay history — Kinesis or MSK are designed for this
- Sub-millisecond latency requirements — SQS has tens-of-ms latency floor, use Lambda direct or EventBridge for low-latency triggers
- FIFO for general background work where Standard + idempotent consumers would do the same job for less
SQS is rarely the wrong primitive at the architecture level. The bill problems come from polling configuration, payload size, and FIFO defaulted-on without justification.
A 30-Day SQS Bill Cleanup Plan
Week 1 — Audit polling mode. Find every queue with ReceiveMessageWaitTimeSeconds=0. Set to 20 on the queue (consumers inherit the default). This alone often recovers 30–60% of the request bill on accounts with many idle workers.
Week 2 — Audit payload sizes. Use CloudWatch’s SentMessageSize metric per queue. Identify queues averaging over 64 KB per message. Migrate to the SQS Extended Client pattern (S3-backed) for those queues. Cross-check S3 cost in our S3 pricing calculator.
Week 3 — Audit FIFO usage. Identify FIFO queues where the consumer logic is naturally idempotent. Migrate those to Standard with idempotent processing (DynamoDB conditional writes, business-key uniqueness, or a deduplication table).
Week 4 — DLQ and alarm hygiene. Set maxReceiveCount to 3–5 across queues that have it higher (or unset). Add CloudWatch alarms on DLQ depth and ApproximateAgeOfOldestMessage for every production queue.
What This Post Doesn’t Cover
- SQS metric resolution costs in CloudWatch — every queue publishes built-in CloudWatch metrics; covered in the CloudWatch pricing post.
- Lambda-as-consumer concurrency and throttling — the Lambda side of SQS-triggered consumption has its own cost dynamics; covered in the Lambda cost optimization post.
- MQ for AMQP/JMS workloads — Amazon MQ is a different product entirely with a $700/month minimum entry point; covered in a separate Phase 3 post.
- SNS-to-SQS fanout pricing — covered in the SNS pricing post.
If You Only Do One Thing This Week
Set ReceiveMessageWaitTimeSeconds=20 on every queue in your account. The change is non-destructive, applies immediately, and on accounts with idle worker pools typically recovers 30–60% of the SQS request bill within days. Run aws sqs list-queues followed by aws sqs get-queue-attributes --queue-url <url> --attribute-names ReceiveMessageWaitTimeSeconds to find the queues that need the change; ship the fix via your IaC of choice and the bill drops next month.
For the broader queue-architecture decision — when SQS is the right primitive vs alternatives — the reliable queue systems on AWS post covers the trade-offs.
AWS Cloud Architect & AI Expert
AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.