Audience targeting
Who gets to see the popup. Open the condition builder from a campaign card's targeting line, the ··· menu, or the builder's Who sees it panel, then compose rules with AND/OR logic, nested groups and live validation.
How the builder works
- Match ALL / ANY: the root group's AND/OR toggle; + Add sub-filter group nests groups (up to 3 deep) for logic like (mobile AND on /products) OR (returning AND from Instagram).
- Plain-English summary: the sentence at the top always says what your tree means.
- ✦ Generate: type the audience in words ("mobile visitors from the US on /products who haven't signed up") and Janus drafts the tree for you.
- Validation: incomplete (red) won't match anyone until filled; ◍ no effect (yellow) always matches and is doing nothing.
The condition catalog
| Group | Condition | Operators & options |
|---|---|---|
| Visitor | New vs returning | New / Returning |
| Has signed up | has / has not, in any campaign | |
| In targeting rule | is / is not in a saved rule | |
| Signed up in campaigns | did / didn't sign up in specific campaigns | |
| Page | Page | Is on / Is not on / Has visited / Has not visited; by path or full URL; contains or exact; multiple values with * wildcards (/products/*) |
| Behavior | Pages viewed | = ≠ > ≥ < ≤ a number |
| Sessions | Same six operators | |
| Has completed action | has / has not: viewed a popup, closed one, email/SMS sign-up or opt-in, answered a quiz, claimed a reward, placed an attributed order; scoped to this session / a previous one / either, with optional time (>/< N minutes…years ago) and campaign sub-filters | |
| First visited | more / less than N seconds → years ago | |
| Cookies | Identified by cookie | is / is not identified by known marketing-vendor cookies (Klaviyo, Postscript, Attentive, Mailchimp, Omnisend and others) or custom cookie names |
| Traffic source | UTM source | is / is not; presets incl. facebook, instagram, google, tiktok, email, sms, and [None] for untagged traffic |
| UTM medium | is / is not; cpc, paid_social, email, organic, referral… | |
| Referrer contains | domain fragments (instagram.com, google., t.co…) | |
| User | Device type | Mobile / Desktop |
| Operating system | is / is not; iOS, Android, Windows, macOS, Linux, Chrome OS… | |
| Location | Location (IP-based) | in / not in countries or continents |
| Shopify | Market / locale | in / not in markets, locales or countries |
| Number of orders | = ≠ > ≥ < ≤; "exactly 0" = new customers; logged-out counts as 0 | |
| Cart subtotal | Six operators against the live cart (empty = 0) | |
| Cookie consent | has / hasn't granted: marketing, analytics, preferences, sale-of-data | |
| Klaviyo | Identified by Klaviyo | is / is not a known profile (onsite cookie) |
| In Klaviyo list | is / is not in a picked list, plus what to assume when membership is unknown | |
| In Klaviyo segment | Same, for segments | |
| Custom | Custom JS | Your code returns truthy to match; runs client-side at trigger time. See custom code. Warning: an error or falsy return silently blocks the popup. |
Saved targeting rules
Targeting rules on the Campaigns page manages reusable audiences: define "New visitors" or "US mobile paid traffic" once, reference it from any campaign via the In targeting rule condition, update it in one place forever after. Deleting a rule that campaigns still reference is flagged at publish time.
Scheduling & priority
- Start / end dates: the campaign only runs inside the window (evergreen outside it? pause it or let the end date do the work).
- Dayparting: restrict to hours of the day and days of the week, evaluated in your shop's timezone, DST handled.
- Priority: when several campaigns match one visitor, the highest priority number wins; ties go to the newest.
Where rules run
Targeting is evaluated server-side: visitors never download your rule tree, your Klaviyo list ids or your segment logic. The widget only collects the signals (path, device, UTM, cart, consent) and receives a yes/no. The single exception is Custom JS, which by nature runs in the browser as a final client-side gate.