MRR – Monthly Recurring Revenue : Définition, Calcul et Exemples

Qu’est-ce qui est mieux que de connaître votre revenu mensuel ? Réponse : connaître votre revenu mensuel récurrent ! C’est exactement à ça que sert le MRR (pour Monthly Recurring Revenue). Il s’agit d’un indicateur essentiel pour tout business model basé sur l’abonnement. Car le MRR permet de calculer précisément vos revenus récurrents et de réaliser des prévisions de chiffre d’affaires pour les mois à venir.

MRR - Tout savoir sur le Monthly Recurring Revenue

Découvrez ce qui se cache derrière l’indicateur MRR

 

MRR : définition

MRR est l’acronyme de Monthly Recurring Revenue. C’est un KPI utilisé pour calculer le revenu récurrent généré pendant les derniers mois de l’activité d’une entreprise. Il sert aussi à évaluer le chiffre d’affaires récurrent qu’elle réalisera sur les prochains mois.

Le calcul du Monthly Recurring Revenue est indispensable pour les entreprises ayant un modèle économique basé sur l’abonnement. C’est pourquoi il est très utilisé dans les offres de logiciels proposant un abonnement mensualisé (en mode SaaS par exemple). 

L’intérêt du MRR est de suivre son évolution au fil du temps et de pouvoir réaliser des prévisions de chiffre d’affaires sur les prochains mois, voire les prochaines années. D’ailleurs, on parle de ARR (pour Annual Recurring Revenue) dans le cas où le MRR est calculé à l’échelle d’années entières. 

Comment dit-on Monthly Recurring Revenue en français ?

L’expression Monthly Recurring Revenue se traduit littéralement en français par Revenu Mensuel Récurrent (ou Revenu Récurrent Mensuel). Il correspond à votre chiffre d’affaires mensuel récurrent, qui dépend de ce que paient chaque mois vos clients pour utiliser vos produits/services. C’est pourquoi on parle aussi de paiement récurrent mensuel pour désigner le MRR.

Comment calculer le Monthly Recurring Revenue ?

Il existe deux formules de calcul pour le MRR. Elles nécessitent d’être au clair sur ce qui doit être inclus ou exclu dans votre méthode de calcul.

Ce qu’il faut inclure et exclure dans le calcul du MRR

Tout calcul du MRR doit inclure la totalité de vos revenus récurrents provenant de :

  • Vos offres ;
  • Vos éventuelles promotions récurrentes ;
  • Vos options qui sont souscrites de façon récurrente.

Mais pour calculer efficacement votre MRR, il vous faut écarter :

  • Vos revenus non récurrents (frais supplémentaires pour déployer la solution chez le client, options souscrites pour une durée limitée, etc.) ;
  • Vos versions d’essai proposées gratuitement ;
  • Vos dépenses et vos charges.

Première méthode de calcul du MRR

Cette méthode de calcul consiste à additionner tous les montants payés par vos clients au cours d’un même mois :

MRR = Total de vos montants mensuels récurrents perçus

Un exemple de MRR calculé avec cette méthode ? Admettons que vous ayez 50 clients qui paient un abonnement mensuel de 300 euros et 20 autres qui paient un abonnement mensuel de 500 euros.

Votre MRR est de : (50 x 300) + (20 x 500) = 25 000 euros.

Deuxième méthode de calcul du MRR

La deuxième méthode de calcul est légèrement plus complexe. Car elle consiste à multiplier le nombre de vos clients par le revenu moyen généré par chacun de ces clients sur le mois :

MRR = Nombre de vos clients x Revenus récurrents moyens par client 

Un exemple de MRR calculé avec cette deuxième méthode ? Admettons que vos 70 clients de l’exemple précédent paient en moyenne 357,15 euros.

Votre MRR est donc de : 70 x 357,15 = 25 000 euros.

Pourquoi calculer votre Revenu Mensuel Récurrent ?

Le calcul du Monthly Recurring Revenue s’avère pertinent pour les entreprises ayant besoin de prédictibilité dans le calcul de leurs revenus (c’est le cas de tout business, mais surtout de ceux qui dépendent d’un modèle d’abonnement).

Car le MRR représente une photographie à l’instant T des revenus qui entrent dans l’entreprise, tout en donnant une bonne idée des revenus mensuels sur les prochains mois. Il permet ainsi d’effectuer des ajustements en cours de route si vous estimez que votre MRR est trop faible.

Voici 3 raisons de calculer (et de suivre) votre indicateur MRR :

  • Évaluer l’efficacité de votre business model au regard de la croissance de votre MRR au fil des mois ;
  • Réaliser des prévisions financières dans la durée ;
  • Prendre des décisions stratégiques.

