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

# Klaviyo

> Forward identity-resolved customer events and profiles to Klaviyo to power email and SMS automation, recover 30-50% more abandoned cart and checkout revenue with Upstack-enhanced flows.

<Note>
  **Data direction:** This is a **destination** — Upstack sends event and conversion data **out** to this platform via server-side APIs.
</Note>

## What it does

Klaviyo is connected through Upstack Flows, the product that handles event delivery to marketing automation platforms. Upstack Flows sends enriched event and profile data to Klaviyo so its flows — abandoned cart, browse abandonment, checkout abandonment, post-purchase — fire on a much larger pool of visitors than Shopify and Klaviyo's native integration can identify on their own.

The practical impact is more recovered revenue. Anonymous visitors that Shopify cannot match to an email get matched by Upstack's identity resolution and pushed into Klaviyo as enriched profiles, which means more abandoned cart flows fire, more browse abandonment emails send, and more SMS messages reach the inbox.

## How it works

Upstack Flows posts events to Klaviyo's API as **custom metrics** and creates or updates Klaviyo **profiles** with identity data resolved by Upstack ID. When the Upstack Pixel sees an anonymous visitor add to cart, identity resolution attempts to match the session to a known customer — using cookies, click IDs, and cross-session behavioral data — and attaches the email before the event is forwarded to Klaviyo. Klaviyo then has enough information to trigger flows that would otherwise never fire.

Profiles synced from Upstack include standard properties (`$first_name`, `$last_name`, `$city`, `$region`) plus custom properties from Upstack's identity resolution, so they are immediately usable for segmentation.

## How Upstack works with Klaviyo

Klaviyo already knows many of your customers. Upstack builds on that: anyone who clicks a Klaviyo email gets looked up and resolved through Upstack's identity engine.

* **Identity enrichment.** Upstack hooks into Klaviyo to attach resolved identity data to every event it sends.
* **Re-identification.** When a returning visitor can't be identified by standard Klaviyo tracking — cookies expired, new device, different browser — Upstack re-identifies them and fires enriched events back to Klaviyo.
* **Backup abandonment flows.** These enriched events trigger a second set of abandonment flows that only fire for visitors Klaviyo couldn't identify on its own.
* **Result.** Roughly 40% more people flow back through your abandonment sequences.

<Info>
  The Upstack team handles Klaviyo flow setup during onboarding. They'll request access to your Klaviyo account and configure UTM tracking, flow cloning, triggers, and exclusion filters. The setup guides above describe what gets configured so you understand the setup.
</Info>

## Best practices

<Tip>
  **Expand to 5-email sequences.** Many brands run 1–2 emails per abandonment flow. Adding more touchpoints captures revenue from slower decision-makers.
</Tip>

<Tip>
  **Reduce the re-entry window.** Drop from 14 days to roughly 5 days. If someone comes back and abandons again, put them back in the flow — they're still shopping.
</Tip>

<Warning>
  **Disable flows from previous tools.** If you previously used Elevar, Triple Whale, or another tool that created secondary Klaviyo flows, disable those flows before enabling Upstack's. Running both causes duplicate emails.
</Warning>

## Setup guides

<CardGroup cols={2}>
  <Card title="Klaviyo onboarding guide" icon="route" href="/guides/klaviyo/complete-how-to-guide-for-onboarding-klaviyo-in-upstack-data">
    End-to-end walkthrough for connecting Klaviyo to Upstack Data.
  </Card>

  <Card title="Configure Klaviyo destination" icon="sliders" href="/guides/klaviyo/how-to-configure-klaviyo-destination-in-upstack-data">
    Configure the Klaviyo destination inside Upstack Data.
  </Card>

  <Card title="Generate Klaviyo API key" icon="key" href="/guides/klaviyo/how-to-generate-klaviyo-api-key-for-upstack-data">
    Create a Klaviyo private API key with the right scopes for Upstack.
  </Card>

  <Card title="Set up abandonment flows" icon="bell" href="/guides/klaviyo-abandonment-flows/complete-guide-to-setting-up-upstack-abandonment-flows-in-klaviyo">
    Build the recommended Klaviyo flows powered by Upstack-enriched events.
  </Card>

  <Card title="Clone standard flows" icon="copy" href="/guides/klaviyo-abandonment-flows/how-to-clone-your-standard-flows-in-klaviyo">
    Clone Klaviyo's standard flows as a starting point for Upstack-powered versions.
  </Card>

  <Card title="Cross-flow exclusion filters" icon="filter" href="/guides/klaviyo-abandonment-flows/how-to-add-cross-flow-exclusion-filters-in-klaviyo">
    Prevent the same visitor from receiving overlapping flow messages.
  </Card>

  <Card title="Enable UTM tracking" icon="link" href="/guides/klaviyo-abandonment-flows/how-to-enable-utm-tracking-in-klaviyo">
    Tag Klaviyo flow links with UTMs so attribution flows back into Upstack.
  </Card>
</CardGroup>

## Event mapping

