> ## Documentation Index
> Fetch the complete documentation index at: https://storekit.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Flows to Build

> Ready-to-build Klaviyo flow recipes for storekit events: abandoned checkout, browse abandonment, post-order, reorder, win-back, cancellation, review follow-ups and multi-store branching.

Each recipe names the storekit event to use as the trigger, the filters to add, and the event properties you can drop into the message with `{{ event.PropertyName }}`. Event and property names are exact — copy them as written. The full list is in the [Event Reference](/docs/guides/integrations/marketing/klaviyo/event-reference).

<Tip>
  Before building, [connect Klaviyo](/docs/guides/integrations/marketing/klaviyo/connect) and place a test order so the metrics exist in your account — Klaviyo only offers a metric as a flow trigger once it has received it at least once.
</Tip>

## Abandoned Checkout

Bring back a customer who reached checkout but did not pay. Needs the **Public API Key / site ID** on the store, because **Started Checkout** is a browser event.

1. Trigger: **Started Checkout**
2. Time delay: 30 to 60 minutes works well for food
3. Flow filter: has **not** done **Placed Order** since starting this flow
4. Send a reminder using `{{ event.ItemNames }}` and `{{ event.Value }}`, and link the button to `{{ event.CheckoutURL }}`

<Note>
  The basket lives in the customer's browser and is cleared roughly ten minutes after they leave, so by the time the reminder lands they will usually need to re-add their items. Loop over `event.Items` to show `ProductName`, `Quantity` and `ProductImage` so they can rebuild it in a tap.
</Note>

## Browse Abandonment

1. Trigger: **Viewed Product**
2. Time delay: a few hours
3. Flow filters: has **not** done **Placed Order** since starting this flow, and has **not** done **Started Checkout** since starting this flow
4. Feature the dish with `{{ event.ProductName }}` and `{{ event.ProductImage }}`; link to `{{ event.ProductURL }}`

Add a trigger filter of `Categories contains Mains` (or whichever category) to keep this to dishes worth a nudge rather than every side or drink.

## Post-Order Thank You

1. Trigger: **Fulfilled Order** — fires when you mark the order complete, so the customer has their food
2. Time delay: 1 to 2 hours
3. Thank them by name with `{{ person.first_name }}`, mention `{{ event.ItemNames|join:', ' }}` and offer a code for next time

If you use storekit's feedback requests, do not ask for a review here as well — storekit already sends one. Use [Review Events](/docs/guides/integrations/marketing/klaviyo/review-events) instead.

## Reorder Reminder

1. Trigger: **Ordered Product**
2. Time delay: 2 to 4 weeks
3. Flow filter: has **not** done **Placed Order** since starting this flow
4. Use `{{ event.ProductName }}` in the copy: "Time for another Margherita?"

Add a trigger filter `Quantity is at least 1` **and** `ItemPrice is at least 8` (or similar) so the flow keys off a main, not a dipping sauce. Because one order sends one **Ordered Product** per dish, set the flow's smart sending or a profile filter so the customer only enters once per order.

## Win-Back

1. Create a segment: **Placed Order** zero times in the last 45 days **and** at least once overall
2. Trigger a flow when a profile is added to the segment, or send a campaign to it with an offer
3. Personalise with the customer's usual store — `VenueName` on their last **Placed Order** — so the offer is redeemable somewhere they actually visit

For accounts that ran the [historical sync](/docs/guides/integrations/marketing/klaviyo/historical-sync), the segment is accurate from the moment it is created.

## Cancellation and Refund Follow-Up

1. Trigger: **Canceled Order** or **Refunded Order**
2. Send an apology and a discount for their next visit; `{{ event.OrderCode }}` is the short code the customer saw on their receipt, and on **Refunded Order** the event value is the amount refunded
3. Add the profile to a "recently apologised" segment that is excluded from promotional campaigns for a few days

## Pre-Order Reminder

1. Trigger: **Placed Order** with a trigger filter `IsPreOrder equals true`
2. Delay until `{{ event.PreOrderDateTime }}` minus a couple of hours (Klaviyo's "wait until a date property" step)
3. Remind them what is coming and when, with `{{ event.ItemNames }}` and `{{ event.FulfillmentMethod }}`

## Review Flows

These trigger on the review events sent when you use storekit's feedback requests — see [Review Events](/docs/guides/integrations/marketing/klaviyo/review-events) to enable them.

### Thank positive reviewers

1. Trigger: **Positive Review Submitted**
2. Thank them and link to your Google or TripAdvisor page, or offer a reorder code
3. Include `{{ event.ReviewContent }}` so they recognise their own words

### Recover negative reviews

1. Trigger: **Negative Review Submitted**
2. Send an internal notification to your team with `{{ event.Rating }}`, `{{ event.ReviewContent }}`, `{{ event.OrderCode }}` and `{{ event.VenueName }}`
3. Send the customer an apology with a voucher after a short delay
4. Split on `FoodRating`, `ServiceRating`, `AtmosphereRating` and `ValueRating` if you want a different message for a cold pizza versus a slow queue

### Dish-level follow-up

1. Trigger: **Reviewed Product** with a trigger filter `Rating is less than 3`
2. Use `{{ event.ProductName }}`, `{{ event.Comment }}` and `{{ event.Reasons }}` in an internal notification to the kitchen

### Review reminder

1. Trigger: **Review Requested**
2. Time delay: 1 day
3. Flow filter: has **not** done **Review Submitted** since starting this flow
4. Send a reminder linking to `{{ event.ReviewUrl }}`

## Multi-Store Accounts

Every order and review event carries `VenueName` and `VenueSlug` (browser events such as **Started Checkout** carry `VenueSlug` only), so one flow can serve every store:

* **Branch per store** — add a conditional split on `event.VenueSlug` to swap the logo, address or offer.
* **Restrict to one store** — add a trigger filter `VenueSlug equals soho`.
* **Segment by store** — a segment condition of **Placed Order** where `VenueSlug equals soho` at least once gives that store's customers.

## Related

<CardGroup cols={2}>
  <Card title="Event Reference" icon="table-list" href="/docs/guides/integrations/marketing/klaviyo/event-reference">
    Every event and property, with units
  </Card>

  <Card title="Menu Catalog Sync" icon="utensils" href="/docs/guides/integrations/marketing/klaviyo/catalog-sync">
    Show dish images and prices from your catalog
  </Card>
</CardGroup>


## Related topics

- [Klaviyo Event Reference](/docs/guides/integrations/marketing/klaviyo/event-reference.md)
- [Review Events](/docs/guides/integrations/marketing/klaviyo/review-events.md)
- [Sync Past Orders to Klaviyo](/docs/guides/integrations/marketing/klaviyo/historical-sync.md)
- [Menu Catalog Sync](/docs/guides/integrations/marketing/klaviyo/catalog-sync.md)
- [Troubleshooting Klaviyo](/docs/guides/integrations/marketing/klaviyo/troubleshooting.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.