Frequency caps prevent a campaign from being shown to the same visitor more than you intend. Without a cap, a page-view–triggered banner would reappear every time a visitor navigates to that page. Caps are set per campaign and apply independently to each visitor.
The four frequency options
| Option | Behaviour | Best for |
|---|---|---|
| Send once | The campaign fires once and is permanently suppressed for that visitor after they've seen it. | Onboarding tours, welcome messages, one-time announcements. |
| Send every time | No cap — the campaign fires every time the trigger event matches. | Persistent banners you want visible on every relevant page view, such as a maintenance notice. |
| Send X times | The campaign fires at most X times per visitor, ever. | Reminders you want to repeat a few times before giving up — "Complete your profile" shown up to 3 times. |
| Send X times every Y days | A rolling-window cap. The visitor can see the campaign X times within any Y-day window. Once the window passes, the counter resets. | Periodic check-ins — NPS every 90 days, a re-engagement banner once per week. |
Where to set the frequency cap
The frequency field lives in the Trigger settings slideover, not on the main campaign form. Click the Trigger button at the top of any campaign editor (banners, messages, surveys, tours all have it) to open the slideover. The Frequency dropdown is at the bottom, below the Visitor rules section.
The "Always trigger" override (custom events only)
If you're using a Custom event as the trigger, you can mark it as Always trigger. This ignores the frequency cap entirely and fires the campaign every time the event is sent, regardless of how many times the visitor has already seen it.
Use this when your UI has an explicit "Show tour" or "Replay tutorial" button — you want the tour to launch on demand, not be suppressed because the visitor saw it before. Fire the event from your app:
Yaplet.trackEvent('customEvent', { name: 'your-custom-event' });
How the cap is tracked
Frequency data is stored server-side against the visitor's visitor_id. Clearing cookies or switching browsers doesn't reset the cap for identified visitors (those you've called Yaplet.identify() for) — the SDK reconciles them to the same visitor_id. For anonymous visitors, the visitor_id is kept in the browser's local storage, so clearing site data or switching browsers will reset the cap.
What's next?
With trigger rules and frequency caps in place, you're ready to run targeted campaigns. For deeper audience control, revisit Trigger rules.