Frequency Caps and Send Limits

Wunderkind’s SFMC Journey Builder integration includes frequency caps and send limits across both Abandonment and Catalog campaigns.

The solution uses Salesforce Marketing Cloud Send Logging, Automation Studio, and Journey Builder to keep track of a contact's Wunderkind email send history and determine whether they are eligible to enter additional Wunderkind Journeys.

Strategy

Abandonment and Catalog use the same frequency-cap infrastructure, but their group limits are calculated independently.

Catalog sends do not count toward Abandonment limits, and Abandonment sends do not count toward Catalog limits.

📘

If your implementation includes Abandonment campaigns only, Wunderkind also supports an Abandonment-only version of this frequency-cap solution.

Abandonment

Per-series limit:

  • 2 Cart Abandonment max per 30 days
  • 2 Product Abandonment max per 30 days
  • 2 Category Abandonment max per 30 days

Per-group (abandonment) limit:

  • 2 Abandonment series max per 7 days
  • 4 Abandonment series max per 30 days
  • 1 of the same specific series (Cart, Product, Category) once per 7 days

Catalog

Per-series limit:

  • 2 Low Stock max per 7 days

Per group (catalog) limit:

  • 4 catalog series max per 14 days

The one-per-day module limits will remain enforced by Wunderkind rather than being duplicated in SFMC:

  • 1 Low Stock max per day
  • 1 Price Drop max per day
  • 1 Back in Stock max per day

Implementation

Capture Sends

SFMC’s native Send Log is used as the source of truth for emails that were actually sent.

Two Wunderkind-specific fields are added to identify which sends should count toward frequency-cap calculations:

WkPurpose: identifies the Wunderkind campaign.

  • WkPurpose is populated based on the corresponding Wunderkind campaign. These values are set in the email template in Wunderkind's environment and passed to the corresponding Data Extension when the email is triggered.
    • Cart Abandonment → cart abandonment
    • Product Abandonment → product abandonment
    • Category Recap → category recap
    • Low Stock → low stock
    • Back in Stock → back in stock
    • Price Drop → price drop

WkSeriesStart: identifies whether the email represents the start of a new series.

  • Only the first email in a series is counted as a new series start. This prevents Email 2+ within an existing series from being counted as a new series for frequency-cap purposes. These values are set in the email template in SFMC for the corresponding email.
    • For the first email: WkSeriesStart = "Y"
    • For subsequent emails in the same series: WkSeriesStart = "N"

Example AmpScript

%%[
  SET @WkSeriesStart = "Y"
]%%
%%[
  SET @WkSeriesStart = "N"
]%%

Storing Frequency Cap Data

Two Data Extensions are used to support the implementation. These will be located in the same folder as your standard journey entry Data Extensions.

  1. wknd_email_series_send_log: Stores the historical record of Wunderkind series-start sends that count toward frequency-cap calculations.

    1. Each record represents a unique series-start send for a user. A composite primary key of ContactKey + SeriesType + SeriesStartDate ensures the same series start is not stored more than once.
    2. This Data Extension is used as the source for calculating rolling frequency-cap eligibility.
    3. It has a retention period of 31 days to support the longest lookback window for abandonment series.
      1. Abandonment and Catalog series starts can safely share the same history Data Extension even though they use different maximum lookback windows. Catalog records may remain stored longer, but they stop contributing to eligibility calculations after the 14-day window.
        When migrating to the Journey Builder integration, Wunderkind frequency-cap and send-limit history begins accumulating from the new implementation’s go-live date. Historical sends from the prior integration are not automatically carried into wknd_email_series_send_log, so frequency-cap windows will effectively restart.
  2. wknd_email_suppression_flags: Stores the contact’s current eligibility based on the configured frequency-cap rules.

    1. Each contact has one record containing campaign-specific eligibility fields, such as:
      1. CartEligible
      2. ProductEligible
      3. CategoryEligible
      4. LowStockEligible
      5. BackInStockEligible
      6. PriceDropEligible
    2. Journey Builder references these fields to determine whether a contact is currently eligible to enter the applicable Wunderkind Journey.
    3. The data extension has Data Retention turned off, because the query writing to it overwrites the data every night (or every time the automation runs).

Calculating Frequency Cap Eligibility

Two Automation Studio SQL queries are used to process Wunderkind send activity and calculate each contact’s current frequency-cap eligibility.

  1. wknd_populate_email_series_send_log Matches qualifying Send Log records to SFMC _Sent data and writes actual Wunderkind series-start sends to: wknd_email_series_send_log
    1. Qualifying Send Log records: WkSeriesStart = 'Y' & WkPurpose is one of the Wunderkind campaigns we support, such as cart abandonment, low stock, etc.
    2. SFMC _Sent data: Native SFMC system Data containing tracking records for emails SFMC actually sent. It gives us system-level information such as: SubscriberKey, EventDate, JobID, etc.
  2. wknd_calculate_email_suppression_flags evaluates the series-start send history in wknd_email_series_send_log against the configured frequency-cap rules and writes the resulting eligibility flags to wknd_email_suppression_flags.

Run the Automation

The Automation Studio automation wknd_email_frequency_cap_nightly runs the two query activities in sequence:

  1. wknd_populate_email_series_send_log: Updates series-start send history.
  2. wknd_calculate_email_suppression_flags: Recalculates current Journey eligibility based on that history.
🔺

Frequency Cap Enforcement and Nightly Automation

Wunderkind sets up the automation to run once nightly with no set end date, which means frequency-cap eligibility is recalculated on a scheduled basis rather than in real time. As a result, there is a potential window between automation runs in which a contact can exceed an aggregate Catalog cap before their eligibility flags are updated.

This risk is limited by two existing controls:

  • Wunderkind campaign-level suppression: the same campaign cannot trigger again within its rolling 24-hour suppression window.
  • SFMC Journey re-entry settings: Wunderkind journeys are configured as Re-entry only after exiting, preventing a contact from re-entering the same journey while they are still active in it.

If stricter enforcement of aggregate Catalog limits is required, the frequency-cap automation can be scheduled to run more frequently than once per night.


Make Eligibility Available to Journey Builder

The wknd_email_suppression_flagsData Extension is made available as Contact Data within Data Designer so that each Wunderkind Journey can then reference the corresponding eligibility field when evaluating whether the contact should enter.

For example:

  • Cart Abandonment checks CartEligible
  • Product Abandonment checks ProductEligible
  • Category Recap checks CategoryEligible
  • Low Stock checks LowStockEligible
  • Back in Stock checks BackInStockEligible
  • Price Drop checks PriceDropEligible

A contact that has reached the applicable frequency cap is prevented from entering that Journey until their send history falls back within the configured lookback window.


Did this page help you?