Skip to main content

Using Signup Form Answers in Your Engagement Letter

Every named question on your signup form becomes a Liquid variable you can merge into the engagement letter. Learn how each question type prints, how to branch on choice answers, and how to format dates.

Written by Blaine Korte

Your engagement letter's signup form does double duty: it creates the client's record and portal login, and every answer it collects can be merged straight into the letter. This article shows how to reference those answers with Liquid.

Every named question becomes a variable

Each question on your signup form has a name, and that name becomes a variable under engagement:

Question name

Variable

Date Filed

{{ engagement.date_filed }}

Matter Number

{{ engagement.matter_number }}

Business Purpose

{{ engagement.business_purpose }}

The name is lowercased with spaces turned into underscores. You don't need to work this out yourself — your template's variables list shows the exact Liquid for every question on the form, ready to copy.

So if your form asks "In which state is the business incorporated?" with the question name "Incorporation State", your letter can say:

The Company is incorporated in the State of {{ engagement.incorporation_state }}.

How each question type prints

Question type

What the variable prints

Text / long text

Exactly what the client typed

Number

The number as entered

Email

The address as entered

Date

The date as entered (see below for formatting)

Country

The selected country

Radio (choose one)

The label of the chosen option

Checkbox (choose several)

The labels of all chosen options, separated by commas

Address

The full address joined onto one line

Two question types never appear in letters: file uploads and password questions. Display-only content blocks collect nothing, so they have no variable either.

Choice answers print their labels

A radio question "Rush preparation?" with options Yes and No prints exactly Yes or No — the label your client saw. That's also what you compare against in conditions:

{% if engagement.rush == "Yes" %}
A rush fee applies as described in Schedule A.
{% endif %}

A checkbox question prints every selected label in one comma-separated list. If a client picks "Trademark Search" and "Operating Agreement" from an add-ons question:

Selected add-ons: {{ engagement.add_ons }}

prints Selected add-ons: Trademark Search, Operating Agreement. To check whether one particular option was selected, use contains:

{% if engagement.add_ons contains "Trademark Search" %}
We will also perform a federal trademark search.
{% endif %}

Connected fields work too

Some questions are connected to the client and contact records — First Name, Last Name, Email, Business Name, and so on. Those answers populate the records and remain available to the letter both ways:

  • via the record: {{ client.name }}, {{ primary_user.first_name }}

  • via the form: {{ engagement.user_first_name }}, {{ engagement.client_name }}

Either works; the record-based variables (client.*, primary_user.*) are the conventional choice.

Formatting a date answer

Date answers print in the plain format they're stored in. To print them long-form, use the date filter:

{{ engagement.closing_date | date: "%B %-d, %Y" }}

prints something like March 5, 2026. See Advanced Liquid for more date patterns — and always confirm the result with a test letter.

Adding a question to feed the letter

If your letter needs a value the form doesn't collect yet, add a question to the signup form — its name immediately becomes a variable for the letter. For any either/or wording in the letter, add a radio question and branch on the answer label with {% if %}.

Test it

Generate a test letter with realistic answers for every question. It runs the real merge and shows you exactly what the client's letter will look like — including any variable that came out blank.

Did this answer your question?