Klaviyo Integration: Flows & Emails

OVERVIEW


Loop has a number of built in Notifications that can be found in Settings > Notifications. Merchants that have the Klaviyo integration with Loop enabled may want to use Klaviyo to send these emails instead, given Klaviyo's flexibility and added branding benefits. In this article, we'll cover how to recreate the main Loop flows in Klaviyo, and what those flows should look like.


This is not a required step. Merchants are welcome to use Loop's native Notifications and use Klaviyo for more advanced flows. Merchants can also choose to use only some Loop Notifications, and use Klaviyo for others. Just be sure to never have both on to avoid double-emailing customers.

Note: If you plan to use Klaviyo flows instead of Loop's native Notifications, be sure to deactivate the Loop Notifications that will be coming from Klaviyo moving forward to avoid double emails.


Flow Overview

As you're creating these flows, you can find all of Loop's available variables here.

In this article, you'll find a breakdown of the possible flows below, including the triggers for that event, and the Loop specific variables most merchants use. The triggers and variables should be consistent, but the formatting and branding is up to you.


Flow Detail

Return Confirmation


Triggered by the Loop Label Created event.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.return_by }} is the expiration date for the return
  • {{ event.status_page_url }} links to the return status page in Loop, where the customer can retrieve their label

Return Confirmation without Shipping Labels


This flow only needs to be created if you have Return Policies with Labels turned off, or are using the Keep Item feature.

Triggered by the Loop Return Created event, filtered with labels_enabled equals false or keep_item equals true.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.return_by }} is the expiration date for the return
  • {{ event.status_page_url }} links to the return status page in Loop

Out-of-stock Exchange Notice


This flow is applicable to all merchants with Automated Out of Stock Exchanges turned off.

Triggered by Loop Exchange Out Of Stock.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.all_products }} pulls the affected products, this can be augmented with existing product data in Klaviyo

Out-of-stock Exchange Resolved


This email only applies to merchants who have Automated Out-of-Stock Exchanges turned on.

Triggered by Loop Out Of Stock Resolved.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.all_products }} pulls the affected products, this can be augmented with existing product data in Klaviyo

Instant Exchange Return Confirmation


This email can be sent when a customer initiates an Instant Exchange to remind the customer they are responsible for returning their product.

Triggered by Loop Label Created for box and ship returns, triggered by Return method created for returns with other return methods (e.g. Happy Returns), filtered with instant_exchange_capture_date doesn't equal None.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.instant_exchange_capture_date }} is the Instant Exchange charge date
  • {{ event.return_date }} is the date the return was first initiated

Instant Exchange Reminder


This email is sent for any returns that are not yet in transit, first 7 days out from the charge date, and a second time the day before the charge date.

Triggered by Loop Instant Exchange Reminder.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.status_page_url }} links to the return status page in Loop
  • {{ event.instant_exchange_capture_date }} is the Instant Exchange charge date
  • {{ event.return_date }} is the date the return was first initiated

Happy Returns Return Confirmation


This email is sent when a customer creates a Happy Returns return. Since no label is created for Happy Returns returns, the trigger event is different from a standard return confirmation flow.

Triggered by Loop Return Method Created, filtered with return_method contains happy-returns.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.return_by }} is the expiration date for the return
  • {{ event.status_page_url }} links to the return status page in Loop, where the customer can retrieve their label

Happy Returns Dropped Off


This email is sent when a customer drops off a Happy Returns return.

Triggered by Loop Return Status Updated, filtered with return_method contains happy-returns and return_method contains in_transit.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.status_page_url }} links to the return status page in Loop, where the customer can retrieve their label

Happy Returns Processed Confirmation


This email is sent when a customer's Happy Returns return is processed.

Triggered by Loop Return Status Updated, filtered with return_method contains happy-returns, return_method contains in_transit, and return_status equals closed.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.status_page_url }} links to the return status page in Loop, where the customer can retrieve their label

Shop Later Offer


This email is sent once to customers eligible for a Shop Later offer. Once a customer has received an offer, they are no longer eligible.

Triggered by Loop Shop Later Offer.

Common Loop-specific variables used for this email:

  • {{ event.order }} for the customer's order number
  • {{ event.shop_later.conversion_url }} is the link to the Shop Later conversion page
  • {{ event.shop_later.formatted_refund_amount }} is the amount the customer will be refunded if they ignore the Shop Later offer
  • {{ event.shop_later.formatted_credit_amount }} is the credit amount the customer is eligible for if they choose to convert
  • {{ event.shop_later.currency_code }} is the currency symbol for the customer's return

Stripe Transaction


