Frequency capping

Frequency capping decides how often a visitor sees a given tour. The default is "show every time": each visit to a page that matches the tour's targeting plays the tour. You can change this on a per-tour basis in the dashboard.

Show once

Set a tour to Show once per visitor in the dashboard's visibility settings. With this on:

  • The first time the visitor reaches a page that matches the targeting rules, the tour plays.
  • Once they either complete or dismiss it, they won't see it again.
  • "Dismiss" includes closing the tour mid-way, navigating away, and closing the tab while a tour is open.

How it's enforced

When the StepsKit embed fetches active tours, the server filters out "show once" tours that this visitor has already completed or dismissed. That filter is keyed on the visitor's id, which is why visitor identification matters.

The check is fail-open: if the events lookup fails (rare), the tour is returned and played rather than withheld. We'd rather show a tour twice than swallow a real impression.

Anonymous visitors

If data-user-id (or id in setUserAttributes) isn't set, the visitor is anonymous. "Show once" then falls back to a session-scoped check using browser storage:

  • Works within the current browser session.
  • Resets when the visitor clears site data or uses another device or browser.

For most marketing-site use cases this is fine. For an authenticated product, always pass id.

Identifying the user before the first fetch

The cleanest pattern is to render data-user-id directly into the script tag server-side, so the very first tour fetch carries the correct visitor:

<script
  src="https://cdn.stepskit.com/stepskit.latest.js"
  data-api-key="YOUR_API_KEY"
  data-user-id="user_123"
  async
></script>

If you can only identify client-side, use setUserAttributes({ id }, { autoRefresh: true }). StepsKit's init/refresh coordination guarantees a "show once" tour won't play against a stale anonymous fetch — see Visitor identification.