{"id":63268,"date":"2024-10-22T04:19:28","date_gmt":"2024-10-22T04:19:28","guid":{"rendered":"https:\/\/www.hashmicro.com\/blog\/?p=63268"},"modified":"2025-12-23T04:50:52","modified_gmt":"2025-12-23T04:50:52","slug":"monthly-recurring-revenue","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/","title":{"rendered":"What is Monthly Recurring Revenue (MRR) and How to Calculate It"},"content":{"rendered":"<p>Many SaaS companies face significant challenges when it comes to accurately calculating Monthly Recurring Revenue (MRR), a crucial metric for business growth. Surprisingly, common mistakes like including one-time payments or free trial users often distort the actual recurring revenue picture.<\/p>\n<p>This is especially true for startups, where miscalculations often stem from counting the full value of annual or quarterly subscriptions upfront rather than spreading them across months.<\/p>\n<p>Even though MRR isn&#8217;t governed by strict accounting standards like IFRS, getting it wrong can mislead investors and give businesses a false sense of security. The result? Misjudged financial health, poor growth strategies, and a potential wake-up call when momentum stalls<\/p>\n<p>This article will discuss the strategies to avoid these common mistakes by explaining what monthly recurring revenue (MRR) is, why it\u2019s important for business, and how to correctly calculate it.<\/p>\n<table style=\"border-collapse: collapse; background-color: #fffacd; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 25px 25px 25px 25px;\" width=\"100%\">\n<tbody>\n<tr>\n<td style=\"padding: 15px; border: none;\">\n<h3 style=\"margin-bottom: 10px;\"><span style=\"background-color: #990000; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#mrr_meaning\">Monthly Recurring Revenue (MRR)<\/a> is crucial for tracking the predictable income generated from active subscriptions.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#benefits_mrr\">Accurately calculating MRR<\/a> helps businesses forecast revenue, manage budgeting, and assess financial growth effectively.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#mistakes\">Common mistakes<\/a>, like including one-time payments or ignoring discounts, can lead to incorrect MRR calculations and hinder business strategy.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.hashmicro.com\/accounting\">HashMicro Accounting Software<\/a> simplifies MRR tracking with automated processes, real-time insights, and AI-driven forecasts, empowering businesses to focus on growth.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-sheets-root=\"1\"><a href=\"https:\/\/www.hashmicro.com\/free-product-tour\/?medium=free-product-tour\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" width=\"712\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/11\/Free-Product-Tour-resized.webp\" alt=\"Free Demo\"><\/a><!-- <div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tTable of Content:\r\n\t<\/p>\r\n\t<ul id=\"list_toc\" class='list_toc'><\/ul>\r\n<\/div> -->\r\n\r\n<!-- <div class=\"dropdown-fixed-top\" id=\"dropdown-fixed-top\">\r\n\t<div class=\"row\">\r\n\t\t<p id=\"pilihDaftarIsi\">Table of Content<\/p>\r\n\t\t<p><i class=\"td-icon-menu-down\"><\/i><\/p>\r\n\t<\/div>\r\n\t\r\n\t<div>\r\n\t\t<ul id=\"list_toc_top\" class='list_toc'><\/ul>\r\n\t<\/div>\r\n<\/div> -->\r\n\r\n<div id=\"placeholder-toc\"><\/div>\r\n<div id=\"toc\">\r\n    <div class=\"header\">\r\n\t<span class=\"toc-title\" id=\"toc-title\">Table of Content<\/span>\t\r\n\t <i class=\"toc-icon\">\r\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"header-icon\">\r\n          <path d=\"m6 9 6 6 6-6\" \/>\r\n        <\/svg>\r\n      <\/i>\r\n\t<\/div>\r\n    <div class=\"list\">\r\n      <ul id=\"toc-list\"><\/ul>\r\n    <\/div>\r\n <\/div>\r\n\r\n<style>\r\n\t@media (max-width: 992px) {\r\n\t\t#toc_group_article {\r\n\t\t\tpadding-top: 24px;\r\n\t\t}\r\n\t}\r\n\t\r\n\t#list_toc_float {\r\n\t\tmax-height: calc(100vh - 250px);\r\n\t\toverflow-y: auto;\r\n\t}\r\n\t\r\n\t#list_toc_top {\r\n\t\tdisplay: none;\r\n\t\tbackground: #fff;\r\n\t\tmargin-bottom: 4px;\r\n\t}\r\n\t\r\n\t#list_toc_top li {\r\n\t\tdisplay: block;\r\n\t\tmargin-left: 0;\r\n\t\tlist-style: none;\r\n\t}\r\n\t\r\n\t#list_toc_top a {\r\n\t\tpadding: 5px;\r\n\t\tdisplay: block;\r\n\t}\r\n\t\r\n\t#list_toc_top.show {\r\n\t\tdisplay: block;\r\n\t}\r\n\r\n\t#list_toc_top a {\r\n\t\tcolor: #434343;\r\n\t\tborder-bottom: 1px solid #bbb;\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top {\r\n\t\tposition: fixed;\r\n\t\ttop: 59px;\r\n\t\twidth: 100%;\r\n\t\tz-index: 99;\r\n\t\tborder-bottom: 2px solid #9c171e;\r\n\t\tpadding: 12px;\r\n\t\tbackground: #fff;\r\n\t\twidth: 100%;\r\n\t\tcursor: pointer;\r\n\t\tdisplay: none;\r\n\t\tleft: 0;\r\n\t\tbox-shadow: 0 -2px 7px 6px rgba(0, 0, 0, 0.17);\r\n\t}\r\n\t\r\n\t#dropdown-fixed-top.show {\r\n\t\tanimation: showAnim 0.5s ease;\r\n\t\tdisplay: block;\r\n\t\topacity: 1;\r\n\t}\r\n\t\r\n\t@keyframes showAnim {\r\n\t\tfrom {\r\n\t\t\tdisplay: none;\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\tto {\r\n\t\t\tdisplay: block;\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top #list_toc_top {\r\n\t\tmax-height: calc(50vh - 110px);\r\n\t\toverflow-y: scroll;\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top .row {\r\n\t\tdisplay: flex;\r\n\t\tjustify-content: space-between\r\n\t}\r\n\t\r\n\t.dropdown-fixed-top .row p {\r\n\t\tmargin-bottom: 0;\r\n\t}\r\n\t\r\n\t#pilihDaftarIsi {\r\n\t\tmax-width: 100%;\r\n\t\toverflow: hidden;\r\n\t\twhite-space: nowrap;\r\n\t}\r\n\t\r\n\t@media (min-width: 1018px) {\r\n\t\t.dropdown-fixed-top {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc > li > ul {padding-left: 20px;margin-bottom: 0;}\r\n\t#list_toc{height:max-content;transition:ease-in-out}\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc_float li.active > a {color:#b1252d;background: #ffe1e3;}\r\n\t#list_toc_top li.active > a {color:#b1252d;background: #ffe1e3;}\r\n\t#list_toc_float li a {padding:3px 7px}\r\n\t#list_toc_float li a {\r\n\t\tdisplay: block;\r\n\t\tcolor: #000;\r\n\t\tmargin-bottom: 6px;\r\n\t\tpadding-top: 2px;\r\n\t\tpadding-bottom: 2px;\r\n\t\ttransition: all 0.2s ease-in-out;\r\n\t\tfont-size: 15px;\r\n\t\tline-height: 18px;\r\n\t}\r\n\t#list_toc_float li{list-style:none;list-style-position:inside; margin-left:0;}\r\n\t#list_toc_float a:hover{color:#b1252d;}\r\n\t\r\n\t#toc_group_float{\r\n\t\tline-height: 24px;\r\n\t\tmax-height: calc(100vh - 100px);\r\n\t\toverflow: auto;\r\n\t\tz-index: 99;\r\n\t\tdisplay:none!important;\r\n\t\tbackground:#fff;\r\n\t\ttransition:all 0.5s linear\r\n\t}\r\n\t\r\n\t@media (min-width:1019px){\r\n\t\t#toc_group_float {\r\n\t\t\tdisplay:block!important;\r\n\t\t\t}\r\n\t\t\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\r\n<\/style>\r\n\r\n<!-- ToC styling  -->\r\n<style>\r\n\t\/* Simple styling for the TOC *\/\r\n\t\r\n\t#toc ul li:last-child {\r\n    padding-bottom: 16px; \/* Adjust the value as needed *\/\r\n}\r\n\r\n.td-fix-index {\r\n\t transform: unset !important;\r\n     -webkit-transform: unset !important; \r\n}\r\n.footer-contact .td-fix-index {\r\n\t transform: translateZ(0) !important;\r\n     -webkit-transform: translateZ(0) !important; \r\n}\r\n\t.tdb_single_content .tdb-block-inner.td-fix-index{\r\n\t\tposition: static;\r\n\t}\r\n\t\r\n\r\n\t\r\n#toc {\r\n  background-color: #FFF;\r\n\tpadding: 17px 24px 0px 24px !important;\r\n  margin-bottom: 20px;\r\n\/*   border: 1px solid #9C171E; *\/\r\n  border-radius: 6px;\r\n\tdisplay: none;\r\n  max-width: 100%;\r\n  transition: .4s ease height;\r\n\tmargin-left: 0;\r\n\toverflow: hidden;\r\n}\r\n\r\n#toc .header{\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n\tbackground-color: transparent;\r\n}\r\n\t\r\n\t#toc.sticky .header{\r\n\t\tpadding: 4px 0;\r\n\t}\r\n\t\r\n.header p{\r\n  font-size: 18px !important;\r\n  font-weight: 600 !important;\r\n  color: #393939;\r\n   margin-bottom: 0;\r\n  \/* margin-top: 20px; *\/\r\n}\r\n\r\n.toc-icon{\r\n  float: right;\r\n\/*   visibility: hidden; *\/\r\n}\r\n\r\n\t.toc-title{\r\n\t\tmargin-right: auto;\r\n\/* \t\tpadding-left: 20px; *\/\r\n\t\tfont-weight: 600;\r\n\t\talign-self: center;\t}\t\r\n\r\n#toc ul {\r\n  list-style-type: none;\r\n  padding-left: 0;\r\n}\r\n\t\r\n#toc.sticky ul{\r\n\toverflow-y: auto;\r\n\tmax-height: 250px;\r\n\tmargin-top: 0px;\r\n\tpadding-top: 20px;\r\n\/* \tborder-top: 1px solid #d3d3d3; *\/\r\n}\r\n\t\r\n#toc ul li {\r\n\/*   margin-bottom: 10px; *\/\r\n  margin-bottom: 10px;\r\n\tmargin-left: 0;\r\n\ttransition: .2s ease;\r\n\tcursor: pointer;\r\n}\r\n\t\r\n\t#toc.sticky ul li {\r\n\t  margin-right: 10px;\r\n\t}\r\n\t\r\n.td-post-content #toc-list li a:hover, .td-post-content #toc-list a.active{\r\n\tbackground-color: #FFF;\r\n\/* \tpadding: 8px 16px 8px 16px; *\/\r\n\tpadding: 4px 16px 4px 16px;\r\n\tborder-radius: 6px;\r\n\tcolor: #9c171e !important;\r\n\tfont-weight: 600 !important;\r\n}\r\n\t\r\n\t.td-post-content #toc-list li:hover a, .td-post-content #toc-list a.active{\r\n\t\tcolor: #9C171E !important;\r\n\t\tfont-weight: 600 !important;\r\n\t}\r\n\t\r\n.td-post-content #toc-list a.active{\r\n\tfont-weight: bold !important;\r\n\tcolor: #9C171E !important;\r\n}\r\n\t\r\n#toc a, .td-post-content #toc-list a {\r\n  text-decoration: none;\r\n  color: #ea1717 !important;\r\n  transition: .2s ease;\r\n\tfont-weight: 400 !important;\r\n\tdisplay: block;\r\n\t\r\n\tpadding: 4px 16px 4px 0;\r\n}\r\n\r\n#toc.sticky {\r\n  position: fixed;\r\n\/*   top: 73px; *\/\r\n\tbottom: 0;\r\n  z-index: 100; \r\n  box-shadow: 0 2px 5px rgba(0,0,0,0.1); \r\n\twidth: 100%; \r\n\tbackground-color: #FFF;\r\n\/* \tbackground-color: #FFF1F1; *\/\r\n\tborder-bottom: 1px solid #ea1717;\r\n\/*   border: 1px solid #393939; *\/\r\n  box-shadow: 0px 0px 14px 0px #00000040;\r\n  cursor: pointer;\r\n\tanimation: fadein .3s ease;\r\n\tpadding: 12px 16px !important;\r\n}\r\n\t\r\n\t.fadein{\r\n\t\tanimation: fadein .3s ease;\r\n\t}\r\n\t\r\n\t.fadeout{\r\n\t\tanimation: fadeout .3s ease;\r\n\t}\r\n\t\r\n\t\r\n\t@keyframes fadein{\r\n\t\t0% {\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@keyframes fadeout{\r\n\t\t0% {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n#toc.sticky .header p{\r\n\tmargin-bottom: 10px;\r\n\tmargin-top: 10px;\r\n}\r\n\r\n#toc.sticky .toc-icon{\r\n  visibility: visible;\r\n\/* \ttransition: 0.4s ease; *\/\r\n}\r\n\t\r\n\t.toc-icon{\r\n\t\talign-items: center;\r\n    \tdisplay: flex;\r\n\t}\r\n\t\r\n\tsvg.header-icon{\r\n\/* \t\tbackground-color: #9c171e; *\/\r\n\t\tbackground-color: #FFF;\r\n\t\tborder-radius: 30px;\r\n\t\tpadding: 5px;\r\n\t}\r\n\r\n#toc.sticky .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\t\r\n\t#toc .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\r\n#toc .header.active .toc-icon{\r\n\ttransform: rotate(0deg); \r\n\topacity: 1;\r\n}\r\n\r\n\t#toc .header.active + .list {\r\n\t  max-height: 200px; \/* Adjust this value as needed *\/\r\n\t  opacity: 1;\r\n\t}\r\n\t\r\n\t#placeholder-toc{\r\n\/* \t\tdisplay: none; *\/\r\n\t}\r\n\t\r\n\t@media (min-width: 768px) and (max-width: 991px){\r\n\t\t#toc.sticky{\r\n\/* \t\t\ttop: 104px; *\/\r\n\t\t\tbottom: 0px;\r\n\t\t}\r\n\t\t\r\n\t\t#toc{\r\n\t\t\twidth: unset !important;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width: 767px){\r\n\t\t#toc{\r\n\t\t\twidth: 100% !important;\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\t\t\r\n\t\t#toc.sticky{\r\n\t\t\twidth: 90% !important;\r\n\/* \t\t\ttop: 81px; *\/\r\n\t\t\tbottom: 60px;\r\n\t\t\tmargin-left: auto;\r\n\t\t\tmargin-right: auto;\r\n\t\t\tpadding: 0 16px;\r\n\t\t\tright: 5%;\r\n\t\t}\r\n\t}\r\n\t\r\n\t<\/style>\r\n\r\n<!-- ToC List for mobile -->\r\n<script>\r\n \/\/ Generate TOC based on headings\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  \/\/ Get the element that will contain the TOC\r\n  const tocList = document.getElementById('toc-list');\r\n\r\n  \/\/ Get the element with the ID 'article-left'\r\n  const article = document.querySelector('.td-post-content');\r\n\r\n  \/\/ Find all h2 elements within 'myarticle'\r\n  const headers = article.getElementsByTagName('h2');\r\n\r\n  \/\/ Loop through the h2 elements and create a list item for each one\r\n  for (let i = 0; i < headers.length; i++) {\r\n    const header = headers[i];\r\n    const headerText = header.textContent;\r\n\/\/     const headerId = 'header-' + i;\r\n    const headerId = headerText\r\n    .toLowerCase()\r\n    .trim()\r\n    .replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n    .replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n    \/\/ Set an ID for the header if it doesn't have one\r\n    header.setAttribute('id', headerId);\r\n\r\n    \/\/ Create a list item for the TOC\r\n    const listItem = document.createElement('li');\r\n\r\n    \/\/ Create a link for the list item\r\n    const link = document.createElement('a');\r\n    link.setAttribute('href', '#' + headerId);\r\n    link.textContent = headerText;\r\n\r\n    \/\/ Append the link to the list item\r\n    listItem.appendChild(link);\r\n\r\n    \/\/ Append the list item to the TOC list\r\n    tocList.appendChild(listItem);\r\n  }\r\n});\r\n\r\n\/\/ Keep height and placement of content using placeholder in place of TOC\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const placeholderToc = document.querySelector('#placeholder-toc');\r\n\r\n  function setPlaceholderHeight() {\r\n    placeholderToc.style.height = `${toc.offsetHeight}px`;\r\n  }\r\n\r\n  \/\/ Set the initial height of the placeholder\r\n  setPlaceholderHeight();\r\n\r\n  \/\/ Update the height on window resize\r\n  window.addEventListener('resize', setPlaceholderHeight);\r\n});\r\n  const tocTitle = document.querySelector('#toc-title'); \/\/ Assuming header-faq is the element for TOC title\r\n\r\n\/\/ Sticky TOC and update heading\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const footer = document.querySelector('.td-footer-template-wrap');\r\n  const tocParent = toc.parentElement;\r\n  const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n  const tocHeight = toc.offsetHeight;\r\n  const triggerPoint = divTop + tocHeight + 700;\r\n  const footerHeight = footer.offsetHeight;\r\n  const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight - footerHeight - footerHeight;\r\n  const phtoc = document.querySelector('#placeholder-toc');\r\n  const headers = document.querySelectorAll('.td-post-content h2');\r\n  const navLinks = document.querySelectorAll('#toc-list a');\r\n\t\r\n\tconst panel2 = document.querySelector(\"#toc .list\");\r\n\tvar icon = document.querySelector(\".toc-icon\");\r\n\r\n  let activeLink = null; \/\/ Declare activeLink outside the loop\r\n\t\r\n  \/\/ Function to handle scroll and add\/remove .sticky class\r\n  function handleScroll() {\r\n    const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n    let currentHeader = '';\r\n\r\n    \/\/ Highlight user progress as the heading comes\r\n    headers.forEach(header => {\r\n\t\tconst headerTop = header.offsetTop;\r\n\t\tconst headerHeight = header.clientHeight;\r\n\t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \t\t\tconsole.log(\"current header text:\", currentHeaderText);\r\n\t\t\ttocTitle.textContent = currentHeaderText;\r\n\t\t\tcurrentHeader = currentHeaderId;\r\n\t\t\t\r\n\t\t\tif(window.innerWidth < 767){\r\n\t\t\t\ttocTitle.textContent = 'Table of Content';\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n    navLinks.forEach(link => {\r\n      link.classList.remove('active');\r\n      if(currentHeader != '') {\r\n\t\t  if (link.getAttribute('href').includes(currentHeader)) {\r\n\t\t\t  link.classList.add('active');\r\n\t\t  }\r\n\t  }\r\n    });\r\n\/\/     if (windowTop < triggerFooterPoint) {\r\n\/\/         toc.style.display = 'block';\r\n\/\/ \t}else{\r\n\/\/         toc.style.display = 'none';\r\n\/\/ \t}\r\n    \/\/ Update TOC title if sticky\r\n    if (windowTop > triggerPoint) {\r\n      if (!toc.classList.contains('sticky')) {\r\n        phtoc.style.display = \"block\";\r\n        toc.classList.add('sticky');\r\n        toc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n        toc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n        toc.style.backgroundColor = \"#FFF\";\r\n\t\tpanel2.style.height = '0px';\r\n\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\t\t  if(window.innerWidth < 767){\r\n\/\/ \t\t\t  const tocs = document.querySelector('#toc.sticky');\r\n\t\t\t  tocTitle.textContent = 'Table of Content'; \/\/ Reset title\r\n       \t\t  toc.style.width = '150px'; \/\/ Set width to match the parent element\r\n\t\t  }\r\n      }\r\n      if (currentHeader) {\r\n\/\/         console.log(\"activeLink:\", activeLink);\r\n        if (activeLink) {\r\n\/\/           tocTitle.textContent = activeLink.textContent; \/\/ Update TOC title\r\n          tocTitle.textContent = activeLink ? activeLink.textContent : \"\"; \/\/ Update title only if activeLink exists\r\n        }\r\n      }\r\n    } else {\r\n      toc.classList.remove('sticky');\r\n      phtoc.style.display = \"none\";\r\n      toc.style.width = 'unset'; \/\/ Reset to original width\r\n      toc.style.backgroundColor = \"#FFF\";\r\n      tocTitle.textContent = 'Table of Content'; \/\/ Reset title\r\n\t\tpanel2.style.height = panel2.scrollHeight + \"px\";\r\n\t\ticon.style.transform = \"rotate(180deg)\";\r\n    }\r\n  }\r\n\r\n    \/\/ Attach the scroll event listener to the window\r\n    window.addEventListener('scroll', handleScroll);\r\n\r\n    \/\/ Initial call to handleScroll to set the correct state on load\r\n    handleScroll();\r\n});\r\n\t\r\n\t\/\/ Open toggle TOC\r\n\t  document.addEventListener(\"DOMContentLoaded\", function() {\r\n\t\tvar tocHeader = document.querySelector(\"#toc .header\");\r\n\t\tvar toc = document.querySelector(\"#toc\");\r\n\t\tvar icon = document.querySelector(\".toc-icon\");\r\n\t\tconst tocTitle = document.querySelector('#toc-title');\r\n\t\tconst tocs = document.querySelector('#toc.sticky');\r\n \t\tconst tocParent = toc.parentElement;\t\t  \r\n\r\n\t\t  tocHeader.addEventListener(\"click\", function() {\r\n\t\t\tvar panel = this.nextElementSibling;\r\n\t\t\tif (panel.style.height !== '0px') { \/\/ Check if height is not 0px\r\n\t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t\t\ttoc.style.paddingBottom = '6px'; \r\n\t\t\t\tif(window.innerWidth > 768){\r\n\t\t\t\t\tif(!toc.classList.contains('sticky')){\r\n\t\t\t\t\t\ttoc.style.width = \"unset\";\r\n\/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (toc.classList.contains('sticky')){\r\n\t\t\t\t\t\ttoc.style.width = '${tocParent.offsetWidth}px';\r\n\t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif(window.innerWidth < 767){\r\n\t\t\t\t\ttoc.style.width = \"unset\"; \/\/ Reset width\r\n\t\t\t\t}\r\n\t\t\t\ttoc.style.backgroundColor = \"#FFF1F1\";\r\n\t\t\t} else {\r\n\t\t\t  panel.style.height = panel.scrollHeight + \"px\";\r\n\t\t\t  icon.style.transform = \"rotate(0deg)\";\r\n\t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\t\t\t  tocTitle.textContent = 'Table of Content'; \/\/ Reset title\r\n\t\t\t\ttoc.style.paddingBottom = '24px';\r\n\t\t\t \tif(window.innerWidth < 767){\r\n\t\t\t\t\ttoc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t  });\r\n\r\n\t\t  \/\/ Close TOC when a link inside it is clicked\r\n\t\t  var tocLinks = document.querySelectorAll(\"#toc .list a\");\r\n\t\t  tocLinks.forEach(function(link) {\r\n\t\t\tlink.addEventListener(\"click\", function() {\r\n\t\t\t  var panel = document.querySelector(\"#toc .list\");\r\n\t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\t\t\t});\r\n\t\t  });\r\n\t\t});\r\n\r\n\r\n\r\n\t\r\n\/\/ \tmake the heading at the center of the viewport\r\n\/\/ \tdocument.addEventListener('DOMContentLoaded', function() {\r\n\/\/     \/\/ Add click event listener to all links in the TOC list\r\n\/\/     document.querySelectorAll('#toc-list a').forEach(anchor => {\r\n\/\/         anchor.addEventListener('click', function (e) {\r\n\/\/             e.preventDefault(); \/\/ Prevent the default behavior of jumping to the anchor\r\n\/\/ \/\/ \t\t\tconsole.log(\"prevent default\");\r\n\/\/             const targetId = this.getAttribute('href').substring(1); \/\/ Get the ID of the target element\r\n\/\/             const targetElement = document.getElementById(targetId); \/\/ Get the target element\r\n\r\n\/\/             if (targetElement) {\r\n\/\/                 const headerHeight = document.querySelector('#toc .header').offsetHeight; \/\/ Get the height of the fixed header\r\n\/\/                 const windowHeight = window.innerHeight; \/\/ Get the height of the viewport\r\n\/\/                 const targetOffset = targetElement.offsetTop; \/\/ Get the top offset of the target element\r\n\/\/                 const scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight); \/\/ Calculate the scroll position to center the target element\r\n\r\n\/\/                 \/\/ Scroll to the calculated position smoothly\r\n\/\/                 window.scrollTo({\r\n\/\/                     top: scrollTo,\r\n\/\/                     behavior: 'smooth'\r\n\/\/                 });\r\n\/\/             }\r\n\/\/         });\r\n\/\/     });\r\n\/\/ });\r\n<\/script>\r\n\r\n<!-- START script lama -->\r\n<!-- <script>\r\n\/\/ \tvar pilihDaftarIsi = document.getElementById('pilihDaftarIsi');\r\n\t\r\n\/\/ \tdocument.addEventListener('DOMContentLoaded', function() {\r\n\/\/ \t\tvar dropdownFixedTop = document.querySelector('.dropdown-fixed-top');\r\n\r\n\/\/ \t\tdropdownFixedTop.addEventListener('click', function() {\r\n\/\/ \t\t\tvar dropdownContent = this.querySelector('.list_toc');\r\n\/\/ \t\t\tdropdownContent.classList.toggle('show');\r\n\/\/ \t\t});\r\n\r\n\/\/ \t\twindow.addEventListener('click', function(event) {\r\n\/\/ \t\t\tvar listTocTop = document.getElementById('list_toc_top');\r\n\r\n\/\/ \t\t\tif (!dropdownFixedTop.contains(event.target)) {\r\n\/\/ \t\t\t\tlistTocTop.classList.remove('show');\r\n\/\/ \t\t\t}\r\n\/\/ \t\t});\r\n\/\/ \t});\r\n\t\r\n\/\/ \tvar daftarIsiContainer = document.getElementById('toc_group_article');\r\n\/\/ \tvar dropdownFixedTop = document.getElementById('dropdown-fixed-top');\r\n\/\/     var triggered = false; \/\/ Flag to keep track of whether the function has been triggered\r\n\r\n\/\/     window.addEventListener('scroll', function() {\r\n\/\/         if (!triggered && isCompletelyScrolledPast(daftarIsiContainer)) {\r\n\/\/             showSectionDropdownFixedTop(false);\r\n\/\/             triggered = true;\r\n\/\/         } else if (triggered && !isCompletelyScrolledPast(daftarIsiContainer)) {\r\n\/\/             showSectionDropdownFixedTop(true);\r\n\/\/             triggered = false;\r\n\/\/         }\r\n\/\/     });\r\n\r\n\/\/     function isCompletelyScrolledPast(element) {\r\n\/\/         var elementTop = element.getBoundingClientRect().top;\r\n\/\/         var elementBottom = element.getBoundingClientRect().bottom;\r\n\/\/         return elementTop < 0 && elementBottom < 0;\r\n\/\/     }\r\n\r\n\/\/     function showSectionDropdownFixedTop(show) {\r\n\/\/ \t\tif (show) {\r\n\/\/ \t\t\tdropdownFixedTop.classList.remove(\"show\");\r\n\/\/ \t\t} else {\r\n\/\/ \t\t\tdropdownFixedTop.classList.add(\"show\");\r\n\/\/ \t\t}\r\n\/\/     }\r\n<\/script> -->\r\n<!-- <script>\r\n    \/\/ Scrollspy function to highlight the active TOC item based on the scroll position\r\n  function scrollSpy(tocClass) {\r\n    const scrollPosition = window.scrollY;\r\n\r\n    \/\/ Find the active h2 and h3 headings based on their position in the corresponding TOC\r\n    let activeH2 = null;\r\n    let activeH3 = null;\r\n\r\n    const tocItems = document.querySelectorAll(`.${tocClass} li`);\r\n    tocItems.forEach(item => {\r\n      const a = item.querySelector('a');\r\n      if (!a) return;\r\n      const href = a.getAttribute('href');\r\n      const targetId = href.substring(1); \/\/ Remove the '#' from the href to get the target ID\r\n      const targetElement = document.getElementById(targetId);\r\n      if (!targetElement) return;\r\n\r\n      const targetTop = targetElement.getBoundingClientRect().top + scrollPosition;\r\n      const nextItem = item.nextElementSibling;\r\n      const nextTop = nextItem ? nextItem.getBoundingClientRect().top + scrollPosition : Infinity;\r\n\r\n      if (targetTop <= scrollPosition + 150) {\r\n        if (a.parentElement.parentElement === tocItems) {\r\n          \/\/ The h2 heading is at the root level of the TOC\r\n          activeH2 = { id: targetId, level: 'h2' };\r\n        } else {\r\n          \/\/ The h3 heading is nested under an h2 heading\r\n          const parentH2 = a.parentElement.parentElement.previousElementSibling;\r\n          if (parentH2) {\r\n            const h2Link = parentH2.querySelector('a');\r\n            if (h2Link) {\r\n              const h2Href = h2Link.getAttribute('href');\r\n              const h2Id = h2Href.substring(1);\r\n              activeH2 = { id: h2Id, level: 'h2' };\r\n            }\r\n          }\r\n          activeH3 = { id: targetId, level: 'h3' };\r\n        }\r\n      }\r\n\r\n      if (targetTop > scrollPosition + 150 && nextTop > scrollPosition + 150 && !activeH3) {\r\n        \/\/ Reset the activeH2 when there are no more active h3 headings\r\n        activeH2 = null;\r\n      }\r\n    });\r\n\r\n    \/\/ Update the active state for the TOC items\r\n    tocItems.forEach(item => {\r\n      item.classList.remove('active');\r\n      const a = item.querySelector('a');\r\n      if (a) {\r\n        const href = a.getAttribute('href');\r\n        const targetId = href.substring(1);\r\n        if ((activeH2 && activeH2.id === targetId) || (activeH3 && activeH3.id === targetId)) {\r\n          item.classList.add('active');\r\n\t\t  pilihDaftarIsi.innerHTML = a.textContent;\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Call scrollSpy for each TOC on window scroll\r\n  const tocClasses = ['list_toc', 'list_toc_float', 'list_toc_top']; \/\/ Add other TOC class names here if you have more than two instances\r\n  tocClasses.forEach(tocClass => {\r\n    window.addEventListener('scroll', () => scrollSpy(tocClass));\r\n  });\r\n<\/script> -->\r\n<!-- END script lama -->\r\n\t\r\n<script>\r\n    \/\/ Scrollspy function to highlight the active TOC item based on the scroll position\r\n  function scrollSpy(tocClass) {\r\n    const scrollPosition = window.scrollY;\r\n\r\n    \/\/ Find the active h2 and h3 headings based on their position in the corresponding TOC\r\n    let activeH2 = null;\r\n    let activeH3 = null;\r\n\r\n    const tocItems = document.querySelectorAll(`.${tocClass} li`);\r\n    tocItems.forEach(item => {\r\n      const a = item.querySelector('a');\r\n      if (!a) return;\r\n      const href = a.getAttribute('href');\r\n      const targetId = href.substring(1); \/\/ Remove the '#' from the href to get the target ID\r\n      const targetElement = document.getElementById(targetId);\r\n      if (!targetElement) return;\r\n\r\n      const targetTop = targetElement.getBoundingClientRect().top + scrollPosition;\r\n      const nextItem = item.nextElementSibling;\r\n      const nextTop = nextItem ? nextItem.getBoundingClientRect().top + scrollPosition : Infinity;\r\n\r\n      if (targetTop <= scrollPosition + 150) {\r\n        if (a.parentElement.parentElement === tocItems) {\r\n          \/\/ The h2 heading is at the root level of the TOC\r\n          activeH2 = { id: targetId, level: 'h2' };\r\n        } else {\r\n          \/\/ The h3 heading is nested under an h2 heading\r\n          const parentH2 = a.parentElement.parentElement.previousElementSibling;\r\n          if (parentH2) {\r\n            const h2Link = parentH2.querySelector('a');\r\n            if (h2Link) {\r\n              const h2Href = h2Link.getAttribute('href');\r\n              const h2Id = h2Href.substring(1);\r\n              activeH2 = { id: h2Id, level: 'h2' };\r\n            }\r\n          }\r\n          activeH3 = { id: targetId, level: 'h3' };\r\n        }\r\n      }\r\n\r\n      if (targetTop > scrollPosition + 150 && nextTop > scrollPosition + 150 && !activeH3) {\r\n        \/\/ Reset the activeH2 when there are no more active h3 headings\r\n        activeH2 = null;\r\n      }\r\n    });\r\n\r\n    \/\/ Update the active state for the TOC items\r\n    tocItems.forEach(item => {\r\n      item.classList.remove('active');\r\n      const a = item.querySelector('a');\r\n      if (a) {\r\n        const href = a.getAttribute('href');\r\n        const targetId = href.substring(1);\r\n        if ((activeH2 && activeH2.id === targetId) || (activeH3 && activeH3.id === targetId)) {\r\n          item.classList.add('active');\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Call scrollSpy for each TOC on window scroll\r\n  const tocClasses = ['list_toc', 'list_toc_float']; \/\/ Add other TOC class names here if you have more than two instances\r\n  tocClasses.forEach(tocClass => {\r\n    window.addEventListener('scroll', () => scrollSpy(tocClass));\r\n  });\r\n<\/script>\r\n\t\r\n\r\n<!-- ToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\" -->\r\n<!--  <script>\r\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\r\nToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\"\r\n        Fungsi untuk mengubah teks menjadi format id\r\n        function formatId(text) {\r\n            return text.trim().replace(\/[^\\w\\d]+\/g, '_');\r\n        }\r\n\r\n        \/\/ Fungsi untuk membuat nested list\r\n        function createNestedList(parentNode, children) {\r\n            if (children.length === 0) return;\r\n\r\n            const nestedUl = document.createElement('ul');\r\n            children.forEach(child => {\r\n                const nestedLi = document.createElement('li');\r\n                const nestedA = document.createElement('a');\r\n                nestedA.textContent = child.title;\r\n                nestedA.href = `#${child.id}`;\r\n                nestedLi.appendChild(nestedA);\r\n                nestedUl.appendChild(nestedLi);\r\n\r\n                if (child.children.length > 0) {\r\n                    createNestedList(nestedLi, child.children);\r\n                }\r\n            });\r\n\r\n            parentNode.appendChild(nestedUl);\r\n        }\r\n\r\n        \/\/ Membuat objek untuk menyimpan daftar h2 dan h3 beserta judulnya\r\n        const headings = [];\r\n\r\n           \/\/ Mengambil semua elemen h2 dan h3\r\n        const elements = document.querySelectorAll('.td-post-content h2');\r\n\t\t\t\/\/, .td-post-content h3\r\n\r\n        elements.forEach(element => {\r\n            if (element.tagName === 'H2') {\r\n                const id = formatId(element.textContent);\r\n                element.id = id;\r\n\t\t\t\tif (element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Kalau Key Takeaways, jangan dimasukin\r\n                headings.push({ level: 'h2', id: id, title: element.textContent, children: [] });\r\n            } else if (element.tagName === 'H3') {\r\n                const id = formatId(element.textContent);\r\n                element.id = id;\r\n                if (headings.length > 0) {\r\n                    headings[headings.length - 1].children.push({ level: 'h3', id: id, title: element.textContent, children: [] });\r\n                }\r\n            }\r\n        });\r\n\r\n        \/\/ Membuat list HTML dari objek headings\r\n        const ul = document.getElementById('list_toc');\r\n        let currentUl = ul;\r\n        headings.forEach(heading => {\r\n            const li = document.createElement('li');\r\n            const a = document.createElement('a');\r\n            a.textContent = heading.title;\r\n            a.href = `#${heading.id}`;\r\n            li.appendChild(a);\r\n\r\n            if (heading.level === 'h2') {\r\n                \/\/ Menyimpan ul saat ini untuk menambahkan nested ul\r\n                currentUl = li;\r\n                ul.appendChild(li);\r\n            } else if (heading.level === 'h3') {\r\n                if (!currentUl.lastElementChild || currentUl.lastElementChild.tagName !== 'UL') {\r\n                    \/\/ Jika belum ada nested ul, buat satu\r\n                    const nestedUl = document.createElement('ul');\r\n                    currentUl.appendChild(nestedUl);\r\n                    currentUl = nestedUl;\r\n                }\r\n                currentUl.appendChild(li);\r\n            }\r\n\r\n            createNestedList(li, heading.children);\r\n        });\r\n\t\tDapatkan elemen ul dengan id 'list_toc_float'\r\nconst ulFloat = document.getElementById('list_toc');\r\nconst ulJourney = document.getElementById('list_journey');\r\n\r\nDapatkan isi (child elements) dari ul dengan id 'list_toc_float'\r\n\tif (ulFloat !== null) {\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\t\tconst ulTocTop = document.getElementById('list_toc_top');\r\n\t\tif ((ulToc !== null || ulToc !== undefined) && window.innerWidth > 1018){\r\n\t\t\tulToc.append(...clonedChildren);\r\n\t\t} else {\r\n\t\t\tulTocTop.append(...clonedChildren);\r\n\t\t}\r\n\t} \r\n\r\n\tif (ulJourney !== null) {\r\n\t\tconst clonedChildrenJourney = ulJourney.cloneNode(true).children;\r\n\t\tconst ulTocJourney = document.getElementById('list_toc_journey');\r\n\t\tulTocJourney.append(...clonedChildrenJourney);\r\n\t} \r\n\t\r\n        Fungsi untuk mengambil tinggi navbar\r\n        function getNavbarHeight() {\r\n            const navbar = document.getElementById('tdi_34');\r\n            return navbar ? navbar.offsetHeight : 0;\r\n        }\r\n\r\n        \/\/ Fungsi untuk menambahkan offset posisi scroll\r\n        function scrollToElementWithOffset(elementId) {\r\n            const element = document.getElementById(elementId);\r\n            if (element) {\r\n                const offset = getNavbarHeight();\r\n                const elementPosition = element.getBoundingClientRect().top;\r\n                const offsetPosition = elementPosition - offset-40;\r\n\r\n                window.scrollBy({\r\n                    top: offsetPosition,\r\n                    behavior: 'smooth'\r\n                });\r\n            }\r\n        }\r\n\r\n        \/\/ Fungsi untuk menangani klik pada tautan judul\r\n        function handleTitleClick(event) {\r\n            event.preventDefault();\r\n            const href = event.target.getAttribute('href').substr(1);\r\n            scrollToElementWithOffset(href);\r\n        }\r\n\r\n        \/\/ Tambahkan event listener untuk semua tautan judul\r\n        const titleLinks = document.querySelectorAll('a[href^=\"#\"]');\r\n        titleLinks.forEach(link => {\r\n            link.addEventListener('click', handleTitleClick);\r\n        });\r\n\t});\r\n    <\/script> -->\r\n<\/span><\/p>\n<h2><b>What is Monthly Recurring Revenue?<\/b><\/h2>\n<p><span id=\"mrr_meaning\">Monthly Recurring Revenue (MRR) is the predictable and consistent total revenue generated by a business from all active subscriptions on a monthly basis.<\/span><\/p>\n<p>This metric, commonly used by subscription and SaaS companies, normalizes various pricing plans and billing periods into a single figure, allowing businesses to track revenue trends over time.<\/p>\n<p>MRR includes recurring charges from discounts, coupons, and add-ons but excludes one-time fees. It is essential for assessing a company&#8217;s current financial health, forecasting future revenue, and making informed strategic decisions.<\/p>\n<h2><b>Difference between Monthly Recurring Revenue and Accounting Revenue<\/b><\/h2>\n<p>When tracking revenue, it&#8217;s essential to use the correct terms and understand their meanings. A key distinction is between accounting revenue and MRR.<\/p>\n<p><b>Monthly Recurring Revenue (MRR)<\/b> focuses on the predictable income your business generates on a monthly basis. On the other hand, <b>accounting revenue<\/b> follows standardized rules that ensure companies report their total earnings consistently and transparently, offering a full and accurate financial picture.<\/p>\n<h2><b>What are the Types of Monthly Recurring Revenue?<\/b><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-63269\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-1024x576.webp\" alt=\"monthly recurring revenue formula\" width=\"696\" height=\"392\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-300x169.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-768x432.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-747x420.webp 747w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-150x84.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-696x392.webp 696w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula-1068x601.webp 1068w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-formula.webp 1200w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/p>\n<p>MRR links customers to their accounts, which illustrates their subscription behavior. A rise in MRR reflects more customer acquisitions, upgrades, or both, while a drop points to downgrades, cancellations, or churn.<\/p>\n<p>To understand these shifts, you must track the factors affecting MRR separately. Breaking MRR into specific types gives deeper insights into revenue, customer behavior, and overall business health.<\/p>\n<h3><b>1. New MRR<\/b><\/h3>\n<p><b>New MRR<\/b> refers to the additional monthly revenue generated from acquiring new customers within a specific month.<\/p>\n<p><i>Example:<\/i> If your business secures 5 new subscriptions at $500 each per month, the New MRR would be 5 \u00d7 $500 = <b>$2,500<\/b>.<\/p>\n<h3><b>2. Upgrade MRR<\/b><\/h3>\n<p><b>Upgrade MRR<\/b> is the extra monthly revenue obtained when existing customers move to higher-priced plans during a month. This calculation also includes any additional add-ons they purchase.<\/p>\n<p><i>Example:<\/i> If a customer upgrades from a $50\/month plan to a $200\/month plan and adds a $25\/month add-on, the Upgrade MRR would be ($200 &#8211; $50) + $25 = <b>$175<\/b>.<\/p>\n<h3><b>3. Downgrade MRR<\/b><\/h3>\n<p><b>Downgrade MRR<\/b> represents the decrease in monthly revenue when customers switch to lower-priced plans within a month.<\/p>\n<p><i>Example:<\/i> If a customer downgrades from a $500\/month plan to a $100\/month plan, the Downgrade MRR would be $500 &#8211; $100 = <b>$400<\/b>.<\/p>\n<h3><b>4. Expansion MRR<\/b><\/h3>\n<p><b>Expansion MRR<\/b> is the additional monthly revenue generated from existing customers through add-ons, upselling, or cross-selling compared to the previous month. Positive Expansion MRR indicates successful customer retention and increased revenue without incurring Customer Acquisition Costs (CAC).<\/p>\n<p><i>Growth Rate Example:<\/i><i><br \/>\n<\/i>If your MRR at the start of the month is $800K and you gain $17K in Expansion MRR during the month, the Expansion MRR growth rate is ($17K \/ $800K) \u00d7 100 = <b>2.1%<\/b>.<\/p>\n<h3><b>5. Reactivation MRR<\/b><\/h3>\n<p><b>Reactivation MRR<\/b> is the monthly revenue brought in by customers who previously churned but have returned to a paid subscription plan.<\/p>\n<p><i>Example:<\/i> If 5 churned customers reactivate their subscriptions at $50\/month each, the Reactivation MRR is 5 \u00d7 $50 = <b>$250<\/b>.<\/p>\n<h3><b>6. Contraction MRR<\/b><\/h3>\n<p><b>Contraction MRR<\/b> denotes the loss in monthly revenue due to actions like subscription cancellations, downgrades, pauses, credits, discounts, or the removal of add-ons within a month. Unlike Downgrade MRR, it encompasses various factors leading to revenue reduction.<\/p>\n<p><i>Example:<\/i> Offering a $30 discount to 50 long-term customers results in a Contraction MRR of 50 \u00d7 $30 = <b>$1,500<\/b>.<\/p>\n<h3><b>7. Churn MRR<\/b><\/h3>\n<p><b>Churn MRR<\/b> is the total monthly revenue lost from customers who cancel their subscriptions within a specific month.<\/p>\n<p><i>Example:<\/i> If 3 customers each paying $1,000\/month cancel their subscriptions, the Churn MRR is 3 \u00d7 $1,000 = <b>$3,000<\/b>.<\/p>\n<h3><b>8. Net New MRR<\/b><\/h3>\n<p><b>Net New MRR<\/b> measures the overall change in monthly recurring revenue for the current month compared to the previous month. It is calculated using the formula:<\/p>\n<p><b>Net New MRR = New MRR + Expansion MRR &#8211; Churn MRR<\/b><\/p>\n<p>A positive Net New MRR indicates revenue growth, while a negative value signifies a decline.<br \/>\n<i><\/i><\/p>\n<p><i>Example:<\/i><\/p>\n<ul>\n<li aria-level=\"1\"><b>New MRR:<\/b> 5 new customers \u00d7 $100\/month = $500<\/li>\n<li aria-level=\"1\"><b>Expansion MRR:<\/b> 10 upgrades \u00d7 ($200 &#8211; $100) = $1,000<\/li>\n<li aria-level=\"1\"><b>Churn MRR:<\/b> 3 churned customers \u00d7 $200\/month = $600<\/li>\n<li aria-level=\"1\"><b>Net New MRR =<\/b> $500 + $1,000 &#8211; $600 = $900<\/li>\n<\/ul>\n<p>For practical examples and case studies, you can also read our article on real-world applications of the <a href=\"https:\/\/www.hashmicro.com\/blog\/retention-ratio\/\">retention ratio<\/a>.<\/p>\n<h2><b>Why is Tracking MRR Important?<\/b><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-63272\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-1024x576.webp\" alt=\"mrr meaning\" width=\"696\" height=\"392\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-300x169.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-768x432.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-747x420.webp 747w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-150x84.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-696x392.webp 696w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning-1068x601.webp 1068w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/mrr-meaning.webp 1200w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/p>\n<p><span id=\"benefits_mrr\">MRR gives insights that assist you in deciding what steps to take to build your business by providing a realistic picture of your company&#8217;s revenue potential. Let&#8217;s look into what MRR can provide that makes it an important subscription metric:<\/span><\/p>\n<h3><b>1. Tracking performance\u00a0\u00a0<\/b><\/h3>\n<p>MRR provides a monthly snapshot of your company&#8217;s financial health, which is important for assessing growth in a subscription business. It also helps ensure consistent cash flow, thereby keeping the business on a sustainable path.<\/p>\n<p>For example, if your MRR has steadily increased by 5% each month for the past six months, you can confidently adjust your goals for the upcoming quarter.<\/p>\n<h3><b>2. Revenue forecasting\u00a0<\/b><\/h3>\n<p>MRR offers accurate revenue estimates for the near future. By examining your monthly performance, you can forecast how much income you will create the following month and make changes as needed.<\/p>\n<p>For instance, if your MRR is $120,000 in January, and you expect a 10% growth rate, you can forecast around $132,000 for February, guiding your sales team\u2019s efforts accordingly.<\/p>\n<h3><b>3. Budgeting\u00a0<\/b><\/h3>\n<p>MRR lets you plan spending based on predictable monthly revenue, which gives you more control over resource allocation.<\/p>\n<p>For example, if your MRR increases by $15,000 but your new customer sign-ups are decreasing, you might decide to allocate more budget to marketing initiatives to attract new customers.<\/p>\n<h3><b>4. Measuring growth and momentum<\/b><\/h3>\n<p>If you&#8217;re aiming for rapid business growth or have investors backing you, tracking your MRR growth every month is crucial. MRR is a key sign of how fast your business is growing.<\/p>\n<p>The month-to-month increase in MRR will clearly show whether your business is taking off, gaining new customers and revenue, or if you&#8217;re still in the early stages of growth.<\/p>\n<h2><b>What is a Good MRR Rate?<\/b><\/h2>\n<p>Benchmarking MRR can be challenging since performance depends on the market, customer demographics, and business stage. Here are a few useful guidelines to consider:<\/p>\n<h3><b>1. Growth Based on ARR<\/b>:<\/h3>\n<ul>\n<li aria-level=\"1\">For <b>ARR below $2.5 million<\/b>, a growth rate of <b>100% or more<\/b> is typically targeted.<\/li>\n<li aria-level=\"1\">As companies move into the <b>$5-15 million ARR range<\/b>, they should aim for a <b>40-55%<\/b> MRR growth rate annually.<\/li>\n<li aria-level=\"1\">At <b>$25-75 million ARR<\/b>, the growth rate generally stabilizes around <b>30-40%<\/b>.<\/li>\n<li aria-level=\"1\">For those with <b>ARR over $75 million<\/b>, a more modest <b>20-30% growth<\/b> rate is often seen.<\/li>\n<\/ul>\n<h3><b>2. ARPU Benchmarks<\/b>:<\/h3>\n<ul>\n<li aria-level=\"1\">With <b>ARPU under $15K<\/b>, you should expect around a <b>40-50%<\/b> MRR growth rate.<\/li>\n<li aria-level=\"1\"><b>ARPU between $25-100K<\/b> sees growth rates in the range of <b>30-40%<\/b>.<\/li>\n<li aria-level=\"1\">Companies with <b>ARPU over $250K<\/b> generally see <b>20-30% MRR growth<\/b> annually.<\/li>\n<\/ul>\n<h3><b>3. Marketing Spend Impact<\/b>:<\/h3>\n<ul>\n<li aria-level=\"1\">Companies that spend <b>less than 20% of their revenue<\/b> on marketing should see around <b>20-25% MRR growth<\/b>.<\/li>\n<li aria-level=\"1\">Those spending <b>40-60%<\/b> may target <b>30% growth<\/b>, while more aggressive spenders, allocating <b>over 60% of revenue<\/b> to marketing, can see up to <b>60-70%<\/b> MRR growth.<\/li>\n<\/ul>\n<h3><b>4. Sales Channels Influence<\/b>:<\/h3>\n<ul>\n<li aria-level=\"1\"><b>Online sales<\/b> generally deliver around <b>45-50% MRR growth<\/b>, while <b>field sales<\/b> are slower, around <b>30%<\/b>.<\/li>\n<li aria-level=\"1\"><b>Third-party channels and affiliates<\/b> can drive higher growth, up to <b>50-55%<\/b>.<\/li>\n<\/ul>\n<p>These benchmarks reflect the focus on efficiency and growth seen in businesses today, particularly in markets like Singapore, where tech adoption is high and companies strive for scalable growth.<\/p>\n<h2><b>Common Mistakes When Calculating Monthly Recurring Revenue<\/b><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-63270\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-1024x576.webp\" alt=\"monthly recurring revenue saas\" width=\"696\" height=\"392\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-300x169.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-768x432.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-747x420.webp 747w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-150x84.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-696x392.webp 696w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas-1068x601.webp 1068w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue-saas.webp 1200w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/p>\n<p><span id=\"mistakes\">MRR is a key metric for subscription businesses, but there are some common mistakes that business owners should avoid to ensure accurate calculations.<\/span><\/p>\n<h3><b>1. Counting full value of long-term contracts in a single month<\/b><\/h3>\n<p>When a customer pays upfront for a longer subscription, the total value should be divided by the subscription length when calculating MRR. The goal of MRR is to measure growth and momentum, not cash flow.<\/p>\n<p>Including the full value upfront can distort important metrics like customer churn rate and customer lifetime value. The only time you should count the full amount is when calculating bookings.<\/p>\n<h3><b>2. Deducting transaction fees and delinquent charges<\/b><\/h3>\n<p>While it may seem logical to subtract transaction fees and delinquent charges to get a more conservative figure, this leads to inaccurate results. Delinquent charges fall in a gray area between active and churned customers, especially if failed payments are usually recovered.<\/p>\n<p>Instead of deducting these from MRR, categorize them separately to better track lost revenue. Similarly, transaction fees should not be subtracted as they can be optimized over time. Label them as an expense rather than reducing MRR.<\/p>\n<h3><b>3. Including one-time payments<\/b><\/h3>\n<p>One-time sales or payments shouldn\u2019t be part of MRR, as they are not recurring. Including them inflates your revenue expectations and distorts your financial model since these payments don\u2019t occur regularly.<\/p>\n<h3><b>4. Adding trial users<\/b><\/h3>\n<p>One major mistake is counting trial users and their potential future value in MRR before they officially become paying customers. This inflates the number of &#8220;new&#8221; and &#8220;churned&#8221; customers, as trials do not have a 100% conversion rate.<\/p>\n<h3><b>5. Excluding discounts<\/b><\/h3>\n<p>Another error is neglecting to account for discounts in your MRR. If a customer receives a discount on a $100\/month plan and only pays $50, your MRR is $50, not $100.<\/p>\n<p>Failing to include discounts gives an inaccurate picture of your actual revenue, and once the discount is removed, your MRR will adjust accordingly.<\/p>\n<p>These mistakes can be avoided by using smart technology, such as an advanced accounting system that helps identify and calculate revenue sources accurately as part of a strong <a href=\"https:\/\/www.hashmicro.com\/blog\/revenue-strategies-retailers-can-adopt-during-covid-19\/\">revenue strategy<\/a>. Click the banner below to learn more.<\/p>\n<a href=\"https:\/\/www.hashmicro.com\/free-product-tour\/?medium=free-product-tour\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" width=\"712\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/11\/Free-Product-Tour-resized.webp\" alt=\"Free Demo\"><\/a>\n<h2><b>How to Calculate Monthly Recurring Revenue<\/b><\/h2>\n<p>The easiest way to calculate MRR is by multiplying your Average Revenue per User (ARPU) on a monthly basis by the total number of active users for that month.<\/p>\n<p>The formula for calculating MRR:<br \/>\n<b>Monthly ARPU x Total Monthly Users = Monthly Recurring Revenue<\/b><\/p>\n<p>Let\u2019s break it down further with these four steps:<\/p>\n<ol>\n<li aria-level=\"1\"><b>Organize your data<\/b><b><br \/>\n<\/b>Start by gathering all customer data for the month and placing it into a spreadsheet. Include a unique identifier for each customer in one column (like an account ID), and in the next column, list their subscription value. If there are multi-month contracts, divide the total value of the contract by the number of months to get the monthly rate.<\/li>\n<li aria-level=\"1\"><b>Calculate total MRR<\/b><b><br \/>\n<\/b>Sum up the subscription values in the spreadsheet. The total of this column will be your Monthly Recurring Revenue for that month.<\/li>\n<li aria-level=\"1\"><b>Segment by cohort<\/b><b><br \/>\n<\/b>While it\u2019s helpful to see the total MRR, breaking it down by pricing plans or customer segments provides more insights. Use the same method but only include the data from the specific cohort or plan you\u2019re analyzing.<\/li>\n<li aria-level=\"1\"><b>Measure MRR growth<\/b><b><br \/>\n<\/b>After calculating your total MRR, it\u2019s important to track MRR growth. To do this, categorize MRR into segments like &#8220;New MRR&#8221;, &#8220;Add-on MRR&#8221;, and &#8220;Churn MRR&#8221;. Use the following formula to calculate growth:<\/li>\n<\/ol>\n<p><b>(New MRR + Add-on MRR) &#8211; Churn MRR = Growth MRR<\/b><\/p>\n<p>For example, say you have 12 customers on your Basic plan paying $20 per month and 8 customers on your Premium plan paying $40 per month. Your total MRR would be (12 x $20) + (8 x $40) = $560.<\/p>\n<p>Of course, MRR calculations can get more complex as you dive into key metrics like expansion MRR (upgrades), churn, downgrades, and new customers. For example, if existing customers upgrade, you\u2019ll want to factor that in alongside your customer churn to get a fuller picture.<\/p>\n<h2><b>Tips to Increase Monthly Recurring Revenue<\/b><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-63273\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-1024x576.webp\" alt=\"recurring revenue\" width=\"696\" height=\"392\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-300x169.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-768x432.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-747x420.webp 747w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-150x84.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-696x392.webp 696w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue-1068x601.webp 1068w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/recurring-revenue.webp 1200w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/p>\n<p>To grow your Monthly Recurring Revenue (MRR), it&#8217;s important to focus on key business strategies. By enhancing customer satisfaction and optimizing your offerings, you can boost recurring revenue consistently.<\/p>\n<p>Here are some effective tips to help you increase your MRR and drive sustainable growth.<\/p>\n<h3><b>1. Reinforce the value of your product<\/b><\/h3>\n<p>Minimizing churn is critical for sustaining MRR growth. While some churn is unavoidable, reminding customers of your product\u2019s value can help retain those on the verge of leaving.<\/p>\n<p>To do this, focus on delivering excellent customer service, regular product improvements, and clear communication of key benefits. Regularly reinforcing how your product addresses customer needs can significantly reduce churn and boost customer loyalty.<\/p>\n<h3><b>2. Optimize your pricing strategy<\/b><\/h3>\n<p>Pricing isn\u2019t one-size-fits-all, and adjusting it requires continuous testing. Conduct regular A\/B tests and market research to find the right price point for different customer segments.<\/p>\n<p>Offering <a href=\"https:\/\/www.hashmicro.com\/blog\/tiered-pricing\/\">tiered pricing<\/a> plans\u2014such as basic, standard, and premium\u2014can attract a wider range of customers while maximizing revenue<\/p>\n<h3><b>3. Make it easy for customers to scale<\/b><\/h3>\n<p>Allowing customers to seamlessly upgrade or increase their usage encourages them to spend more.<\/p>\n<p>Implement tiered pricing models where customers can easily access additional services or features by moving to higher plans or using consumption-based pricing to let them scale according to their needs.<\/p>\n<h3><b>4. Identify and target upsell opportunities<\/b><\/h3>\n<p>Sometimes, the biggest growth potential comes from existing customers. Analyze your customer base to identify accounts with the potential for higher spending. Look at usage patterns and compare them with the customer\u2019s overall spending power.<\/p>\n<p>For high-value clients, personalized offers or direct outreach may be more effective than automated upgrade flows. These tailored approaches can unlock significant revenue by upselling or expanding their use of your product.<\/p>\n<h3><b>5. Ensure accurate MRR calculations<\/b><\/h3>\n<p>Accurate MRR tracking is vital for making informed decisions. Avoid common mistakes like including one-time payments, trial accounts, or subtracting fees and delinquent charges from MRR.<\/p>\n<p>Keep your calculations focused only on recurring revenue to ensure you\u2019re measuring growth correctly. This will give you a clearer view of your financial performance and help guide your strategies for scaling revenue.<\/p>\n<h3><b>6. Utilize an accounting system for precise MRR tracking<\/b><\/h3>\n<p>While it\u2019s important to focus on growth strategies, having an accurate<a href=\"https:\/\/www.hashmicro.com\/blog\/accounting-system\/\"> accounting system<\/a> in place is equally critical for managing your MRR effectively.<\/p>\n<p>Automated <a href=\"https:\/\/www.hashmicro.com\/blog\/best-accounting-software\/\">best accounting software<\/a> helps track recurring revenue seamlessly, ensuring every transaction\u2014from subscriptions to upgrades\u2014is recorded with precision. Beyond simple bookkeeping, it provides instant clarity on your financial health and customer engagement.<\/p>\n<h2><b>Calculate and Track Your Monthly Recurring Revenue with Accounting Software<\/b><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-63274\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-1024x627.webp\" alt=\"\" width=\"696\" height=\"426\" srcset=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-1024x627.webp 1024w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-300x184.webp 300w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-768x470.webp 768w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-686x420.webp 686w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-150x92.webp 150w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-696x426.webp 696w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses-1068x654.webp 1068w, https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/HashMicro-Accounting-Software-for-Multiple-Businesses.webp 1470w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/p>\n<p>Keeping track of recurring revenue can feel like an uphill battle, especially when juggling multiple subscriptions, payments, and financial reports.\u00a0 All of these must have been frustrating <i>and<\/i> risky for your business.<\/p>\n<p>However, keeping track of your MRR and all of its components can be made easy with <a href=\"https:\/\/www.hashmicro.com\/accounting\">HashMicro Accounting Software<\/a>. It takes the stress out of managing MRR by automating the entire process, from reconciliation to payment scheduling and real-time financial tracking.<\/p>\n<p>With powerful, easy-to-use features, you\u2019ll gain full control over your revenue streams confidently. Moreover, HashMicro Accounting Software is also equipped with powerful AI and BI to provide accurate, real-time insight into your revenues.<\/p>\n<p>Here are some of the most useful features of this accounting software:<\/p>\n<ul>\n<li aria-level=\"1\"><b>Bank Integration &#8211; Auto Reconciliation<\/b>: Automatically syncs bank transactions with internal records to ensure every cent of your MRR is accounted for.<\/li>\n<li aria-level=\"1\"><b>Bank Integration &#8211; Auto Payment<\/b>: Never miss a payment again with automated processing for all scheduled transactions.<\/li>\n<li aria-level=\"1\"><b>Profit &amp; Loss vs Budget &amp; Forecast<\/b>: Stay on top of your financial goals by comparing actual results with forecasts in real-time.<\/li>\n<li aria-level=\"1\"><b>Cash Flow Reports<\/b>: Get a clear view of your cash flow to ensure consistent, healthy liquidity from your recurring revenue.<\/li>\n<li aria-level=\"1\"><b>Financial Statement with Budget Comparison<\/b>: Measure performance by comparing your current revenue against your planned targets.<\/li>\n<li aria-level=\"1\"><b>Forecast Budget<\/b>: Plan for future growth by predicting revenue trends and aligning your resources accordingly.<\/li>\n<\/ul>\n<h2><b>Conclusion<\/b><\/h2>\n<p>Monthly Recurring Revenue (MRR) is the predictable income a business generates from all active subscriptions. It allows businesses to monitor revenue trends, forecast future earnings, and make strategic financial decisions confidently. Accurate MRR tracking is vital for subscription-based companies seeking long-term growth and sustainability.<\/p>\n<p>With <a href=\"https:\/\/www.hashmicro.com\/accounting\"><b>HashMicro Accounting Software<\/b><\/a>, managing your MRR becomes a breeze. It automates everything from reconciliation to payment scheduling. Gain real-time insights into your revenue so you can focus on growing your business without worries!<\/p>\n<p>Not only does <b>HashMicro Accounting Software<\/b> give you control over your financial health, but it also grows with your business. With AI\u00a0 capabilities, it provides accurate forecasts, helping you plan for the future like a pro.<\/p>\n<p>Try the <a href=\"https:\/\/www.hashmicro.com\/free-product-tour\/\">free demo<\/a> today, and see how much easier managing your MRR can be; confirm power one!<br \/>\n<a href=\"https:\/\/www.hashmicro.com\/accounting?medium=moneysite-banner\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" width=\"712\" src=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/06\/Accounting.webp\" alt=\"Accounting\"><\/a><\/p>\n<h3><strong>FAQ About Monthly Recurring Revenue<\/strong><\/h3>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>What is MRR and ARR?<\/strong><\/summary>\n<p>Monthly Recurring Revenue (MRR) is likely the most vital metric for a SaaS business. Its counterpart, Annual Recurring Revenue (ARR)\u2014sometimes referred to as the Annualized Run Rate\u2014relates closely but carries key distinctions.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is KPI monthly recurring revenue?<\/strong><\/summary>\n<p>MRR is closely tied to other essential key performance indicators like Annual Recurring Revenue (ARR), Customer Lifetime Value (CLV), and Customer Acquisition Cost (CAC). A strong MRR generally reflects a high CLV, demonstrating that a company\u2019s marketing strategies effectively retain its customers.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is a good recurring revenue percentage?<\/strong><\/summary>\n<p>Industry experts consider a 10-20% Net MRR growth rate as healthy. By minimizing churn, boosting upsells, and offering cross-sells and add-ons, businesses can achieve their ideal MRR growth rate.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>What is the monthly recurring revenue benchmark?<\/strong><\/summary>\n<p>The most widely used MRR metric is the MRR Growth Rate, which tracks the yearly increase in MRR. As one of the top growth metrics for SaaS companies, it is influenced by two primary factors: the target customer market and the company\u2019s size.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Many SaaS companies face significant challenges when it comes to accurately calculating Monthly Recurring Revenue (MRR), a crucial metric for business growth. Surprisingly, common mistakes like including one-time payments or free trial users often distort the actual recurring revenue picture. This is especially true for startups, where miscalculations often stem from counting the full value [&hellip;]<\/p>\n","protected":false},"author":206,"featured_media":63271,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[153],"tags":[],"class_list":{"0":"post-63268","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-accounting"},"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.6 (Yoast SEO v26.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What is Monthly Recurring Revenue (MRR) and How to Calculate It<\/title>\n<meta name=\"description\" content=\"Monthly Recurring Revenue (MRR) is essential for tracking predictable income and managing financial health through accurate calculations.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is Monthly Recurring Revenue (MRR) and How to Calculate It\" \/>\n<meta property=\"og:description\" content=\"Monthly Recurring Revenue (MRR) is essential for tracking predictable income and managing financial health through accurate calculations.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/\" \/>\n<meta property=\"og:site_name\" content=\"BusinessTech\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/web.facebook.com\/hashmicro\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-22T04:19:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-23T04:50:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Nur Fi&#039;llia Nugrahani\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:site\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nur Fi&#039;llia Nugrahani\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/\"},\"author\":{\"name\":\"Nur Fi'llia Nugrahani\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/82334ae4c96d5887773cadf8bbe9e2fc\"},\"headline\":\"What is Monthly Recurring Revenue (MRR) and How to Calculate It\",\"datePublished\":\"2024-10-22T04:19:28+00:00\",\"dateModified\":\"2025-12-23T04:50:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/\"},\"wordCount\":3037,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp\",\"articleSection\":[\"Accounting\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/\",\"name\":\"What is Monthly Recurring Revenue (MRR) and How to Calculate It\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp\",\"datePublished\":\"2024-10-22T04:19:28+00:00\",\"dateModified\":\"2025-12-23T04:50:52+00:00\",\"description\":\"Monthly Recurring Revenue (MRR) is essential for tracking predictable income and managing financial health through accurate calculations.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp\",\"width\":1200,\"height\":675,\"caption\":\"monthly recurring revenue\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is Monthly Recurring Revenue (MRR) and How to Calculate It\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/\",\"name\":\"BusinessTech\",\"description\":\"Business Management Blog\",\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#organization\",\"name\":\"HashMicro\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png\",\"width\":334,\"height\":51,\"caption\":\"HashMicro\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/web.facebook.com\/hashmicro\/\",\"https:\/\/x.com\/hashmicro\",\"https:\/\/www.linkedin.com\/company\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/82334ae4c96d5887773cadf8bbe9e2fc\",\"name\":\"Nur Fi'llia Nugrahani\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/08\/cropped-foto-profil-nuri-96x96.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/08\/cropped-foto-profil-nuri-96x96.webp\",\"caption\":\"Nur Fi'llia Nugrahani\"},\"description\":\"A content writer specializing in crafting insightful and thought-provoking articles about technology. With a passion for making complex topics accessible, she delivers engaging and informative content for a wide audience.\",\"url\":\"https:\/\/www.hashmicro.com\/blog\/author\/fillia-nugrahanihashmicro-com-sg\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What is Monthly Recurring Revenue (MRR) and How to Calculate It","description":"Monthly Recurring Revenue (MRR) is essential for tracking predictable income and managing financial health through accurate calculations.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/","og_locale":"en_US","og_type":"article","og_title":"What is Monthly Recurring Revenue (MRR) and How to Calculate It","og_description":"Monthly Recurring Revenue (MRR) is essential for tracking predictable income and managing financial health through accurate calculations.","og_url":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/","og_site_name":"BusinessTech","article_publisher":"https:\/\/web.facebook.com\/hashmicro\/","article_published_time":"2024-10-22T04:19:28+00:00","article_modified_time":"2025-12-23T04:50:52+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp","type":"image\/webp"}],"author":"Nur Fi'llia Nugrahani","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Written by":"Nur Fi'llia Nugrahani","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/"},"author":{"name":"Nur Fi'llia Nugrahani","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/82334ae4c96d5887773cadf8bbe9e2fc"},"headline":"What is Monthly Recurring Revenue (MRR) and How to Calculate It","datePublished":"2024-10-22T04:19:28+00:00","dateModified":"2025-12-23T04:50:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/"},"wordCount":3037,"publisher":{"@id":"https:\/\/www.hashmicro.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp","articleSection":["Accounting"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/","url":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/","name":"What is Monthly Recurring Revenue (MRR) and How to Calculate It","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp","datePublished":"2024-10-22T04:19:28+00:00","dateModified":"2025-12-23T04:50:52+00:00","description":"Monthly Recurring Revenue (MRR) is essential for tracking predictable income and managing financial health through accurate calculations.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#primaryimage","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2024\/10\/monthly-recurring-revenue.webp","width":1200,"height":675,"caption":"monthly recurring revenue"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/blog\/monthly-recurring-revenue\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What is Monthly Recurring Revenue (MRR) and How to Calculate It"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/blog\/#website","url":"https:\/\/www.hashmicro.com\/blog\/","name":"BusinessTech","description":"Business Management Blog","publisher":{"@id":"https:\/\/www.hashmicro.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/blog\/#organization","name":"HashMicro","url":"https:\/\/www.hashmicro.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2016\/02\/bt_logo-1.png","width":334,"height":51,"caption":"HashMicro"},"image":{"@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/web.facebook.com\/hashmicro\/","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/82334ae4c96d5887773cadf8bbe9e2fc","name":"Nur Fi'llia Nugrahani","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hashmicro.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/08\/cropped-foto-profil-nuri-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/blog\/wp-content\/uploads\/2025\/08\/cropped-foto-profil-nuri-96x96.webp","caption":"Nur Fi'llia Nugrahani"},"description":"A content writer specializing in crafting insightful and thought-provoking articles about technology. With a passion for making complex topics accessible, she delivers engaging and informative content for a wide audience.","url":"https:\/\/www.hashmicro.com\/blog\/author\/fillia-nugrahanihashmicro-com-sg\/"}]}},"order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/63268","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/users\/206"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/comments?post=63268"}],"version-history":[{"count":5,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/63268\/revisions"}],"predecessor-version":[{"id":77442,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/posts\/63268\/revisions\/77442"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/media\/63271"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/media?parent=63268"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/categories?post=63268"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/blog\/wp-json\/wp\/v2\/tags?post=63268"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}