This flow only needs to be created if you are using Stripe for Shop Now or Instant Exchanges. For Instant Exchanges, it is only sent if the customer never returns their products and is charged.

Triggered by Loop Payment Transaction.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.card_type }} is the card type used by the customer
  • {{ event.card_last_four }} is the last 4 digits of the customer's card
  • {{ event.charge_amount_formatted }} is the amount the customer was charged

Stripe Refund


This email will be sent when a refund is issued for a Stripe upsell or a Stripe Instant Exchange charge.

Triggered by Loop Refund Transaction.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.card_type }} is the card type used by the customer
  • {{ event.card_last_four }} is the last 4 digits of the customer's card
  • {{ event.refund_amount_formatted }} is the amount the customer was refunded

Expiration Reminder


This will fire 21 days after a return has been created, assuming the label has not moved from the pre-transit stage. This is timeline is not editable.

Triggered by Loop Return Expiring.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.return_date }} is the date the return was initiated
  • {{ event.return_by }} is the expiration date for the return
  • {{ event.status_page_url }} links to the return status page in Loop, where the customer can retrieve their label

Expiration Notice


This will fire 28 days after a return has been created, assuming the label has not moved from the pre-transit stage. This is timeline is not editable.

Triggered by Loop Return Expiring.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.return_date }} is the date the return was initiated
  • {{ event.return_by }} is the expiration date for the return
  • We do not recommend linking back to the return status page with {{ event.status_page_url }}, since labels are not immediately voided

Gift Return Request Received


Sends when a customer is trying to return a gift, but does not have their order info. It should populate as a copy of their answers to the gift return form. The merchant will also receive a copy in order to reach out to the customer and help.

Merchants not leveraging gift returns do not need this flow.

Triggered by Loop Gift Return Request.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.question1 }} is "Who gave you this gift?" by default
  • {{ event.gifter }} is the customer's answer to the above
  • {{ event.question2 }} is "Which product are you returning" by default
  • {{ event.product_return }} is the customer's answer to the above
  • {{ event.question3 }} is "Would you like to exchange for something else?" by default
  • {{ event.product_request }} is the customer's answer to the above
  • {{ event.question4 }} is "Anything else we should know?" by default
  • {{ event.gift_info }} is the customer's answer to the above
  • {{ event.customer_email }} is the gift recipient's email address
  • {{ event.name }} is the gift recipient's name
  • {{ event.shipping_address_address }} is the gift recipient's shipping address
  • {{ event.shipping_address_city }} is the gift recipient's shipping address city
  • {{ event.shipping_address_state }} is the gift recipient's shipping address state
  • {{ event.shipping_address_zip }} is the gift recipient's shipping address ZIP code
  • {{ event.shipping_address_country }} is the gift recipient's shipping address country
  • {{ event.shipping_address_phone }} is the gift recipient's phone number

In Transit Notice


Sent when the return label moves into an in transit state, and the return is on its way back to the merchant. This notification is optional.

Triggered by Loop Label Updated, filtered with tracking_status equals in_transit.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.tracking_carrier }} is the name of the carrier on the label
  • {{ event.label_updated }} is the date when the label was last updated, in this case when it went to in transit
  • {{ event.tracking_number }} is the tracking number for the customer's label
  • {{ event.tracking_url }} is the URL for the carrier's tracking page
  • {{ event.status_page_url }} links to the return status page in Loop, where the customer can retrieve their label

Delivered Notice

Sent when the return label moves into a delivered state and the return has been delivered to the merchant. This notification is optional.

Triggered by Loop Label Updated, filtered with tracking_status equals delivered.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
  • {{ event.tracking_carrier }} is the name of the carrier on the label
  • {{ event.label_updated }} is the date when the label was last updated, in this case when it went to in transit
  • {{ event.tracking_number }} is the tracking number for the customer's label
  • {{ event.tracking_url }} is the URL for the carrier's tracking page
  • {{ event.status_page_url }} links to the return status page in Loop, where the customer can retrieve their label

This email is sent when a merchant sends a return deeplink via the Find an order page in the Loop admin. It must contain a link that brings a customer to their order in Loop.

Triggered by Loop Deep Link Created.

Common Loop-specific variables used for this email:

  • {{ event.deep_link_url }} should be use to populate a "Start Return Here" button, and will take the customer directly to their order in Loop - no order lookup required
  • {{ event.order }} is the customer's order number

Warranty claim rejected


This email is sent when a customer's warranty claim is rejected by the merchant.

Triggered by Loop Warranty Claim Rejected.

Common Loop-specific variables used for this email:

  • {{ event.order }} is the customer's order number
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.