**TL;DR**

Validate the list before the send, not after. Every new import gets a completeness check on the fields your templates need, and records missing required values get quarantined instead of sent with a generic fallback. Set an abort threshold: if more than a small percent of the list is missing first names, the whole batch stops. Sending 'Hi there' to 500 CEOs is not a personalization miss, it's a list-validation miss.

```text
agent sent 'Hi there' to 500 CEOs because the first_name column was null in the new list and the agent never checked
```

## Steps

1. Define required fields per template (first name, at minimum, plus anything the copy depends on) and run a completeness report on every new list import before it enters a sequence.
   Expected: the import report shows exactly how many records are missing each required field, before a single send.
2. Quarantine records missing required fields into a review list instead of sending them with the fallback. The fallback exists for the occasional gap, not for a whole column of nulls.
   Expected: a list with 500 blank first names quarantines all 500 and the sequence starts only with the clean records.
3. Set a batch abort threshold: if the missing rate for any required field is above it, stop the batch and alert the operator. A 5 percent gap is data noise; a 90 percent gap is a broken import.
   Expected: an import with the first_name column entirely null aborts the batch with an alert, instead of sending.
4. Check the column mapping on import, not just the values. A null column often means the import mapped the wrong source column, and the data exists somewhere else in the file.
   Expected: re-mapping the import fixes the nulls at the source instead of patching them with fallbacks.
5. After the send, sample the outbox and confirm no 'Hi there' or bare fallback greetings went out. The check is cheap and it catches what the earlier gates missed.
   Expected: a post-send sample of 50 emails shows zero generic-fallback greetings.

## Use this when

- a new list import has blank name fields and the agent is about to send
- fallbacks are rendering for a large share of a batch instead of the occasional record
- you need an import-time data quality gate before sequence enrollment

## Not for this skill when

- tokens rendering literally because the field mapping is wrong (that's a token-validation problem)
- names that are present but wrong or outdated (that's an enrichment-accuracy problem)
- emails landing in spam or bouncing (that's a deliverability problem)

## Variant phrasings

- first_name column null on import, agent sent generic greeting to whole list
- bulk send with empty name fields, fallback rendered for 500 leads
- new CSV missing first names, agent never checked before sending

## Why it happens

The import brought in a first_name column that was entirely null, and nobody checked. The template's fallback kicked in for every single record, turning a personalized sequence into 500 identical 'Hi there' emails. The fallback did exactly what it was built to do; the failure was letting a list with a fully missing required field into the sequence at all.

## Edge cases

- a column that is null for every record usually means a mapping error on import; a column null for 3 percent of records is usually real missing data; handle them differently
- some cultures and markets genuinely lack first names in the data; quarantining the whole region is wrong, so let the operator confirm before aborting on regional patterns
- whitespace-only values pass a null check but render as empty; trim and re-check before deciding a field is populated
- the abort threshold should scale with list size; 10 missing out of 50 is different from 10 missing out of 50,000

## Provenance

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