Four Steps to Build A Loyalty Program Framework

As the world continues to grapple with the impact of the COVID-19 pandemic, banks are being challenged to acquire and retain new customers by expanding the depth, breadth, and profitability of existing relationships.


According to Bain & Company’s NPS 2020 survey of approximately 56,000 consumers in 11 countries, anywhere between 25% to 51% of all banking product purchases go to banks that aren’t the respondent’s primary bank. Primary banks may keep customers’ deposits and core checking accounts, but they are increasingly losing customers on high-margin products, including loans, investments and credit cards. Although many factors contribute to this “hidden defection”, product affordability, better digital tools, simpler purchase processes, and greater convenience are key reasons for why consumers buy banking products elsewhere.


Establishing and maintaining a customer loyalty program is challenging, but for banks who get it right, the returns are manyfold. A well-executed loyalty program is not just a marketing initiative – it is a daily engagement with the customer, including the intelligent anticipation of their financial goals and evolving needs, as well as service delivery that is best-in-class.


Done well, a loyalty program can also be very lucrative. In fact, according to a recent McKinsey survey of US retail banking customers found that banks with the highest degree of reported customer satisfaction grew deposits 84 percent faster than banks with the lowest reported satisfaction ratings. Combine this with the fact that new customer acquisition costs for the banking industry average above $300, banks will need to really consider how to build and consistently evaluate their loyalty frameworks to support their customers’ journeys.

Building an effective loyalty framework 

Although there are many details that go into building out an effective loyalty framework, we’ve broken it down into four key areas for simplicity’s sake: 

  • Define loyalty
  • Understand your customers and their loyalty drivers
  • Align your technology stack to support end-to-end offer management
  • Leverage data analytics to support program improvements

Step 1: Define Loyalty

…aka who and what is a loyal customer?


While this question might seem simple, it gets to the core of customer loyalty. Banks need to understand and have a clear vision for how they define a loyal customer. To be sustainable, customer loyalty needs to be considered in terms of relationship loyalty versus product loyalty.  

Key questions to consider:

  • What is the optimal product penetration for my customers? And how does this change over the customer’s lifecycle with the bank?
  • Based on product profitability or market gap assessment analysis, which products or services do I want to prioritize for cross-selling in the next one to two years?
  • What channels do customers prefer to use for a variety of transaction types, from in-person to digital?
  • How deeply do I understand the transactional and behavioural profile of my customers based on analytics-driven segmentation?

These questions are not meant to be exhaustive, but to give a bank a strategic mind-set that needs to be applied before designing a loyalty program. Each of the points above can be influenced favourably by a well-designed loyalty program.

Step 2: Understanding Customers & Their Loyalty Drivers

…aka how well do we understand our customers?


Sustainable loyalty is built when the bank excels during “moment of truth” events or transactions with its customers. The moment of truth might be different based on the profile or segment of customer.


For example, a new parent will likely appreciate preferential pricing on an unsecured Line of Credit and free Overdraft Protection for all those new baby purchases. A new graduate may benefit from a basic credit card with premium features, including lifestyle rewards and partner discounts from companies like Netflix, Spotify, Uber Eats etc. In both examples, the bank must understand the segment of customer they are dealing with based on their transactional, behavioural and demographic profile.


Banks should also employ specific loyalty strategies to achieve desired results across the various stages of the attached “typical” customer lifecycle: during acquisition (to activate product usage quickly), through account growth (i.e., fee waivers for sustained high account balances), as part of its retention efforts (i.e., an attractive loan offer based on account reactivation), and to drive long-term relationship profitability (through appropriate and relevant cross-selling).


As an example, Bank of the West sought to execute on innovative product packages and relationship pricing to provide differentiated benefits to high-value customers. With Zafin, the bank built out packages designed to incent checking account usage by offering fee waivers and bonus interest rates on a savings account. The result? An almost 600% lift in cross-sell metrics, a 36% increase in product usage and higher customer satisfaction scores.

Step 3: Strengthen Your Technology Stack to Streamline Offer Management

…aka implement a solid technological foundation that supports cross-departmental collaboration


