Customer Journey Builder

Liquid templates

Add a condition, an operator or a live lookup to a push or email preset, and Pushwoosh renders a different message for every user it applies to – validated against the same engine that sends it.

Push preset editor with a Liquid if/else condition typed into the message body checking a loyalty-tier tag, and the platform preview mirroring the same raw Liquid text

A placeholder can’t tell a VIP from a first-time user

Dynamic content can drop a name or a tag value into a message. Saying something different to a VIP than to a first-time user in that same push takes another approach, and so does showing a balance that changed five minutes ago. The common workaround is duplicating the message and its trigger for every segment, then keeping every copy in sync by hand. Liquid templates put the condition inside the message itself, so the logic lives in one place.

What Liquid templates give you

Objects and tags

Output with {{ }}, logic with {% %}: if, elsif, else and capture.

Comparison and logical operators

==, !=, >, <, >=, <=, or, and, contains, evaluated right to left.

Filter chains

capitalize, prepend and more from Shopify Liquid's standard filter set, chained one after another.

Connected Content

A {% connected_content %} tag calls a URL on your own backend at send time and drops the response into the message.

Validated against the live engine

Run a check on a tag and it's tested against the same engine that sends the message.

Push and email

The same Liquid syntax works in both content editors.

Connected Content passes the recipient’s UserID, HWID or tags as query parameters, so the endpoint you host can answer with something specific to that person.

Check the condition before you save

Running Validate Liquid Syntax checks a tag against the same engine that sends the message, and flags anything that doesn’t parse right in the field, before the preset saves. A template that passes the check is the template that ships.

Why this matters inside Customer Journey Builder

A step that only fills in a name reads the same to a VIP and a first-time user the moment the message needs a branch instead of a value. Liquid templates let a single step in Customer Journey Builder carry that branch and a live lookup itself, instead of splitting into a version per condition.

Where a Liquid condition actually sits

A Liquid condition lives inside Message presets – the same push or email preset that also carries dynamic content placeholders and language variants. Add multilingual messaging on top, and one preset can greet a Spanish-speaking user in Spanish and treat a VIP differently inside that same language, without a second preset. Add Connected Content, and that preset can also show a live order status pulled from your own backend.

One preset, still one message

The condition sits inside whichever language variant it needs to apply to, so a VIP branch and a language branch stack inside the same preset instead of multiplying into a preset per combination.

One step, its own version for every condition

A send step in Customer Journey Builder points at the preset once. Every recipient who reaches that step gets the branch their own tags match, without the canvas splitting into a path per segment.

How it works

Writing a Liquid condition is closer to a small scripting task than to filling in a form – plan for a developer to build the first template rather than a marketer.

  1. Add the condition

    Open a push or email preset and write Liquid syntax directly into the content field, in place of a static value or a bracket tag.

  2. Validate before you save

    Click Validate Liquid Syntax to check the tag against the production engine – a broken tag shows up as an inline error right away, before you save.

  3. Add Connected Content where you need live data

    Point a {% connected_content %} tag at an endpoint you host, passing the UserID, HWID or tags as parameters, and the response drops into the message at send time.

Good to know before you build around it.

  • Conditions evaluate right to left and don’t support parentheses, so arrange the logic in the order it needs to run.
  • Connected Content blocks the send entirely if your endpoint doesn’t return a 200 – a slow or failing backend can silently stop a message.
  • POST behavior, headers, authentication, retries, caching, timeout and payload size for Connected Content aren’t documented – test your own endpoint’s behavior rather than assume a default.
  • No documented syntax for loops or iteration, even though the underlying engine supports it – ask support if a template needs to repeat over a list.
  • Push and email presets are the confirmed use – treat SMS as unconfirmed until Pushwoosh documents it.

One message, every condition you need

Write the condition once, and every recipient who reaches it gets their own version of the message.