Liftup PopupsExit intent popups and opt-ins for WordPress
Most popup plugins decide who sees what in PHP, then your cache plugin serves that decision to everybody. Liftup splits the decision in two, so targeting still works on a cached page, and on pages where no campaign runs it outputs nothing at all: no script, no stylesheet, no empty container.
How it looks in your dashboard
| Campaign | Where it shows | Trigger | Views | Conversions | Rate | Last 30 days | Live |
|---|---|---|---|---|---|---|---|
| Exit-intent email capture | Everywhere | Exit intent | 4,812 | 386 | 8.0% | ||
| Free shipping bar | Shop and product pages | Time on page | 9,140 | 512 | 5.6% | ||
| Welcome slide-in | Blog posts only | Scroll depth | 2,306 | 141 | 6.1% |
The campaign list, with the conversion rate and a thirty day sparkline on every row. The toggle pauses a campaign without deleting it.
Why WordPress popups break behind a cache
A popup plugin has to answer two questions: does this campaign belong on this URL, and has this particular visitor already seen it. Most plugins answer both in PHP. On a cached site that is a problem, because the answer is baked into the HTML your cache stores, and the first visitor's answer is then served to everyone who follows. A campaign capped at once per week shows on every visit. A campaign meant for logged out visitors shows to subscribers.
Liftup answers the two questions separately. Rules that give the same answer for every visitor on a URL are evaluated in PHP and cache happily with the page: post, post type, taxonomy, URL pattern, front page, blog index, search results, archives, 404 and the schedule. Everything that varies per visitor is decided in the browser from inert JSON that carries no personal data: frequency caps, session and login state, device class, referrer, UTM parameters, and first versus returning visit.
A cached page and an uncached page behave identically. And because the page level pass runs first, a page that matches no campaign gets nothing added to it at all: the HTML is byte for byte what you would have had with the plugin deactivated.
Cache safe by design
Page rules cache with the page, visitor rules run in the browser. Works the same behind any cache plugin or CDN.
Zero bytes when idle
No matching campaign means no script, no stylesheet, no markup. 10.8 KB of JS and 3.6 KB of CSS, gzipped, only where a campaign runs.
Nothing leaves your site
No IP addresses, user agents or user IDs stored. No licence check, no telemetry, no CDN. Leads go in your database and stay there.
How Liftup Popups works
Set up in a few minutes from your WordPress dashboard.
Read the full setup guideLiftup Popups features
Show the right thing in the right place
- Three formats: centre modal, corner slide-in, top or bottom notification bar
- Nine elements: heading, text, image, button, form, list, divider, spacer, dismiss link
- Five templates, six one click presets and eight block patterns
- Build with the visual builder or with the block editor, your choice per campaign
- Mobile specific overrides for size, position and spacing
Decide when it appears
- Exit intent, on desktop and mobile
- Time on page, scroll depth, element visible, click, inactivity
- Manual open from your own link, button or JavaScript
- Start and end dates, days of the week, times of day
Decide who sees it
- Include and exclude by post, post type, taxonomy, URL pattern, front page, blog index, search, archives and 404
- Logged in or out, first visit or returning, session state, device class
- Referrer and UTM parameters, read in the browser and never sent to the server
- Frequency caps in days, with stop on conversion and stop on dismiss
- Priority, so only one campaign opens when several match
Know whether it worked
- Views, interactions, conversions and rate, by day and by campaign
- A thirty day sparkline on every row of the campaign list
- Leads stored in your own database, searchable and paged
- CSV export, from the admin or from WP-CLI
Built for people who read the code
- 42 hooks: 33 filters and 9 actions
- WP-CLI: wp liftup list, recompile, stats, export-leads, rollup, doctor
- REST API under liftup/v1, capability checked
- Shortcodes for placing a campaign and for opening one
- A small JavaScript API, plus four DOM events
- Focus trap, Escape to close, correct ARIA roles, reduced motion setting
- Fully translatable, multisite ready
Pro adds
- Full screen mat and inline embed formats
- Countdown, multi column row, badge and custom HTML elements
- Fifteen more templates
- Works with Mailchimp, Brevo, MailerLite, Kit, Klaviyo, ActiveCampaign, HubSpot and FluentCRM, plus signed webhooks
Liftup Popups free vs Pro
The free version is complete on its own. Pro adds automation and deeper features on top.
| Feature | Free | Pro |
|---|---|---|
| Modal, slide-in and notification bar | ||
| Exit intent and all seven triggers | ||
| Full targeting engine, page and visitor rules | ||
| Scheduling, frequency caps and priority | ||
| Conversion analytics | ||
| Lead capture and CSV export | ||
| Block editor blocks and patterns | ||
| WP-CLI, REST API and 42 hooks | ||
| Templates: five free, twenty in Pro | ||
| Builder elements: nine free, thirteen in Pro | ||
| Full screen mat format | ||
| Inline embed format | ||
| Countdown, row, badge and custom HTML elements | ||
| Works with Mailchimp, Brevo, MailerLite and Kit | ||
| Works with Klaviyo, ActiveCampaign, HubSpot and FluentCRM | ||
| Signed generic webhook | ||
| Email support |
Who uses Liftup Popups
Growing an email list
Exit intent capture on the way out, plus a welcome slide-in for readers who finished a post.
Announcements that stop
A notification bar with a start and end date, so it takes itself down without you remembering.
WooCommerce offers
A free shipping bar on shop and product pages, and a frequency cap so nobody is asked twice.
Publishers and membership sites
Content upgrades inline in a post, and a prompt that never shows to people already logged in.
Requirements and compatibility
| Requires | WordPress 6.7 or higher |
|---|---|
| Tested up to | WordPress 7.1 |
| PHP | 8.1 or higher |
| Multisite | Yes, settings are per site |
| Page caches | Works behind any of them, by design |
| Front end weight | 10.8 KB JS and 3.6 KB CSS gzipped, only on pages with a campaign |
| Dependencies | None. No jQuery, no build step, no CDN |
| External requests | None, unless you choose a Google font for a campaign |
| Data stored | Campaigns, analytics events and leads, all in your own database |
Screenshots
Changelog
- First release.
Liftup Popups questions
Does it really work with my cache plugin?
That is what it was built for. Page level rules cache with the page; visitor level rules are decided in the browser. Behaviour is identical cached or not, behind any cache plugin or CDN.
Will it slow my site down?
On a page with no matching campaign it adds nothing at all: no script, no CSS, no markup. On a page with one, about 14 KB gzipped in total, with no external requests and no jQuery.
Is the free version limited in any way?
No. No impression limit, no watermark, no account and no feature that stops working. Exit intent and the whole targeting engine are in the free version, not held back.
What happens when my Pro licence expires?
Updates and support stop. The plugin keeps working and your campaigns keep running.
What if I remove Pro?
Campaigns built with it keep rendering. The free plugin displays whatever a campaign contains, including formats and elements it does not itself offer. Reinstall Pro and everything is editable again.
Is it GDPR friendly?
It stores no IP addresses, no user agents and no user IDs. Referrer and UTM data are read in the browser and never reach the server. The only third party request it can make is to Google Fonts, and only if you pick a Google font. The default is your theme's font, which sends nothing.
Which email services does Pro connect to?
Mailchimp, Brevo, MailerLite, Kit (ConvertKit), Klaviyo, ActiveCampaign, HubSpot, FluentCRM, and a signed generic webhook for anything else. Keys are verified against the provider before they are saved, and leads are delivered on cron so a slow provider never makes your visitor wait.
Can I use my own form plugin?
Yes. Drop your form's shortcode into a campaign. Liftup detects a successful submission from several popular form plugins, closes the campaign and records the conversion.
How do I open a popup from my own button?
Set the trigger to Manual, then link to the campaign anchor or add the open attribute to any element, using the campaign ID.
If I uninstall, do I lose my data?
Only if you ask to. Tick “Delete everything when Liftup is uninstalled” in Settings first, and removing the plugin drops the tables, campaigns, options, cron job and capabilities cleanly. Leave it unticked and everything stays.
What is planned next?
A plan, not a promise, and none of it is in the plugin today. Planned: advanced analytics, with a view to interaction to conversion funnel per campaign and results split by device, referrer, UTM and landing page. Planned: A/B testing, running variants against each other. Planned: revenue attribution, tying conversions to WooCommerce order value. Planned: WooCommerce targeting on cart contents, cart value, product category and past purchases. Planned: multi step campaigns, asking a question and then showing the offer that matches the answer.
Does exit intent work on mobile?
Yes. On desktop it watches for the pointer leaving toward the browser chrome. On mobile there is no pointer to watch, so it reads the gestures that precede leaving: a fast upward scroll, a back gesture, and the page being hidden.
Can I run more than one campaign on a page?
Yes, and only one will open. Every campaign carries a priority, so when several match the same page the highest priority one opens and the rest stay closed.
Support and guides
Pro license holders
Open a ticket from your account and reach the developer who wrote the code.
Open a ticket