Estimate email volume per month (transactional + marketing)
Start with a calculator if you need a first-pass estimate, then use this guide to validate the assumptions and catch the billing traps.
This page is the send-measurement workflow, not the bill-boundary page: the goal is to turn product events, campaign calendars, recipient counts, and resend behavior into a defendable email-volume model.
If you still are not sure which costs and traffic belong inside the SES bill, go back to the pricing guide first.
Step 1: split volume by intent (because variability differs)
- Transactional: receipts, signups, password resets, security notifications
- Product notifications: workflow alerts, digests, reminders
- Marketing: campaigns, newsletters, onboarding sequences
Method A: transactional volume from user actions (baseline)
A defendable baseline is built from events you already track.
- Orders: orders/month × emails per order
- Signups: signups/month × emails per signup flow
- Password resets: resets/month × emails per reset
- Notifications: notification events/month × recipients per event
If you don’t have events broken out yet, start with MAU × avg emails per user and refine later.
Method B: marketing volume from campaign calendar
- Campaign sends: recipients per campaign × campaigns/month
- Variants: A/B tests and segment splits multiply sends
- Test sends: internal tests and previews (small, but include if frequent)
- Resends: resend-to-non-openers can add a predictable extra %
Step 2: add the “retry/duplicate” factor (the common spike driver)
Real systems resend. Your goal is to model it explicitly.
- Retry factor: timeouts and transient failures cause resend attempts
- Duplicate factor: bugs or race conditions send multiple emails for one event
- Alert storm factor: incidents trigger high-frequency notifications
Practical approach: keep two scenarios: baseline (e.g., +3–10%) and incident month (e.g., +30–200%) depending on your product.
Step 3: sanity checks (catch bad assumptions fast)
- Does the estimate match your historical “emails/day” shape (weekday vs weekend)?
- Is marketing bursty (campaign days) vs transactional steady?
- Are you double-counting recipients (multiple recipients per event)?
- Do you have a “silent resend” job that retries failed deliveries in bulk?
Evidence pack for a defendable SES volume model
- Event source: where transactional email counts came from, including orders, signups, resets, alerts, or other user-triggered flows.
- Campaign source: where marketing send counts came from, including campaign calendars, segment splits, tests, and resend policy.
- Resend source: where retry, duplicate, or outage-driven send inflation was observed instead of guessed.
- Open uncertainty: anything still modeled loosely, such as silent resend jobs, missing event instrumentation, or temporary incident patterns.
Worked example (structure)
- Transactional: 200k orders/month × 1 email/order = 200k
- Password resets: 30k/month × 1 = 30k
- Notifications: 100k events/month × 2 recipients = 200k
- Marketing: 2 campaigns/month × 500k recipients = 1,000k
- Baseline subtotal = 1.43M emails/month
- Add +5% retry/duplicate baseline → 1.50M
- Incident month scenario: +50% alerts/retries → 2.15M
Turn volume into cost
Use AWS SES cost calculator with your baseline and incident volume.
How to validate with real data
- Pick a representative week of send logs/metrics and compute average daily sends.
- Validate separately for transactional vs marketing (their curves differ).
- Check resend/duplicate rate by message idempotency keys or provider event logs.
Related guides
What this page should hand off next
- Hand off to SES pricing if your measurement work changes what you think belongs in the SES bill versus the surrounding workflow bill.
- Hand off to SES cost optimization once the send model is stable enough to judge before and after changes.
- Do not move into optimization with only guessed resend rate or guessed incident volume if the biggest send driver is still unclear.