{"product_id":"internal-rate-of-return","title":"Internal Rate of Return (IRR) Calculator","description":"\u003cstyle\u003e\n.irr-calculator {\n  --ink: #0f172a;\n  --muted: #475569;\n  --border: #e2e8f0;\n  --surface: #ffffff;\n  --tint: #f8fafc;\n  --primary: #1d4ed8;\n  --accent: #c2410c;\n  --accent-hover: #9a3412;\n  --chart-1: #1e40af;\n  --chart-2: #0d9488;\n  --chart-3: #7c3aed;\n  --chart-4: #be185d;\n  --chart-5: #334155;\n  width: 100%;\n  max-width: 1200px;\n  margin: 0 auto;\n  color: var(--ink);\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  font-size: 15px;\n  line-height: 1.55;\n  overflow-wrap: anywhere;\n  container-type: inline-size;\n  container-name: irr;\n}\n.irr-calculator,\n.irr-calculator *,\n.irr-calculator *::before,\n.irr-calculator *::after {\n  box-sizing: border-box;\n}\n.irr-calculator * {\n  min-width: 0;\n}\n.irr-calculator h2,\n.irr-calculator h3,\n.irr-calculator p,\n.irr-calculator ul {\n  margin-top: 0;\n}\n.irr-calculator h2 {\n  margin-bottom: 8px;\n  font-size: 24px;\n  line-height: 1.25;\n  font-weight: 700;\n  letter-spacing: -.015em;\n}\n.irr-calculator h3 {\n  margin-bottom: 8px;\n  font-size: 18px;\n  line-height: 1.35;\n  font-weight: 650;\n}\n.irr-calculator a {\n  color: var(--primary);\n  text-decoration-thickness: 1px;\n  text-underline-offset: 2px;\n}\n.irr-calculator a:hover {\n  text-decoration-thickness: 2px;\n}\n.irr-header {\n  padding: 24px 24px 16px;\n  border-bottom: 1px solid var(--border);\n}\n.irr-header-copy {\n  max-width: 760px;\n  margin-bottom: 16px;\n  color: var(--muted);\n}\n.irr-pills {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n.irr-pill {\n  display: inline-flex;\n  align-items: baseline;\n  gap: 6px;\n  padding: 6px 10px;\n  border: 1px solid var(--border);\n  border-radius: 999px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.3;\n}\n.irr-pill strong {\n  color: var(--ink);\n  font-variant-numeric: tabular-nums;\n}\n.irr-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 8px;\n  padding: 16px 24px;\n  border-bottom: 1px solid var(--border);\n  background: var(--tint);\n}\n.irr-button {\n  min-height: 44px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  padding: 10px 16px;\n  background: var(--surface);\n  color: var(--ink);\n  font: inherit;\n  font-size: 15px;\n  font-weight: 650;\n  line-height: 1.2;\n  cursor: pointer;\n  transition: border-color .15s ease, box-shadow .15s ease, background-color .15s ease, transform .15s ease;\n}\n.irr-button:hover {\n  border-color: #cbd5e1;\n  box-shadow: 0 2px 5px rgba(15, 23, 42, .10);\n}\n.irr-button:active {\n  transform: translateY(1px);\n}\n.irr-button:focus-visible,\n.irr-input:focus-visible,\n.irr-select:focus-visible,\n.irr-icon-button:focus-visible,\n.irr-details summary:focus-visible {\n  outline: 3px solid rgba(29, 78, 216, .32);\n  outline-offset: 2px;\n}\n.irr-download {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  padding: 12px 18px;\n  border-color: var(--accent);\n  background: var(--accent);\n  color: #ffffff;\n  white-space: nowrap;\n}\n.irr-download:hover {\n  border-color: var(--accent-hover);\n  background: var(--accent-hover);\n  color: #ffffff;\n}\n.irr-download svg {\n  width: 18px;\n  height: 18px;\n  flex: 0 0 auto;\n  stroke: currentColor;\n}\n.irr-workspace {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n  gap: 24px;\n  padding: 24px;\n  align-items: start;\n}\n.irr-panel {\n  min-width: 0;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .04);\n}\n.irr-panel-header {\n  padding: 16px;\n  border-bottom: 1px solid var(--border);\n}\n.irr-panel-header h3 {\n  margin-bottom: 4px;\n}\n.irr-panel-header p {\n  margin-bottom: 0;\n  color: var(--muted);\n  font-size: 13px;\n}\n.irr-panel-body {\n  padding: 16px;\n}\n.irr-field-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 16px;\n  margin-bottom: 20px;\n}\n.irr-field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n}\n.irr-label {\n  display: block;\n  color: var(--ink);\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 1.35;\n}\n.irr-input,\n.irr-select {\n  width: 100%;\n  min-height: 44px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  padding: 10px 12px;\n  background: #ffffff;\n  color: var(--ink);\n  font: inherit;\n  font-size: 15px;\n  line-height: 1.3;\n  font-variant-numeric: tabular-nums;\n}\n.irr-input[aria-invalid=\"true\"] {\n  border-color: #b91c1c;\n  box-shadow: 0 0 0 1px #b91c1c;\n}\n.irr-helper {\n  min-height: 36px;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.4;\n}\n.irr-error {\n  display: none;\n  color: #991b1b;\n  font-size: 13px;\n  font-weight: 600;\n  line-height: 1.35;\n}\n.irr-error.irr-visible {\n  display: block;\n}\n.irr-flow-heading {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n.irr-flow-heading h3 {\n  margin-bottom: 2px;\n}\n.irr-flow-heading p {\n  margin-bottom: 0;\n  color: var(--muted);\n  font-size: 13px;\n}\n.irr-add-year {\n  min-height: 40px;\n  padding: 8px 12px;\n}\n.irr-flow-list {\n  display: grid;\n  gap: 8px;\n}\n.irr-flow-row {\n  display: grid;\n  grid-template-columns: 72px minmax(0, 1fr) 40px;\n  gap: 8px;\n  align-items: center;\n}\n.irr-flow-control {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n.irr-flow-year {\n  color: var(--muted);\n  font-size: 14px;\n  font-weight: 600;\n}\n.irr-icon-button {\n  width: 40px;\n  height: 40px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--surface);\n  color: var(--muted);\n  cursor: pointer;\n}\n.irr-icon-button:hover {\n  border-color: #fecaca;\n  background: #fff7f7;\n  color: #991b1b;\n}\n.irr-icon-button svg {\n  width: 18px;\n  height: 18px;\n  stroke: currentColor;\n}\n.irr-flow-note {\n  margin: 12px 0 0;\n  padding: 10px 12px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n}\n.irr-primary-result {\n  padding: 20px;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  background: #eff6ff;\n  margin-bottom: 16px;\n}\n.irr-primary-label {\n  display: block;\n  margin-bottom: 4px;\n  color: #1e3a8a;\n  font-size: 13px;\n  font-weight: 650;\n}\n.irr-primary-value {\n  display: block;\n  color: #172554;\n  font-size: 30px;\n  line-height: 1.15;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n}\n.irr-primary-sub {\n  margin: 8px 0 0;\n  color: #334155;\n  font-size: 13px;\n  font-weight: 500;\n}\n.irr-result-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 12px;\n}\n.irr-result-card {\n  padding: 14px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--tint);\n}\n.irr-result-card span {\n  display: block;\n}\n.irr-result-label {\n  margin-bottom: 4px;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 600;\n}\n.irr-result-value {\n  color: var(--ink);\n  font-size: 20px;\n  line-height: 1.25;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n}\n.irr-result-help {\n  margin-top: 4px;\n  color: var(--muted);\n  font-size: 13px;\n  line-height: 1.35;\n}\n.irr-alert {\n  display: none;\n  margin-top: 16px;\n  padding: 10px 12px;\n  border: 1px solid #fde68a;\n  border-radius: 6px;\n  background: #fffbeb;\n  color: #78350f;\n  font-size: 13px;\n  font-weight: 550;\n}\n.irr-alert.irr-visible {\n  display: block;\n}\n.irr-section {\n  margin: 0 24px 24px;\n  padding: 20px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n}\n.irr-section-heading {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 12px;\n  margin-bottom: 16px;\n}\n.irr-section-heading h3 {\n  margin-bottom: 4px;\n}\n.irr-section-heading p {\n  max-width: 760px;\n  margin-bottom: 0;\n  color: var(--muted);\n  font-size: 13px;\n}\n.irr-chart-card {\n  min-width: 0;\n}\n.irr-chart-cluster {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) minmax(190px, 230px);\n  gap: 24px;\n  align-items: center;\n  width: 100%;\n  max-width: 980px;\n  margin: 0 auto;\n}\n.irr-chart-plot {\n  width: 100%;\n  min-height: 300px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.irr-chart-svg {\n  display: block;\n  width: 100%;\n  height: auto;\n  max-height: 360px;\n  overflow: visible;\n}\n.irr-chart-empty {\n  display: none;\n  width: 100%;\n  padding: 16px;\n  border: 1px dashed #cbd5e1;\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  text-align: center;\n  font-size: 13px;\n  font-weight: 600;\n}\n.irr-chart-empty.irr-visible {\n  display: block;\n}\n.irr-chart-legend {\n  display: grid;\n  gap: 10px;\n  align-content: center;\n  align-self: end;\n}\n.irr-legend-row {\n  display: grid;\n  grid-template-columns: 12px auto auto;\n  align-items: baseline;\n  justify-content: start;\n  gap: 8px 12px;\n  color: var(--ink);\n  font-size: 13px;\n  font-weight: 600;\n}\n.irr-legend-swatch {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n  align-self: center;\n}\n.irr-legend-value {\n  color: var(--muted);\n  font-variant-numeric: tabular-nums;\n}\n.irr-chart-caption {\n  margin-top: 16px;\n  padding: 10px 12px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.irr-safe-stack .irr-chart-cluster {\n  grid-template-columns: minmax(0, 1fr);\n  row-gap: 20px;\n  max-width: 820px;\n}\n.irr-safe-stack .irr-chart-legend {\n  margin-top: 0;\n  justify-content: center;\n  align-self: auto;\n}\n.irr-data-details {\n  margin-top: 16px;\n  border-top: 1px solid var(--border);\n  padding-top: 16px;\n}\n.irr-details summary {\n  cursor: pointer;\n  color: var(--primary);\n  font-size: 14px;\n  font-weight: 650;\n}\n.irr-table-wrap {\n  width: 100%;\n  overflow-x: auto;\n  overflow-y: visible;\n  -webkit-overflow-scrolling: touch;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n}\n.irr-table {\n  width: 100%;\n  min-width: 720px;\n  border-collapse: collapse;\n  background: var(--surface);\n  font-size: 13px;\n  font-variant-numeric: tabular-nums;\n}\n.irr-table th,\n.irr-table td {\n  padding: 10px 12px;\n  border-bottom: 1px solid var(--border);\n  text-align: right;\n  white-space: nowrap;\n}\n.irr-table th:first-child,\n.irr-table td:first-child {\n  text-align: left;\n}\n.irr-table th {\n  background: #172554;\n  color: #ffffff;\n  font-weight: 650;\n}\n.irr-table tbody tr:hover {\n  background: var(--tint);\n}\n.irr-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.irr-table .irr-total-row td {\n  background: #eff6ff;\n  color: #172554;\n  font-weight: 700;\n}\n.irr-chart-data-table {\n  min-width: 560px;\n}\n.irr-table-note {\n  margin-top: 16px;\n  padding: 10px 12px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.irr-safe-table-stack .irr-table-note {\n  margin-top: 20px;\n}\n.irr-education {\n  padding: 8px 24px 24px;\n}\n.irr-education-inner {\n  max-width: 900px;\n}\n.irr-education section {\n  padding: 20px 0;\n  border-top: 1px solid var(--border);\n}\n.irr-education section:first-child {\n  border-top: 0;\n  padding-top: 8px;\n}\n.irr-education p,\n.irr-education li {\n  color: #334155;\n}\n.irr-education ul {\n  padding-left: 20px;\n  margin-bottom: 0;\n}\n.irr-education li + li {\n  margin-top: 8px;\n}\n.irr-formula {\n  padding: 12px 14px;\n  border-left: 4px solid var(--primary);\n  border-radius: 0 6px 6px 0;\n  background: var(--tint);\n  color: var(--ink);\n  font-weight: 650;\n  font-variant-numeric: tabular-nums;\n}\n.irr-visually-hidden {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n@media (max-width: 899px) {\n  .irr-workspace {\n    grid-template-columns: minmax(0, 1fr);\n  }\n}\n@media (max-width: 759px) {\n  .irr-chart-cluster {\n    grid-template-columns: minmax(0, 1fr);\n    row-gap: 20px;\n    max-width: 720px;\n  }\n  .irr-chart-plot {\n    min-height: 280px;\n  }\n  .irr-chart-legend {\n    justify-content: center;\n    align-self: auto;\n  }\n}\n@media (max-width: 639px) {\n  .irr-header,\n  .irr-toolbar,\n  .irr-workspace {\n    padding-left: 16px;\n    padding-right: 16px;\n  }\n  .irr-workspace {\n    gap: 16px;\n  }\n  .irr-section {\n    margin-left: 16px;\n    margin-right: 16px;\n    padding: 16px;\n  }\n  .irr-education {\n    padding-left: 16px;\n    padding-right: 16px;\n  }\n  .irr-field-grid,\n  .irr-result-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .irr-helper {\n    min-height: 0;\n  }\n  .irr-flow-row {\n    grid-template-columns: 58px minmax(0, 1fr) 40px;\n  }\n  .irr-chart-plot {\n    min-height: 250px;\n  }\n  .irr-legend-row {\n    grid-template-columns: 12px auto;\n  }\n  .irr-legend-value {\n    grid-column: 2;\n  }\n}\n@media (max-width: 359px) {\n  .irr-header,\n  .irr-toolbar,\n  .irr-workspace,\n  .irr-education {\n    padding-left: 12px;\n    padding-right: 12px;\n  }\n  .irr-section {\n    margin-left: 12px;\n    margin-right: 12px;\n    padding: 12px;\n  }\n  .irr-toolbar .irr-button {\n    width: 100%;\n    justify-content: center;\n  }\n  .irr-flow-heading {\n    align-items: stretch;\n  }\n  .irr-add-year {\n    width: 100%;\n  }\n  .irr-flow-row {\n    grid-template-columns: 52px minmax(0, 1fr) 40px;\n  }\n  .irr-chart-plot {\n    min-height: 230px;\n  }\n}\n\n@container irr (max-width: 899px) {\n  .irr-workspace {\n    grid-template-columns: minmax(0, 1fr);\n  }\n}\n@container irr (max-width: 759px) {\n  .irr-chart-cluster {\n    grid-template-columns: minmax(0, 1fr);\n    row-gap: 20px;\n    max-width: 720px;\n  }\n  .irr-chart-plot {\n    min-height: 280px;\n  }\n  .irr-chart-legend {\n    justify-content: center;\n    align-self: auto;\n  }\n}\n@container irr (max-width: 639px) {\n  .irr-header,\n  .irr-toolbar,\n  .irr-workspace {\n    padding-left: 16px;\n    padding-right: 16px;\n  }\n  .irr-workspace {\n    gap: 16px;\n  }\n  .irr-section {\n    margin-left: 16px;\n    margin-right: 16px;\n    padding: 16px;\n  }\n  .irr-education {\n    padding-left: 16px;\n    padding-right: 16px;\n  }\n  .irr-field-grid,\n  .irr-result-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .irr-helper {\n    min-height: 0;\n  }\n  .irr-flow-row {\n    grid-template-columns: 58px minmax(0, 1fr) 40px;\n  }\n  .irr-chart-plot {\n    min-height: 250px;\n  }\n  .irr-legend-row {\n    grid-template-columns: 12px auto;\n  }\n  .irr-legend-value {\n    grid-column: 2;\n  }\n}\n@container irr (max-width: 359px) {\n  .irr-header,\n  .irr-toolbar,\n  .irr-workspace,\n  .irr-education {\n    padding-left: 12px;\n    padding-right: 12px;\n  }\n  .irr-section {\n    margin-left: 12px;\n    margin-right: 12px;\n    padding: 12px;\n  }\n  .irr-toolbar .irr-button {\n    width: 100%;\n    justify-content: center;\n  }\n  .irr-flow-heading {\n    align-items: stretch;\n  }\n  .irr-add-year {\n    width: 100%;\n  }\n  .irr-flow-row {\n    grid-template-columns: 52px minmax(0, 1fr) 40px;\n  }\n  .irr-chart-plot {\n    min-height: 230px;\n  }\n}\n@media (prefers-reduced-motion: reduce) {\n  .irr-calculator * {\n    scroll-behavior: auto !important;\n    transition: none !important;\n  }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"irr-calculator\" data-calculator-root\u003e\n  \u003cheader class=\"irr-header\"\u003e\n    \u003ch2\u003eInternal Rate of Return Calculator\u003c\/h2\u003e\n    \u003cp class=\"irr-header-copy\"\u003eEstimate the periodic return that makes your project’s net present value equal to zero, then compare it with a hurdle rate and review the full cash-flow profile.\u003c\/p\u003e\n    \u003cdiv class=\"irr-pills\" aria-label=\"Live summary\"\u003e\n      \u003cspan class=\"irr-pill\"\u003eIRR \u003cstrong data-irr-pill=\"irr\"\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"irr-pill\"\u003eNPV \u003cstrong data-irr-pill=\"npv\"\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"irr-pill\"\u003ePeriods \u003cstrong data-irr-pill=\"periods\"\u003e0\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"irr-pill\"\u003eDecision spread \u003cstrong data-irr-pill=\"spread\"\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/header\u003e\n\n  \u003cdiv class=\"irr-toolbar\" aria-label=\"Calculator actions\"\u003e\n    \u003cbutton class=\"irr-button irr-download\" type=\"button\" data-irr-action=\"download\"\u003e\n      \u003csvg viewbox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3v11m0 0 4-4m-4 4-4-4M5 17v3h14v-3\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n      \u003cspan\u003eDownload Excel\u003c\/span\u003e\n    \u003c\/button\u003e\n    \u003cbutton class=\"irr-button\" type=\"button\" data-irr-action=\"reset\"\u003eReset\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"irr-workspace\"\u003e\n    \u003csection class=\"irr-panel\" aria-labelledby=\"irr-inputs-heading\"\u003e\n      \u003cdiv class=\"irr-panel-header\"\u003e\n        \u003ch3 id=\"irr-inputs-heading\"\u003eCash-flow assumptions\u003c\/h3\u003e\n        \u003cp\u003eEnter the initial outlay as a positive amount. Future receipts are positive; future costs are negative.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"irr-panel-body\"\u003e\n        \u003cdiv class=\"irr-field-grid\"\u003e\n          \u003cdiv class=\"irr-field\"\u003e\n            \u003clabel class=\"irr-label\" for=\"irr-initial-investment\"\u003eInitial investment\u003c\/label\u003e\n            \u003cinput class=\"irr-input\" id=\"irr-initial-investment\" data-irr-input=\"initial\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"$12,000.00\"\u003e\n            \u003cspan class=\"irr-helper\"\u003ePaid at time zero. Must be greater than zero.\u003c\/span\u003e\n            \u003cspan class=\"irr-error\" data-irr-error=\"initial\"\u003e\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"irr-field\"\u003e\n            \u003clabel class=\"irr-label\" for=\"irr-hurdle-rate\"\u003eHurdle rate\u003c\/label\u003e\n            \u003cinput class=\"irr-input\" id=\"irr-hurdle-rate\" data-irr-input=\"hurdle\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"10.00%\"\u003e\n            \u003cspan class=\"irr-helper\"\u003eUsed for NPV and discounted payback comparison.\u003c\/span\u003e\n            \u003cspan class=\"irr-error\" data-irr-error=\"hurdle\"\u003e\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"irr-flow-heading\"\u003e\n          \u003cdiv\u003e\n            \u003ch3\u003ePeriodic cash flows\u003c\/h3\u003e\n            \u003cp\u003eRegular annual periods, up to 30 years.\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cbutton class=\"irr-button irr-add-year\" type=\"button\" data-irr-action=\"add-year\"\u003eAdd year\u003c\/button\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"irr-flow-list\" data-irr-flow-list\u003e\u003c\/div\u003e\n        \u003cp class=\"irr-flow-note\"\u003eA blank year is treated as zero. Trailing blank years are excluded from the project length.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003csection class=\"irr-panel\" aria-labelledby=\"irr-results-heading\"\u003e\n      \u003cdiv class=\"irr-panel-header\"\u003e\n        \u003ch3 id=\"irr-results-heading\"\u003eLive results\u003c\/h3\u003e\n        \u003cp\u003eAll outputs update as assumptions change.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"irr-panel-body\"\u003e\n        \u003cdiv class=\"irr-primary-result\" aria-live=\"polite\" aria-atomic=\"true\"\u003e\n          \u003cspan class=\"irr-primary-label\"\u003eInternal rate of return\u003c\/span\u003e\n          \u003cstrong class=\"irr-primary-value\" data-irr-output=\"irr\"\u003e—\u003c\/strong\u003e\n          \u003cp class=\"irr-primary-sub\" data-irr-output=\"interpretation\"\u003eEnter an initial investment and at least one non-zero future cash flow.\u003c\/p\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"irr-result-grid\"\u003e\n          \u003cdiv class=\"irr-result-card\"\u003e\n            \u003cspan class=\"irr-result-label\"\u003eNPV at hurdle rate\u003c\/span\u003e\n            \u003cstrong class=\"irr-result-value\" data-irr-output=\"npv\"\u003e—\u003c\/strong\u003e\n            \u003cspan class=\"irr-result-help\"\u003eDollar value created or lost at the selected discount rate.\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"irr-result-card\"\u003e\n            \u003cspan class=\"irr-result-label\"\u003eIRR minus hurdle\u003c\/span\u003e\n            \u003cstrong class=\"irr-result-value\" data-irr-output=\"spread\"\u003e—\u003c\/strong\u003e\n            \u003cspan class=\"irr-result-help\"\u003ePositive means the modeled return exceeds the benchmark.\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"irr-result-card\"\u003e\n            \u003cspan class=\"irr-result-label\"\u003eNet cash surplus\u003c\/span\u003e\n            \u003cstrong class=\"irr-result-value\" data-irr-output=\"net-cash\"\u003e—\u003c\/strong\u003e\n            \u003cspan class=\"irr-result-help\"\u003eUndiscounted future cash flows less the initial outlay.\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"irr-result-card\"\u003e\n            \u003cspan class=\"irr-result-label\"\u003eGross inflow multiple\u003c\/span\u003e\n            \u003cstrong class=\"irr-result-value\" data-irr-output=\"multiple\"\u003e—\u003c\/strong\u003e\n            \u003cspan class=\"irr-result-help\"\u003ePositive future inflows divided by the initial investment.\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"irr-result-card\"\u003e\n            \u003cspan class=\"irr-result-label\"\u003eSimple payback\u003c\/span\u003e\n            \u003cstrong class=\"irr-result-value\" data-irr-output=\"payback\"\u003e—\u003c\/strong\u003e\n            \u003cspan class=\"irr-result-help\"\u003eApproximate time to recover the initial outlay without discounting.\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"irr-result-card\"\u003e\n            \u003cspan class=\"irr-result-label\"\u003eDiscounted payback\u003c\/span\u003e\n            \u003cstrong class=\"irr-result-value\" data-irr-output=\"discounted-payback\"\u003e—\u003c\/strong\u003e\n            \u003cspan class=\"irr-result-help\"\u003eApproximate recovery time after applying the hurdle rate.\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"irr-alert\" data-irr-alert\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"irr-section irr-chart-card\" data-irr-chart-card aria-labelledby=\"irr-chart-heading\"\u003e\n    \u003cdiv class=\"irr-section-heading\"\u003e\n      \u003cdiv\u003e\n        \u003ch3 id=\"irr-chart-heading\"\u003eNPV profile\u003c\/h3\u003e\n        \u003cp\u003eSee how the project’s net present value changes as the discount rate changes. The IRR is the zero-crossing point.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"irr-chart-cluster\"\u003e\n      \u003cdiv class=\"irr-chart-plot\" data-irr-chart-plot\u003e\n        \u003csvg class=\"irr-chart-svg\" data-irr-chart-svg role=\"img\" aria-labelledby=\"irr-chart-title irr-chart-desc\"\u003e\u003c\/svg\u003e\n        \u003cdiv class=\"irr-chart-empty\" data-irr-chart-empty\u003eEnter valid cash flows to see the NPV profile.\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"irr-chart-legend\" data-irr-chart-legend aria-label=\"Chart legend\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"irr-chart-caption\" data-irr-chart-caption\u003eEnter valid assumptions to generate an interpretation.\u003c\/div\u003e\n    \u003cdetails class=\"irr-details irr-data-details\"\u003e\n      \u003csummary\u003eView chart data\u003c\/summary\u003e\n      \u003cdiv class=\"irr-table-wrap\" data-irr-chart-table-wrap\u003e\n        \u003ctable class=\"irr-table irr-chart-data-table\"\u003e\n          \u003cthead\u003e\n            \u003ctr\u003e\n\u003cth scope=\"col\"\u003eDiscount rate\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eNet present value\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eRelative to zero\u003c\/th\u003e\n\u003c\/tr\u003e\n          \u003c\/thead\u003e\n          \u003ctbody data-irr-chart-table-body\u003e\u003c\/tbody\u003e\n        \u003c\/table\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"irr-table-note\" data-irr-chart-table-note\u003eChart rows and the plotted line use the same model values.\u003c\/div\u003e\n    \u003c\/details\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"irr-section\" data-irr-table-card aria-labelledby=\"irr-schedule-heading\"\u003e\n    \u003cdiv class=\"irr-section-heading\"\u003e\n      \u003cdiv\u003e\n        \u003ch3 id=\"irr-schedule-heading\"\u003eCash-flow schedule\u003c\/h3\u003e\n        \u003cp\u003eReview each period’s nominal and discounted contribution, plus cumulative recovery.\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"irr-table-wrap\" data-irr-schedule-wrap\u003e\n      \u003ctable class=\"irr-table\"\u003e\n        \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth scope=\"col\"\u003ePeriod\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eCash flow\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eDiscount factor\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003ePresent value\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eCumulative cash\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eCumulative discounted\u003c\/th\u003e\n          \u003c\/tr\u003e\n        \u003c\/thead\u003e\n        \u003ctbody data-irr-schedule-body\u003e\u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"irr-table-note\" data-irr-schedule-note\u003eThe time-zero row records the initial investment as an outflow. Future values are discounted at the selected hurdle rate.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv class=\"irr-education\"\u003e\n    \u003cdiv class=\"irr-education-inner\"\u003e\n      \u003csection\u003e\n        \u003ch2\u003eWhat does this IRR calculator estimate?\u003c\/h2\u003e\n        \u003cp\u003eInternal rate of return is the periodic discount rate that makes the net present value of a cash-flow series equal to zero. In practical terms, it converts a sequence of differently timed payments and receipts into one comparable percentage. This calculator treats the initial investment as a time-zero outflow and each later entry as an end-of-year cash flow. It then solves for the rate that balances the present value of future cash flows with the initial outlay.\u003c\/p\u003e\n        \u003cp\u003eIRR is most useful when cash flows occur at regular intervals and when you want a rate-based comparison across projects. It should not be read as a guaranteed return. Forecast uncertainty, project scale, financing structure, reinvestment assumptions, and the possibility of multiple mathematical solutions can all affect interpretation.\u003c\/p\u003e\n      \u003c\/section\u003e\n\n      \u003csection\u003e\n        \u003ch2\u003eHow should each input be used?\u003c\/h2\u003e\n        \u003ch3\u003eInitial investment\u003c\/h3\u003e\n        \u003cp\u003eEnter the amount paid at the start as a positive dollar value. The model converts it to a negative time-zero cash flow internally. A higher initial investment generally lowers IRR and NPV when future cash flows stay unchanged. Do not enter the amount with a minus sign; doing so would reverse the intended direction. The field is required and must be greater than zero.\u003c\/p\u003e\n        \u003ch3\u003ePeriodic cash flows\u003c\/h3\u003e\n        \u003cp\u003eEnter expected receipts as positive numbers and later expenses, maintenance, or losses as negative numbers. The order matters because earlier cash flows have more present value than later cash flows. Blank years are treated as zero, while trailing blank years are removed from the measured project length. Use “Add year” for up to 30 periods, and remove rows that are no longer needed. Large sign changes can create more than one valid IRR; when that happens, the calculator flags the issue and NPV should receive more weight.\u003c\/p\u003e\n        \u003ch3\u003eHurdle rate\u003c\/h3\u003e\n        \u003cp\u003eThe hurdle rate is the benchmark used to calculate NPV and discounted payback. It may represent a required return, cost of capital, or another risk-adjusted threshold. Raising the hurdle rate reduces the present value of future receipts and usually lowers NPV. The hurdle rate does not change IRR because IRR is determined only by the cash-flow sequence. For more detail on project discount rates, see this \u003ca href=\"https:\/\/pages.stern.nyu.edu\/~adamodar\/pdfiles\/acf2E\/presentations\/hurdlerate.pdf\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eNYU Stern overview of hurdle rates\u003c\/a\u003e.\u003c\/p\u003e\n      \u003c\/section\u003e\n\n      \u003csection\u003e\n        \u003ch2\u003eHow are IRR and NPV calculated?\u003c\/h2\u003e\n        \u003cp\u003eThe model searches for the rate that solves the discounted cash-flow equation below. Because there is no universal closed-form solution for a multi-period series, the calculator evaluates the NPV function across a broad rate range and refines any zero crossing numerically.\u003c\/p\u003e\n        \u003cp class=\"irr-formula\"\u003e0 = −Initial investment + CF₁ ÷ (1 + IRR)¹ + CF₂ ÷ (1 + IRR)² + … + CFₙ ÷ (1 + IRR)ⁿ\u003c\/p\u003e\n        \u003cp\u003eNPV uses the same structure but substitutes your hurdle rate for IRR. A positive NPV means the modeled project creates value above that benchmark; a negative NPV means it falls short on a discounted-dollar basis. Microsoft’s documentation explains the regular-period assumptions behind the \u003ca href=\"https:\/\/support.microsoft.com\/en-us\/excel\/functions\/irr-function\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eExcel IRR function\u003c\/a\u003e and the corresponding \u003ca href=\"https:\/\/support.microsoft.com\/en-us\/excel\/functions\/npv-function\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eExcel NPV function\u003c\/a\u003e.\u003c\/p\u003e\n      \u003c\/section\u003e\n\n      \u003csection\u003e\n        \u003ch2\u003eHow should the results be interpreted?\u003c\/h2\u003e\n        \u003ch3\u003eInternal rate of return and decision spread\u003c\/h3\u003e\n        \u003cp\u003eThe primary result is the periodic IRR. The decision spread subtracts the hurdle rate from IRR. A positive spread indicates that the solved return is above the benchmark; a negative spread indicates that it is below. A zero or near-zero spread means the project is roughly at the threshold. Compare projects with caution when their sizes, durations, or risk profiles differ.\u003c\/p\u003e\n        \u003ch3\u003eNPV, net cash surplus, and inflow multiple\u003c\/h3\u003e\n        \u003cp\u003eNPV measures discounted dollar value at the hurdle rate. Net cash surplus ignores timing and simply subtracts the initial investment from all future cash flows. The gross inflow multiple divides only positive future inflows by the initial investment, so it is a scale indicator rather than a complete profitability measure. Negative future costs are still reflected in IRR, NPV, and net cash surplus.\u003c\/p\u003e\n        \u003ch3\u003eSimple and discounted payback\u003c\/h3\u003e\n        \u003cp\u003eSimple payback estimates when cumulative nominal cash flow recovers the initial outlay. Discounted payback repeats the test after applying the hurdle rate. If recovery occurs partway through a year, the calculator uses a proportional fraction of that year. “Not reached” means the modeled horizon never recovers the outlay under the relevant method.\u003c\/p\u003e\n      \u003c\/section\u003e\n\n      \u003csection\u003e\n        \u003ch2\u003eWhat do the chart and schedule show?\u003c\/h2\u003e\n        \u003cp\u003eThe NPV profile plots discount rates on the horizontal axis and project NPV on the vertical axis. The blue line is the project’s NPV profile, the teal line is the zero-NPV benchmark, and the purple marker identifies the selected IRR when a valid solution exists. The crossing matters because rates below it generally produce positive NPV, while rates above it generally produce negative NPV for conventional cash flows.\u003c\/p\u003e\n        \u003cp\u003eThe schedule shows the exact cash flow, discount factor, present value, cumulative nominal cash, and cumulative discounted cash for every period. Use it to locate which years drive value, verify that signs are correct, and understand why payback may differ from discounted payback. The downloadable workbook captures the current inputs, results, schedule, NPV profile, and model notes at the moment you click the button.\u003c\/p\u003e\n      \u003c\/section\u003e\n\n      \u003csection\u003e\n        \u003ch2\u003eWhat are the main limitations and common mistakes?\u003c\/h2\u003e\n        \u003cul\u003e\n          \u003cli\u003eIRR assumes equally spaced periods. For irregular dates, use a date-based method such as \u003ca href=\"https:\/\/support.microsoft.com\/en-us\/excel\/functions\/xirr-function\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eXIRR\u003c\/a\u003e.\u003c\/li\u003e\n          \u003cli\u003eUnconventional cash flows can produce multiple IRRs or no usable IRR. In that case, inspect NPV at a defensible hurdle rate rather than relying on one percentage.\u003c\/li\u003e\n          \u003cli\u003eA higher IRR does not automatically mean a larger dollar benefit. A small project can have a high IRR while creating less total value than a larger project with a lower IRR.\u003c\/li\u003e\n          \u003cli\u003eForecasts should include realistic taxes, working capital, maintenance, terminal proceeds, and shutdown costs when they are material.\u003c\/li\u003e\n          \u003cli\u003eDo not mix monthly and annual cash flows in one series. Keep every period consistent with the rate interpretation.\u003c\/li\u003e\n        \u003c\/ul\u003e\n      \u003c\/section\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909485437171,"sku":"internal-rate-of-return","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/internal-rate-of-return.webp?v=1783935471","url":"https:\/\/financialmodelslab.com\/products\/internal-rate-of-return","provider":"Financial Models Lab","version":"1.0","type":"link"}