Expand my Community achievements bar.

Tuesday Tech Bytes - The Art of Balance: Using Frequency Capping to avoid Marketing-fatigue

Avatar

Community Advisor

11/2/23

Hello all! Thanks for taking time to read this first article in the series of Adobe Target Technical Tuesdays. Together with my colleague , we will focus on answering common challenges Adobe Target practitioners face and sharing some ways to make the most out of this powerful tool.

 

AdobeStock_620681810.jpeg

Why Frequency Capping as a topic for this article?

First, let me explain why I selected the subject for today's blog. As part of our role as community advisors, we consistently strive to assist fellow members of the Adobe Target community in addressing their queries and concerns on this platform. One particular question, in various forms, has cropped up repeatedly: "How can I ensure that an experience is displayed a limited number of times?" Recognizing the significance of this query, I decided to craft a comprehensive response that encompasses both the technical and business aspects of the solution. Our aim is to provide valuable insights to our colleagues, empowering them to enhance customer experiences by effectively implementing frequency capping to fix marketing-fatigue

 

 

What is Marketing Fatigue?

Lets first understand the commercial challenge we are answering through this article - Marketing Fatigue. 

Marketing fatigue (also called ad fatigue in advertising world), is a phenomenon where consumers become disengaged or annoyed due to excessive and repetitive exposure to marketing messages or content. It occurs when individuals feel overwhelmed by the sheer volume of advertisements, emails, social media posts, or other promotional content they encounter.

With the surge in digital consumerism during and after the pandemic, marketers have seen a substantial increase in messaging opportunities. However, recent research from Optimove suggests that this influx of communication is beginning to overwhelm consumers.

Two-thirds of consumers (66 percent) surveyed for the firm’s 2023 Consumer Marketing Fatigue survey want fewer marketing messages, and 27 percent feel they are bombarded by marketing messages.

Rajneesh_Gautam__1-1698926280606.png

As its clear, marketing fatigue is synonymous with poor user experience and can lead to frustrations and lower conversion rates/ROI.

 

How does Frequency capping overcome Marketing-fatigue?

Frequency capping is a technique used in digital marketing to limit the number of times a specific marketing message is shown to the same visitor within a defined time period. In simpler terms, it's about preventing your audience from being bombarded by the same experience over and over again.

Here are some business benefits of Frequency capping:

Enhanced User Experience: Imagine seeing the same ad every time you visit a website. It can become annoying and even drive potential customers away. Frequency capping ensures that your message reaches your audience, but not to the point of irritation.

 

Optimising Marketing ROI: Your marketing budget is a precious resource. Without frequency capping, a significant chunk of your budget could be spent on repeatedly targeting the same users. By limiting marketing exposure, you maximise your marketing spend’s efficiency.

 

In case of Adobe Target, frequency capping means controlling the delivery of a specific experience by applying appropriate audiences. The next section explains this in more detail.

 

How to set Frequency capping using Adobe Target?

 Setting up Frequency capping in Adobe Target typically requires 4 steps.

 

Rajneesh_Gautam__2-1698926386182.png

 

Step 1: Pass a unique experience identifier: The first step is to notify Adobe Target that our experience has been interacted with (either viewed or clicked). This us done by adding a code-snippet to the experience.

If you are using AT.js, then its done by using the trackEvent() method. Here’s sample code for how to use this method. 

 

 

 

 

 

 

adobe.target.trackEvent({
 "mbox": "experience-experience_interaction",
 "params": {
   "experience_id": "your_experience_identifier" 
  } 
 });

 

 

 

 

 

 

In case of WebSDK, please use sendEvent method as given below. Please ensure that the renderDecisions value is set as false. 

 

 

 

 

 

window.alloy("sendEvent", {
      "renderDecisions": false,
      decisionScopes: ["__view__"],
      "xdm": {
        "web": {
          "webPageDetails": {
            "experience_id": "your_experience_identifier"
          }
        }
      }
    })

 

 

 

 

 

 

Irrespective of the method you use, its crucial to ensure uniqueness of the experience identifier to ensure multiple experiences are not updating single identifier.

 

Step 2: Create a profile-script to keep the count of experience interaction: Create a new profile-script which stores the count of how many times a particular experience has been interacted with. Please note that you'll need to setup a separate profile-script for every experience you want to frequency-cap.

Depending upon whether you use AT.js or WebSDK, profile script should be coded in different ways.

 

 

 

 

 

 

 

// Profile script code for AT.js
// Step 1: get the existing value stored in the profile script
// if the value does not exist, then set the profile-script value to 0
var countat = user.get('your_profile_script_name')||0;
// Step 2: check that this call is result of an interaction with your experiences
// by checking the name of the mbox and mbox=parameter containing experience-identifier
if(mbox.name == "experience_interaction" && mbox.param("experience_id") == "your_experience_identifier") {
// if its an interactiion with your experience then increase the prfile-script value by 1
	countat = countat + 1;
}
return countat;

 

 

 

 

 

 

 

 

