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.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.
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.
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:Server-side identity matching
Session stitching
Real-time profile push to Klaviyo
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.How it works
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.Connect Klaviyo as a destination in Upstack
Clone your Browse Abandonment flow
- In Klaviyo, navigate to Flows and find your existing Browse Abandonment flow.
- Clone the flow.
- Rename the clone with the
- Upstack Datasuffix — for example,Browse Abandonment - Upstack Data— so you can distinguish it from the standard flow.
Change the trigger to the Upstackified Klaviyo metric
- Browse Abandonment → Viewed Product - Upstackified
- Cart Abandonment → Added to Cart - Upstackified
- Checkout Abandonment → Started Checkout - Upstackified
- Site Abandonment → Active on Site - Upstackified
Add a 30-minute delay offset
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.
Set mutual exclusion filters
- 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). - 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).
Repeat for Cart, Checkout, and Site Abandonment
- 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.Match email content and step structure
Expected results
Brands implementing the waterfall setup typically see:| Metric | Before enrichment | After enrichment |
|---|---|---|
| Profiles entering abandonment flows | Baseline | +30–40% |
| Browse abandonment flow revenue | Baseline | +25–35% |
| Cart abandonment flow revenue | Baseline | +20–30% |
| Total email-attributed revenue | Baseline | Measurable lift |
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
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
Will Upstack replace my existing Klaviyo flows?
Will Upstack replace my existing Klaviyo flows?
How does Upstack identify visitors that Klaviyo can't?
How does Upstack identify visitors that Klaviyo can't?
Will this cause customers to receive duplicate emails?
Will this cause customers to receive duplicate emails?
How long does it take to see results?
How long does it take to see results?
Can I use Upstack identity enrichment for flows other than abandonment?
Can I use Upstack identity enrichment for flows other than abandonment?