Documentation Index
Fetch the complete documentation index at: https://docs.getzenstep.com/llms.txt
Use this file to discover all available pages before exploring further.
How targeting works
Every Zenstep flow has a targeting configuration — a set of rules that determine whether the flow should be shown to the current user on the current page. The targeting engine runs client-side in the browser (inside the Zenstep snippet) every time a page loads or the URL changes (SPA navigation). This means:- No server round-trip per evaluation — instant decision
- Rules are evaluated against the current browser context (URL, user attributes, device, behaviour)
- Targeting is evaluated against all published flows simultaneously
Anatomy of a targeting rule
Every rule has a type and evaluates totrue or false. Rules are combined with and (all must match) or or (any must match) logic.
/dashboard and only to users with plan = "free".
Rule types
| Type | Description | Plan |
|---|---|---|
url_path | Match the current page URL path | All plans |
user_attribute | Match a user attribute from identify() | All plans |
device | Match device type (desktop / mobile / tablet) | All plans |
query_param | Match a URL query parameter | All plans |
always | Show to everyone, always | All plans |
behavior | Match based on track() event history | Grow+ |
segment | Match a saved reusable segment | Grow+ |
audience_membership | Match a GA4 or Clarity-imported audience | Scale+ |
Combining rules
Rules are combined at two levels:- Top-level operator (
and/or) — how the rules in the root array are combined - Group rule — a nested rule that can contain its own rules and operator
/pricing OR (on any dashboard page AND if the user is on the free plan).
Environments
You can restrict a flow to specific environments (staging vs production):data-env on the snippet script tag:
Frequency controls
Targeting determines if a flow is shown. Frequency controls determine how often:| Frequency | Behaviour |
|---|---|
once | Show at most once per user (checked via flow_completions table) |
every_session | Show on every new browser session |
until_completed | Show on every page load until the user completes the flow |