How do dynamic content blocks change per trigger?

Still have a question, spotted an error, or have a better explanation or a source we should cite?

You've built one automation flow, but your subscribers are not all the same. A first-time visitor is in a very different headspace than a returning VIP customer. Dynamic content blocks let you handle both inside the same email template, without duplicating flows or creating separate campaigns.

Here's the core mechanism. When a trigger fires (say, a cart abandonment event), it doesn't just kick off the email. It also passes a package of data along with it. That data might include the product name, price, image URL, the subscriber's loyalty tier, their location, or their purchase history. Your ESP stores that data in variables, and your template reads those variables at send time to decide which content block to display.

Think of it like a fill-in-the-blanks template with extra logic on top. The "blanks" aren't just names and product titles. They're whole content sections that swap in or out based on rules you define.

A concrete walkthrough

A subscriber visits your site and abandons a cart with a pair of boots worth $180. The trigger fires. The event data passes product_name: "Leather Ankle Boots", product_price: "$180", customer_tier: "Gold". Your template has three content blocks inside it:

  • Block A (standard) shows the product image, name, price, and a basic "you left something behind" message.
  • Block B (Gold tier) adds a loyalty-points reminder and a slightly warmer tone.
  • Block C (Silver/Bronze tier) shows a first-time discount code instead.

And the rule says: if customer_tier = Gold, show Block B. Otherwise, show Block C. Block A might always appear as a header, regardless of tier. The subscriber only ever sees one version of the body block. They have no idea the others exist.

How ESPs handle this in practice

Klaviyo calls these "dynamic blocks" and lets you write conditional logic directly into the template using its template language. You can reference any property attached to the event or the profile. A rule might read something like: show this section if event.value > 100 or if person.loyalty_tier == "Gold".

Brevo and ActiveCampaign both support conditional content blocks through a visual editor. You set up the conditions in a dropdown rather than writing code, which is friendlier if you're not a developer but gives you a bit less flexibility on complex logic.

HubSpot and Braze go further, letting you pull in real-time API calls or connected data sources at render time. So a block could theoretically show live inventory status or a personalized product feed generated the moment the email opens, not when it was sent.

Trigger type shapes what data is available

Not every trigger passes the same data. A cart abandonment trigger typically sends rich product-level data. A re-engagement trigger might only have profile-level data like last open date or total orders. A post-purchase trigger might pass order ID, items bought, and shipping address. Your dynamic blocks can only work with what the trigger actually provides, so it's worth checking your ESP's event schema before designing your template logic.

Browse abandonment is a good example of this difference. You saw the product but didn't add it to your cart, so the event data is thinner. It might only pass the product URL and category. Your dynamic block can still swap in a relevant image and category message, but you won't have price or availability unless you call that data in from a product catalog feed.

Still if you're building dynamic conditions inside a flow, understanding what data each trigger actually passes is the first thing to nail down. Get that wrong and your blocks either show the wrong content or fall back to a default (which is embarrassing when a subscriber sees "Hi [first_name]" in their inbox).

Want to go deeper on the segmentation side of this? The question on behavior-based filters in automation picks up right where this leaves off.

Contributors

Who worked on this answer

Every name links to their profile. Every company links to their site. Real people, real accountability.

Ask an AI · tailored to your setup

Build my dynamic block logic

I want to personalize emails using dynamic content blocks without building separate campaigns. My automation is triggered by [trigger type, e.g. cart abandonment / post-purchase / re-engagement]. My subscribers fall into these groups: group 1 description and group 2 description. Can you write the conditional logic rules I'd need, list which event data fields to reference, and show me what the block structure would look like inside my template?

Edit the yellow boxes, then send to the AI of your choice.