| Upstack event      | Klaviyo metric     | Key properties                                               | Notes                                   |
| ------------------ | ------------------ | ------------------------------------------------------------ | --------------------------------------- |
| `ViewContent`      | `Viewed Product`   | `ProductName`, `ProductID`, `Price`, `ImageURL`              | Powers browse abandonment flows         |
| `AddToCart`        | `Added to Cart`    | `ProductName`, `ProductID`, `Price`, `Quantity`, `CartValue` | Powers abandoned cart flows             |
| `InitiateCheckout` | `Started Checkout` | `CartValue`, `ItemCount`, `CheckoutURL`                      | Powers checkout abandonment flows       |
| `Purchase`         | `Placed Order`     | `OrderID`, `Revenue`, `Items`, `DiscountCodes`               | Powers post-purchase and win-back flows |

Upstack also syncs profile properties (`$first_name`, `$last_name`, `$city`, `$region`) plus custom properties derived from identity resolution. These are available for Klaviyo segmentation immediately after sync.

## FAQ

<AccordionGroup>
  <Accordion title="How does Upstack increase the number of abandoned cart flows that fire?">
    Shopify can only fire Klaviyo's abandoned cart flow when it knows the visitor's email — typically because the visitor logged in or reached the email step in checkout. Upstack identifies many more visitors than that by matching anonymous sessions to known customer profiles using cookies, click IDs, and cross-session behavior. When Upstack identifies an anonymous cart with an email, it forwards an enriched `Added to Cart` event to Klaviyo, which lets the abandoned cart flow fire on visitors that Shopify could not identify.
  </Accordion>

  <Accordion title="Will I see duplicate events if Klaviyo's native Shopify integration is also active?">
    You can. The recommended approach is to disable the Klaviyo metrics in Shopify's native integration that overlap with the events Upstack is forwarding (`Viewed Product`, `Added to Cart`, `Started Checkout`, `Placed Order`). Keep the native integration enabled for any events Upstack is not handling.
  </Accordion>

  <Accordion title="What permissions does the Klaviyo API key need?">
    Upstack only needs three scopes on the private API key: `Events: Write`, `Profiles: Write`, and `Lists: Write`. Avoid using a full-access key — least-privilege scopes keep the integration safe. The setup guide above walks through generating the key with the correct scopes.
  </Accordion>

  <Accordion title="Are new profiles created in Klaviyo, or only existing ones updated?">
    Both, by default. When Upstack identifies a visitor with an email that does not yet exist in Klaviyo, it creates a new Klaviyo profile. When the email already exists, Upstack enriches the existing profile with new properties and event history. You can disable either behavior in the destination settings.
  </Accordion>

  <Accordion title="How do I know events are arriving in Klaviyo?">
    In Klaviyo, open **Analytics → Metrics**. Upstack-forwarded events appear as custom metrics (for example, `Added to Cart` from Upstack) and start populating within a few minutes of storefront activity. To trace a specific visitor, find the profile in Klaviyo and check the **Activity Feed**.
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Upstack events not appearing in Klaviyo">
    If events are showing in the Upstack Live Event Stream but not arriving in Klaviyo:

    **Steps to fix:**

    1. Confirm the Klaviyo destination shows **Active** (green) in the Upstack dashboard
    2. Verify your Private API key has the required scopes (`Events: Write`, `Profiles: Write`, `Lists: Write`) — read-only keys cannot receive events
    3. In Klaviyo, go to **Analytics → Metrics** and search for events containing "Upstackified" — they may be arriving under a different name than expected
    4. If the destination status is red, disconnect and reconnect with a fresh API key
  </Accordion>

  <Accordion title="Duplicate abandonment emails">
    Customers receiving emails from both your standard flows and Upstack flows means mutual exclusion filters are missing or misconfigured.

    **Steps to fix:**

    1. Open both the standard and Upstack versions of the flow in Klaviyo
    2. Verify each flow has a cross-flow exclusion filter: "Has received email 0 times in last 7 days where Flow = \[other flow name]"
    3. If filters are in place but duplicates persist, check that the flow names in the filters match exactly (including the " - Upstack Data" suffix)
    4. Disable flows from previous tools (Elevar, Triple Whale) if they are still active
  </Accordion>
</AccordionGroup>

<Note>
  For additional troubleshooting beyond Klaviyo-specific issues, see [Troubleshooting: Events Not Reaching Destination](/troubleshooting/events-not-reaching-destination).
</Note>

## Related

<CardGroup cols={2}>
  <Card title="Data enrichment" icon="magnifying-glass-plus" href="/concepts/data-enrichment">
    How Upstack Enrichment improves visitor identification — the foundation of Flows recovery.
  </Card>

  <Card title="Identity resolution" icon="fingerprint" href="/concepts/identity-resolution">
    How Upstack ID connects anonymous sessions to known customers with email addresses.
  </Card>

  <Card title="Destinations overview" icon="arrow-right-from-bracket" href="/destinations/overview">
    How Upstack Signal and Upstack Flows power different types of destinations.
  </Card>

  <Card title="Events not reaching destination" icon="wrench" href="/troubleshooting/events-not-reaching-destination">
    End-to-end diagnostic guide when events aren't arriving at any destination.
  </Card>
</CardGroup>
