Estimate SNS deliveries per month (messages x subscribers)

SNS costs are usually delivery-driven, so you need a good delivery estimate. The easiest model is fan-out: publishes x matched subscribers. The mistake is to use subscriber count without accounting for filter policies and retries. This guide shows a workflow that gets you close quickly and stays valid when incidents happen.

Delivery estimate inputs

  • Publishes/month: per topic baseline volume.
  • Matched fan-out: subscribers x match rate.
  • Retry factor: failed deliveries multiply requests.

Step 1: estimate publishes per month

  • Split by topic (a few topics usually dominate).
  • Separate prod vs non-prod (test topics can create noise).
  • Keep a peak scenario if alerts are a major use case.

Step 2: estimate matched fan-out (subscriptions that actually receive messages)

Use matched subscribers per publish, not "total subscriptions". If filter policies exist, only some subscriptions match each message.

  • Matched fan-out = total subscriptions x match rate
  • Example: 100 subscriptions with a 20% match rate -> 20 matched deliveries per publish

Step 3: compute baseline deliveries

  • Deliveries/month ~ publishes/month x matched fan-out
  • Do it per topic first; then sum across topics.

Step 4: add retry multiplier for failures (the hidden cost driver)

Delivery failures and slow endpoints can cause repeated attempts. The easiest way to model this is a multiplier:

  • Effective deliveries ~ baseline deliveries x (1 + retry factor)
  • Retry factor depends on endpoint reliability and your retry behavior.
  • Keep an "incident week" scenario; it can dominate monthly variance.

Step 5: sanity-check with downstream signals

  • SQS subscriptions: queue ingress volume can approximate deliveries.
  • HTTP/S endpoints: request logs show delivery attempts (including retries).
  • Email/SMS: treat as separate because operational behavior differs (deliverability and retries).

Worked example (structure)

  • Publishes/month: 10M
  • Subscriptions: 50
  • Filter match rate: 40% -> matched fan-out = 20
  • Baseline deliveries/month ~ 10M x 20 = 200M
  • Incident retry factor: +10% -> 220M effective deliveries

Turn deliveries into cost

Use AWS SNS cost calculator with publishes/month, deliveries/month, and your effective per-1M pricing assumptions.

Validation checklist

  • Validate publishes and deliveries from a representative week (and keep a separate incident sample).
  • Confirm filter policies are actually reducing matched fan-out as intended.
  • Track failure rate; if it's non-trivial, include retries in the model.
  • Re-check after architecture changes (topic splits, new subscribers, new endpoints).

Related guides

Sources


Related guides


Related calculators


FAQ

What's the fastest way to estimate deliveries?
Deliveries/month ~ publishes/month x matched subscribers per publish. If filters drop most messages, use the match rate to reduce effective fan-out.
How do retries affect deliveries?
Retries increase delivery attempts. If endpoints are slow or failing, the same message may be attempted multiple times, increasing effective deliveries and total cost.
How do I validate the estimate quickly?
Use a representative week of SNS metrics to get publishes/deliveries and failure rate, then scale to monthly. Compare to your fan-out model by topic.

Last updated: 2026-02-07