Skip to main content
Need help setting this up? Our team can configure the entire Shopify Flow + Klaviyo integration for you. Reach out to us and we’ll get it done.

What you need

  • Shopify Flow (available on all Shopify plans)
  • A Klaviyo account with the Klaviyo Shopify app installed
  • Revize installed with Shopify Flow triggers enabled

How it works

Revize fires a Shopify Flow trigger whenever a customer edits their order. You connect that trigger to Klaviyo’s “Track an Event” action, which sends the order data to Klaviyo. From there, you build a Klaviyo Flow to send the email. Revize trigger → Shopify Flow → Klaviyo event → Klaviyo email

Available triggers

You can send Klaviyo emails for any of these Revize triggers:

Order edited

Fires on any order edit, including product changes and discount code edits.

Shipping address updated

Fires when a customer changes their delivery address.

Email address updated

Fires when a customer updates their email address.

Phone number updated

Fires when a customer updates their phone number.

Delivery date updated

Fires when a customer selects or changes a delivery date.

Order cancelled

Fires when a customer cancels their order.

Support ticket created

Fires when a customer submits a support request through the portal.

Tax invoice generated

Fires when a customer generates a tax invoice for their order.
Each trigger follows the same setup process. The only things that change are the trigger you select in Shopify Flow, the event name you send to Klaviyo, and the event properties.

Part 1: Set up Shopify Flow

Step 1: Find your Klaviyo Public API Key

1

Log in to Klaviyo

Go to your Klaviyo dashboard.
2

Open Settings

Click your account name in the bottom-left corner, then go to Settings.
3

Navigate to API Keys

Go to the API Keys section.
4

Copy your Public API Key

Copy the Public API Key (a short alphanumeric code). You will need this in Step 3.
Make sure you copy the Public API key, not the Private API key. The public key is the shorter one.

Step 2: Create a Shopify Flow workflow

1

Open Shopify Flow

In your Shopify Admin, go to Apps → Shopify Flow and click Create workflow.
2

Select a Revize trigger

Click Select a trigger, search for Revize, and choose the trigger you want (e.g., Order edited, Shipping address updated, etc.).
3

Add a Wait action

Click the + below the trigger and add a Wait action. Set the duration to 10 seconds.
4

Add a Get Order Data action

Click the + below the Wait step and add a Get Order Data action (Shopify action).Configure it as follows:
  • Set Select a query to Advanced
  • In the Edit query field, enter: id:{{order.legacyResourceId}}
  • Set Maximum number of orders to 1
  • Set Sort data by to Updated at, Descending
Why the 10-second wait? It gives Shopify’s API time to reflect the latest order changes before fetching fresh data. The Get Order Data step then pulls the correct current line items and variants.

Step 3: Add the Klaviyo “Track an Event” action

1

Search for Klaviyo

In the actions list, search for Klaviyo and select Track an Event.
2

Fill in the fields

Use the table below to fill in each field.
FieldValue
Klaviyo Public API KeyYour Public API Key from Step 1
Event NameSee the event name table below
Customer Email Address{{order.customer.email}}
Customer First Name{{order.customer.firstName}}
Customer Last Name{{order.customer.lastName}}

Event names by trigger

Use a descriptive event name so you can identify each trigger in Klaviyo:
Revize TriggerRecommended Event Name
Order editedRevize_Order_Edited
Shipping address updatedRevize_Address_Updated
Email address updatedRevize_Email_Updated
Phone number updatedRevize_Phone_Updated
Delivery date updatedRevize_Delivery_Date_Updated
Order cancelledRevize_Order_Cancelled
Support ticket createdRevize_Support_Ticket
Tax invoice generatedRevize_Tax_Invoice
You can name these events anything you like. These are just our recommended names to keep things organized.

Step 4: Set Customer Properties

In the Customer Properties field, paste the following JSON:
{
  "$email": "{{order.customer.email}}",
  "$first_name": "{{order.customer.firstName}}",
  "$last_name": "{{order.customer.lastName}}"
}
This tells Klaviyo which customer profile to associate the event with.

Step 5: Set Event Properties

