Skip to main content

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.

Upstack’s Klaviyo identity enrichment identifies returning visitors that Klaviyo’s native tracking misses, then pushes those profiles to Klaviyo in real time so your abandonment flows trigger for sessions that would otherwise be lost. Brands using this setup typically see 30–40% more profiles entering abandonment flows, directly increasing revenue from browse, cart, and checkout abandonment emails. This guide explains how the enrichment works, how to set up the “waterfall” flow architecture alongside your existing Klaviyo flows, and best practices for maximizing incremental revenue without over-messaging customers.

The problem: Klaviyo misses returning visitors

Klaviyo’s abandonment flows are among the highest-revenue automated flows for DTC brands. But they only trigger when Klaviyo can identify who the visitor is, and Klaviyo’s native tracking has significant blind spots.

When Klaviyo loses identity

  • Cross-device sessions. A customer clicks your Instagram ad on their phone, browses products, then switches to their laptop. Klaviyo’s browser cookie on the phone has no connection to the laptop session — that session is anonymous and no flow triggers.
  • Cookie expiration. Safari and most iOS browsers expire first-party cookies set via JavaScript within 7 days. A customer who visited 8 days ago and returns today looks like a brand-new anonymous visitor.
  • In-app browser to default browser. A customer taps a link in the Instagram or Facebook app, which opens an in-app browser with isolated cookie storage. When they later open Safari or Chrome on the same device, the session doesn’t carry over.
  • Ad blocker interference. Klaviyo’s client-side tracking JavaScript can be blocked by ad blockers, which roughly 30% of desktop users run. These visitors are completely invisible to Klaviyo’s identification system.
The cumulative effect: Klaviyo’s native tracking typically identifies only 60–70% of visitors who could be matched to a known profile. The remaining 30–40% browse, add to cart, or start checkout — and leave without triggering any abandonment flow.

How Upstack’s Klaviyo identity enrichment works

Upstack’s identity resolution engine operates server-side, independent of the visitor’s browser. It identifies returning visitors using signals that survive the limitations Klaviyo’s client-side tracking faces:
1

Server-side identity matching

When a visitor arrives, Upstack matches server-side signals — IP address, user agent, device fingerprint, and hashed identifiers from previous sessions — against its identity graph. This works even when cookies are expired, the device is different, or the browser is blocking tracking scripts.
2

Session stitching

Upstack connects fragmented sessions across devices and browsers into a single identity. The customer who browsed on their phone and returned on their laptop is recognized as the same person.
3

Real-time profile push to Klaviyo

When Upstack identifies a visitor that Klaviyo doesn’t recognize, it pushes the resolved profile — including email, browsing activity, and cart contents — to Klaviyo via API in real time. This enables Klaviyo flows to trigger for sessions that would otherwise be anonymous.
The result: abandonment flows fire for a significantly larger pool of identified sessions, without changing anything about your email content or flow logic.

The “waterfall” flow architecture

The recommended setup runs Upstack-triggered flows alongside your existing Klaviyo-native flows — not instead of them. Klaviyo’s native tracking catches what it can, and Upstack catches what Klaviyo misses.
Don’t replace your native Klaviyo flows. They serve different visitor pools. The goal is to add incremental coverage, not swap one set of flows for another.

How it works

Visitor arrives on your store

    ├── Klaviyo identifies them (cookie match, logged in, etc.)
    │   └── Native Klaviyo flow triggers → abandonment email sent

    └── Klaviyo does NOT identify them
        └── Upstack identifies them server-side
            └── Pushes profile to Klaviyo
                └── Upstack-triggered flow fires → abandonment email sent
Both paths lead to the same outcome — an abandonment email — but they catch different pools of visitors. The mutual exclusion window (covered below) prevents anyone from receiving both.

Setup steps

For complete onboarding, see Onboarding Klaviyo in Upstack Data and Setting up Upstack abandonment flows in Klaviyo. The summary below covers the conceptual setup.
1

Connect Klaviyo as a destination in Upstack

Configure the Klaviyo destination so Upstack can push identified profiles and event data. Full instructions: Klaviyo destination.Once connected, Upstack begins sending identified profiles and their event data to Klaviyo when it resolves visitors that Klaviyo’s native tracking missed.
2

Clone your Browse Abandonment flow

  1. In Klaviyo, navigate to Flows and find your existing Browse Abandonment flow.
  2. Clone the flow.
  3. Rename the clone with the - Upstack Data suffix — for example, Browse Abandonment - Upstack Data — so you can distinguish it from the standard flow.
Detailed walkthrough: How to clone your standard flows in Klaviyo.
3

Change the trigger to the Upstackified Klaviyo metric

In the cloned flow, edit the trigger and change the source to the matching Upstack-emitted Klaviyo metric:
  • Browse Abandonment → Viewed Product - Upstackified
  • Cart Abandonment → Added to Cart - Upstackified
  • Checkout Abandonment → Started Checkout - Upstackified
  • Site Abandonment → Active on Site - Upstackified
Upstack pushes these events to Klaviyo for sessions identified server-side rather than by Klaviyo’s native tracking.
4

Add a 30-minute delay offset

In the Upstack copy of the flow, add +30 minutes to the first wait step compared to the standard flow (for example, 1 hour becomes 1 hour 30 minutes). This serves two purposes:
  • It gives Klaviyo’s native tracking time to identify the visitor on its own. If Klaviyo picks them up within those 30 minutes, the mutual exclusion filter (next step) prevents the Upstack flow from sending.
  • It aligns with the typical window in which visitors are most likely to return on their own, before the abandonment email is most effective.
