Klaviyo Integration: Flows & Emails
OVERVIEW
Merchants can integrate their Klaviyo account with Loop to send return notifications.
How it works
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 Advanced Loop flows in Klaviyo, and what those flows should look like. If you want to review the main flows to set up, please review the Klaviyo Integration: Flows & Emails article first.
Merchants can also choose to use only some Loop Notifications and use Klaviyo for others, so they can use Loop's native Notifications and Klaviyo for more advanced flows. Just be sure never to 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.
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.
As you're creating these flows, you can find all of Loop's available variables here.
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 Expired Loop Return.
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
Deep Link Created
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
Please reach out to support@loopreturns.com with any additional questions.