Skip to main content
A campaign can show fewer recipients than the list it targets, or finish with fewer sends than its Recipients total. In most cases nothing is broken. Lettr only emails contacts who currently consent, and several rules can remove a contact between the audience selection and the send. This guide explains each rule in the order they apply and how to find which one affected a campaign.

How Lettr Counts Recipients

A campaign goes through three filters before an email leaves. Each one removes contacts for a different reason.
1

Recipients are resolved when the campaign is prepared

When the campaign is sent (or a scheduled campaign fires), it enters Preparing and Lettr builds the recipient list from your audience selection. Only contacts with status subscribed who are not paused are included, and if the campaign targets a topic, only contacts subscribed to that topic. The resulting number is the campaign’s Recipients total.
2

Consent is re-checked for every batch

Emails go out in batches, and a large send can take a while. Before each batch, Lettr checks every pending recipient again: the contact must still be subscribed, not paused, and (for topic campaigns) still in the topic. Anyone who opted out, paused, or left the topic since the list was built is dropped from that batch.
3

The delivery infrastructure applies its suppression list

Separately from contact status, SparkPost does not deliver to addresses on your suppression list, so a suppressed address never gets the email and never produces a delivery event, even though the contact in your audience may still say subscribed. See Suppressed Addresses below.
The Recipients total is fixed when the campaign is prepared. Contacts dropped by the per-batch re-check do not lower it, which is why a finished campaign can show fewer sends than recipients.

Cause 1: Contact Status

Only subscribed contacts receive campaigns. This applies even when you choose All contacts, a list or a segment. How to check: open the list or the Audiences page and filter by status. The difference between the list size and the number of subscribed contacts is usually most of the gap.

Cause 2: Paused Contacts

A recipient can pause marketing email for 30, 60 or 90 days from the preferences page. A paused contact stays subscribed, so they look eligible in the status filter, but campaigns skip them until the pause ends. How to check: in Audiences, use the Paused filter. Paused contacts also carry a violet Paused badge with the end date, and exports and the API include a paused_until value.
Pauses are set by recipients only. Neither the app nor the API can create or edit one, and the pause expires on its own, so there is nothing to fix on the sender’s side. A contact whose pause ends after the campaign finishes is not sent that campaign afterwards.

Cause 3: Topic Opt-Outs

If the campaign targets a topic, only contacts subscribed to that topic are included. A contact who unticked the topic on the preferences page stays subscribed overall but no longer receives campaigns for that topic. How to check: open the Topics page and compare the topic’s Subscribers figure with the list you expected. See Topics for how subscriptions are managed.

Cause 4: Changes While the Campaign Is Sending

Recipients are fixed when the campaign is prepared, but their consent is not. On a large send, hours can pass between the first and last batch. A contact who unsubscribes, pauses or leaves the topic in that window is left out of the next batch. Lettr marks these recipients as skipped. A skipped recipient was deliberately not emailed, and it is final: it stays skipped even if the pause ends later or the contact resubscribes. Once all batches finish, any recipient who was never sent to because of the consent re-check is closed out as skipped.
The campaign page does not show a skipped count. It shows the Recipients total, a sent-over-total progress figure only while the campaign is sending, and the campaign stats once it has finished. For a final comparison, use the campaign stats, the Events page, or the API sent_count against total_recipients; the difference is contacts that were skipped or failed.
The same gap appears over the API, where the campaign object carries total_recipients and sent_count.
Compare total_recipients with sent_count for the campaign in question.

Suppressed Addresses

Suppression is a different mechanism from contact status, and the two don’t always agree.
  • Contact status is a field in your Lettr audience. It is what the campaign recipient filter reads.
  • The suppression list is the delivery infrastructure’s list of addresses it will not send to: hard bounces, spam complaints and unsubscribes recorded on that side. See Suppression Lists.
An address can be on the suppression list while the contact is still subscribed in your audience. Lettr’s campaign recipient filter does not read the suppression list, so such a contact is counted as a recipient and passed on for delivery, where SparkPost does not deliver to the suppressed address. The contact does not receive the email. The reverse also holds. Unsubscribing a contact in Lettr’s audience updates only their contact record. It does not add the address to the suppression list.
In practice the two usually line up: a hard bounce or spam complaint normally also turns the contact into bounced or complained, which removes them at step 1. The mismatch shows up for older contacts, imported lists, or addresses that were suppressed through other sending (for example, transactional email to the same address).
How to check: open the Events page and search for the address. Ask Adamko “is jane@acme.com suppressed?” to see whether the address is on the suppression list and why. Lettr has no separate Suppressions page in the app.
Don’t try to push a suppressed address through by re-sending. A suppressed address was added because earlier mail failed permanently, or the person complained or opted out. Fix the cause (a typo, a closed mailbox, a lost consent) rather than the symptom.

Diagnosing Your Campaign

1

Read the numbers

Note Recipients on the campaign page. Compare it with the list or segment size you expected. A gap before sending is causes 1 to 3. A gap between Recipients and the final sent figure (from the campaign stats, Events or the API sent_count) is cause 4, a failed batch, or suppression.
2

Break the audience down by status

Filter the list by status and by Paused. Add up unsubscribed, bounced, complained, unverified and paused contacts. For a topic campaign, also compare topic subscribers with list members.
3

Check the live estimate next time

The Audience step of the campaign builder shows a live recipient estimate using the same resolution logic as a real send. An estimate lower than expected means the reason is one of causes 1 to 3.
4

Look up specific missing contacts

For a named contact, open their record and check status, Paused badge and topics. If all three are fine, search Events for the address and check for suppression.

Common Questions

The estimate is computed live. Between the estimate and the moment the campaign is prepared, contacts may have unsubscribed, paused or changed segment membership. Segments are re-evaluated at send time, so the final total reflects the audience at that moment.
Only if they are consenting again. Skipped contacts were removed because they withdrew consent, so don’t email them. If a paused contact returns when the pause ends, include them in your next campaign.
Lettr has no exclusion control in the audience builder. Build a segment such as “in List A and not in List B” instead.
If no contact matches the audience selection when the campaign is prepared, the campaign has no one to send to and fails. Check statuses and the audience selection.
Sent means the message was accepted for delivery. Bounces, deferrals and suppressed addresses reduce deliveries afterwards. See Bounce Diagnosis and Delivery Issues.

Audience Selection

How campaign recipients are chosen and filtered.

Sending & Scheduling

Campaign states and how batches are sent.

Email Preferences

Topics, pauses and unsubscribes on the recipient side.

Understanding Suppression Lists

What the suppression list is and what adds to it.