What happens when messaging moves from interruptive to embedded?
Tandem, a global language exchange platform, took a different approach to driving upgrades by embedding messaging directly into the product experience instead of relying on traditional lifecycle channels.
After shifting away from email, push, and static pop-ups, they saw:
- 10x increase in conversion rates among high-intent users
- 10% increase in subscription revenue
- 10x reduction in campaign production time
What They Did:
- Moved away from interruptive messaging (emails, pop-ups)
- Focused on behavior-driven engagement within the product
- Built a system where messaging responds to real-time user actions
Instead of prompting users at set times, they responded to what users were doing in the moment.



How They Did It:
This was powered by a composable data approach, where behavioral signals flow from a central source into Iterable to trigger messaging in real time.
- Centralized behavioral data in a warehouse (Snowflake) to capture signals like feature usage, abandoned payments, and subscription activity
- Synced real-time audiences from their data warehouse into Iterable using Hightouch to trigger messaging based on user behavior
- Used Embedded Messaging to deliver content directly within the app experience
- Replaced static prompts with contextual messages tied to specific actions (for example, upgrade nudges tied to feature usage or expiring subscriptions)
The combination of Snowflake, Hightouch, and Iterable allowed us to turn our data into a conversational asset. By centralizing our intelligence in Snowflake and using Hightouch to activate it within Iterable, we created a loop where every message is a direct response to a user’s need. It’s no longer about sending campaigns; it’s about maintaining a continuous, context-aware dialogue with millions of people.
Rodolphe Helderwerdt
VP of Marketing, Tandem
If You’re Looking To Test This:
- Identify a key conversion moment in your product (upgrade, feature usage, checkout)
- Trigger messaging based on a real user action (not just timing)
- Replace one interruptive message with something embedded or more contextual
- Start small and expand once you see what drives conversion