mbox.param('web.webPageDetails.pageName') =='Product Details')){
  return true
}

// Profile script code for WEB SDK
// Step 1: get the existing value stored in the profile script
// if the value does not exist, then set the profile-script value to 0
var countat = user.get('your_profile_script_name')||0;
// Step 2: check that this call is result of an interaction with your experiences
// by checking the value of mbox-parameter containing experience-identifier
if(mbox.param("web.webPageDetails.experience_id") == "your_experience_identifier") {
// if its an interactiion with your experience then increase the prfile-script value by 1
	countat = countat + 1;
}
return countat;

 

 

 

 

 

Step 3: Create an audience corresponding to the profile-script: Create a new audience, using "Visitor Profile" attribute-type. During the audience-creation workflow, your profile-script should be available in the first drop-down. Then you may use a static value corresponding to how many times you want to show the experience. In our example, we have used 5.

 

Step 4: Use the audience in your activity: As the last step, you add newly created audience to the experience you want to frequency-cap. 

 

Limitations of above approach

While the above mentioned solution to achieve Frequency capping in Adobe  Target is quite powerful and enables marketers to apply this to individual experience level, we need to be wary of a couple of limitations while implementing this.

  • Increased need for profile-script governance: The approach requires a profile-script to be configured for every experience you want to frequency-cap. Without a proper governance process, it's easy to get dozens of such profile-scripts created which may impact Adobe Target’s performance. 
  • Impact of delivered but not “visible” experiences: Adobe Target allows marketers to run multiple activities on a single page. If these experiences are trying to update the same part of the page, it may lead to race-condition and activity-priority comes into play to resolve it. As a result, it may be possible that an experience associated with a lower priority activity is executed, however is not visible because it gets overwritten by a higher priority activity. In such cases, please check such conflicts while setting up the activities and resolve those to ensure a better user-experience. 

Conclusion

In conclusion, frequency capping is about finding the right balance in digital marketing. It enhances the user experience, optimises marketing-spend, and prevents marketing-fatigue, leading to better engagement and, ultimately, higher conversion rates. As the digital marketing landscape continues to evolve, mastering the art of frequency capping is a must for marketers looking to make a meaningful impact.

 

 

10 Comments

Avatar

Level 2

11/22/23

This is a very useful article! Thank you for sharing, look forward to reading the rest in the series.

Avatar

1/17/24

@Rajneesh_Gautam_ Thank you for sharing this, I hope you are well! I was wondering whether we can apply frequency capping based on the date, i.e. I want my experience to appear once per week. Is that possible?

Avatar

Community Advisor

1/18/24

thanks for reaching out @sylia_evlogimenou  - all well thanks  and hope you are well too!

 

Yes, its possible to add recency in profile script (see example below). In your case, you can define a period of 7 days and add to your profile script. 

Using this script will provide you how many days are passed since last time experience was shown. You can use it in your audience definition or merge the code with your original profile script code.

 

Hope it helps

 

// this code returns recency in terms of days 
// use 3600 * 1000 for hours and 60 * 1000 for minutes 
var dayInMillis = 3600 * 24 * 1000;
if (!mbox.param('experience_shown')){
  user.setLocal('lastExperienceTime', new Date().getTime());
}
var lastExperienceTime = user.getLocal('lastExperienceTime');
if (lastExperienceTime) {
 return ((new Date()).getTime()-lastExperienceTime)/dayInMillis;
}

 

Avatar

Level 2

3/6/24

Thanks for sharing this. I have improvised this script to implement a common fatigue rule profile script for multiple activities, And each activity can have it's own fatigue rule limits.

Avatar

Community Advisor

3/12/24

thanks @SuneelKumarV  - that sounds awesome! Please share the code here so that we all can be benefited.

 

Regards

Rajneesh

Avatar

Level 2

3/25/24

Hello @Rajneesh_Gautam_ ,

 

Here is my implementation of common profile script for multiple activity with their own fatigue limits.

 

https://experienceleaguecommunities.adobe.com/t5/adobe-target-discussions/common-fatigue-rule-implem...

Avatar

Level 1

5/30/24

Hello @Rajneesh_Gautam_

this is an interesting article. Adobe Target has a default profile retention period of 14 days (inactivity period). Is the information that is saved for a profile with a profile script, as you have described here, then also deleted?

Avatar

Community Advisor

7/9/24

hi @FabianSchaipp  - apologies for missing this question. The retention-period rule applies for the entire profile so yes, the attributes created using profile scripts are are cleaned-up after the retention period. Hope this helps,

 

Regards

Rajneesh