Solved

Abandoned cart flow - multiple add to cart events for 1 user


Badge +2

Hello, 

I am setting up a flow for people that added to cart and did not purchase or started checkout.

I am using the predefined flow in the flow library.

I have some customers that are adding multiple items in their cart and it seems that this will create multiple events for that users, vs. 1 event with multiple product.

Is it normal or a set-up problem on my store?

The issue it creates is that:

  • the trigger (add to cart) will potentially send multiple emails to the same person (manageable through flow filters and smart sending), 
  • I can only link show product in the email I will send to the customer during the flow (vs. showing all the items added to the cart, like on the abandoned checkout flow)
  • I am not sure what product will be shown in the re-reminder I will send in that flow to the same customer. it might be another one compared to the 1st email I have sent.

Am I doing something wrong? or misunderstanding how the flow will work?

Thanks.

Steven 

icon

Best answer by David To 23 July 2021, 22:41

View original

16 replies

Userlevel 7
Badge +60

Hello @StevenCD,

Thanks for sharing your question with the Klaviyo Community!

What you are experience is a normal occurrence and expected behavior. Unlike the Started Checkout event which is triggered when your customers proceed from the cart page to the checkout process, sharing with Klaviyo all the events that were in the cart when the event was recorded; the Added to Cart event is triggered when the customer clicks on the add to cart button on the product page. This will trigger an individual event every time a customer clicks on an add to cart button which would be associated with each product that was added to the cart. 

This means if a customer was browsing your site and went to three different product pages and added all three to your cart; this customer would trigger three Added to Cart events and would be queued up for the Abandoned Cart flow three separate times; once for each of the products the customer added to their cart. If you wish to prevent this and limit the number of times a customer can enter this flow, you can use the flow filter of “Has not been in this flow, Skip anyone who has been in this flow in the last X-timeframe”. This is also suggested in the The Abandoned "Added to Cart" Flow subsection of the How to Create a Custom "Added to Cart" Event for Shopify Help Center article. 

If you have more than one email within your Abandoned Cart similar to the pre-built abandoned cart flow found in the Flow Library, all emails within the flow will highlight the product and product details that caused the user to trigger the flow. For example, if I added a t-shirt to my cart to trigger the Added to Cart event, so long as I am still going through the flow and have not been skipped from the flow, the emails would all be referencing the t-shirt that initiated me into the flow. This would also extend to if I had triggered the Added to Cart event multiple times where each instance would be a separate event.

Other resources I would suggest taking a look into to learn more about how the Add to Cart metric and flows function and how metric triggered flows with dynamic contact function in general are the below Help Center articles and other Community posts:

I hope this helps! Have a great weekend!

David

Badge +2

Thanks a lot David. All clear now. 

Userlevel 2
Badge +6

David - thank you for that clarification, however, it leaves me with one open question:

In the case of multiple “Add to Cart” events, if the filters are set up as you say only the initial “trigger” event is kept.  This means that, if the customer lets say added that shirt and then subsequently removed that shirt, the customer would still receive an email that triggered the shirt add.

So,  the question is how do we make sure that the email that is sent is triggered by the most recent “Add to Cart” event.

Userlevel 2
Badge +6

Would this flow accomplish:

  1. Having customer only in the flow once
  2. Having the most recent event trigger “bump” the old triggers out of the flow
  3. Ensure customer doesn’t get the abondoned cart email more than once a week

 

Userlevel 7
Badge +60

Hey @cdetdi,

Great question!

If you wanted only the latest, most recent Add to Cart event to be registered as opposed to the first Add to Cart to be recognized in your flow, you are correct in your understanding that you’ll need to use the “What someone has done, Add to Cart zero times since starting this flow” instead of the “What someone has done, skip anyone who has been in this flow in the last X-Timeframe” filter. 

For example, if someone has triggered their Add to Cart event multiple times, the customer would be going through the flow from the first instance, but when the subsequent Add to Cart event is recognized, this would cause the customer’s first instance to no longer be eligible for the flow. In this case, they would be skipped for the first event but would still be proceeding through the flow for the subsequent second Add to Cart event with the most recent product that was added to the cart. 

