Amazon SNS Pricing: Why a Single Publish Can Bill as Four Charges
Quick summary: SNS bills publish and delivery separately. Standard topic publish is $0.50/M, but HTTP delivery is $0.60/M on top, email is $2/100K, SMS varies by country, and mobile push is $0.50/M. A single publish to a topic fanned out to four protocols generates four billable lines — five if you count the cross-region data transfer.
Key Takeaways
- Standard topic publish is $0
- 50/M, but HTTP delivery is $0
- 60/M on top, email is $2/100K, SMS varies by country, and mobile push is $0
- 50/M
- astro'; Amazon SNS looks straightforward on the pricing page: $0

Table of Contents
Amazon SNS looks straightforward on the pricing page: $0.50 per million publishes for Standard topics, $0.30 per million for FIFO. The bill is almost never that simple. SNS separates publishing from delivery, and the delivery side bills at a different per-protocol rate for each subscriber type — HTTP at $0.60 per million, email at $2 per hundred thousand, SMS at variable per-country rates that can exceed $0.50 per single message in long-tail countries. A topic fanning out one publish to four protocols generates four separate billable lines, before counting cross-region data transfer.
Amazon SNS pricing splits into publish charges and per-protocol delivery fees — SMS, email, HTTP, and SQS fan-out bill differently. In us-east-1 (June 2026), publishes cost $0.50 per million. Most surprises come from SMS country rates, HTTP retry storms, and fan-out to many HTTP endpoints instead of SQS.
| Action | us-east-1 | Notes |
|---|---|---|
| Publish | $0.50/M | Per message published |
| SQS delivery | Free | Best fan-out pattern |
| HTTP delivery | $0.60/M | Retry storms add up |
| SMS | Country-specific | Often dominates mobile alerts |
This post is the bill story. For SNS architecture patterns — fanout, filtering, retry semantics, and DLQ wiring — the event-driven async messaging guide covers the design side. For the queue side of SNS-to-SQS fanout, the SQS pricing post covers the receiving end.
The Two-Layer SNS Bill: Publish + Delivery
The biggest source of SNS bill surprises is forgetting that publish and delivery are billed separately. A single Publish call costs the per-million publish rate. Every subscriber that receives that publish then bills separately at the per-protocol delivery rate.
SNS pricing breakdown — us-east-1, June 2026
Prices in us-east-1
Publish bills once per topic regardless of subscriber count. Delivery bills per subscriber per delivery at the per-protocol rate.
| Dimension | Unit price | Example workload | Monthly cost |
|---|---|---|---|
| Standard topic publish First 1M free per month, account-wide | $0.50 / million | 10M publishes / month | $5.00 |
| FIFO topic publish Lower per-publish but adds payload data line | $0.30 / million + $0.017 / GB payload | 5M publishes × 5 KB avg | ~$1.93 |
| HTTP/HTTPS delivery Per delivery; failed retries bill too | $0.60 / million | 10M publishes × 1 HTTP sub | $6.00 |
| Email / Email-JSON 20× the price of mobile push | $2.00 / 100K | 500K emails / month | $10.00 |
| SMS — US Cheapest SMS rate; price varies by carrier | ~$0.00645 / SMS | 100K SMS / month | $645 |
| SMS — international long-tail Highest variance line in SNS | Up to $0.50+ / SMS | 10K SMS to long-tail countries | $5,000+ |
| Mobile push (APNS, FCM, ADM) Cheapest user-facing delivery channel | $0.50 / million | 10M push notifications | $5.00 |
| SQS subscription delivery SQS side bills the receive separately | Free | 100M deliveries | $0.00 |
| Lambda subscription delivery Lambda side bills the invocation separately | Free | 100M invocations | $0.00 |
| Kinesis Data Firehose delivery Plus Firehose ingestion + delivery charges | $0.85 / million | 50M events / month | $42.50 |
| Cross-region delivery transfer On top of the publish + delivery cost | $0.02 / GB | Multi-region SQS fanout | Variable |
Standard topic publish
$5.00First 1M free per month, account-wide
- Unit price
- $0.50 / million
- Example workload
- 10M publishes / month
FIFO topic publish
~$1.93Lower per-publish but adds payload data line
- Unit price
- $0.30 / million + $0.017 / GB payload
- Example workload
- 5M publishes × 5 KB avg
HTTP/HTTPS delivery
$6.00Per delivery; failed retries bill too
- Unit price
- $0.60 / million
- Example workload
- 10M publishes × 1 HTTP sub
Email / Email-JSON
$10.0020× the price of mobile push
- Unit price
- $2.00 / 100K
- Example workload
- 500K emails / month
SMS — US
$645Cheapest SMS rate; price varies by carrier
- Unit price
- ~$0.00645 / SMS
- Example workload
- 100K SMS / month
SMS — international long-tail
$5,000+Highest variance line in SNS
- Unit price
- Up to $0.50+ / SMS
- Example workload
- 10K SMS to long-tail countries
Mobile push (APNS, FCM, ADM)
$5.00Cheapest user-facing delivery channel
- Unit price
- $0.50 / million
- Example workload
- 10M push notifications
SQS subscription delivery
$0.00SQS side bills the receive separately
- Unit price
- Free
- Example workload
- 100M deliveries
Lambda subscription delivery
$0.00Lambda side bills the invocation separately
- Unit price
- Free
- Example workload
- 100M invocations
Kinesis Data Firehose delivery
$42.50Plus Firehose ingestion + delivery charges
- Unit price
- $0.85 / million
- Example workload
- 50M events / month
Cross-region delivery transfer
VariableOn top of the publish + delivery cost
- Unit price
- $0.02 / GB
- Example workload
- Multi-region SQS fanout
The SQS and Lambda delivery being free is what makes SNS-to-SQS fanout the cheapest internal-distribution pattern on AWS.
If you only audit one dimension first, route internal fan-out through SNS → SQS — delivery to SQS is free.
The Four-Charge Publish: A Worked Example
Consider an order-confirmation topic with four subscribers: SQS (for downstream processing), Lambda (for analytics), Email (for the customer), and Mobile Push (for the app notification). One publish, four deliveries:
- 1 publish × $0.50/M = base cost
- SQS delivery: free
- Lambda delivery: free
- Email delivery: $2/100K = $0.00002 per delivery
- Mobile push: $0.50/M = $0.0000005 per delivery
For 10M publishes/month with this fanout:
- Publish: $5
- SQS delivery: $0
- Lambda delivery: $0
- Email delivery: $200 (10M × $0.00002)
- Mobile push: $5
Email dominates the bill at 40× the publish rate. This is invisible if you only think about the publish line — and it gets dramatically worse with SMS.
The SMS Trap
SMS is the highest-variance line item in SNS. United States rates are reasonable (~$0.00645/SMS). International rates vary by country and carrier from ~$0.04 to over $0.50 per single message. A B2C app sending two-factor authentication SMS to 100K global users daily can produce a bill in the high four or low five figures per month depending on user geography.
The common patterns to mitigate:
- Cap global rate per recipient. A user receiving five SMS in a minute is almost always a misconfiguration; rate-limit at the application layer.
- Use Pinpoint or a dedicated SMS provider for high-volume SMS. Pinpoint offers carrier-grade routing, rate negotiation for high volumes, and dedicated short codes that reduce per-message rates. SNS is fine for low-volume operational alerts; it is rarely the right primitive for high-volume customer SMS.
- Default to mobile push or email for app-installed users. Push at $0.50/M is roughly 13,000× cheaper than long-tail-country SMS for the same notification.
- Set a monthly SMS spend limit per AWS account via the SNS SMS spend limit configuration. This is a hard cap; once hit, further SMS is dropped until the next month or you raise the limit.
HTTP Delivery and Retry Storms
HTTP and HTTPS delivery at $0.60/M is the most expensive non-user-facing protocol (Kinesis Firehose is more expensive but rarely used at this junction). The cost driver is rarely the happy-path delivery — it is retries against failing endpoints.
SNS retries failed HTTP deliveries with an exponential backoff that, by default, runs for 20 days. Every retry attempt is a billable delivery. A topic with an HTTP subscription pointed at a chronically failing endpoint can quietly generate tens of thousands of retry deliveries per day with no successful messages reaching the subscriber.
Message Filtering: Free but Mandatory at Scale
SNS message filtering lets a subscription declare a filter policy (a JSON expression over message attributes) so only matching publishes are delivered. The filter evaluation is free — but the publish still bills. The saving is on the delivery side.
For a topic with 100 subscribers where each publish is only relevant to one subscriber, no filtering means 100× delivery charges per publish. With filtering, only the matching subscriber receives the delivery. On high-fanout topics with mixed-interest subscribers, filtering routinely cuts the delivery bill by 90%+.
When to Use SNS vs Alternatives
SNS for known-consumer fanout; EventBridge for rule-based routing; Pinpoint for high-volume SMS; direct-call for synchronous low-latency.
Use when
- One-to-many fanout to a known set of internal AWS consumers (SQS, Lambda) — cheapest pattern on AWS
- Multi-protocol delivery to email, mobile push, and HTTP from a single publish
- Cross-account event publishing where consumers manage their own SQS queues
- Low-volume operational SMS alerts (on-call notifications, monitoring escalations) — within US-only territory
- FIFO topics for ordered fanout to FIFO SQS queues with strict ordering requirements
Avoid when
- High-volume customer-facing SMS — Pinpoint or third-party SMS provider is dramatically cheaper at scale
- Complex rule-based routing — EventBridge has a richer rule language and event archive
- Sub-100ms latency requirements — SNS delivery has variable latency; use direct invocation
- Long-term event retention or replay — SNS does not store events; EventBridge archive or Kinesis is the right primitive
- Tiny topics (under 1M monthly publishes) where the free tier covers the publish line and delivery cost is the only line — verify the delivery math first
SNS-to-SQS fanout is one of the highest-impact AWS patterns: free delivery, decoupling, and cheap consumer scaling. Use it whenever the consumer is internal AWS.
A 30-Day SNS Bill Cleanup Plan
Week 1 — Audit SMS spend. Check the SNS SMS spend limit per account; set a sensible hard cap if not set. Identify topics sending SMS by reviewing NumberOfMessagesPublished by protocol per topic. Migrate any high-volume customer SMS to Pinpoint or a third-party provider.
Week 2 — Add filter policies. For each topic with multiple subscribers, audit whether subscribers receive all publishes or only relevant ones. Add filter policies where subscribers should only receive a subset. This is often a quick code/IaC change with significant delivery-cost saving.
Week 3 — Add DLQs for HTTP and Email subscriptions. For every HTTP and email subscription, configure a redrive policy targeting an SQS DLQ. Add CloudWatch alarms on NumberOfNotificationsFailed.
Week 4 — Cross-region pattern audit. Map every cross-region SNS-to-SQS pattern against the actual consumer footprint. Disable cross-region fanout to regions with no active consumers.
More in This Series
Part of the AWS Service Pricing series (June 2026).
- Previous: Part 6
- Next: Part 8
- Browse all: Cost Optimization & FinOps category
What This Post Doesn’t Cover
- Pinpoint pricing for high-volume customer messaging — Pinpoint has its own pricing model with per-event, per-endpoint, and per-channel charges; covered in a separate post.
- SES email vs SNS email — SES at $0.10/1K is dramatically cheaper than SNS email for marketing or transactional email at any volume; covered in the SES guides.
- CloudWatch Events to EventBridge migration — EventBridge is the modern replacement for CloudWatch Events; covered in the EventBridge pricing post.
- Mobile push delivery setup — APNS/FCM/ADM credential management is operational, not billing-relevant.
If You Only Do One Thing This Week
Set the SNS SMS monthly spend limit on every production account to a sensible cap. The default is unlimited, which combined with the high per-SMS rates in long-tail countries creates the single biggest risk of a runaway SNS bill. Run aws sns get-sms-attributes per account, then aws sns set-sms-attributes --attributes MonthlySpendLimit=<dollar-amount> to set the cap. Pair with a CloudWatch alarm on the SNS SMS spend metric and you have a hard ceiling that prevents the worst-case bill spike.
For the receiving end of SNS-to-SQS fanout patterns, the SQS pricing post covers the polling, FIFO, and chunking details that compound with the SNS publish line.
Frequently asked questions
Why is SNS publish billed separately from delivery?
Are SQS subscriptions to SNS free?
How expensive is SNS SMS really?
Does FIFO SNS have the same throughput limits as FIFO SQS?
How does message filtering affect the bill?
What is the cheapest way to fan out an event to multiple regions?
What happens when an HTTP subscription endpoint is down?

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.




