## TL;DR

The workflow enrolled a fraction of the expected contacts because the enrollment triggers excluded most of them, a suppression list blocked them, or re-enrollment is off for already-enrolled contacts. Compare the target list against the enrolled list, check suppression, and fix the trigger or enroll the remainder manually.

## Error

```text
(No error; the symptom is 200 of 2000 contacts enrolled with no failures logged.)
```

## Steps

1. Export the intended 2000 contacts and the workflow's enrollment history. Expected: you can diff who got in and who did not.
2. Check the suppression list on the workflow. Expected: suppressed contacts explain a chunk of the gap.
3. Check re-enrollment settings: contacts that completed the workflow before are skipped unless re-enrollment is on. Expected: repeat contacts explain another chunk.
4. Read the enrollment triggers against a non-enrolled contact's properties. Expected: you find the trigger criterion it fails.
5. Fix triggers or suppression, then manually enroll the remainder (or clone the workflow for the backlog). Expected: all 2000 end up enrolled.

## When to use

- A workflow enrolls far fewer contacts than expected.
- An agent bulk-enrolls contacts and most never enter.
- After changing triggers, enrollment drops.

## When not to use

- Salesforce flow enrollment (different engine).
- Workflow actions failing after enrollment (different problem).

## Tool compatibility

- HubSpot workflows; enrollment triggers and suppression lists.
- Contact lists feeding enrollment.

## Variant phrasings

### workflow enrolled only some contacts

Suppression or triggers; diff the lists.

### contacts not entering workflow

Same diagnosis from the contact side.

## Why it happens

Enrollment is a filter pipeline: triggers, suppression, re-enrollment, and list membership all must pass. Each stage silently drops contacts, so the enrolled count is the intersection nobody inspected.

## Edge cases

- Manually enrolled contacts bypass triggers but not suppression; suppression still wins.
- Property-based triggers evaluate at enrollment time; a contact that qualifies later needs re-enrollment on.
- Deleted and bounced contacts never enroll; clean the list first.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_rp4uT8FqW_UtPLG1yHvOzw
