Execution Engine
How Pipelime's email execution engine works.
Execution Engine
The execution engine is the core system responsible for reliably sending emails on schedule.
Architecture
Campaign → Scheduler → Job Queue → Worker → Gmail API- Scheduler — Evaluates active campaigns and creates send jobs based on scheduling rules
- Job Queue — Persistent queue with at-least-once delivery guarantees
- Worker — Processes jobs, renders templates, and sends via Gmail API
- Tracker — Records send events and updates campaign progress
Idempotency
Each email send is uniquely identified by the combination of:
- Campaign ID
- Contact ID
- Step number
A unique constraint prevents the same email from being sent twice, even if a job is retried.
Retry Strategy
Failed sends are retried with exponential backoff:
| Attempt | Delay |
|---|---|
| 1 | Immediate |
| 2 | 30 seconds |
| 3 | 2 minutes |
| 4 | 10 minutes |
| 5 | 1 hour |
After 5 failures, the send is marked as failed and the contact is flagged for review.
Blocklist Enforcement
Before every send, the engine checks:
- Is the contact's email on the blocklist?
- Is the contact's domain on the blocklist?
- Has the contact unsubscribed?
- Has the contact replied (if
stop_on_replyis enabled)?
If any check fails, the send is skipped.
Email Threading
Follow-up emails (steps 2+) are sent as replies to the original thread. Pipelime uses Gmail's In-Reply-To and References headers to maintain threading.
This means follow-up emails appear in the same conversation in the recipient's inbox, improving reply rates.
Rate Limiting
The engine enforces rate limits at multiple levels:
- Per-account daily limit — Respects each email account's configured daily cap
- Send interval — Minimum time between sends from the same account
- Warmup limits — Reduced limits for accounts in warmup phase