Comment suivre votre MRR dans le temps ?

Connaître votre MRR à l’instant T, c’est bien. Suivre son évolution au fil des mois, c’est mieux. Car il va évoluer en fonction du développement de votre entreprise et être influencé par certains facteurs à prendre en compte :

  • Le nouveau MRR : il s’agit des revenus récurrents mensuels supplémentaires apportés par de nouveaux clients ;
  • L’expansion MRR : il s’agit des revenus supplémentaires générés par vos clients actuels ayant souscrit à une offre plus chère ou à de nouvelles options (cross-sell et up-sell) ;
  • Le Réactivation MRR : il s’agit des revenus supplémentaires générés par la réactivation d’abonnements ;
  • Le Contraction MRR : il s’agit de la perte de revenus liée à la souscription de vos clients actuels à une offre moins chère ;
  • Le Churn : il s’agit de la perte de revenus liée à la fin de contrats clients (désabonnements notamment).

Pour suivre efficacement votre MRR dans le temps, il vous faut inclure ces facteurs et calculer votre nouveau MRR net avec cette formule (oui, encore une formule de calcul du MRR !) :

MRR net = (Nouveau MRR + Expansion MRR + Réactivation MRR) – (Contraction MRR + Churn)

Ainsi, si votre MRR net est en baisse, vous perdez des clients et s’il est en hausse, votre entreprise est en croissance.

Pour avoir une vision exhaustive de la “bonne santé” de votre business, ne vous contentez pas du Monthly Recurring Revenue. Mettez cet indicateur en corrélation avec d’autres KPI fort utiles, parmi lesquels :

Partager :
Antoine Coubray a fondé l’agence CustUp. Il utilise régulièrement les indicateurs utilisés en MarTech. Cette série d’articles vous aide à

Antoine Coubray a fondé l’agence CustUp. Il utilise régulièrement les indicateurs utilisés en MarTech. Cette série d’articles vous aide à les comprendre (et à les utiliser !).

