Recipients
A campaign reaches the contacts that match its recipient filter at send time. The filter resolves dynamically. A contact added five minutes before launch is included if they match.
Filter dimensions
A recipient filter combines:
- Labels. One or more labels. Contacts carrying any of the labels are candidates.
- Segments. Saved filter rules from the Mailtarget CDP. Used for cohort-based targeting.
- Include and exclude. Both labels and segments support exclusion. Exclude wins over include.
- Status. Mailtarget always excludes Unsubscribed and Hard Bounce contacts. You do not need to add this.
- Suppression list. Account-level suppression always wins. Contacts on the suppression list never receive the send.
Include and exclude
Common shapes:
| Intent | Filter |
|---|---|
| All newsletter subscribers | include labels: [newsletter] |
| Newsletter subscribers excluding VIPs | include labels: [newsletter], exclude labels: [vip] |
| Re-engagement to inactive Customers | include segment: cohort_inactive_customer_90d |
| One-off product update minus opt-outs | include labels: [product_update], exclude labels: [opted_out_product_update] |
Multiple include labels combine with OR. Multiple exclude labels combine with OR. The exclude set is subtracted from the include set.
Recipient API shape
{
"recipients": {
"labelIds": ["lbl_newsletter", "lbl_product_update"],
"excludeLabelIds": ["lbl_opted_out_product_update"],
"segmentIds": ["seg_active_last_30_days"],
"excludeSegmentIds":["seg_complainants"]
}
}
The exact field names follow the OpenAPI spec at /v2/email-marketing.
Preview the count
Before launching, run a count check.
curl https://api.mailtarget.co/v2/email-marketing/{campaignId}/count-recipient \
-X POST \
-H "Authorization: Bearer $MAILTARGET_API_KEY"
The response counts contacts that pass the filter and are eligible (Active status, not suppressed). If the count is much lower than expected, the most common reasons are listed below.
Why my recipient count is lower than expected
| Cause | Fix |
|---|---|
| Pending contacts (double opt-in unconfirmed) | Confirm opt-in or remove pending requirement at the application layer. |
| Contacts on suppression list | Remove from suppression list only after confirming the underlying reason no longer applies. |
| Hard Bounce contacts | Excluded by design. Do not remove from suppression. |
| Recently unsubscribed | Excluded by design. The unsubscribe is a webhook event; filter responds within the same request cycle. |
| Label or segment renamed | Filter references stale ID. Update the campaign filter to the new ID. |
| Segment filter overly narrow | Adjust segment definition. See Segmentation. |
Send to all active contacts
Possible but rarely the right choice. Sending to the entire active list with no segmentation produces low engagement and damages domain reputation. Use a label or segment.
If you must send to all, the dashboard exposes an "All Active" recipient option. The API equivalent is leaving recipients empty ({ "recipients": {} }) which the platform interprets as "all active contacts on the account."
How recipient filter interacts with Mailtarget CDP
A campaign recipient filter is a query against the Contact Book. The query lives on the campaign object; the data lives in Mailtarget CDP.
This means:
- CDP funnel status is a valid filter dimension via segments. Build a segment with
Funnel status = Customer AND Last open after 2026-04-01, reference it from the campaign. - Custom contact fields are filter inputs. A contact field
subscription_tierlets you target by tier without managing a separate label. - Label updates fire automatically. Add a label to a contact via API, the next campaign that filters for that label includes them.
Common mistakes
- Hard-coded recipient counts. Do not store the count from
count-recipientand use it later. The count drifts as contacts move in and out. Rerun before launch. - Forgetting to exclude. A campaign to "active customers" without
exclude segment: complainantsmay reach people who flagged you as spam. Build exclude lists once and reuse. - Per-recipient overrides. The recipient filter is per-campaign, not per-recipient. To send different content to different cohorts, send multiple campaigns or use a template with substitution data.
Related
- Mailtarget CDP for the underlying contact data model.
- Segmentation for filter dimensions.
- Campaigns for the campaign object.
- Compose and Send guide.