Skip to content

Help

Why did a token not fill in on my email?

Last updated Aug 25, 2026


A token in an email resolves against one specific field on the transaction or client it is sent from. When that field has nothing in it, the token comes back blank instead of guessing at a value.

Fictional workspace: synthetic email.
The Email Composer tab's warning strip for fields that resolved blank.

Why this happens

{{client.phone}}, {{transaction.earnestMoneyHolderName}}, and every other token on the panel are each tied to one exact field on the deal or the client record. A recognized token with nothing behind it, a client with no phone number on file, a deal with no earnest money holder chosen yet, resolves to nothing rather than to a placeholder. KeyFlow tells you when this happens: the Email Composer reads the message as soon as you pick a template and lists every field that came back empty in a warning strip above the body, by its plain-English name, not its raw {{...}} form. A Replace blanks with "N/A" button sits right there so you are not left hunting for which field to go fill in before you send.

A dollar-amount token has caused this once for a different reason: a contract-extracted value that got applied to the Details form as display text, dollar sign and commas included, rather than as a plain number. Anything downstream doing arithmetic on that field read it as nothing rather than as a price. Extracted currency fields are stripped to raw numbers before they reach the form now, so a freshly extracted deal does not hit this. A field edited by hand stays a plain number the same way it always has; typing a dollar sign into a currency field yourself has never caused this.

What to do about it

Open the deal and fill in whichever field the warning strip named, then reopen the composer, or pick to send with N/A in place of anything genuinely optional. Either way, a blank token is telling you about a gap in the deal's own data, not a problem with the message.

A different symptom, a different cause

If the token prints as literal {{...}} text instead of going blank, that is not this problem. A blank means a real, recognized field with nothing behind it; literal braces mean the token itself is unknown or mistyped, and inserting it from the token panel rather than typing it from memory is what fixes that one.