A data driver fetches something and publishes it as variables, which is what makes a decision possible further down. When a rule cannot test what you want, the answer is almost always a data driver above it.
Two of them, Contentful Data and Content Cloud Data, resolve content rather than customer facts. They make messages richer; they make no new branch possible.
Calls any HTTP endpoint and reads the response into the journey. Use it when the fact you need lives in a system Xenia has no connector for, or when something outside needs telling and no integration node covers it.
Configure
Required: the URL. Bearer auth also asks for the token, basic auth for a username and password, and API key auth for a key name, a key value, and whether it travels in the header or the query string.
Produces
For an object response, one variable per declared response field, named as you named
it. For an array response, {{response}} plus one response. prefixed variable per
declared schema field.
Watch out
Reads a Klaviyo profile, checks list membership, or pushes an event. Useful while Klaviyo is still the system of record for engagement.
Configure
Required: the connector.
Produces
One variable per declared response field. With none declared, only {{response}},
which no rule can test usefully.
Watch out
check_list answers about one named list, not whether the person is engaged in
general.Resolves a Contentful entry so later nodes can render it. Use it when the copy belongs in the CMS, so marketing can change it without touching the journey.
Configure
Required: the connector.
Watch out
Resolves Content Cloud entries for later nodes to use, and names the base entry that an In-Entry Personalization node beneath it will swap sections of.
Not shown in Shopify-billed workspaces.
Configure
Required: the connector.
Watch out
Swaps sections inside the CMS entry resolved upstream, so the page stays the same and one block inside it differs for this customer.
Not shown in Shopify-billed workspaces.
Needs upstream
Configure
Swaps are built in the node's panel and applied there, not typed.
Watch out
Loads the customer's stored Shopify profile, order history, and engagement metrics. This is the node that makes value, frequency, and recency testable, so it is the usual answer to "the journey has no way to know that".
Configure
It acts on whoever is in the run, so there is nothing else to configure.
Produces
{{customerEmail}}, {{customerPhone}}, {{customerFirstName}},
{{customerLastName}}, {{customerCountry}}, {{customerLanguage}},
{{customerSubscribedEmail}}, {{customerOrderCount}}, {{customerTotalSpent}},
{{customerAvgOrderValue}}, {{customerLastPurchaseAt}},
{{customerEmailOpens30d}}, {{customerEmailClicks30d}}.
Watch out
{{customerOrderCount}} counts the last 90 days, not the customer's lifetime.order.* trigger already carries the order and its value, so a second read after
one adds nothing.ENRICH_USER
resolves the same kind of profile.Checks whether the customer bought since a point in time, so a recovery or reminder sequence can stop chasing someone who already purchased.
Configure
Produces
{{purchased}}, {{notPurchased}}, {{orderCount}}, {{checkedEmail}},
{{emailSource}}, {{sinceIso}}, {{checkSkipped}}.
Watch out
{{purchased}},
the journey carries on regardless and the buyer still gets the next nudge. The
correct shape for abandoned-checkout recovery is: wait, check, rule, then send.{{checkSkipped}} rather than failing. Branch on
that if the outcome matters.Makes the customer eligible for a discount and hands the code back as a variable, so a message can carry a code only that customer can use.
Configure
Required: the mode. Existing mode also requires the price rule and the code; create mode also requires the value.
Produces
{{coupon_code}}.
Watch out
{{coupon_code}} is
available to later nodes only.