Skip to main content
Pro Plan10 minutesIntermediate

Targeting Rules

Show your widget to the right people. Page patterns, country and device targeting, visit-count rules, and frequency caps explained.

exit-intentwidgetstargetingaudiencesrules
Last updated:
Pro Plan

Targeting controls who sees the widget. The right rules dramatically improve performance — a "10% off" offer on a pricing page converts very differently than the same offer on a blog post.

Page Targeting

Page targeting matches against the path of the current URL (everything after the domain).

Substring by Default

By default, the pattern you enter is treated as a substring match — the rule matches if the URL contains your pattern anywhere. This is the most forgiving option.

PatternMatchesDoesn't Match
/pricing/pricing, /pricing/team, /en/pricing/about, /blog
/blog/blog, /blog/post-1, /de/blog/about, /podcasts
checkout/checkout, /store/checkout/step-2/cart, /orders

Wildcards With *

Use * to match anything in that segment of the URL.

PatternMatchesDoesn't Match
/blog/*/blog/launch, /blog/2026/launch/blog, /news
/products/*/buy/products/widget-a/buy, /products/123/buy/products/widget-a
/*/pricing/en/pricing, /de/pricing/pricing

Multiple Patterns

Add more than one pattern (one per line). They are combined with OR — a URL only needs to match one of them.

/pricing
/checkout
/products/*/buy

This widget would fire on the pricing page, the checkout flow, and any product buy page.

Leave Blank to Match Everything

If you leave the page rule blank, the widget is eligible on every page of the domain. This is best for top-funnel widgets like newsletter signups.

Tip: Excluding Pages

Page targeting is "include only". To exclude specific pages from a wide rule, the cleanest pattern is to create separate widgets per page or per section, rather than trying to express "all pages except X" in one rule.

Country Targeting

Show or hide the widget based on the visitor's country.

Format

Use two-letter ISO 3166-1 alpha-2 country codes, all uppercase:

CodeCountry
USUnited States
DEGermany
FRFrance
JPJapan
BRBrazil
GBUnited Kingdom

In the builder, type a two-letter code in the country field and press Add (or Enter) to add it as a chip. Repeat for each country you want to include, and remove one by clicking the x on its chip.

Common Patterns

GoalSelection
Currency-specific offerJust the countries that use that currency
Regional launchCountries you've localized for
Compliance carve-outsExclude markets where the offer can't be made

Leave Blank for Worldwide

Empty country list = the widget is eligible everywhere.

How Country Is Detected

Country is derived from the visitor's IP at the time the page loads. Visitors using VPNs are matched to the VPN exit-node country. No GeoIP lookup happens client-side — the widget engine receives the country alongside the page event.

Device Targeting

Pick which device types the widget runs on.

DeviceDetected ByTypical Use
DesktopVisitor's user-agentMouse-leave triggers (most reliable)
MobileVisitor's user-agentScroll-up + visibility-return triggers
TabletVisitor's user-agentScroll-up + visibility-return triggers

Why Device Matters

Exit-intent fires differently on each device (see Overview). A widget designed around the mouse-leave signal will look strange on mobile, where the trigger is scroll-up. A few common pairings:

  • Discount popup — desktop only (mouse-leave is the strongest signal)
  • Newsletter sign-up — all devices
  • App-store CTA — mobile only

Mixing Devices

You can pick any combination of the three. At least one must be checked, otherwise the widget cannot fire.

Visit Count Targeting

Optional rule: only show the widget after the visitor has been on the site at least N times.

Use Cases

ThresholdUse Case
1 (default)First-time visitors only
2"Welcome back" or loyalty offer
3+Engaged visitors who keep returning

⚠️ Caveat — Cookieless Mode

Visit count is calculated from a stored visitor identifier. In cookieless mode (the privacy-first default for some Zenovay deployments), the visitor ID is window-scoped only — it disappears when the tab closes. As a result:

  • min_visit_count > 1 will essentially never fire in cookieless mode
  • Each "visit" looks like a brand-new visitor to the engine
  • Use this rule only when your site is running with the standard (cookie-using) tracker

If you're not sure which mode your site uses, check the General Settings page in your domain dashboard, or see Does Zenovay Use Cookies?.

Frequency Caps

A frequency cap limits how often the same visitor sees the widget. This is set on the Frequency step of the builder, using a slider measured in days (0–30).

SettingBehavior
0 daysNo cap — eligible to fire on every exit-intent trigger
1 dayAt most once per day, per visitor
7 daysAt most once per week, per visitor
30 daysAt most once per month, per visitor

Any whole number from 0 to 30 works — set the slider to whatever spacing you want between views.

How the Cap Window Works

The cap is a rolling window from the moment a visitor was last shown the widget, not a calendar-day boundary. With a 1-day cap, a visitor who sees the widget at 14:00 won't see it again until 14:00 the next day — the clock starts when they see it, wherever they are in the world.

Setting the slider to 0 removes the cap entirely. Even then, the same visitor won't see the widget twice within a single browser tab session (the renderer dedupes per session), but they may see it again on a later visit.

How the Cap Is Counted

The cap is recorded when the widget is shown to a visitor. Whether they click the call-to-action or dismiss (close) it, the window has already started, so they won't see it again until the window expires.

The cap is tracked by a daily-rotating hash of the visitor's IP address — no cookie is needed, which is why frequency caps work even in cookieless mode (unlike visit-count targeting above).

Putting It All Together

A typical "high-intent shopper" widget might combine:

RuleValue
Page/pricing, /checkout/*
CountryUS, CA, GB
DeviceDesktop only
Min. visit count1
Cap1 day

This shows a checkout-rescue offer to English-speaking shoppers on desktop, never more than once a day.

Common Pitfalls

SymptomLikely Cause
Widget never firesTargeting too narrow, or you've already seen it (try incognito)
Fires on wrong pagesSubstring match is too loose — try * wildcards or a longer pattern
Doesn't fire on mobileDevice list excludes mobile, or you're testing with mouse-leave (use scroll-up instead)
Visit-count rule does nothingSite is in cookieless mode; visit-count needs persistent identifiers
Fires more often than expectedFrequency cap is set to 0 (no cap), or to fewer days than you want between views

Next Steps

Was this article helpful?