The pipeline
Sending & deliverability
Gmail, the daily cap, pacing like a person, and the bounce brake.
Approved emails leave from your own Gmail, one at a time, spread through the working day, the way a person sends them. Deliverability is the real limit on the whole system, so sending is the most guarded stage.
The rules#
| Setting | Value | Why |
|---|---|---|
| daily_send_cap | 25 | A personal Gmail sends cold mail safely at about this rate. |
| send_window | 10:00–19:00, Mon–Fri | People at their desks; no cold mail at weekends. |
| pacing.front_load | false | Spread across the window — never a burst at 10:00. |
| pacing.max_per_run | 1 | A laptop waking from sleep never fires a backlog. |
| pacing.jitter_fraction | 0.35 | Slot times vary, so it doesn’t look automated. |
| guessed_daily_cap | 25 | A separate allowance for pattern-guessed addresses. |
| bounce_brake | 6 in 7 days | Past this, guessed addresses stop; verified ones still go. |
| contact / company cooldown | 30 days | Nobody is asked twice in a month. |
| per_domain_daily_cap | 3 | At most three cold emails a day into one company’s mail domain; the rest wait for a later day. |
| spam_pause_hours | 48 | After Gmail refuses any mail as spam, no cold mail leaves at all for two days. |
| spam_block_cooldown_days | 21 | …and none goes into that company or its domain for three weeks. |
A sending day#
- 10:16first email
- 10:39email
- 10:48email
- 11:20email
- …about one every 20 minutes, jittered
- 18:26email
- 18:4825th — the last of the day
What happens to one email#
- Is a slot due?Every 5 minutes the send job asks how many slots have passed today, minus how many were used, capped at one per run.
- Pick the next approved emailFollow-ups first, then cold asks. A guessed address is skipped if the guessed cap is spent or the brake is on.
- Re-check the personStill ready, not suppressed, not cooling down — things can change between approval and sending.
- Check the company’s domainA cold email waits (it is never rejected) if three have already gone into that domain today, or a spam block is still cooling down.
- Claim and reserveAtomically move the email from approved to sending, and reserve one unit of today's cap in the ledger before the mail leaves.
- SendOver Gmail SMTP with your app password (or, in dry-run mode, written to
outbox/). The message is built the way Gmail's own compose builds one — text with a minimal HTML twin, links on words, no tracking, no attachment, none of the headers that give a script away. On failure the reservation is released and the email marked failed.
What happens if you push it
On 19 Oct 2026, with the old settings (cap 60, front-loaded, 40–90 s apart), about thirty near-identical emails went into one company within an hour. Four guessed addresses bounced and Gmail refused all further mail with 550 5.4.5 Daily user sending limit exceeded after 24 sends. The rules above are the fix. Finish a company over more days — never by raising the cap.And a second time, a different way
On 23 Oct 2026 Gmail let mail through but refused 9 of 24 asks into one company as spam (5.7.1 Message blocked): about fifteen near-identical asks had gone into the same domain within hours. Hence the per-domain cap, the 48-hour pause and the 21-day cooldown above, and the review gate's deliverability flags. These settings only ever hold mail back; the 25-a-day cap is unchanged.Pausing and checking#
outreach preflight reports live-send readiness (red / amber / green with fixes); outreach ledgershows today's use. To pause sending, unload com.zonuly.tick.send (see Runbook) or reply “pause” to a notification email when the bot is on.