How to create your email design (Dynamic Table)
How to create a dynamic table
This walkthrough shows how to create one “universal” post‑purchase review email in Klaviyo that works for customers who ordered one item or multiple items. The key is adding a dynamic table that repeats once per line item and generates the correct product image, name, and review link.
This page follows the exact flow shown in the screencast: open the review flow → edit the email → insert a Table block → switch it to Dynamic → paste the Roadmap Liquid snippets → preview and verify each item links to the right review form.

What you’ll build
This walkthrough shows how to create one “universal” post‑purchase review email in Klaviyo that works for customers who ordered one item or multiple items. The key is adding a dynamic table that repeats once per line item and generates the correct product image, name, and review link.
This page follows the exact flow shown in the screencast: open the review flow → edit the email → insert a Table block → switch it to Dynamic → paste the Roadmap Liquid snippets → preview and verify each item links to the right review form.
Add a Table block (the repeating item section)
Insert a Table block
In the email editor, drag a Table block into your email where you want the list of items to appear.
Use the Table layout to choose where your content goes (common setup: image on the left, text on the right). You can swap columns later.

Turn the table into a dynamic (repeating) table
Switch the Table data from Static to Dynamic
Select the Table block, then open the Styles tab.
In the Data section, change from Static to Dynamic.
Set the data row and alias
In the Dynamic settings, set:
Data row to
event.extra.lineItems.edgesItem alias to
item
This tells Klaviyo to repeat the table once for each line item in the order.

Make the image and text dynamic
Now that the table repeats per item, replace the placeholder content with Roadmap’s Liquid variables.
Make the product image dynamic
Select the image cell in your table. In the image settings, choose Dynamic Image, then paste:
{{ item.node.product.featuredImage | default:"" }}Save your changes. In preview, the product image should populate for each item.
Add the item name (and optional product link)
Select the text cell and replace the placeholder copy with the item title:
{{ item.node.title | default:"" }}If you want the item name to link to the product page, use this URL format:
{{ organization.url }}/products/{{ item.node.product.handle | default:"" }}You can also include other item properties (like price) by copying the relevant dynamic properties from the event data and using the final part of the variable inside your table.

Add the per‑item “Leave a review” link
Your call-to-action (CTA) should send customers to the Roadmap review form for the specific product in that table row.
Create your CTA text
Add CTA copy in the text column (for example, Leave a review, Share your thoughts, or Love to hear from you).
Link the CTA to the Roadmap review form
Set the CTA link to the following URL (product is dynamic per row; order stays the same for the email):
{{ organization.url }}/pages/review-form?productId={{ item.node.product.id | default:"" }}&orderId={{ event.roadmapOrderId|default:"" }}If you also want the product image to be clickable, you can use the same link on the image element.
Style the block, then add non‑dynamic sections
Once the dynamic table is working, style it like any other Table block—padding, image sizing, text alignment, and spacing.
After that, add any blocks that should appear the same for every recipient (for example, an Instagram callout, loyalty signup, or other brand touchpoints).
Preview and confirm it works for multi‑item orders
Open Preview
Click Preview & test to enter preview mode.
Confirm the table repeats once per line item and that images and titles populate correctly.

Verify each CTA goes to the correct product
In preview, click each product’s Leave a review link. Each one should open the Roadmap review form for that specific product from the order.

If your dynamic table doesn’t repeat (or renders blank), double-check the Data row (event.extra.lineItems.edges) and the alias (item). A mismatch will prevent the variables from resolving.
Liquid snippets used in this walkthrough
Dynamic table settings
Data row:
event.extra.lineItems.edgesAlias:
item
Image
{{ item.node.product.featuredImage | default:"" }}Item title
{{ item.node.title | default:"" }}Product link
{{ organization.url }}/products/{{ item.node.product.handle | default:"" }}Review form link
{{ organization.url }}/pages/review-form?productId={{ item.node.product.id | default:"" }}&orderId={{ event.roadmapOrderId|default:"" }}Last updated