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.

The Edit targeting modal with device, page and new-vs-returning conditions, one flagged incomplete
A plain-English summary up top; below, conditions with live validation. Red means "won't work until filled."

How the builder works

The condition catalog

GroupConditionOperators & options
VisitorNew vs returningNew / Returning
Has signed uphas / has not, in any campaign
In targeting ruleis / is not in a saved rule
Signed up in campaignsdid / didn't sign up in specific campaigns
PagePageIs on / Is not on / Has visited / Has not visited; by path or full URL; contains or exact; multiple values with * wildcards (/products/*)
BehaviorPages viewed= ≠ > ≥ < ≤ a number
SessionsSame six operators
Has completed actionhas / 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 visitedmore / less than N seconds → years ago
CookiesIdentified by cookieis / is not identified by known marketing-vendor cookies (Klaviyo, Postscript, Attentive, Mailchimp, Omnisend and others) or custom cookie names
Traffic sourceUTM sourceis / is not; presets incl. facebook, instagram, google, tiktok, email, sms, and [None] for untagged traffic
UTM mediumis / is not; cpc, paid_social, email, organic, referral…
Referrer containsdomain fragments (instagram.com, google., t.co…)
UserDevice typeMobile / Desktop
Operating systemis / is not; iOS, Android, Windows, macOS, Linux, Chrome OS…
LocationLocation (IP-based)in / not in countries or continents
ShopifyMarket / localein / not in markets, locales or countries
Number of orders= ≠ > ≥ < ≤; "exactly 0" = new customers; logged-out counts as 0
Cart subtotalSix operators against the live cart (empty = 0)
Cookie consenthas / hasn't granted: marketing, analytics, preferences, sale-of-data
KlaviyoIdentified by Klaviyois / is not a known profile (onsite cookie)
In Klaviyo listis / is not in a picked list, plus what to assume when membership is unknown
In Klaviyo segmentSame, for segments
CustomCustom JSYour 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

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.

TipRules that need data you don't collect (region/city location without IP-geo, for instance) are flagged no effect in the builder rather than silently failing. Yellow means "this matches everyone," red means "this matches no one until you fill it."