[custup_nom_silo]
[custup_form_optinmonster]
[custup_form_optinmonster]
[custup_form_blog_inline_optinmonster]
<script type="text/javascript"> jQuery(document).ready(function( $ ) { var captchaA9dky = grecaptcha.render( 'captcha-A9dky', { 'sitekey' : '6LdT1-4gAAAAAO9Enn6scQv9Sg7vEHfEmTzlKqlw', 'theme' : 'light' }); var dj_envoyer_inscription = true; jQuery(document).delegate( '#dj_envoyer_inscription-A9dky', 'click', function(){ if(dj_envoyer_inscription){ dj_envoyer_inscription = false; var email = jQuery('#dj_form_optinmonster-A9dky input[name="email"]').val(); var data = new FormData(); data.append( "action", "inscription_mailchimp"); data.append( "email", email); data.append( "recaptcha_response", jQuery("#dj_form_optinmonster-A9dky .g-recaptcha-response").val()); jQuery("#dj_form_optinmonster-A9dky .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-A9dky .panel-primary").css('display', 'block'); jQuery("#dj_form_optinmonster-A9dky .panel-primary span").html( site.message_030 ); $.ajax({ url: site.ajax_url, type: 'post', dataType: 'JSON', processData: false, contentType: false, cache: false, data: data, success: function(result) { if(result.alerte){ jQuery("#dj_form_optinmonster-A9dky .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-A9dky .panel-danger span").html(result.alerte); jQuery("#dj_form_optinmonster-A9dky .panel-danger").css('display', 'block'); }else if(result.message){ jQuery("#dj_form_optinmonster-A9dky .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-A9dky .panel-success span").html(result.message); jQuery("#dj_form_optinmonster-A9dky .panel-success").css('display', 'block'); } if(result.status){ dataLayer.push({ "event": "gaEvent", "eventCategory": "Blog-Inline", "eventAction": "clic", "eventLabel": "https://www.custup.com/mrr-monthly-recurring-revenue-definition-calcul-exemples/", "eventValue": "", "eventNoninteraction": "true" }); } dj_envoyer_inscription = true; grecaptcha.reset(captchaA9dky); }, error: function(errorThrown){ dj_envoyer_inscription = true; grecaptcha.reset(captchaA9dky); } }); } return false; }); }); </script> <div id="dj_form_optinmonster-A9dky" class="form_inline"> <div class="form-group col-md-12 col-sm-12 col-xs-12 no-padding m-5"> <div class="panel panel-primary m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-success m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-danger m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group pull-left"> <input class="form-control form-inline" type="text" id="dj_email" name="email" placeholder="E-mail" /> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group optin-recaptcha pull-left"> <div id="captcha-A9dky"></div> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group envoyer text-center pull-left"> <button id="dj_envoyer_inscription-A9dky" class="dj_envoyer_inscription" type="submit">Je m'abonne !</button> </div> </div>
[le Nom du Silo]
[le Nom du Silo]
[custup_icon]
<img src="https://www.custup.com/wp-content/themes/custup/public/img/icon.png" alt="Merci pour votre visite" class="skip-lazy" width="28" height="27"/>
[custup_form_exit]
<script type="text/javascript"> jQuery(document).ready(function( $ ) { var captchaq40gM = grecaptcha.render( 'captcha-q40gM', { 'sitekey' : '6LdT1-4gAAAAAO9Enn6scQv9Sg7vEHfEmTzlKqlw', 'theme' : 'light' }); var dj_envoyer_inscription = true; var email = ""; jQuery(document).delegate( '#emailq40gM', 'change', function(){ email = jQuery(this).val(); }); jQuery(document).delegate( '#dj_envoyer_inscription-exit-q40gM', 'click', function(){ if(dj_envoyer_inscription){ dj_envoyer_inscription = false; var data = new FormData(); data.append( "action", "inscription_mailchimp"); data.append( "email", email); data.append( "exit", 1 ); data.append( "recaptcha_response", jQuery("#dj_form_optinmonster-exit-q40gM .g-recaptcha-response").val()); jQuery("#dj_form_optinmonster-exit-q40gM .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-exit-q40gM .panel-primary").css('display', 'block'); jQuery("#dj_form_optinmonster-exit-q40gM .panel-primary span").html( site.message_030 ); $.ajax({ url: site.ajax_url, type: 'post', dataType: 'JSON', processData: false, contentType: false, cache: false, data: data, success: function(result) { if(result.alerte){ jQuery("#dj_form_optinmonster-exit-q40gM .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-exit-q40gM .panel-danger span").html(result.alerte); jQuery("#dj_form_optinmonster-exit-q40gM .panel-danger").css('display', 'block'); }else if(result.message){ jQuery("#dj_form_optinmonster-exit-q40gM .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-exit-q40gM .panel-success span").html(result.message); jQuery("#dj_form_optinmonster-exit-q40gM .panel-success").css('display', 'block'); } if(result.status){ dataLayer.push({ "event": "gaEvent", "eventCategory": "Exit", "eventAction": "clic", "eventLabel": "https://www.custup.com/mrr-monthly-recurring-revenue-definition-calcul-exemples/", "eventValue": "", "eventNoninteraction": "true" }); } dj_envoyer_inscription = true; grecaptcha.reset(captchaq40gM); }, error: function(errorThrown){ dj_envoyer_inscription = true; grecaptcha.reset(captchaq40gM); } }); } return false; }); }); </script> <div id="dj_form_optinmonster-exit-q40gM" class="form_inline popin-exit"> <div class="form-group col-md-12 col-sm-12 col-xs-12 no-padding m-5"> <div class="panel panel-primary m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-success m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-danger m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group pull-left"> <input class="form-control" type="text" id="emailq40gM" name="email" placeholder="E-mail" /> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group optin-recaptcha pull-left"> <div id="captcha-q40gM"></div> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group envoyer text-center pull-left"> <button id="dj_envoyer_inscription-exit-q40gM" class="dj_envoyer_inscription" type="submit">S'inscrire !</button> </div> </div>
[custup_scroll_nom_silo]
[custup_form_silo_scroll_optinmonster]
<script type="text/javascript"> var email = ""; jQuery(document).ready(function( $ ) { var captchax4vuh = grecaptcha.render( 'captcha-x4vuh', { 'sitekey' : '6LdT1-4gAAAAAO9Enn6scQv9Sg7vEHfEmTzlKqlw', 'theme' : 'light' }); var dj_envoyer_inscription = true; jQuery(document).delegate( '#emailx4vuh', 'change', function(){ email = jQuery(this).val(); }); jQuery(document).delegate( '#dj_envoyer_inscription-x4vuh', 'click', function(e){ if(dj_envoyer_inscription){ dj_envoyer_inscription = false; var data = new FormData(); data.append( "action", "inscription_mailchimp"); data.append( "email", email); data.append( "id_article", 26105); data.append( "recaptcha_response", jQuery("#dj_form_optinmonster-x4vuh .g-recaptcha-response").val()); jQuery("#dj_form_optinmonster-x4vuh .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-x4vuh .panel-primary").css('display', 'block'); jQuery("#dj_form_optinmonster-x4vuh .panel-primary span").html( site.message_030 ); $.ajax({ url: site.ajax_url, type: 'post', dataType: 'JSON', processData: false, contentType: false, cache: false, data: data, success: function(result) { if(result.alerte){ jQuery("#dj_form_optinmonster-x4vuh .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-x4vuh .panel-danger span").html(result.alerte); jQuery("#dj_form_optinmonster-x4vuh .panel-danger").css('display', 'block'); }else if(result.message){ jQuery("#dj_form_optinmonster-x4vuh .panel").css('display', 'none'); jQuery("#dj_form_optinmonster-x4vuh .panel-success span").html(result.message); jQuery("#dj_form_optinmonster-x4vuh .panel-success").css('display', 'block'); } if(result.status){ dataLayer.push({ "event": "gaEvent", "eventCategory": "Silo-XXX-Scroll", "eventAction": "clic", "eventLabel": "https://www.custup.com/mrr-monthly-recurring-revenue-definition-calcul-exemples/", "eventValue": "", "eventNoninteraction": "true" }); } dj_envoyer_inscription = true; grecaptcha.reset(captchax4vuh); }, error: function(errorThrown){ dj_envoyer_inscription = true; grecaptcha.reset(captchax4vuh); } }); } return false; }); }); </script> <div id="dj_form_optinmonster-x4vuh"> <form> <div class="form-group col-md-12 col-sm-12 col-xs-12 no-padding m-5"> <div class="panel panel-primary m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-success m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-danger m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group pull-left"> <input class="form-control" type="text" id="emailx4vuh" name="email" placeholder="E-mail" /> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group optin-recaptcha pull-left"> <div id="captcha-x4vuh"></div> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group envoyer text-center pull-left"> <button id="dj_envoyer_inscription-x4vuh" class="dj_envoyer_inscription" value="xx" type="submit">S'inscrire</button> </div> </form> </div>
[custup_count_abonnes_liste_mailchimp]
4464
[custup_form_horizontal_optinmonster]
<script type="text/javascript"> var email = ""; jQuery(document).ready(function( $ ) { var captchaxsnYY = grecaptcha.render( 'captcha-xsnYY', { 'sitekey' : '6LdT1-4gAAAAAO9Enn6scQv9Sg7vEHfEmTzlKqlw', 'theme' : 'light' }); var dj_envoyer_inscription = true; jQuery(document).delegate( '#emailxsnYY', 'change', function(){ email = jQuery(this).val(); }); jQuery(document).delegate( '#dj_envoyer_inscription-xsnYY', 'click', function(){ if(dj_envoyer_inscription){ dj_envoyer_inscription = false; var data = new FormData(); data.append( "action", "inscription_mailchimp"); data.append( "email", email); data.append( "recaptcha_response", jQuery("#dj_form_horizontal_optinmonster-xsnYY .g-recaptcha-response").val()); jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel").css('display', 'none'); jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel-primary").css('display', 'block'); jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel-primary span").html( site.message_030 ); $.ajax({ url: site.ajax_url, type: 'post', dataType: 'JSON', processData: false, contentType: false, cache: false, data: data, success: function(result) { if(result.alerte){ jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel").css('display', 'none'); jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel-danger span").html(result.alerte); jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel-danger").css('display', 'block'); }else if(result.message){ jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel").css('display', 'none'); jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel-success span").html(result.message); jQuery("#dj_form_horizontal_optinmonster-xsnYY .panel-success").css('display', 'block'); } if(result.status){ dataLayer.push({ "event": "gaEvent", "eventCategory": "Blog-Floating-Bar", "eventAction": "clic", "eventLabel": "https://www.custup.com/mrr-monthly-recurring-revenue-definition-calcul-exemples/", "eventValue": "", "eventNoninteraction": "true" }); } dj_envoyer_inscription = true; grecaptcha.reset(captchaxsnYY); }, error: function(errorThrown){ dj_envoyer_inscription = true; grecaptcha.reset(captchaxsnYY); } }); } return false; }); }); </script> <div id="dj_form_horizontal_optinmonster-xsnYY" class="dj_form_horizontal_optinmonster"> <input type="hidden" name="recaptcha_response" value=""> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group dj_email_content pull-left"> <input class="form-control" type="text" id="emailxsnYY" name="email" placeholder="E-mail" /> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group text-center dj_email_envoyer pull-left"> <button id="dj_envoyer_inscription-xsnYY" class="dj_envoyer_inscription" type="submit">Valider</button> </div> <div class="col-md-12 col-sm-12 col-xs-12 no-padding form-group optin-recaptcha pull-left"> <div id="captcha-xsnYY"></div> </div> <div class="form-group col-md-12 col-sm-12 col-xs-12 no-padding m-5"> <div class="panel panel-primary m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-success m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> <div class="panel panel-danger m-0" style="display:none;"> <div class="panel-heading"> <span class="m-5"></span> </div> </div> </div> </div>