skills/marketing-growth/exit-intent-popups/SKILL.md
Capture leaving visitors with targeted exit-intent popups that show personalized offers, email capture forms, and respect frequency capping rules
npx skillsauth add finsilabs/awesome-ecommerce-skills exit-intent-popupsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Exit-intent popups detect when a visitor is about to leave — by tracking rapid mouse movement toward the browser's address bar on desktop — and display a targeted offer. When implemented with proper targeting and frequency capping, they recover 5–10% of otherwise lost visitors. Dedicated popup apps handle all the detection logic, A/B testing, and ESP integration — no custom code needed.
| Platform | Recommended Tool | Why | |----------|-----------------|-----| | Shopify | Klaviyo Forms (free, syncs to Klaviyo) or Privy ($30/mo) | Klaviyo Forms integrates directly with Klaviyo flows; Privy includes A/B testing, unique coupon codes, and detailed analytics | | WooCommerce | OptinMonster ($9/mo) or Popup Maker (free) | OptinMonster has exit-intent detection, A/B testing, and WooCommerce integration; Popup Maker is simpler and free | | BigCommerce | Justuno or Klaviyo Forms | Both have native BigCommerce integrations and exit-intent detection | | Custom / Headless | Klaviyo Forms (via JavaScript embed) or custom implementation | Klaviyo Forms works on any site with a JavaScript snippet |
Most popup tools have exit-intent built in. The key is configuring it correctly to avoid annoying visitors.
For custom builds, Klaviyo Forms works on any website:
If you need full control over the popup behavior (custom exit detection logic):
function initExitIntent({ threshold = 20, delay = 5000, onExitIntent }) {
let activated = false;
setTimeout(() => {
document.addEventListener('mouseleave', (e) => {
if (e.clientY <= 0 && !activated) {
activated = true;
onExitIntent();
}
});
}, delay);
// Mobile: use visibilitychange instead of mouseleave
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden' && !activated) {
activated = true;
onExitIntent();
}
});
}
// Check frequency cap using localStorage
function shouldShowPopup(popupId, capDays = 14) {
const lastSeen = localStorage.getItem(`popup_seen_${popupId}`);
if (!lastSeen) return true;
return (Date.now() - parseInt(lastSeen)) > capDays * 86400000;
}
The most impactful thing to test is the offer type. Run one A/B test at a time:
| Offer Type | Best For | Typical Email Capture Rate | |-----------|---------|--------------------------| | 10% off first order | General merchandise | 3–8% of popup views | | Free shipping | High-AOV stores (shipping is expensive) | 4–9% of popup views | | Free gift with purchase | Beauty, supplements | 5–10% of popup views | | Content offer ("Download our guide") | B2C brands with content | 2–5% |
In Klaviyo/Privy: create two variants of your form with different offers, split traffic 50/50, and measure conversion rate over 2 weeks before picking a winner.
Generic codes like WELCOME10 get shared on coupon sites and inflate your attribution:
| Problem | Solution | |---------|----------| | Popup fires immediately on page load | Set minimum 5-second delay AND minimum scroll depth (20%) in targeting settings | | Popup shown to same user on every visit | Verify frequency capping is enabled in your popup app (Klaviyo: 14 days; Privy: configurable; OptinMonster: configurable) | | Exit intent fires on mobile | Switch to scroll-based or time-based triggers for mobile; most tools do this automatically when exit-intent is selected | | No way to measure whether the popup helps conversion | Enable A/B testing with a control group in your popup app; most support this natively | | High popup-driven unsubscribe rate | The offer is not compelling enough; test free shipping vs. % off; also check that emails are sending too frequently after signup |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion