Add-on · impressions are never metered
The offer appears on a condition: the visitor is leaving, has read the page to the end, is on the site for the third time, has put something in the cart. As a form, a quiz, a coupon or a prize wheel — in a modal, a bar or a block right inside your markup. Built for shops and service sites that pay for their traffic.
Registration is free and needs no card · the pop-ups themselves are a paid add-on you switch on in the catalogue · campaign edits reach your site in 5 minutes
They browse pages, scroll the text, add something to the cart. The campaign waits for its condition: time on site, scroll depth, the third page of the visit, an exit attempt, a cart change, a click on your button.
You choose the format: a modal, a slide-in from a corner, a bar at the top, or a block built right into your markup — inside an article, under a product, in the footer.
They leave an email, take a quiz, spin the wheel, claim a coupon or follow a button. In a quiz the questions branch, so they only answer the relevant ones.
The coupon they won stays as a sticky reminder with its code and deadline, while the contact and the answers land in the Leads inbox together with the page URL and UTM tags.
A free Cenaly.com account and your site domain in the "My website" section.
One line before </body> — in your theme, in a Tilda or Wix HTML block, in Shopify's theme.liquid. It serves every widget.
Each widget is a toggle and a settings form. Changes reach your site without touching code; CDN cache is five minutes.
The tag
<script src="https://cdn.cenaly.com/site/v1.js" data-domain="your-site.com" async></script> One tag for all widgets. `data-domain` is your site; everything else lives in the admin.
A modal, a slide-in in one of four corners, a bar at the top or bottom, fullscreen — plus a block in the flow of the page: a subscription in the footer, a quiz inside an article, a coupon under a product card. Best where an overlay is too much but the offer still matters.
Nine triggers: page load, time on site, idle, scroll depth, pages per session, an exit attempt, a cart change, a click on an element and your own site event. Best for shops and blogs where the context of the visit matters.
Page masks, device, country, UTM tags, the class of the referring source (maps, search, social, direct), new or returning, cart contents and total, interactions with other campaigns and up to 5 conditions on your own site events. Best for anyone paying for ads who would rather not show a discount to everybody.
A form with the fields you choose, a quiz with branching, scores, outcomes and a calculator field. Answers and contacts land in the Leads inbox with the page URL and UTM, and export to CSV. Best for services where an enquiry starts with picking the right option.
A prize wheel (2–8 segments), a scratch card (2–6 options) and gift boxes (3–6): the prize is the code of a real coupon of your location, and the outcome is drawn BEFORE the animation. A campaign with no prizes isn’t shown at all. Best for promotions and collecting subscriptions.
A/B variants with an honest verdict (200 impressions per variant, 10 metric events for the leader, 95 % confidence), and you apply the winner with a button. Alongside them: a pause after a dismissal, a lifetime cap of up to 100 impressions per visitor and a teaser bubble instead of a repeat window. Best for anyone running popups regularly.
Offer it by scroll depth, or put the form into the footer as a block: the contact goes to Leads and the subscription to your mailing list.
Desktop exit-intent plus a product-page mask: the offer reaches exactly those about to close the tab, not everyone on load.
The remainder is recalculated with the cart, and the threshold comes from data — delivery settings, a call from your site, or a sum you set.
A few branching questions and, at the end, an outcome by score with a coupon or a button. The answers sit next to the contact and the page URL.
A compact slide-in with related items after a cart change. The campaign needs our ordering widget on the same page.
A tile with real free slots for a service; a tap on one opens the appointment widget with that time already selected.
Colour, position and labels adapt to your site. The widget lives in a Shadow DOM — your styles don't break it, and it doesn't break yours.
On desktop
On mobile
On your side: A campaign is built in the admin panel once and runs both on your storefront and on your own website. It never shows on top of another dialog — the display is postponed instead.
On desktop
On mobile
On your side: The lead lands in Leads with its capture context: page URL and UTM. Its group in the inbox is the campaign itself, so you see which one actually worked.
On desktop
On mobile
On your side: The code and its deadline share one key with the storefront: a code handed out on your site is visible in the menu too — and the guest does not collect a second coupon.
Exact menu names and plan requirements, taken from each platform’s own help center.
Sites built with our website builder ship with the widgets already wired — nothing to paste.
Step-by-step guides per platform — in the help center →$9/mo
| Without the widget | With the widget | |
|---|---|---|
| Who sees it | ✕ A discount banner hangs on every page for every visitor | ✓ Targeting by page, country, UTM, device, cart and your own site events |
| When it fires | ✕ The window pops a second after load, before the first screen | ✓ Nine triggers: exit, scroll, idle, the Nth page, a cart change |
| Where leads go | ✕ Form enquiries stay in your inbox, with no page URL and no UTM | ✓ Leads land in your dashboard inbox with the page URL and UTM, export to CSV |
| Testing ideas | ✕ Which version worked better is judged by eye | ✓ An A/B verdict with thresholds: 200 impressions per variant, 10 events for the leader, 95 % confidence |
| Fatigue | ✕ The visitor sees the same window on every visit | ✓ A pause after a dismissal, an impression cap and a teaser instead of a repeat window |
A popup is a message that appears on a site in response to what a visitor does: they are about to leave, they have read the page, they have put something in the cart. What makes it “smart” is not the animation but the conditions: who to show it to, when, and how often.
It starts to make sense where there is already traffic but few actions: people read product pages and leave, the footer subscription does nothing, and the discount reaches everyone, including those who would have bought anyway. A popup fixes that specifically — and the same popup can do harm if it is shown to everyone all the time.
That is why the triggers here come with brakes: a pause after a dismissal, a lifetime cap per visitor, a teaser instead of a repeat window and an honest A/B verdict with thresholds. Contacts land in the Leads inbox with the page URL and UTM, and campaigns run on both your website and your Cenaly.com storefront under one subscription.
Popups are premature while traffic is thin: at a dozen visits a day a window yields neither revenue nor enough data for an A/B verdict — start with the free widgets that catch the visitor who already arrived. What separates a popup from social proof is the nature of the message: proof only shows numbers our server counted itself, while a popup carries your text and your offer, and you answer for it.
Every display format and inline blocks, forms and quizzes, coupon and prize campaigns, targeting, frequency caps and A/B with a verdict. You manage campaigns in the admin. Impressions, the number of campaigns and captured leads are never metered; pay yearly and you pay for 10 months instead of 12.
Into the Leads inbox of your dashboard — together with the capture context: the page URL and the UTM tags. There are filters and a CSV export; subscriptions go to your mailing list.
That is what the brakes are for: a pause in days after a dismissal, a rolling “N impressions per M days” window, a lifetime cap of up to 100 impressions per visitor, “stop after conversion”, the global “one popup per session” cap, a schedule, and the teaser bubble that folds a campaign into the corner instead of showing the window again.
Yes, by CSS selector or by a ready anchor — the campaign editor gives you the snippet. Such a block doesn’t spend the “one popup per session” limit, doesn’t close on Esc and has no teaser; a bar or fullscreen is replaced by a card in this mode.
Cart data and a threshold. On our storefront the threshold comes from your delivery settings; on your own site your site sends it with a `CenalyEngage.cart` call, or you set your own sum in the campaign. Without a threshold the campaign isn’t shown.
The server counts the statistics per variant and issues a verdict: a winner, no difference, or not enough data. The thresholds are 200 impressions per variant and 10 metric events for the leader at 95 % confidence. A human applies the decision with the “Apply the winner” button.
Yes — the selection and display engine is the same, so a campaign set up once runs both on your website and on our storefront under one subscription. The exception is the “nearest free slots” tile: it is only calculated by the widget on your own site.
The widget answers that itself: `window.CenalyEngage.getDiagnostics()` returns a machine-readable reason per campaign — wrong page, wrong audience, cap spent, no neighbouring widget, inline container not found. The `data-debug="true"` attribute shows the same picture as an on-screen panel.
With the shared “My website” tag plus the Popups toggle once the add-on is bought. WordPress, Tilda, Shopify, Webflow, Wix and custom-built sites are all supported. Campaigns are then created and edited in the admin — you never touch the site code again; a change reaches the site in 5 minutes, that is the CDN cache.
The main bundle is about 47 KB gzipped and loads with the async attribute after the page has rendered. Everything heavy sits in lazy halves that only ship when such a campaign actually wins an impression: forms, quizzes, the wheel and cross-sell — about 28 KB; the grid of nearest free slots — about 16 KB; the "open now" phrases — about 2.5 KB. The diagnostics panel is switched on by a separate attribute and never reaches a visitor's browser. The popup renders in a Shadow DOM, so it doesn't shift your layout.
One loader — about 26 KB gzipped, with the async attribute: it reads which widgets you switched on and pulls only those, as separate files. A widget you left off is never downloaded, and the weight of each one you did switch on is stated on its own page.
No. Widgets render inside a Shadow DOM: your site's CSS doesn't affect them and theirs doesn't leak out.
It reads your page's `<html lang>` or a `data-lang` attribute on the tag. Built-in labels are translated into 45 languages — the guest chat covers the same list; your own texts you write in the admin in the languages you need.
In the cloud your account lives in: cenaly.com — AWS, cenaly.ru — Yandex Cloud in Russia. Requests, conversations and bookings stay within the brand's contour.
More — installation per platform, settings and troubleshooting — in the help center. Installation guide →
Comparisons
Switch the add-on on with the shared tag and a toggle, then decide in the admin who sees what and when: forms, quizzes, coupons, conditions and frequency.
Start for freeImpressions, campaigns and leads are never metered · yearly = 10 months instead of 12