Taking a look at your screenshot, the flow filters you have in place would accomplish your goal of having your customers only going through this flow on time, having only the most recent add to cart event instance trigger this customer through the flow experience, and ensuring the customer only gets the abandoned cart email once a week. 

I hope this helps!

David

Badge +1

@david.to is there a way to combine these events to rebuild their cart in the email similar to the abandoned checkout flow? Something along the lines of: wait 4 hours, show all products added to cart since starting this flow? 

 

We’re using a Klaviyo form for our pop-up so that users are cookied on their first session if they sign up for the newsletter. I am seeing a lot more added to cart events now coming through now that we have switched to this and if we could rebuild their cart in the same way as the started checkout event and send emails with all of the products they added to cart in one email I know we would send a lot more emails and performance would likely be very good.

 

Thanks,

Trevor

Userlevel 7
Badge +60

Hey @flogrown.trevor,

Great question!

Unlike the Started Checkout event, the native Add to Cart event designed by Klaviyo is meant to trigger per product that gets added to cart. This means that for each time a cookied customer visits an individual product page and clicks on the “Add to Cart” button, they trigger an Add to Cart event which parses that specific product’s data as part of the event. The Started Checkout event on the other-hand is triggered when a customer goes to the checkout page and moves past the initial contact information page. This process allows the event to record and pass along all the product data pertaining to the items in the user’s cart at the time they reach this stage of the checkout process.

Since the Add to Cart event is only passing information pertaining to a single product, the dynamic table block used within the flow email would only be able to return the individual product data that initiated the user into the flow, which is why for single product events we generally recommend static tables as a replacement. Similarly, because the Started Checkout event contains a culmination of product information, the email is able to return all of the data points pertaining to these products to highlight. You can learn more about building these blocks to reference your event data from the About Using Event Variables to Personalize Flows and How to Build Dynamic Blocks in a Flow Email Help Center articles.

To create a flow email triggered by an Add to Cart event which would highlight all of the products a user has added to their cart, I would suggest working with a developer and building your own custom Add to Cart event which does support multiple products; unlike the default Add to Cart event built by Klaviyo. You can do so by leveraging Klaviyo’s API to create this custom event which would work in a similar fashion to the Started Checkout metric where it would record and pass the event containing all the products that were added. You can find more resources pertaining to building your own custom event and using Klaviyo’s APIs from the resources we offer below. In addition, if you don’t have a developer on hand, Klaviyo also has a number of Agency Partners who specialize in development work.

I hope you have a great day!

David

Badge +2

Hey @cdetdi,

Great question!

If you wanted only the latest, most recent Add to Cart event to be registered as opposed to the first Add to Cart to be recognized in your flow, you are correct in your understanding that you’ll need to use the “What someone has done, Add to Cart zero times since starting this flow” instead of the “What someone has done, skip anyone who has been in this flow in the last X-Timeframe” filter. 

For example, if someone has triggered their Add to Cart event multiple times, the customer would be going through the flow from the first instance, but when the subsequent Add to Cart event is recognized, this would cause the customer’s first instance to no longer be eligible for the flow. In this case, they would be skipped for the first event but would still be proceeding through the flow for the subsequent second Add to Cart event with the most recent product that was added to the cart. 

Taking a look at your screenshot, the flow filters you have in place would accomplish your goal of having your customers only going through this flow on time, having only the most recent add to cart event instance trigger this customer through the flow experience, and ensuring the customer only gets the abandoned cart email once a week. 

I hope this helps!

David

This screenshot, however lets say the added to cart, they would be entered into the flow. The first item they entered was a T shirt. So before 4 hours was up, lets say they added a hat to the cart. Would then the flow restart and then send the flow for the hat 4 hours later? Or would it not even fire the flow at all since it hit the filter that it added to cart 1 time since starting the flow, not zero times? @David To 

Did you get anywhere with this @flogrown.trevor ?

Badge +2

