Sending reputation and allowance
Contents
Every project holds a sending tier from 0 to 7. The tier caps how many emails your workflows send per hour and per day, and how large one batch audience can be. A new project starts at tier 0 and moves up one tier at a time as it sends with low bounce and spam complaint rates.
Why the caps? All workflow email leaves through PostHog's shared sending infrastructure. Mailbox providers judge that infrastructure on the bounce and complaint rates of everything it sends. One project with a bad list hurts deliverability for every project. The tiers keep an unproven project's volume small until its record shows it is safe.
You see both parts on the Reputation tab under Workflows in PostHog. The sending health card shows your rates over the last 30 days with a per-workflow breakdown. The sending allowance card shows your tier, its caps, and how much of them you used.
Sending health
The health card reports three numbers over a trailing 30-day window.
| Number | What it measures | Threshold |
|---|---|---|
| Bounce rate | Hard bounces divided by emails sent | Stay under 2% |
| Spam complaint rate | Spam complaints divided by emails sent | Stay under 0.1% |
| Emails sent | Workflow emails sent in the window |
Mailbox providers use the same thresholds. A project above either threshold cannot move up a tier, and PostHog can move it down. Opt-outs and suppression explains how PostHog keeps hard-bounced addresses off your lists. The troubleshooting guide shows how to find the invocations behind a bounce or complaint.
Sending allowance tiers
| Tier | Emails per hour | Emails per day | Largest batch audience |
|---|---|---|---|
| 0 | 50 | 100 | 100 |
| 1 | 200 | 1,000 | 1,000 |
| 2 | 600 | 3,000 | 3,000 |
| 3 | 2,000 | 10,000 | 10,000 |
| 4 | 6,000 | 30,000 | 30,000 |
| 5 | 20,000 | 100,000 | 100,000 |
| 6 | 60,000 | 300,000 | 300,000 |
| 7 | 200,000 | 1,000,000 | 1,000,000 |
Tier 0 is a probation tier for a domain with no sending record. Its caps sit far below tier 1 on purpose. A first real send from an unknown domain is the send most likely to generate complaints, and a small cap keeps the damage small while complaint feedback catches up.
An email that does not fit in the current hour or day stays queued. The worker sends it once the allowance frees up. The workflow's invocations show the delay.
A batch send is different. When the audience is larger than the tier allows, the trigger button blocks the launch and shows the current limit. Add filters to narrow the audience, or wait for the next tier. This batch cap only applies to workflows with an email step.
How a project moves up a tier
PostHog reviews every project's tier once a day. A project moves up one tier when all four conditions hold.
- Time at the tier. The project held its current tier for at least 3 days at tiers 0 to 2, 5 days at tiers 3 and 4, and 7 days from tier 5 up. A full climb from tier 0 to tier 7 takes about five weeks, which matches the warmup period mailbox providers expect from a new sender.
- Use of the tier. On at least 2 separate days since it reached the tier, the project sent at least half of its daily cap. A project that sends nothing has no record to judge, so an unused tier does not earn the next one.
- Clean rates over the last 30 days. The bounce rate stays under 2% and the spam complaint rate under 0.1%. PostHog only judges a rate once there is enough volume to measure it: 200 sends for the bounce rate and 1,000 sends for the complaint rate. Below those volumes, 3 or more complaints still block the promotion.
- No reputation flag from the sending provider. The provider tracks complaint rates against its own feedback loops, which can show a problem your internal rates do not.
A project moves up one tier per review. Sending a large volume once does not skip a tier.
How a project moves down a tier
A project moves down one tier when any of the following happens over the last 7 days.
- Its bounce rate or spam complaint rate goes over the thresholds above.
- The sending provider reports a high reputation impact for the project.
After such a demotion, PostHog waits 7 days before it demotes the project again for the same kind of reason. One incident costs one tier, not the whole ladder. The project can move up again once its 30-day rates are clean and it meets the other promotion conditions.
Two more events change a tier.
- Inactivity. A project above tier 0 that sends nothing for 30 days drops one tier, and one more for each further 30 days of silence. Mailbox providers keep about a month of reputation history, so an allowance the project stopped using no longer reflects a current record.
- Sending suspended. When PostHog staff or the sending provider suspend email sending for the project, the project returns to tier 0. It climbs again from there once sending resumes.
Frequently asked questions
Can I request a higher tier?
Sending earns tiers, and the daily review is the same for every project. If you have a verified sending history elsewhere and need volume from day one, contact support and explain your use case.
Do transactional emails count against the allowance?
Yes. The allowance counts every email a workflow sends, regardless of message category.
Does the allowance apply to SMS, push, or webhooks?
No. Only email touches the shared sending reputation, so only email steps and batch sends with an email step are capped.
How do I keep my bounce and complaint rates low?
A bounce means the address does not exist or refuses mail. A complaint means a real person got your email and marked it as spam. Both come down to who you send to and what you send.
Send only to people who asked. Every address on your list should come from a signup, a purchase, or an explicit opt-in in your product. Do not import a purchased, scraped, or "partner" list. Those lists are the fastest way to a demotion, because they hold dead addresses that bounce and strangers who report spam.
Trust the suppression list. PostHog adds an address to the suppression list after it hard-bounces. Leave it there. Removing an entry to retry a bounced address only bounces again and counts twice.
Make unsubscribing easy. Put {{unsubscribe_url}} in every marketing email, in the footer where people expect it. A visible unsubscribe link is the difference between someone leaving your list and someone clicking "Report spam". Both remove them, but only one hurts your reputation. The email merge tags explain the one-click variant, which mailbox providers use for their own unsubscribe button.
Send from a domain you set up properly. Verify the domain on the Channels tab so SPF and DKIM pass, and add a DMARC record. Use a real sender name people recognize, and the same from-address every time. A changing sender or a generic "noreply" address gets more complaints.
Match the subject to the content. A subject line that promises one thing and delivers another is the most common reason a real customer reports an email. Skip all caps, bare exclamation marks, and "RE:" on emails that are not replies. Write the way you would to one person.
Send steadily, not in bursts. A weekly digest to an active list builds reputation. A one-off blast to a list that has not heard from you in six months burns it, because the addresses have gone stale and the recipients have forgotten who you are. If you must re-engage a dormant list, send to the most recently active users first and watch the rates on the Reputation tab before you continue.
Prune addresses that never engage. Someone who has not opened or clicked anything in a year is unlikely to start, and mailbox providers read a long run of ignored mail as a signal against you. Use a cohort of engaged users as the audience instead of "everyone".
Here is what this looks like in practice.
Subject: 🔥🔥 LAST CHANCE!!! Your account will be DELETED
Sent from noreply@mail-blast-3.example.com to every address ever entered into a signup form, including the ones that bounced last quarter. No unsubscribe link, one image with all the text inside it, and a link shortener in front of every URL.
Subject: Your weekly usage summary for Example App
Sent from Jamie at Example App <jamie@example.com> to users who signed up and have logged in within the last 90 days. Plain text with one clear link to the dashboard, a short line explaining why they got the email, and {{unsubscribe_url}} in the footer.
Before a large send, use a test send to your own address and to a personal account on a big mailbox provider. If it lands in spam for you, it will for your users too. After the send, check the Reputation tab the next day. Complaint feedback lags by hours, so the rates for a send are only complete after that.