Twelve campaigns are live. One visitor arrives. Which popup shows β if any β has to be answered in the browser, in under a hundred milliseconds, without annoying them and without breaking the site it runs on. That engine is PulsePop.
Every popup on this page is the real runtime. Nothing here is a video.
Same 33 KB file a customer would embed, same shadow root, same decision pipeline. It is even enforcing its own frequency caps on you right now.
Every gate records why it said no, and the on-page debugger prints that ledger verbatim. βWhy isnβt my popup showingβ stops being a support ticket and becomes something the customer answers themselves.
Gate 05 is the one most popup scripts get wrong. A trigger fires once per page view, so a campaign blocked by a cooldown that expires six seconds later is normally discarded for the rest of the visit β and the second campaign on a busy page silently never appears.
Most builders draw an approximation of your popup and hope it matches
what ships. PulsePopβs canvas runs the actual renderer, in the actual
shadow root, inside an iframe sized to the actual device β so
92vw and @media (max-width: 767px) mean what a
phone means by them.
These are screenshots of the software, not mock-ups. The figures in them come from the sample dataset the demo ships with — open the demo and you will see the same numbers.
Modal, center, top, bottom, corner cards, sticky bar, slide-in, notification, side panel, drawer, fullscreen, lightbox, inline, floating, teaser.
Delay, scroll depth, element visible, exit intent, click, inactivity, form abandonment, video progress, and manual. Exit intent is platform-specific and honest about it.
Page, traffic source, UTM, country, city, device, browser, visitor history, cart value, products, cookies, storage keys, custom properties, day and hour.
Headings, forms, images, video, countdowns, coupons, product cards, ratings, progress bars, social icons, spin wheel, scratch card, custom HTML.
A two-proportion z-test. It will keep saying βnot enough data yetβ for as long as that is the true answer, instead of naming a winner out of noise.
Campaigns with versioning and rollback, visitors, a frequency ledger, pre-aggregated analytics, leads, coupons, prizes, integrations, webhooks.
<script src="https://your-install.com/pp/loader.js"
data-pp-key="pk_live_β¦" async></script>
The loader waits for first paint before fetching the runtime, so where you put it in the document does not affect page speed. Runs on PHP 8.2 and MySQL 8 β cPanel shared hosting included.
Signed webhooks with replay protection, retries at 30 s / 5 min / 30 min, and every attempt logged with the response body β so a customer can debug their own endpoint.
The same codebase runs single-site or multi-tenant. One environment variable switches the mode, and the schema is identical β so you can start on your own sites and turn it into a product later without a migration.
For running popups on sites you own. Full source, full engine, the builder, and every integration.
For selling popup accounts to your own customers. Multi-tenant, metered, white-labelled.
It cannot reach it. Everything renders inside a shadow root, so the siteβs CSS cannot style the popup and the popupβs CSS cannot leak onto the site. That single decision is the most common source of one-star reviews on popup scripts, and it is designed out rather than patched around.
No. The runtime and the builder ship pre-built. Open a file, change a colour, upload it β nothing to compile. A build script is included for anyone who wants one, but nobody is required to run it.
PHP 8.2, MySQL 8, and one cron entry. Redis is optional and only pays off past real traffic. It installs on cPanel shared hosting.
IPs are truncated before storage, consent text and version are recorded with each lead, tracking can be gated behind an explicit consent call, and erasure removes the person while keeping the aggregate counts your reporting depends on.
No. The prize is drawn on the server inside a transaction with the prize rows locked, so weights are real and stock survives simultaneous spins. The wheel animation simply lands on the segment the server already chose.
The submission is queued in the visitorβs browser and replayed on their next page view. They still see the success state β because from their side, it was one.
Demo mode is fully interactive β drag, edit, preview and publish. Nothing to install, nothing to sign up for.
Try the builder β