Sending

Why was a variable not replaced in an email?

In short

Why did a variable not get replaced in my Reply email?

A variable resolves only when the contact has a value for that exact field, and variable names are case-sensitive. When one cannot be resolved the contact stops with Missing data rather than sending a half-finished email. Open the sequence Preview tab to see which contacts are affected and why.

Quick fix

  1. Open the sequence's Preview tab and step through a few contacts; it renders the message exactly as it will send, and shows what is unresolved.
  2. Check the variable's spelling and its case against the list in the editor. Do not retype it; insert it from the variable picker.
  3. Filter the People tab for contacts with Missing data to see everyone affected.
  4. Fill the missing field on those contacts, or give the variable a fallback value.
  5. Confirm the contacts return to Active and the step is scheduled again.

Didn't work? Contact Reply support; the team can check your account directly.

Symptom

Either contacts sit in Missing data and never send, or a message went out with the raw variable visible in the text. These are two outcomes of the same cause: the value could not be produced.

Most likely causes

CauseHow to recognize it
The contact has no value for that fieldThe Preview tab shows the gap on exactly the contacts that stalled
The variable name is in the wrong caseIt looks right but never resolves, for every contact rather than some
The variable was typed by hand and does not match a real fieldSame symptom as above; the editor's picker would not have produced it
The text was hard-coded instead of using a variableThe wrong name appears for everyone – often a name left over from a draft
An AI-generated variable could not be produced for that contactOnly affects sequences using AI variables, and only some contacts
The generated message exceeded the channel's length limitLinkedIn steps only, and only for contacts whose values made the text long

Diagnostic checklist

  1. Start in Preview, not in the editor. Preview renders per contact and shows what will actually send. The editor shows your template, which always looks fine.
  2. Check whether it fails for everyone or for some. All contacts means the variable itself is wrong: case, spelling, or a field that does not exist. Some contacts means the data is missing on those records.
  3. Compare against the picker. Insert the variable fresh from the editor's variable list and compare it character by character with what is in your template.
  4. Filter the People tab by Missing data. That is the definitive list of who is blocked, and it is usually shorter than expected.
  5. For LinkedIn steps, check the length. A message that resolves correctly can still be refused for being too long once a long company name is substituted in.

Resolution

The field is empty for some contacts

Either fill the field (import an updated file matching on your contact identifier, or edit the contacts directly) or give the variable a fallback so it degrades gracefully instead of blocking. A fallback is almost always better than removing the personalization.

The variable name is wrong

Delete it and re-insert it from the editor's variable picker. Do not retype it: case matters, and a variable that differs only in case is indistinguishable by eye.

The text was hard-coded

Search the step for the literal value (a first name left in from when you drafted the message is the usual culprit) and replace it with the variable.

An AI variable could not be produced

The contact lacks the source material the AI variable needs. Provide a fallback for that variable, or exclude those contacts from the step.

A variable that searches the web could not run

Some AI variables research the recipient on the open internet as the message is written, rather than answering from what the model already knows. Those behave differently from ordinary variables in three ways that produce an empty value:

  • They resolve at the moment of sending, not in preview. A live-search variable is expected to look empty

while you are writing. This is the most common false alarm; nothing is wrong.

  • A short credit balance stops the whole batch, not one variable. If there are not enough credits to

resolve every live-search variable for the contacts being written to, none of them resolve and the contacts are held back rather than sent an incomplete message.

  • If live search is switched off for your account, the variable quietly falls back to answering from

the model's own knowledge instead of refusing. The message still goes, with a less specific answer.

Top up credits and the held-back contacts resolve on the next attempt.

A LinkedIn message is too long

Shorten the template. Leave headroom: the resolved text is longer than the template, and connection notes allow far fewer characters than messages.

Verification

Re-open Preview for a contact that was failing and confirm the message renders completely. Then check the People tab: the contact should be back to Active with its next step scheduled.

Prevention

  • Always insert variables from the picker rather than typing them.
  • Give every variable a fallback when you build the template, not after contacts stall.
  • Preview three or four real contacts before launching, not just the first one.
  • After an import, check the Missing data count before starting the sequence.

FAQ

Does Reply send an email with an empty variable in it?

No. A contact whose variable cannot be resolved is held with Missing data rather than sent a half-finished message.

Are variable names case-sensitive?

Yes. A variable that differs only in case does not resolve.

Why did only some contacts stall?

Because the value is missing only on those contacts. When the variable itself is wrong, every contact stalls.

Still stuck? Contact Reply support

If these steps didn't solve the problem, the Reply support team can look at your account directly. Open the Reply Help Center and send the team a message.

To get an answer faster, include:

  • the variable exactly as it appears in your template
  • whether every contact is affected or only some
  • what the Preview tab shows for one affected contact
  • which sequence and step, and your timezone

Don't send passwords, API keys, or access tokens.

Build with Reply

  • REST API: Contacts – read and fill custom field values in bulk
  • MCP: docs.reply.io/mcp – find contacts with missing data from an assistant