Conditional text blocks are sections of text in your template that automatically appear or disappear based on the services you've selected for a case file. Do you select "disassembly" during the survey? Then the text about disassembly automatically appears on the quote. Don't select it? Then that text disappears and the customer doesn't see it.
The result: you have one or two templates instead of dozens of separate variants. Conditional text beats 68 separate templates.
Why use conditional text?
Without conditional text, you have two options:
Separate templates per scenario - one template for removals only, one for removals + reassembly, one for removals + reassembly + packing, and so on. That quickly adds up to six or more templates, all of which you have to maintain separately.
Everything in one template - all text always appears on the quote, even if the service doesn't apply. That's confusing for the customer.
With conditional text, you combine the best of both: a template that automatically adapts to the services chosen.
The 6 services
The system has six services that you can select during a survey or on a case file. Based on these services, the conditional logic determines which text is visible.
Service | System name | What it means |
Basic removal |
| Loading, driving, unloading (always present) |
Reassembly |
| Putting furniture back together at the delivery address |
Disassembly |
| Taking furniture apart at the pickup address |
Packing |
| Packing small household items into boxes |
Unpacking |
| Unpacking boxes and arranging items at the delivery address |
Storage |
| Storing household effects in a container |
Note: The system names (such as certificate and assemble) are used in the code. You don't need to type these yourself -- your onboarding specialist builds the conditional logic in. But it helps to understand how it works.
How does the syntax work?
The conditional logic uses Twig syntax. This is the code that's placed in the template editor.
Checking a service
{% if project.usesService('assemble') %}We'll take care of reassembling your furniture at the delivery address.{% endif %}
The text "We'll take care of reassembling..." only appears if the "reassembly" service has been selected for the case file.
Checking whether a service has NOT been chosen
{% if not project.usesService('packing') %}You'll take care of packing your household items into boxes yourself.{% endif %}
This text only appears if the customer has NOT chosen the packing service.
Combining multiple services
{% if project.usesService('assemble') and project.usesService('packing') %}We take care of both the disassembly/reassembly and the packing of your household effects.{% endif %}
Use and to check whether multiple services are active at the same time. Use and not to combine with an exclusion:
{% if project.usesService('assemble') and not project.usesService('packing') %}We take care of the disassembly and reassembly. You'll take care of the packing yourself.{% endif %}
Closing a block
Every {% if %} block must be closed with:
{% endif %}
The 6 scenarios in practice
In the removals industry, there are six common combinations of services. Below, you'll see for each scenario which services are active, which condition is used in the template, and what the customer does themselves versus what you do.
Scenario 1 - Basic removal (loading and unloading only)
Service | Active? |
Basic removal | Yes |
Reassembly/disassembly | No |
Packing | No |
Unpacking | No |
Storage | No |
Condition:
{% if project.usesService('certificate') %}{% if not project.usesService('assemble') %}{% if not project.usesService('packing') %}{% if not project.usesService('storage') %}...text...{% endif %}{% endif %}{% endif %}{% endif %}
What the customer does themselves: taking apart large furniture, packing small household items into boxes, unpacking boxes and arranging items.
What you do: loading, driving, unloading, providing wardrobe boxes and protective materials, transporting special items safely.
Scenario 2 - Removal + reassembly/disassembly
Service | Active? |
Basic removal | Yes |
Reassembly/disassembly | Yes |
Packing | No |
Unpacking | No |
Storage | No |
Condition:
{% if project.usesService('assemble') and project.usesService('disassemble') and not project.usesService('packing') %}...text...{% endif %}
What the customer does themselves: packing and unpacking boxes.
What you do: taking furniture apart, loading, driving, unloading, putting furniture back together.
Scenario 3 - Removal + reassembly/disassembly + packing
Service | Active? |
Basic removal | Yes |
Reassembly/disassembly | Yes |
Packing | Yes |
Unpacking | No |
Storage | No |
Condition:
{% if project.usesService('assemble') and project.usesService('disassemble') and project.usesService('packing') and not project.usesService('unpack') %}...text...{% endif %}
What the customer does themselves: unpacking boxes and arranging items.
What you do: packing the household effects, disassembly, loading, driving, unloading, reassembly.
Scenario 4 - Full package
Service | Active? |
Basic removal | Yes |
Reassembly/disassembly | Yes |
Packing | Yes |
Unpacking | Yes |
Storage | No |
Condition:
{% if project.usesService('assemble') and project.usesService('disassemble') and project.usesService('packing') and project.usesService('unpack') %}...text...{% endif %}
What the customer does themselves: nothing.
What you do: everything -- packing, disassembly, loading, driving, unloading, reassembly, unpacking and arranging items.
Scenario 5 - Storage + reassembly/disassembly
Service | Active? |
Basic removal | Yes |
Reassembly/disassembly | Yes |
Packing | No |
Unpacking | No |
Storage | Yes |
Condition:
{% if project.usesService('storage') and project.usesService('assemble') and project.usesService('disassemble') and not project.usesService('packing') %}...text...{% endif %}
What the customer does themselves: packing boxes, unpacking later.
What you do: disassembly, loading into a container, storing, delivering later and reassembly.
Scenario 6 - Storage + reassembly/disassembly + packing
Service | Active? |
Basic removal | Yes |
Reassembly/disassembly | Yes |
Packing | Yes |
Unpacking | No |
Storage | Yes |
Condition:
{% if project.usesService('storage') and project.usesService('assemble') and project.usesService('disassemble') and project.usesService('packing') %}...text...{% endif %}
What the customer does themselves: unpacking boxes and arranging items later.
What you do: packing, disassembly, loading into a container, storing, delivering later and reassembly.
Fixed patterns to remember
When setting up conditional text, a number of fixed rules apply. These patterns stem from how removal companies work in practice.
Pattern | Explanation |
Reassembly and disassembly always go together | There's no scenario where you only reassemble without disassembling, or vice versa. If |
Storage always goes together with reassembly/disassembly | With storage, the household effects must first be disassembled to fit into the container. Storage without a reassembly service doesn't exist. |
Unpacking only exists with the full package | The unpacking service ( |
Basic removal is always present | The |
Step by step: getting conditional text built in
The conditional logic is built in by your onboarding specialist. You supply the text, your specialist writes the code.
Preparation
Determine which scenarios apply to your company (see the 6 scenarios above)
Write the text that should appear on the quote for each scenario
Mark each text block with the scenario it belongs to
Requesting it from your onboarding specialist
Send your text to your onboarding specialist
Your specialist builds the if-statements into the template editor
Test the template by creating a test case file with different services selected
Testing
Create a test case file and select the services for scenario 1 during the survey (basic removal only)
Generate a draft quote and check that only the correct text appears
Adjust the test case file: now also select reassembly/disassembly (scenario 2)
Generate another draft quote and check the result
Repeat for the other scenarios you use
Expected result: For each scenario, only the text belonging to that specific combination of services appears. Text for services that haven't been selected is completely invisible.
Tip: You don't have to use all six scenarios. Many companies start with three or four scenarios and expand later.
Example: what it looks like in the template
Below is a simplified example of what conditional text looks like in the template editor. The code sits in between the regular text.
Dear #####{{ contact.salutation }} #####{{ contact.last_name }},Following our survey, we are pleased to offer you the following:{% if not project.usesService('assemble') and not project.usesService('packing') %}On moving day, please ensure all furniture is ready to be movedand that all small items are packed into boxes.{% endif %}{% if project.usesService('assemble') and project.usesService('disassemble') and not project.usesService('packing') %}We take care of the disassembly of your furniture at the pickup address and disassembly at the delivery address. You'll take care of packing yourhousehold items into boxes yourself.{% endif %}{% if project.usesService('packing') %}We take care of packing your complete household effects.{% endif %}{% if project.usesService('storage') %}Your household effects will be stored in our storage facility until the new address is available.{% endif %}
The customer only sees the text that applies on the quote. The code ({% if %} and {% endif %}) is invisible in the PDF.
Tips
Supply concrete text. The more specific your text is per scenario, the better your specialist can build in the logic.
Start with the most important scenarios. You don't have to set up all six scenarios straight away. Start with the two or three you use most often.
Select the right services during the survey. Conditional text only works if the services are correctly selected in the case file. If you forget to tick "disassembly", the disassembly text won't appear.
Always test with a draft quote. Generate a draft PDF after every change to check that the correct text appears.
Combine with variables. Conditional text works perfectly well together with variables. Within an
{% if %}block, you can simply use#####{{ contact.last_name }}or other variables.
Please note
Don't edit the code yourself. Twig syntax is precise. A missing space or brace can cause the entire template to stop working. Always have your onboarding specialist make code changes.
Services must be selected during the survey. If the service isn't active in the case file, the corresponding text won't appear on the quote -- even if the text is in the template.
Storage needs extra information. With storage scenarios (5 and 6), text about storage insurance often also appears. Bear this in mind when supplying your text.
Online quotes flow as a single page. Conditional text can change the length of your quote per scenario. In the online view, that's not a problem (the page just flows on). In the PDF version, it can affect where page breaks fall. So always test the PDF.
Next step: Notifications overview