In the Event Properties field, paste the JSON that matches your trigger. This uses freshly fetched order data from the Get Order Data step, so Klaviyo always gets the correct current data.
Use this when you want to send the full updated order details, including line items:
{% for single_order in getOrderData %}
{
  "order_id": "{{single_order.id}}",
  "order_name": "{{single_order.name}}",
  "order_number": "{{single_order.legacyResourceId}}",
  "total_price": "{{single_order.totalPriceSet.shopMoney.amount}}",
  "subtotal_price": "{{single_order.subtotalPriceSet.shopMoney.amount}}",
  "total_tax": "{{single_order.totalTaxSet.shopMoney.amount}}",
  "total_shipping": "{{single_order.totalShippingPriceSet.shopMoney.amount}}",
  "currency": "{{single_order.currencyCode}}",
  "edited_at": "{{single_order.updatedAt}}",
  "customer_email": "{{single_order.customer.email}}",
  "customer_name": "{{single_order.customer.firstName}} {{single_order.customer.lastName}}",
  "line_items": [{% assign comma = "" %}{% for item in single_order.lineItems %}
    {% if item.currentQuantity != 0 %}{{comma}}
    {"title": {{item.title | json}}, "quantity": {{item.currentQuantity}},
     "price": "{{item.originalUnitPriceSet.shopMoney.amount}}",
     "variant_title": {{item.variantTitle | json}}, "sku": {{item.sku | json}}}
    {% assign comma = "," %}{% endif %}
  {% endfor %}]
}
{% endfor %}
Do not wrap the line_items array brackets [ ] in quotes. The brackets must be outside all quotes for Klaviyo to receive a proper array.
The {% for single_order in getOrderData %} loop reads from the freshly fetched order data, not the original trigger. This ensures correct data every time.

Step 6: Turn on the workflow

1

Review all fields

Make sure everything is filled in correctly.
2

Turn on the workflow

Click Turn on workflow in the top-right corner.
3

Done

The workflow is now active. Every time a customer triggers that action through Revize, the event is sent to Klaviyo with up-to-date order data.

Part 2: Set up the Klaviyo email

Step 7: Create a Klaviyo Flow

1

Create a new Flow

In Klaviyo, go to Flows → Create Flow and select Build your own.
2

Set the trigger

For the trigger, choose Metric and search for the event name you used (e.g., Revize_Order_Edited).
3

Add an email action

Drag an Email action into the flow.
4

Design your template

Use the variables below to pull in order data dynamically.

Step 8: Email template variables

Use these variables in your Klaviyo email template:
DataKlaviyo Variable
Customer Name{{ event.customer_name }}
Order Number{{ event.order_name }}
Subtotal{{ event.subtotal_price }}
Total Tax{{ event.total_tax }}
Shipping{{ event.total_shipping }}
Total Price{{ event.total_price }}
Currency{{ event.currency }}
Edit Date{{ event.edited_at }}
Customer Email{{ event.customer_email }}
Shipping Address{{ event.shipping_address }}

Displaying line items

To display each product in the edited order, use this loop in your Klaviyo email template:
{% for item in event.line_items %}
  {{ item.title }}
  Variant: {{ item.variant_title }}
  Qty: {{ item.quantity }}
  Price: {{ item.price }}
{% endfor %}
You can style this loop with HTML/CSS in your Klaviyo email template to match your brand. For example, put it inside a table for a clean invoice look.

Example email

Here is an example of how your email subject and body might look:
Subject: Your order {{ event.order_name }} has been updated

Hi {{ event.customer_name }},

Your order has been updated. Here is your revised summary:

{% for item in event.line_items %}
  {{ item.title }} ({{ item.variant_title }})
  Qty: {{ item.quantity }}  |  Price: {{ item.price }} {{ event.currency }}
{% endfor %}

Total: {{ event.currency }} {{ event.total_price }}

Prevent duplicate emails

If a customer makes multiple quick edits in one session, Klaviyo may send multiple emails. To prevent this:
  1. Open your Klaviyo Flow
  2. Add a Flow Filter
  3. Set it to suppress if the customer received this email in the last 5 minutes

Troubleshooting

Double-check that the Public API Key in Shopify Flow matches the one in your Klaviyo account. This is the most common issue.
The Event Properties JSON may be invalid. Make sure there are no line breaks inside string values and that line_items uses [ ] brackets without surrounding quotes.
Make sure you are using the Get Order Data step with the 10-second wait, and that your Event Properties use the getOrderData loop, not order.lineItems directly.
Add a Flow Filter in Klaviyo to suppress if the customer received this email in the last 5 minutes.
Go to Analytics → Metrics and search for your event name (e.g., Revize_Order_Edited). It is created automatically the first time an event is received.
Go to Audience → Profiles in Klaviyo, find the customer email, and check their Activity tab for the event.

Want multiple triggers?

You can set up separate Shopify Flow workflows for each trigger. For example:
  • Workflow 1: Order edited → Revize_Order_Edited → “Your order has been updated” email
  • Workflow 2: Address updated → Revize_Address_Updated → “Your shipping address has been changed” email
  • Workflow 3: Order cancelled → Revize_Order_Cancelled → “Your order has been cancelled” email
Each workflow follows the same steps above. Just change the trigger, event name, and event properties.
Need help? Reach out to us and we’ll configure the entire Shopify Flow + Klaviyo integration for you.