@David To another question i had is that if I have a browser abandonment flow that is triggered by an exit intent klaviyo pop up that gives them 10% off, how do i set it up so that it send that first email with the promised 10% off, but if they add to cart then doesn't send anymore of the emails? I can’t put the filter for added to cart zero times because then it maybe wouldn’t send the promised 10% coupon code right?

Badge +1

@JD247 I have not been able to work on this particular project more yet but I will be doing it soon. Likely I will have to store the user’s information in a database when they submit the pop-up and then have a job run something like every 30 minutes to check if a user’s cart is > 60min old with no new events and then send that add to cart event to Klaviyo via their API with all the relevant information. I’ll probably use an AWS Lambda function with Mongo DB.

@David To What would be a great functionality add for Klaviyo would be to just build this in. Give us the option to store the events based on a set timeframe (say 60 minutes) before bundling and sending. That, paired with cookie-ing users when they submit a form so they don’t have to be logged in, seems like the most effective way to send abandoned “add to cart” emails to me.

Userlevel 2
Badge +6

 

This screenshot, however lets say the added to cart, they would be entered into the flow. The first item they entered was a T shirt. So before 4 hours was up, lets say they added a hat to the cart. Would then the flow restart and then send the flow for the hat 4 hours later? Or would it not even fire the flow at all since it hit the filter that it added to cart 1 time since starting the flow, not zero times? @David To 

Did you get anywhere with this @flogrown.trevor ?

 

That is the behavior that we experience in our live deployment.  The ‘hat’ resets the flow for that user, they do not get a email about the shirt and the email they get about the hat is 4 hours after the ‘hat’ add.  That is in our view the expected and ideal behavior - we don’t want to bug customers about old cart items nor email them 10 seconds after they add a new item.

Userlevel 2
Badge +6

This is in contrast to “What someone has done, skip anyone who has been in this flow in the last X-Timeframe” option which would ignore the ‘hat’ cart addition and send the T-shirt email 4 hours after the T-shirt add.  (this did not make sense to us in this use case)

Userlevel 7
Badge +60

Hey @JD247,

@cdetdi is spot on that that would be the expected behavior as you described! As mentioned prior, every instance of a user adding a product to their cart would trigger its own add to cart event and enlist the user into the flow for every instance the event was triggered. I think going over the About Flow Triggers and Filters and Guide to Creating a Metric-Triggered Flow Help center articles would be helpful in understanding how contacts move through a flow. From this scenario, if a user add a T-shirt to their cart then they would be initiated into the flow based on this instance. At any given time, when the same user adds another product such as a hat to the cart, this would trigger a subsequent add to cart event and put this user into the add to cart flow a second time. 

However, based on the filters set in place, this would cause the first instance of their t-shirt triggered event to no longer be eligible for the flow, but they would continue and proceed through the flow based on adding a hat to the cart. 

Additionally, I believe you may need some clarification on what you mean by having a browse abandonment flow triggered by an exit intent popup form. A browse abandonment flow is typically triggered by the viewed product event as detailed in our Creating a Browse Abandonment Flow Help Center article and a list triggered flow or a welcome series flow is what is often times triggered by a list based on a user subscribing to a signup form. 

If i’m assuming the question is, how do you offer an email which contains a discount code while still excluding the user from the flow if they’ve added an item to the cart, then this would be accomplishable through the use of conditional splits or additional email filters in your flow. To accomplish this, you can include a conditional split after the email containing the discount code has been sent out to evaluate if a user has triggered the add to cart event. This way if they have then they can be removed from the flow, else they can continue through their flow journey. 

Alternatively, instead of using a conditional split, you can apply additional filters to all subsequent emails that come after the email containing the discount code. This way at any point of the journey that the customer adds a product to their cart, they would be removed from the flow. 

@flogrown.trevor, that’s a great suggestion! I’ll share this idea with our Product Team to explore further on!

David

Badge +2

Hey @JD247,

