How to send 100k emails consistently using SES

Email is how HireFT talks to job seekers: application updates, job matches, referrals. Our Amazon SES account can send well over 100,000 emails a day. Getting the quota was the easy part. Sending that much, every day, without landing in spam or getting the account paused, took a year of mistakes. Here is what I learned.

1. The quota is not the limit. Reputation is.

SES will happily give you a large daily quota. What it watches is how recipients react. AWS may put your account under review when your complaint rate reaches 0.1% or your bounce rate reaches 5%, and it can pause sending at 0.5% complaints or 10% bounces. A pause stops everything, including the emails your users depend on. Treat those two numbers as the real limits on how much you can send.

2. Reputation belongs to the whole AWS account

This one cost me. SES tracks complaints and bounces per account, not per domain. Running outreach from a different domain in the same account does not protect your main domain: every spam click still counts against the account that sends your product email. Anything experimental or high-risk now goes out from a separate AWS account and a separate domain, so a bad week there can never pause the emails users rely on.

3. Authenticate everything, then check the headers

Set up SPF, DKIM and DMARC before you send a single email, and make sure DKIM signs with your own domain, not only amazonses.com. Then send yourself a message and read the raw headers. You want dkim=pass, spf=pass and dmarc=pass for your domain. Start DMARC at p=none, watch the reports, and tighten it once everything passes.

4. Warm up like you mean it

A new domain or account has no reputation, and mailbox providers are suspicious of sudden volume. I ramp over four weeks: about 20 a day for the first few days, then 40, 75, 150 and 250, and only then the full daily volume. The sender enforces the ramp in code, so a busy day cannot skip ahead.

5. Tracking can push you into Promotions

If your SES configuration set records opens and clicks, SES rewrites every link through its tracking domain and adds an invisible image. Both are strong signals that an email is marketing. For emails that should feel personal, I use a configuration set with open and click tracking turned off, and measure clicks with UTM parameters on the landing page instead.

6. One header decides the Primary tab

Our emails to signed-up users kept landing in Gmail's Promotions tab. I removed the logo, the big button, the emoji and the tracking, and they still went to Promotions. Then I sent the exact same email twice, changing only one thing: the List-Unsubscribe header. Without it, the email landed in Primary. With it, Promotions. Gmail requires one-click unsubscribe for marketing from anyone sending more than 5,000 emails a day to Gmail users, so keep it on anything promotional. For genuinely personal notifications, it is worth testing without it, while watching your spam rate closely.

7. Watch the numbers SES cannot see

Gmail does not report most spam clicks back to SES, so your SES complaint rate says little about Gmail, which is where most of your users are. Set up Google Postmaster Tools for your domain. It shows the spam rate Gmail users report, and Gmail wants it below 0.3%, ideally under 0.1%. I check it after every change to how we send.

8. Make the system stop itself

I do not trust myself to watch dashboards every day. CloudWatch alarms email me when the complaint rate gets close to AWS's pause threshold. The outreach sender goes further: before each run it reads the account's recent send statistics and refuses to send if complaints or bounces have climbed. A sender that halts on its own is worth more than any amount of vigilance.

9. Boring engineering keeps volume consistent

10. Measure your measurements

For months our open rates were undercounted by more than half, because Gmail's image proxy was filtered out as a bot. Every decision built on that number was quietly wrong. Before trusting an email metric, check it against something you can verify by hand.

The short version

Authenticate properly, warm up slowly, keep risky sending in its own account, turn tracking off where it hurts, watch Postmaster Tools, and build a sender that stops itself when things go wrong. Do that, and 100k emails a day becomes routine instead of a gamble.

Get new posts by email

Occasional notes on building HireFT. No spam, unsubscribe anytime.

Or follow via RSS