To capitalize on your bank’s definition of loyalty and your understanding of your customers, your existing IT resources and infrastructure must be able to support end-to-end offer management. The first step is to understand where the gaps existing in your bank’s existing legacy technology when it comes to offer execution, monitoring and fulfillment.

Questions to consider include:

  • How well do current systems integrate with one another to share customer data in real-time?
  • Are our current processes automated and easy to scale up as required?
  • Are all relevant departments from product to marketing and analytics to customer care able to see relevant customer data at any given moment?
  • Do current systems deliver transparency to the customer about their program status in real-time?
  • Are current systems of record able to support comprehensive regulatory reporting on-demand?

Once this audit is completed, it is easier to understand how best to overcome data fragmentation and build a longitudinal view of the customer across technological and departmental siloes.

Step 4: Support Loyalty Program Improvements with Data Analytics

As with any evolving process, it is important to constantly question the efficacy of loyalty initiatives across customer segments. To do this, banks must be able to capitalize on insights from data analytics in a meaningful way. Dashboards that capture and summarize essential information about the success of the rewards program is critical. Such information could include lift, conversion and active engagement – all of which are inputs to moving beyond transactional loyalty to loyalty-led banking relationships.


Once you have the right framework in place, you can start building out your offers and rewards programs to boost loyalty and retention. Our experts have weighed in the six questions every bank should ask themselves before diving into a new promotional offer launch. Read that article here.

[gravityforms id="8" ajax="true" title=”false” description=”false”]
<script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script> <div class='gf_browser_unknown gform_wrapper gravity-theme' id='gform_wrapper_8' ><div id='gf_8' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <h2 class="gform_title">Testing Ajax | OptinMonster Support</h2> <span class='gform_description'></span> </div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_8' id='gform_8' action='/resources/four-steps-to-build-a-loyalty-program-framework/#gf_8' novalidate> <div class='gform_body gform-body'><div id='gform_fields_8' class='gform_fields top_label form_sublabel_below description_below'><div id="field_8_1" class="gfield field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_8_1"><label class='gfield_label' for='input_8_1' >Name</label><div class='ginput_container ginput_container_text'><input name='input_1' id='input_8_1' type='text' value='' class='large' aria-invalid="false" /> </div></div><div id="field_8_2" class="gfield gfield--width-full gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_8_2"><label class='gfield_label' for='input_8_2' >Email<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></label><div class='ginput_container ginput_container_text'><input name='input_2' id='input_8_2' type='text' value='' class='large' aria-required="true" aria-invalid="false" /> </div></div><div id="field_8_3" class="gfield gfield--width-full field_sublabel_below field_description_below hidden_label gfield_visibility_visible" data-js-reload="field_8_3"><label class='gfield_label' for='input_8_3' >CAPTCHA</label><div id='input_8_3' class='ginput_container ginput_recaptcha' data-sitekey='6Le73PIdAAAAAEvuofDYrvHWNqv2sBOM7XJuUpuQ' data-theme='light' data-tabindex='0' data-badge=''></div></div></div></div> <div class='gform_footer top_label'> <button class='om-trigger-conversion button gf_submit default' id='gform_submit_button_8'>Submit</button> <input type='hidden' name='gform_ajax' value='form_id=8&amp;title=1&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_8' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='8' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_8' value='WyJbXSIsIjFmZGFmMjZmOGYwZDRjNmZiZGM5N2NkN2UxNTMyYmNhIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_8' id='gform_target_page_number_8' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_8' id='gform_source_page_number_8' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_8' id='gform_ajax_frame_8' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script type="text/javascript"> gform.initializeOnLoaded( function() {gformInitSpinner( 8, '' );jQuery('#gform_ajax_frame_8').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_8');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_8').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_8').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_8').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_8').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_8').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_8').val();gformInitSpinner( 8, '' );jQuery(document).trigger('gform_page_loaded', [8, current_page]);window['gf_submitting_8'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_8').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_8').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [8]);window['gf_submitting_8'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_8').text());}, 50);}else{jQuery('#gform_8').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [8, current_page]);} );} ); </script>