@cdetdi is spot on that that would be the expected behavior as you described! As mentioned prior, every instance of a user adding a product to their cart would trigger its own add to cart event and enlist the user into the flow for every instance the event was triggered. I think going over the About Flow Triggers and Filters and Guide to Creating a Metric-Triggered Flow Help center articles would be helpful in understanding how contacts move through a flow. From this scenario, if a user add a T-shirt to their cart then they would be initiated into the flow based on this instance. At any given time, when the same user adds another product such as a hat to the cart, this would trigger a subsequent add to cart event and put this user into the add to cart flow a second time. 

However, based on the filters set in place, this would cause the first instance of their t-shirt triggered event to no longer be eligible for the flow, but they would continue and proceed through the flow based on adding a hat to the cart. 

Additionally, I believe you may need some clarification on what you mean by having a browse abandonment flow triggered by an exit intent popup form. A browse abandonment flow is typically triggered by the viewed product event as detailed in our Creating a Browse Abandonment Flow Help Center article and a list triggered flow or a welcome series flow is what is often times triggered by a list based on a user subscribing to a signup form. 

If i’m assuming the question is, how do you offer an email which contains a discount code while still excluding the user from the flow if they’ve added an item to the cart, then this would be accomplishable through the use of conditional splits or additional email filters in your flow. To accomplish this, you can include a conditional split after the email containing the discount code has been sent out to evaluate if a user has triggered the add to cart event. This way if they have then they can be removed from the flow, else they can continue through their flow journey. 

Alternatively, instead of using a conditional split, you can apply additional filters to all subsequent emails that come after the email containing the discount code. This way at any point of the journey that the customer adds a product to their cart, they would be removed from the flow. 

@flogrown.trevor, that’s a great suggestion! I’ll share this idea with our Product Team to explore further on!

David

Thanks David. Yea for us we trigger the browse abandonment with an exit intent pop up on product pages in order to get their email. We have a pretty high conversion for this pop up over our welcome sequence thats also started from a pop on the home page. 

Sounds good. This helped answer some questions. 

Badge +2

 

This screenshot, however lets say the added to cart, they would be entered into the flow. The first item they entered was a T shirt. So before 4 hours was up, lets say they added a hat to the cart. Would then the flow restart and then send the flow for the hat 4 hours later? Or would it not even fire the flow at all since it hit the filter that it added to cart 1 time since starting the flow, not zero times? @David To 

Did you get anywhere with this @flogrown.trevor ?

 

That is the behavior that we experience in our live deployment.  The ‘hat’ resets the flow for that user, they do not get a email about the shirt and the email they get about the hat is 4 hours after the ‘hat’ add.  That is in our view the expected and ideal behavior - we don’t want to bug customers about old cart items nor email them 10 seconds after they add a new item.

@cdetdi , so your flow filters are did not place order since starting the flow and also did not add to cart since starting the flow and wait 4 hours to send first email. This will in turn send an email about the last item placed into the cart within that 4 hours?

Badge +2

 

This screenshot, however lets say the added to cart, they would be entered into the flow. The first item they entered was a T shirt. So before 4 hours was up, lets say they added a hat to the cart. Would then the flow restart and then send the flow for the hat 4 hours later? Or would it not even fire the flow at all since it hit the filter that it added to cart 1 time since starting the flow, not zero times? @David To 

Did you get anywhere with this @flogrown.trevor ?

 

That is the behavior that we experience in our live deployment.  The ‘hat’ resets the flow for that user, they do not get a email about the shirt and the email they get about the hat is 4 hours after the ‘hat’ add.  That is in our view the expected and ideal behavior - we don’t want to bug customers about old cart items nor email them 10 seconds after they add a new item.

@cdetdi , so your flow filters are did not place order since starting the flow and also did not add to cart since starting the flow and wait 4 hours to send first email. This will in turn send an email about the last item placed into the cart within that 4 hours?

 

The 4 hour delay is aligned with the 4 hour add-to-cart flow filter, if that makes sense (from my understanding). so you shouldn't have someone going past the initial 4 hour delay if they have added to cart within that time (as they will be skipped)

Reply