Skip to main content
When your application needs to send thousands or millions of emails, how you structure and pace those sends directly affects deliverability, performance, and cost. This guide covers practical strategies for batching, rate management, and recipient grouping at scale.

Batch Sending with the API

Lettr’s API supports sending to multiple recipients in a single request. This reduces HTTP overhead and simplifies your sending logic.

Single Request, Multiple Recipients

Per-Recipient Substitution Data

When each recipient needs different content (personalized data, unique links), pass substitution data per recipient:
Using per-recipient substitution data with templates is more efficient than sending individual API calls for each recipient. One request with 100 recipients is faster than 100 individual requests.

Structuring High-Volume Sends

When sending to large lists (tens of thousands or more), you need to break the work into manageable batches and pace them appropriately.

Batch Size

Keep each API request to a reasonable number of recipients. Larger payloads take longer to process and are more likely to time out.

Queue-Based Architecture

For large sends, use a job queue to manage the workload. This gives you control over pacing, retry logic, and failure handling.
Configure your queue workers with appropriate concurrency limits. Running too many workers in parallel will hit Lettr’s rate limits. Start with 2–3 concurrent workers and adjust based on observed throughput.

Rate Management

Lettr enforces rate limits to protect deliverability for all senders. Understanding and working within these limits is essential for high-volume sending.

Handling Rate Limit Responses

When you exceed the rate limit, the API returns a 429 Too Many Requests response with a Retry-After header indicating how long to wait.

Proactive Rate Limiting

Rather than hitting rate limits and retrying, pace your sends proactively:

Recipient Grouping Strategies

How you segment your recipients for bulk sends affects both deliverability and engagement.

Group by Engagement Level

Send to your most engaged recipients first. This front-loads positive signals (opens, clicks) that improve your reputation for the remainder of the send.

Group by Domain

When sending to large lists, consider grouping recipients by their email domain. This lets you monitor deliverability per provider and respond if a specific provider starts throttling.

Monitoring Bulk Sends

Track the health of your bulk sends in real time using webhooks.

Key Metrics to Track

Real-Time Dashboard

Set up a simple counter to track bulk send progress:
Always set up monitoring before starting a bulk send. Discovering a problem after sending to your entire list is much worse than catching it after the first few thousand and pausing.

Common Mistakes

Blasting your full list as fast as possible overwhelms receiving servers and triggers rate limiting or blocks. Pace your sends and start with engaged recipients.
Always check your suppression list before a bulk send. Sending to previously bounced or complained addresses damages your reputation with every hit. Lettr’s suppression list handles this automatically, but you should also maintain your own internal suppression logic.
Treating 429 responses as permanent failures instead of implementing retry logic with backoff. Rate limits are temporary — wait and retry.
Launching a bulk send and walking away. Without real-time monitoring, you won’t catch deliverability problems until it’s too late.
Sending 50,000 individual API requests when you could batch 200 recipients per request (250 requests total). Batching is dramatically more efficient.

Batch Sending

API documentation for batch sending

Rate Limits

Understanding and handling rate limits

IP and Domain Warm-Up

Warm-up schedules for new domains

List Hygiene

Maintain clean recipient lists before bulk sends