5

Set mutual exclusion filters

Add a profile filter on each flow’s trigger so visitors don’t receive abandonment emails from both flows:
  1. On the standard flow, add: Has received email 0 times in last 7 days where Flow = [Upstack copy of the flow] (for example, Abandoned Cart - Upstack Data).
  2. On the Upstack copy of the flow, add the reverse filter: Has received email 0 times in last 7 days where Flow = [Standard flow] (for example, Abandoned Cart).
This 7-day mutual exclusion window prevents over-messaging. Detailed walkthrough: Add cross-flow exclusion filters in Klaviyo.
6

Repeat for Cart, Checkout, and Site Abandonment

Follow the same process for your Cart Abandonment, Checkout Abandonment, and Site Abandonment flows: clone with the - Upstack Data suffix, change the trigger to the corresponding *- Upstackified event, add the 30-minute delay offset, and set mutual exclusion filters in both directions.
7

Match email content and step structure

Your Upstack-triggered flows should use the same email templates, timing between steps, and step statuses (live/draft/manual) as your native flows. The visitor experience should be identical regardless of which flow they entered through — the only difference is how they were identified.
8

Set flows live and monitor

  1. Set each Upstack flow to Live status.
  2. Monitor performance over the first 7 days to verify events are flowing and emails are sending.
Mutual exclusion filters are required. Without them, a customer identified by both Klaviyo and Upstack will receive duplicate abandonment emails. Always configure the 7-day exclusion in both directions.

Expected results

Brands implementing the waterfall setup typically see:
MetricBefore enrichmentAfter enrichment
Profiles entering abandonment flowsBaseline+30–40%
Browse abandonment flow revenueBaseline+25–35%
Cart abandonment flow revenueBaseline+20–30%
Total email-attributed revenueBaselineMeasurable lift
The exact lift depends on your existing Klaviyo identification rate, traffic volume, and how much of your audience shops across multiple devices or returns after cookie expiration. Brands with high mobile and social media traffic see the largest improvement because those channels produce the most cross-device and in-app browser sessions.

Best practices

Run both flow sets in parallel — indefinitely

Don’t turn off your native Klaviyo flows when Upstack flows are running. They serve different visitor pools. Disabling native flows means you lose coverage for the visitors Klaviyo already identifies successfully.

Track attribution separately

Use UTM parameters to distinguish Upstack-triggered emails from native Klaviyo emails:
  • Native flow: utm_source=klaviyo&utm_medium=email&utm_campaign=browse_abandon
  • Upstack flow: utm_source=klaviyo&utm_medium=email&utm_campaign=browse_abandon_upstack
This lets you measure incremental revenue contribution separately from your existing Klaviyo revenue — critical for understanding ROI.

Monitor flow performance weekly

In your first month, check these metrics weekly for each Upstack flow:
  • Flow entry rate. How many profiles are entering the Upstack flows? If it’s near zero, the Klaviyo connection or trigger configuration may need attention.
  • Email open and click rates. These should be comparable to your native flows. If significantly lower, the identified profiles may be lower quality or the timing may need adjustment.
  • Revenue per recipient. The key metric. Compare this between native and Upstack flows to understand incremental value.
  • Unsubscribe rate. Monitor closely in the first two weeks. If Upstack flows show elevated unsubscribes, consider extending the delay or tightening exclusion filters.

Adjust the delay window if needed

The 30-minute delay is a starting point. If you find significant overlap between native and Upstack flows (visible as a high exclusion filter rate on the Upstack side), extend the delay to 45 or 60 minutes. If you’re seeing very little overlap, you can shorten it to 15 minutes to trigger faster.

Frequently asked questions

No. Upstack’s Klaviyo enrichment is designed to run alongside your existing flows, not replace them. Your native Klaviyo flows continue to catch visitors that Klaviyo identifies on its own. Upstack flows catch the visitors Klaviyo misses. Both run in parallel with mutual exclusion filters to prevent overlap.
Upstack uses server-side identity resolution — matching visitors through a combination of server-side signals (IP, user agent, device fingerprint, hashed identifiers) against an identity graph built from previous sessions. This works independent of browser cookies, so it survives cross-device transitions, cookie expiration, and in-app browser isolation that break Klaviyo’s client-side tracking.
Not if you set up mutual exclusion filters correctly. The 7-day exclusion window ensures that a customer identified by both Klaviyo and Upstack only receives one abandonment email. The 30-minute delay on Upstack flows gives Klaviyo’s native tracking first priority.
You should see profiles entering Upstack flows within 24 hours of going live. Meaningful revenue data typically requires 7–14 days of flow activity, depending on your traffic volume and conversion rates.
Yes. While abandonment flows are the highest-impact use case, Upstack’s identified profiles can trigger any Klaviyo flow — win-back campaigns, post-purchase sequences, or custom flows based on specific browsing behavior. The same waterfall principle applies.

Klaviyo destination

Configure the Klaviyo destination to enable identity-enriched profile delivery.

Onboarding Klaviyo in Upstack

End-to-end Klaviyo onboarding inside Upstack.

Set up Upstack abandonment flows

Step-by-step Klaviyo flow setup with cloning, delays, and exclusions.

Clone your standard flows

Detailed clone procedure for each standard abandonment flow.

Cross-flow exclusion filters

Configure mutual exclusion between native and Upstack flows.

Identity resolution

How Upstack’s server-side identity engine works.