Targeting
Exit-Intent Popups: What They Are and When to Use Them
Exit-intent popups are desktop-only. Learn how they work, their exact payload size, and how to pair them with mobile triggers for a setup that reaches all your traffic.
A shopper adds two shirts to their cart, scrolls back up, and moves the mouse toward the top of the browser window to close the tab. Nothing has been clicked yet. That movement — the direction the cursor is travelling, not any action taken — is the signal an exit-intent popup is built to catch.
What exit-intent detection actually is
Exit intent works by watching the mouse. A script tracks cursor position and velocity, and when the pointer moves fast toward the top edge of the viewport — where the browser’s tab bar, back button, and close button live — it treats that as a visitor about to leave and fires the popup before the tab actually closes.
But how much code does that script add to your page? For a feature that might not even fire for most visitors, the payload matters. For Profiter, the entire package that runs on the storefront — trigger logic, wheel physics, and all styles — is two files totalling 15,412 bytes gzipped, or 13,501 bytes where the browser accepts brotli.
| Asset | Raw | gzip | brotli |
|---|---|---|---|
wheel.js | 21,293 B | 8,681 B | 7,759 B |
wheel.css | 23,847 B | 6,731 B | 5,742 B |
| Total | 45,140 B | 15,412 B | 13,501 B |
Payload measured 28 July 2026 from the built theme app extension assets. The browser uses the smallest format it supports, typically brotli.
It’s a proxy, not a certainty. Someone reaching for a different browser tab, or just resting their hand near the top of the screen, can trigger it too. But as proxies go, it’s a good one: heading toward the chrome of the browser is something people mostly do right before they leave, and rarely do in the middle of reading a product page.
Why it’s a common trigger for discount popups
The appeal is timing. A popup that fires the second a page loads interrupts someone who hasn’t decided anything yet. A popup that fires on exit intent only reaches shoppers who were already on their way out — browsing without buying, comparing prices in another tab, or just not convinced yet. Offering one more reason to stay costs nothing with a visitor who was leaving anyway, which is exactly why exit intent shows up so often as a trigger option on spin-to-win and discount popups: it targets the moment of departure instead of guessing at intent from time on page or scroll position alone.
The limitation: it’s for mouse users only
Exit intent depends on a mouse. This excludes two huge groups of shoppers: anyone on a touchscreen, and anyone navigating by keyboard.
There’s no equivalent signal on a touchscreen. A shopper closing a mobile tab swipes up from the bottom, taps the back button, or switches apps, all in a single gesture with no warning motion for a script to detect. Some tools try to fake it by watching for a fast scroll toward the top of the page, but that catches people re-reading a product description just as often as people leaving, which makes it noisy enough to be more annoying than useful.
Likewise, a keyboard-only user gives no mouse-based signal before hitting Cmd+W to close a window. A truly accessible popup needs to be navigable and dismissible without a mouse, using ARIA dialog semantics and clear focus rings so the user never gets trapped.
This matters because mobile is where most Shopify storefront traffic actually is. A targeting setup that relies on exit intent alone reaches your desktop mouse users and goes silent for everyone else. If mobile and accessibility matter — and for most stores, they do — exit intent can’t be the only trigger in the setup. It needs a partner built for other contexts: scroll depth (fire once someone passes a percentage of the page) or a time delay (fire after a fixed number of seconds), either of which works regardless of the input device.
Pairing exit intent with a frequency cap
Exit intent solves when to show a popup to someone about to leave. It doesn’t solve how often to show it to someone who comes back. Without a limit, a visitor who browses your store three times in a week gets the same popup three times, which turns a well-timed offer into the thing they start closing on reflex.
A frequency cap fixes that by remembering the visitor and skipping the popup until a set number of days has passed since they last saw it. Combined, the two triggers do different jobs: exit intent decides the moment within a single visit, and the frequency cap decides whether this visit even qualifies for a popup at all. A returning shopper still gets caught if they’re heading for the exit, but not on every single trip.
Building the whole picture
None of these triggers works alone for a real store. A practical setup usually layers exit intent for desktop, a scroll or time trigger for mobile, and a frequency cap over both so repeat visitors aren’t hit every session. Device targeting ties it together — showing the exit-intent version only to desktop traffic and the scroll or time version only to mobile, rather than running every trigger for every visitor and hoping the popup logic sorts it out.
Profiter’s audience step supports all six of these — exit intent, scroll depth, time delay, device targeting, frequency cap, and a max-spins-per-visitor limit — as configurable options rather than a fixed default, so the combination above is a setting, not custom code. But the reasoning holds regardless of which app runs it: exit intent alone leaves more than half your traffic untouched, and any trigger without a frequency cap eventually annoys the people it keeps hitting.