{"product_id":"online-marketing-roi","title":"Conversion Rate Calculator","description":"\u003cstyle\u003e\n.omr-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(--tint);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  padding: 24px;\n  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  line-height: 1.55;\n  container-name: omr;\n  container-type: inline-size;\n}\n.omr-calculator,\n.omr-calculator *,\n.omr-calculator *::before,\n.omr-calculator *::after {\n  box-sizing: border-box;\n}\n.omr-calculator * {\n  min-width: 0;\n}\n.omr-calculator h2,\n.omr-calculator h3,\n.omr-calculator p {\n  margin-top: 0;\n}\n.omr-calculator h2 {\n  margin-bottom: 8px;\n  font-size: 24px;\n  line-height: 1.25;\n  font-weight: 700;\n  letter-spacing: -0.02em;\n}\n.omr-calculator h3 {\n  margin-bottom: 12px;\n  font-size: 18px;\n  line-height: 1.35;\n  font-weight: 650;\n}\n.omr-calculator a {\n  color: #1649b8;\n  text-decoration-thickness: 1px;\n  text-underline-offset: 2px;\n}\n.omr-calculator a:hover {\n  color: #123b92;\n}\n.omr-header {\n  margin-bottom: 16px;\n}\n.omr-header-copy {\n  max-width: 760px;\n  margin-bottom: 16px;\n  color: var(--muted);\n}\n.omr-pills {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n.omr-pill {\n  display: inline-flex;\n  align-items: baseline;\n  gap: 8px;\n  min-height: 32px;\n  padding: 6px 10px;\n  border: 1px solid var(--border);\n  border-radius: 999px;\n  background: var(--surface);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.omr-pill strong {\n  color: var(--ink);\n  font-variant-numeric: tabular-nums;\n}\n.omr-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 16px;\n}\n.omr-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  min-height: 44px;\n  padding: 12px 18px;\n  border: 1px solid transparent;\n  border-radius: 6px;\n  font: inherit;\n  font-size: 15px;\n  font-weight: 650;\n  line-height: 1;\n  white-space: nowrap;\n  cursor: pointer;\n  transition: background-color .15s ease, border-color .15s ease, box-shadow .15s ease, transform .15s ease;\n}\n.omr-button:hover {\n  box-shadow: 0 2px 5px rgba(15, 23, 42, .12);\n}\n.omr-button:active {\n  transform: translateY(1px);\n}\n.omr-button:focus-visible,\n.omr-calculator input:focus-visible,\n.omr-calculator summary:focus-visible,\n.omr-calculator a:focus-visible {\n  outline: 3px solid #60a5fa;\n  outline-offset: 2px;\n}\n.omr-download {\n  color: #ffffff;\n  background: var(--accent);\n  border-color: var(--accent);\n}\n.omr-download:hover {\n  color: #ffffff;\n  background: var(--accent-hover);\n  border-color: var(--accent-hover);\n}\n.omr-reset {\n  color: var(--ink);\n  background: var(--surface);\n  border-color: #cbd5e1;\n}\n.omr-button-icon {\n  width: 18px;\n  height: 18px;\n  flex: 0 0 auto;\n}\n.omr-workspace {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr);\n  gap: 16px;\n  align-items: start;\n}\n.omr-panel,\n.omr-section {\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, .06);\n}\n.omr-panel {\n  padding: 20px;\n}\n.omr-section {\n  margin-top: 16px;\n  padding: 20px;\n}\n.omr-section-heading {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: 8px 12px;\n  margin-bottom: 16px;\n}\n.omr-section-heading h3 {\n  margin-bottom: 0;\n}\n.omr-section-heading p {\n  margin-bottom: 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.omr-form-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr));\n  gap: 16px;\n}\n.omr-field {\n  display: flex;\n  min-width: 0;\n  flex-direction: column;\n  gap: 6px;\n}\n.omr-label {\n  color: var(--ink);\n  font-size: 14px;\n  font-weight: 600;\n}\n.omr-control-shell {\n  display: grid;\n  grid-template-columns: max-content minmax(0, 1fr) max-content;\n  align-items: center;\n  min-height: 44px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  background: #ffffff;\n  transition: border-color .15s ease, box-shadow .15s ease;\n}\n.omr-control-shell:focus-within {\n  border-color: var(--primary);\n  box-shadow: 0 0 0 3px rgba(29, 78, 216, .12);\n}\n.omr-control-shell input {\n  width: 100%;\n  min-height: 42px;\n  border: 0;\n  border-radius: 6px;\n  padding: 10px 12px;\n  color: var(--ink);\n  background: transparent;\n  font: inherit;\n  font-size: 15px;\n  font-variant-numeric: tabular-nums;\n  outline: 0;\n}\n.omr-affix {\n  padding: 0 10px;\n  color: var(--muted);\n  font-size: 14px;\n  font-weight: 600;\n  user-select: none;\n}\n.omr-affix-left {\n  padding-right: 0;\n}\n.omr-affix-right {\n  padding-left: 0;\n}\n.omr-helper,\n.omr-error {\n  min-height: 40px;\n  margin: 0;\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.45;\n}\n.omr-helper {\n  color: var(--muted);\n}\n.omr-error {\n  color: #b42318;\n}\n.omr-field[data-invalid=\"true\"] .omr-control-shell {\n  border-color: #b42318;\n}\n.omr-results-panel {\n  display: grid;\n  gap: 16px;\n}\n.omr-primary-result {\n  padding: 16px;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  background: #eff6ff;\n}\n.omr-primary-label {\n  margin-bottom: 4px;\n  color: #1e3a8a;\n  font-size: 13px;\n  font-weight: 650;\n  text-transform: uppercase;\n  letter-spacing: .04em;\n}\n.omr-primary-value {\n  margin-bottom: 4px;\n  color: #172554;\n  font-size: 30px;\n  line-height: 1.2;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n  overflow-wrap: anywhere;\n}\n.omr-primary-note {\n  margin-bottom: 0;\n  color: #1e3a8a;\n  font-size: 13px;\n  font-weight: 500;\n}\n.omr-metric-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 0;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n}\n.omr-metric {\n  min-width: 0;\n  padding: 14px;\n  border-bottom: 1px solid var(--border);\n}\n.omr-metric:nth-child(odd) {\n  border-right: 1px solid var(--border);\n}\n.omr-metric:nth-last-child(-n+2) {\n  border-bottom: 0;\n}\n.omr-metric-label {\n  margin-bottom: 4px;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.omr-metric-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  overflow-wrap: anywhere;\n}\n.omr-status {\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.omr-status[data-tone=\"positive\"] {\n  border-color: #a7f3d0;\n  background: #ecfdf5;\n  color: #065f46;\n}\n.omr-status[data-tone=\"negative\"] {\n  border-color: #fecaca;\n  background: #fef2f2;\n  color: #991b1b;\n}\n.omr-advanced {\n  margin-top: 16px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n}\n.omr-advanced summary {\n  padding: 14px 16px;\n  color: var(--ink);\n  font-size: 15px;\n  font-weight: 650;\n  cursor: pointer;\n}\n.omr-advanced-body {\n  padding: 0 16px 16px;\n}\n.omr-breakdown-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(min(100%, 190px), 1fr));\n  gap: 12px;\n}\n.omr-breakdown-item {\n  padding: 12px;\n  border-left: 3px solid var(--primary);\n  background: var(--tint);\n}\n.omr-breakdown-item:nth-child(2) {\n  border-left-color: var(--chart-2);\n}\n.omr-breakdown-item:nth-child(3) {\n  border-left-color: var(--chart-3);\n}\n.omr-breakdown-item:nth-child(4) {\n  border-left-color: var(--chart-4);\n}\n.omr-breakdown-label {\n  margin-bottom: 4px;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.omr-breakdown-value {\n  color: var(--ink);\n  font-size: 20px;\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n  overflow-wrap: anywhere;\n}\n.omr-chart-card {\n  display: block;\n}\n.omr-chart-cluster {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr);\n  justify-content: center;\n  align-items: start;\n  gap: 24px;\n  max-width: 900px;\n  margin: 0 auto;\n}\n.omr-chart-visual {\n  display: grid;\n  gap: 14px;\n  width: 100%;\n  max-width: 520px;\n  margin: 0 auto;\n}\n.omr-bar-row {\n  display: grid;\n  grid-template-columns: minmax(86px, 128px) minmax(0, 1fr) max-content;\n  align-items: center;\n  gap: 10px;\n}\n.omr-bar-label,\n.omr-bar-value {\n  font-size: 13px;\n  font-weight: 600;\n}\n.omr-bar-label {\n  color: var(--muted);\n}\n.omr-bar-value {\n  color: var(--ink);\n  font-variant-numeric: tabular-nums;\n}\n.omr-bar-track {\n  min-height: 28px;\n  padding: 3px;\n  border: 1px solid #cbd5e1;\n  border-radius: 5px;\n  background: #f1f5f9;\n}\n.omr-bar-fill {\n  display: block;\n  min-width: 3px;\n  height: 20px;\n  border-radius: 3px;\n  background: var(--chart-1);\n  transition: width .2s ease;\n}\n.omr-bar-row:nth-child(2) .omr-bar-fill {\n  background: var(--chart-2);\n}\n.omr-bar-row:nth-child(3) .omr-bar-fill {\n  background: var(--chart-3);\n}\n.omr-bar-row:nth-child(4) .omr-bar-fill {\n  background: var(--chart-4);\n}\n.omr-chart-legend {\n  display: grid;\n  align-content: start;\n  gap: 10px;\n  width: max-content;\n  max-width: 100%;\n  margin: 0 auto;\n}\n.omr-legend-row {\n  display: grid;\n  grid-template-columns: 12px max-content max-content max-content;\n  align-items: center;\n  gap: 8px 12px;\n  max-width: 100%;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.omr-legend-swatch {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n  background: var(--chart-1);\n}\n.omr-legend-row:nth-child(2) .omr-legend-swatch {\n  background: var(--chart-2);\n}\n.omr-legend-row:nth-child(3) .omr-legend-swatch {\n  background: var(--chart-3);\n}\n.omr-legend-row:nth-child(4) .omr-legend-swatch {\n  background: var(--chart-4);\n}\n.omr-legend-name {\n  color: var(--ink);\n  font-weight: 600;\n}\n.omr-legend-number,\n.omr-legend-share {\n  font-variant-numeric: tabular-nums;\n}\n.omr-chart-empty {\n  display: none;\n  max-width: 520px;\n  margin: 0 auto;\n  padding: 12px;\n  border: 1px dashed #94a3b8;\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n  text-align: center;\n}\n.omr-chart-callout,\n.omr-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.omr-chart-safe-stack .omr-chart-cluster {\n  grid-template-columns: minmax(0, 1fr);\n  gap: 24px;\n}\n.omr-chart-safe-stack .omr-chart-legend {\n  margin-top: 0;\n}\n.omr-chart-safe-stack .omr-chart-callout {\n  margin-top: 20px;\n}\n.omr-table-wrap {\n  width: 100%;\n  overflow-x: auto;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n}\n.omr-table {\n  width: 100%;\n  min-width: 780px;\n  border-collapse: collapse;\n  font-variant-numeric: tabular-nums;\n}\n.omr-table th,\n.omr-table td {\n  padding: 11px 12px;\n  border-bottom: 1px solid var(--border);\n  text-align: right;\n  white-space: nowrap;\n}\n.omr-table th:first-child,\n.omr-table td:first-child {\n  text-align: left;\n}\n.omr-table th {\n  color: #ffffff;\n  background: #172554;\n  font-size: 13px;\n  font-weight: 650;\n}\n.omr-table td {\n  color: var(--ink);\n  font-size: 14px;\n}\n.omr-table tbody tr:last-child td {\n  border-bottom: 0;\n}\n.omr-table tbody tr:nth-child(even) td {\n  background: var(--tint);\n}\n.omr-safe-table-stack .omr-table-note {\n  margin-top: 20px;\n}\n.omr-education {\n  max-width: 900px;\n  margin: 24px auto 0;\n  padding: 24px;\n  border-top: 1px solid var(--border);\n  background: var(--surface);\n}\n.omr-education h2 {\n  margin-top: 28px;\n  font-size: 22px;\n}\n.omr-education h2:first-child {\n  margin-top: 0;\n}\n.omr-education h3 {\n  margin-top: 20px;\n}\n.omr-education p,\n.omr-education li {\n  color: #334155;\n}\n.omr-education ul {\n  margin: 0 0 16px;\n  padding-left: 22px;\n}\n.omr-sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n@container omr (min-width: 640px) {\n  .omr-chart-cluster {\n    grid-template-columns: minmax(300px, 520px) max-content;\n    gap: 24px;\n  }\n  .omr-chart-legend {\n    margin-top: 2px;\n  }\n}\n@container omr (min-width: 900px) {\n  .omr-workspace {\n    grid-template-columns: minmax(0, 1.05fr) minmax(340px, .95fr);\n  }\n}\n@container omr (max-width: 639px) {\n  .omr-calculator {\n    padding: 16px;\n  }\n  .omr-panel,\n  .omr-section {\n    padding: 16px;\n  }\n  .omr-metric-grid {\n    grid-template-columns: minmax(0, 1fr);\n  }\n  .omr-metric,\n  .omr-metric:nth-child(odd),\n  .omr-metric:nth-last-child(-n+2) {\n    border-right: 0;\n    border-bottom: 1px solid var(--border);\n  }\n  .omr-metric:last-child {\n    border-bottom: 0;\n  }\n  .omr-bar-row {\n    grid-template-columns: minmax(74px, 96px) minmax(0, 1fr);\n  }\n  .omr-bar-value {\n    grid-column: 2;\n    justify-self: start;\n  }\n  .omr-legend-row {\n    grid-template-columns: 12px max-content max-content;\n  }\n  .omr-legend-share {\n    grid-column: 2 \/ span 2;\n    padding-left: 0;\n  }\n  .omr-chart-callout,\n  .omr-table-note {\n    margin-top: 16px;\n  }\n  .omr-education {\n    padding: 20px 0 0;\n  }\n}\n@media (max-width: 480px) {\n  .omr-calculator {\n    padding: 12px;\n  }\n  .omr-toolbar .omr-button {\n    width: 100%;\n  }\n  .omr-pill {\n    width: 100%;\n    justify-content: flex-start;\n  }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"omr-calculator\" data-calculator-root\u003e\n  \u003cheader class=\"omr-header\"\u003e\n    \u003ch2\u003eOnline Marketing ROI Calculator\u003c\/h2\u003e\n    \u003cp class=\"omr-header-copy\"\u003eModel the full paid-marketing funnel from impressions to customers, then compare campaign cost, revenue, acquisition economics, and customer lifetime value.\u003c\/p\u003e\n    \u003cdiv class=\"omr-pills\" aria-label=\"Live marketing funnel summary\"\u003e\n      \u003cspan class=\"omr-pill\"\u003eVisits \u003cstrong data-output=\"visits-pill\"\u003e2,500\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"omr-pill\"\u003eLeads \u003cstrong data-output=\"leads-pill\"\u003e200\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"omr-pill\"\u003eCustomers \u003cstrong data-output=\"customers-pill\"\u003e40\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"omr-pill\"\u003eROI \u003cstrong data-output=\"roi-pill\"\u003e200.00%\u003c\/strong\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/header\u003e\n\n  \u003cdiv class=\"omr-toolbar\" aria-label=\"Calculator actions\"\u003e\n    \u003cbutton class=\"omr-button omr-download\" type=\"button\" data-action=\"download\"\u003e\n      \u003csvg class=\"omr-button-icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"\u003e\u003cpath fill=\"currentColor\" d=\"M12 3a1 1 0 0 1 1 1v9.59l3.3-3.3a1 1 0 1 1 1.4 1.42l-5 5a1 1 0 0 1-1.4 0l-5-5a1 1 0 0 1 1.4-1.42l3.3 3.3V4a1 1 0 0 1 1-1ZM5 19a1 1 0 0 1 1 1v1h12v-1a1 1 0 1 1 2 0v1a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1a1 1 0 0 1 1-1Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n      \u003cspan\u003eDownload Excel\u003c\/span\u003e\n    \u003c\/button\u003e\n    \u003cbutton class=\"omr-button omr-reset\" type=\"button\" data-action=\"reset\"\u003eReset\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"omr-workspace\"\u003e\n    \u003csection class=\"omr-panel omr-inputs-panel\" aria-labelledby=\"omr-inputs-title\"\u003e\n      \u003ch3 id=\"omr-inputs-title\"\u003eCampaign assumptions\u003c\/h3\u003e\n      \u003cdiv class=\"omr-form-grid\"\u003e\n        \u003cdiv class=\"omr-field\" data-field=\"impressions\"\u003e\n          \u003clabel class=\"omr-label\" for=\"omr-impressions\"\u003eImpressions\u003c\/label\u003e\n          \u003cdiv class=\"omr-control-shell\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-left\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n            \u003cinput id=\"omr-impressions\" data-input=\"impressions\" data-mask=\"number\" type=\"text\" inputmode=\"decimal\" value=\"100,000\" aria-describedby=\"omr-impressions-help omr-impressions-error\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-right\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"omr-helper\" id=\"omr-impressions-help\"\u003eTotal times the campaign or ad is shown.\u003c\/p\u003e\n          \u003cp class=\"omr-error\" id=\"omr-impressions-error\" data-error=\"impressions\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"omr-field\" data-field=\"ctr\"\u003e\n          \u003clabel class=\"omr-label\" for=\"omr-ctr\"\u003eClick-through rate (CTR)\u003c\/label\u003e\n          \u003cdiv class=\"omr-control-shell\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-left\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n            \u003cinput id=\"omr-ctr\" data-input=\"ctr\" data-mask=\"percent\" type=\"text\" inputmode=\"decimal\" value=\"2.50\" aria-describedby=\"omr-ctr-help omr-ctr-error\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-right\" aria-hidden=\"true\"\u003e%\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"omr-helper\" id=\"omr-ctr-help\"\u003eShare of impressions that produce a visit.\u003c\/p\u003e\n          \u003cp class=\"omr-error\" id=\"omr-ctr-error\" data-error=\"ctr\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"omr-field\" data-field=\"visitLeadRate\"\u003e\n          \u003clabel class=\"omr-label\" for=\"omr-visit-lead\"\u003eVisits to leads\u003c\/label\u003e\n          \u003cdiv class=\"omr-control-shell\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-left\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n            \u003cinput id=\"omr-visit-lead\" data-input=\"visitLeadRate\" data-mask=\"percent\" type=\"text\" inputmode=\"decimal\" value=\"8.00\" aria-describedby=\"omr-visit-lead-help omr-visit-lead-error\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-right\" aria-hidden=\"true\"\u003e%\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"omr-helper\" id=\"omr-visit-lead-help\"\u003eShare of visits that become qualified leads.\u003c\/p\u003e\n          \u003cp class=\"omr-error\" id=\"omr-visit-lead-error\" data-error=\"visitLeadRate\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"omr-field\" data-field=\"leadCustomerRate\"\u003e\n          \u003clabel class=\"omr-label\" for=\"omr-lead-customer\"\u003eLeads to customers\u003c\/label\u003e\n          \u003cdiv class=\"omr-control-shell\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-left\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n            \u003cinput id=\"omr-lead-customer\" data-input=\"leadCustomerRate\" data-mask=\"percent\" type=\"text\" inputmode=\"decimal\" value=\"20.00\" aria-describedby=\"omr-lead-customer-help omr-lead-customer-error\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-right\" aria-hidden=\"true\"\u003e%\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"omr-helper\" id=\"omr-lead-customer-help\"\u003eShare of leads that complete a purchase.\u003c\/p\u003e\n          \u003cp class=\"omr-error\" id=\"omr-lead-customer-error\" data-error=\"leadCustomerRate\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"omr-field\" data-field=\"cost\"\u003e\n          \u003clabel class=\"omr-label\" for=\"omr-cost\"\u003eTotal campaign cost\u003c\/label\u003e\n          \u003cdiv class=\"omr-control-shell\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-left\" aria-hidden=\"true\"\u003e$\u003c\/span\u003e\n            \u003cinput id=\"omr-cost\" data-input=\"cost\" data-mask=\"currency\" type=\"text\" inputmode=\"decimal\" value=\"8,000.00\" aria-describedby=\"omr-cost-help omr-cost-error\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-right\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"omr-helper\" id=\"omr-cost-help\"\u003eMedia spend plus attributable campaign costs.\u003c\/p\u003e\n          \u003cp class=\"omr-error\" id=\"omr-cost-error\" data-error=\"cost\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"omr-field\" data-field=\"revenue\"\u003e\n          \u003clabel class=\"omr-label\" for=\"omr-revenue\"\u003eCampaign revenue\u003c\/label\u003e\n          \u003cdiv class=\"omr-control-shell\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-left\" aria-hidden=\"true\"\u003e$\u003c\/span\u003e\n            \u003cinput id=\"omr-revenue\" data-input=\"revenue\" data-mask=\"currency\" type=\"text\" inputmode=\"decimal\" value=\"24,000.00\" aria-describedby=\"omr-revenue-help omr-revenue-error\"\u003e\n            \u003cspan class=\"omr-affix omr-affix-right\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cp class=\"omr-helper\" id=\"omr-revenue-help\"\u003eGross revenue attributed to this campaign.\u003c\/p\u003e\n          \u003cp class=\"omr-error\" id=\"omr-revenue-error\" data-error=\"revenue\" hidden\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdetails class=\"omr-advanced\"\u003e\n        \u003csummary\u003eLifetime value assumptions\u003c\/summary\u003e\n        \u003cdiv class=\"omr-advanced-body\"\u003e\n          \u003cdiv class=\"omr-form-grid\"\u003e\n            \u003cdiv class=\"omr-field\" data-field=\"ordersPerCustomer\"\u003e\n              \u003clabel class=\"omr-label\" for=\"omr-orders\"\u003eOrders per customer\u003c\/label\u003e\n              \u003cdiv class=\"omr-control-shell\"\u003e\n                \u003cspan class=\"omr-affix omr-affix-left\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\n                \u003cinput id=\"omr-orders\" data-input=\"ordersPerCustomer\" data-mask=\"number\" type=\"text\" inputmode=\"decimal\" value=\"2.50\" aria-describedby=\"omr-orders-help omr-orders-error\"\u003e\n                \u003cspan class=\"omr-affix omr-affix-right\" aria-hidden=\"true\"\u003eorders\u003c\/span\u003e\n              \u003c\/div\u003e\n              \u003cp class=\"omr-helper\" id=\"omr-orders-help\"\u003eExpected total orders over the customer relationship, including the first purchase.\u003c\/p\u003e\n              \u003cp class=\"omr-error\" id=\"omr-orders-error\" data-error=\"ordersPerCustomer\" hidden\u003e\u003c\/p\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/details\u003e\n    \u003c\/section\u003e\n\n    \u003csection class=\"omr-panel omr-results-panel\" aria-labelledby=\"omr-results-title\"\u003e\n      \u003ch3 id=\"omr-results-title\"\u003eLive results\u003c\/h3\u003e\n      \u003cdiv class=\"omr-primary-result\" aria-live=\"polite\" aria-atomic=\"true\"\u003e\n        \u003cdiv class=\"omr-primary-label\"\u003eReturn on investment\u003c\/div\u003e\n        \u003cdiv class=\"omr-primary-value\" data-output=\"roi\"\u003e200.00%\u003c\/div\u003e\n        \u003cp class=\"omr-primary-note\" data-output=\"roi-note\"\u003eThe campaign generates $3.00 of revenue for each $1.00 spent.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"omr-metric-grid\"\u003e\n        \u003cdiv class=\"omr-metric\"\u003e\n          \u003cdiv class=\"omr-metric-label\"\u003eNet campaign profit\u003c\/div\u003e\n          \u003cdiv class=\"omr-metric-value\" data-output=\"net-profit\"\u003e$16,000.00\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-metric\"\u003e\n          \u003cdiv class=\"omr-metric-label\"\u003eCost per customer\u003c\/div\u003e\n          \u003cdiv class=\"omr-metric-value\" data-output=\"cac\"\u003e$200.00\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-metric\"\u003e\n          \u003cdiv class=\"omr-metric-label\"\u003eRevenue per customer\u003c\/div\u003e\n          \u003cdiv class=\"omr-metric-value\" data-output=\"revenue-customer\"\u003e$600.00\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-metric\"\u003e\n          \u003cdiv class=\"omr-metric-label\"\u003eCustomer lifetime value\u003c\/div\u003e\n          \u003cdiv class=\"omr-metric-value\" data-output=\"ltv\"\u003e$1,500.00\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-metric\"\u003e\n          \u003cdiv class=\"omr-metric-label\"\u003eCustomers acquired\u003c\/div\u003e\n          \u003cdiv class=\"omr-metric-value\" data-output=\"customers\"\u003e40\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-metric\"\u003e\n          \u003cdiv class=\"omr-metric-label\"\u003eLifetime revenue\u003c\/div\u003e\n          \u003cdiv class=\"omr-metric-value\" data-output=\"lifetime-revenue\"\u003e$60,000.00\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"omr-status\" data-output=\"status\" data-tone=\"positive\"\u003ePositive unit economics: revenue per customer exceeds acquisition cost.\u003c\/div\u003e\n    \u003c\/section\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"omr-section omr-breakdown\" aria-labelledby=\"omr-cost-metrics-title\"\u003e\n    \u003cdiv class=\"omr-section-heading\"\u003e\n      \u003ch3 id=\"omr-cost-metrics-title\"\u003eCost and revenue efficiency\u003c\/h3\u003e\n      \u003cp\u003ePer-stage economics calculated from the current funnel.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"omr-breakdown-grid\"\u003e\n      \u003cdiv class=\"omr-breakdown-item\"\u003e\n        \u003cdiv class=\"omr-breakdown-label\"\u003eCPM\u003c\/div\u003e\n        \u003cdiv class=\"omr-breakdown-value\" data-output=\"cpm\"\u003e$80.00\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"omr-breakdown-item\"\u003e\n        \u003cdiv class=\"omr-breakdown-label\"\u003eCost per click\u003c\/div\u003e\n        \u003cdiv class=\"omr-breakdown-value\" data-output=\"cpc\"\u003e$3.20\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"omr-breakdown-item\"\u003e\n        \u003cdiv class=\"omr-breakdown-label\"\u003eCost per lead\u003c\/div\u003e\n        \u003cdiv class=\"omr-breakdown-value\" data-output=\"cpl\"\u003e$40.00\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"omr-breakdown-item\"\u003e\n        \u003cdiv class=\"omr-breakdown-label\"\u003eRevenue per click\u003c\/div\u003e\n        \u003cdiv class=\"omr-breakdown-value\" data-output=\"revenue-click\"\u003e$9.60\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"omr-section omr-chart-card\" data-chart-card aria-labelledby=\"omr-chart-title\"\u003e\n    \u003cdiv class=\"omr-section-heading\"\u003e\n      \u003ch3 id=\"omr-chart-title\"\u003eMarketing funnel\u003c\/h3\u003e\n      \u003cp data-output=\"chart-subtitle\"\u003e40 customers from 100,000 impressions.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"omr-chart-cluster\"\u003e\n      \u003cdiv class=\"omr-chart-visual\" data-chart-visual role=\"img\" aria-labelledby=\"omr-chart-title omr-chart-summary\"\u003e\n        \u003cdiv class=\"omr-bar-row\" data-stage=\"impressions\"\u003e\n          \u003cspan class=\"omr-bar-label\"\u003eImpressions\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-track\"\u003e\u003cspan class=\"omr-bar-fill\" data-bar=\"impressions\" style=\"width:100%\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-value\" data-bar-value=\"impressions\"\u003e100,000\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-bar-row\" data-stage=\"visits\"\u003e\n          \u003cspan class=\"omr-bar-label\"\u003eVisits\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-track\"\u003e\u003cspan class=\"omr-bar-fill\" data-bar=\"visits\" style=\"width:2.5%\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-value\" data-bar-value=\"visits\"\u003e2,500\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-bar-row\" data-stage=\"leads\"\u003e\n          \u003cspan class=\"omr-bar-label\"\u003eLeads\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-track\"\u003e\u003cspan class=\"omr-bar-fill\" data-bar=\"leads\" style=\"width:0.2%\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-value\" data-bar-value=\"leads\"\u003e200\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"omr-bar-row\" data-stage=\"customers\"\u003e\n          \u003cspan class=\"omr-bar-label\"\u003eCustomers\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-track\"\u003e\u003cspan class=\"omr-bar-fill\" data-bar=\"customers\" style=\"width:0.04%\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n          \u003cspan class=\"omr-bar-value\" data-bar-value=\"customers\"\u003e40\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"omr-chart-legend\" data-chart-legend aria-label=\"Funnel chart legend\"\u003e\n        \u003cdiv class=\"omr-legend-row\" data-legend=\"impressions\"\u003e\n\u003cspan class=\"omr-legend-swatch\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003cspan class=\"omr-legend-name\"\u003eImpressions\u003c\/span\u003e\u003cspan class=\"omr-legend-number\"\u003e100,000\u003c\/span\u003e\u003cspan class=\"omr-legend-share\"\u003e100.00%\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"omr-legend-row\" data-legend=\"visits\"\u003e\n\u003cspan class=\"omr-legend-swatch\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003cspan class=\"omr-legend-name\"\u003eVisits\u003c\/span\u003e\u003cspan class=\"omr-legend-number\"\u003e2,500\u003c\/span\u003e\u003cspan class=\"omr-legend-share\"\u003e2.50%\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"omr-legend-row\" data-legend=\"leads\"\u003e\n\u003cspan class=\"omr-legend-swatch\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003cspan class=\"omr-legend-name\"\u003eLeads\u003c\/span\u003e\u003cspan class=\"omr-legend-number\"\u003e200\u003c\/span\u003e\u003cspan class=\"omr-legend-share\"\u003e0.20%\u003c\/span\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"omr-legend-row\" data-legend=\"customers\"\u003e\n\u003cspan class=\"omr-legend-swatch\" aria-hidden=\"true\"\u003e\u003c\/span\u003e\u003cspan class=\"omr-legend-name\"\u003eCustomers\u003c\/span\u003e\u003cspan class=\"omr-legend-number\"\u003e40\u003c\/span\u003e\u003cspan class=\"omr-legend-share\"\u003e0.04%\u003c\/span\u003e\n\u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"omr-chart-empty\" data-chart-empty\u003eEnter positive funnel values above to see the marketing funnel.\u003c\/div\u003e\n    \u003cp class=\"omr-sr-only\" id=\"omr-chart-summary\" data-chart-summary\u003eImpressions 100,000; visits 2,500; leads 200; customers 40.\u003c\/p\u003e\n    \u003cdiv class=\"omr-chart-callout\" data-chart-caption\u003eEach stage compounds the prior conversion rate. Improving a lower-funnel rate can materially increase customers without buying more impressions.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"omr-section omr-table-section\" data-table-card aria-labelledby=\"omr-table-title\"\u003e\n    \u003cdiv class=\"omr-section-heading\"\u003e\n      \u003ch3 id=\"omr-table-title\"\u003eFunnel detail\u003c\/h3\u003e\n      \u003cp\u003eCounts, stage conversion, drop-off, and unit economics.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"omr-table-wrap\" data-table-wrap tabindex=\"0\" aria-label=\"Scrollable funnel detail table\"\u003e\n      \u003ctable class=\"omr-table\"\u003e\n        \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth scope=\"col\"\u003eStage\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eCount\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eFrom prior stage\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eDrop-off\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eCost per person\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eRevenue per person\u003c\/th\u003e\n          \u003c\/tr\u003e\n        \u003c\/thead\u003e\n        \u003ctbody data-table-body\u003e\n          \u003ctr\u003e\n\u003ctd\u003eImpressions\u003c\/td\u003e\n\u003ctd\u003e100,000\u003c\/td\u003e\n\u003ctd\u003e100.00%\u003c\/td\u003e\n\u003ctd\u003e—\u003c\/td\u003e\n\u003ctd\u003e$0.08\u003c\/td\u003e\n\u003ctd\u003e$0.24\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003ctd\u003eVisits\u003c\/td\u003e\n\u003ctd\u003e2,500\u003c\/td\u003e\n\u003ctd\u003e2.50%\u003c\/td\u003e\n\u003ctd\u003e97,500\u003c\/td\u003e\n\u003ctd\u003e$3.20\u003c\/td\u003e\n\u003ctd\u003e$9.60\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003ctd\u003eLeads\u003c\/td\u003e\n\u003ctd\u003e200\u003c\/td\u003e\n\u003ctd\u003e8.00%\u003c\/td\u003e\n\u003ctd\u003e2,300\u003c\/td\u003e\n\u003ctd\u003e$40.00\u003c\/td\u003e\n\u003ctd\u003e$120.00\u003c\/td\u003e\n\u003c\/tr\u003e\n          \u003ctr\u003e\n\u003ctd\u003eCustomers\u003c\/td\u003e\n\u003ctd\u003e40\u003c\/td\u003e\n\u003ctd\u003e20.00%\u003c\/td\u003e\n\u003ctd\u003e160\u003c\/td\u003e\n\u003ctd\u003e$200.00\u003c\/td\u003e\n\u003ctd\u003e$600.00\u003c\/td\u003e\n\u003c\/tr\u003e\n        \u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"omr-table-note\" data-table-note\u003eForecast counts may be fractional when rates do not produce whole people. For operational planning, compare the forecast with observed platform data and use consistent attribution windows.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"omr-education\" aria-labelledby=\"omr-guide-title\"\u003e\n    \u003ch2 id=\"omr-guide-title\"\u003eHow to use the online marketing ROI calculator\u003c\/h2\u003e\n    \u003cp\u003eThis calculator estimates how a marketing campaign moves people through four connected stages: impressions, visits, leads, and customers. It then connects the funnel to campaign cost and attributed revenue. The purpose is not merely to produce one ROI percentage. It is to show where conversion is lost, how much each acquired customer costs, and how repeat purchasing may change the longer-term value of the campaign.\u003c\/p\u003e\n\n    \u003ch3\u003eEnter the campaign assumptions\u003c\/h3\u003e\n    \u003cp\u003e\u003cstrong\u003eImpressions\u003c\/strong\u003e are the number of times an ad, sponsored post, email placement, or other campaign exposure is served. Use a count from the same reporting period as the cost and revenue figures. Higher impressions increase every downstream stage when the conversion rates remain unchanged. Avoid mixing unique reach with impressions because one person may generate several impressions.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eClick-through rate\u003c\/strong\u003e is the percentage of impressions that become visits. Enter the rate as a percentage, such as 2.5%. A higher CTR increases visits, leads, and customers without changing the impression count. However, a high CTR is not sufficient by itself: clicks that do not match the offer can still produce weak lead and customer conversion. The \u003ca class=\"omr-link\" href=\"https:\/\/support.google.com\/google-ads\/answer\/2375431\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGoogle Ads metrics guide\u003c\/a\u003e explains how clicks and impressions are reported.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eVisits to leads\u003c\/strong\u003e measures the share of campaign visits that become identifiable prospects, such as form submissions, trial registrations, booked calls, or qualified inquiries. Define a lead consistently before entering this rate. Raising the rate increases leads and customers, while lowering cost per lead and cost per customer. Common errors include counting duplicate form submissions or mixing all website visits with campaign-attributed visits.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eLeads to customers\u003c\/strong\u003e is the close rate from lead to completed purchase. Use customers attributed to the same lead cohort and time window. Higher close rates increase customers and reduce acquisition cost per customer. A long sales cycle can make recent campaigns appear weaker because some leads have not had enough time to convert.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eTotal campaign cost\u003c\/strong\u003e should include the costs you intend to evaluate. At minimum, enter media spend. For a broader marketing ROI view, add directly attributable creative, agency, software, or campaign labor costs. Higher cost reduces ROI and raises CPM, CPC, cost per lead, and customer acquisition cost. Do not combine lifetime overhead with one short campaign unless that allocation is intentional.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eCampaign revenue\u003c\/strong\u003e is gross revenue attributed to the campaign before subtracting the campaign cost. It drives ROI and all revenue-per-stage measures. Use a consistent attribution method and period. The \u003ca class=\"omr-link\" href=\"https:\/\/support.google.com\/analytics\/answer\/9267568\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGoogle Analytics conversion documentation\u003c\/a\u003e describes how conversion events can be defined and measured, but the commercial value assigned to those events still depends on your business records.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eOrders per customer\u003c\/strong\u003e is an optional lifetime-value assumption. Enter 1 when the campaign produces one purchase per customer. Enter a value above 1 only when repeat purchasing is supported by cohort or retention data. The calculator multiplies current revenue per customer by this order count. It does not model discounting, churn\ntiming, gross margin, refunds, or the cost of serving repeat orders.\u003c\/p\u003e\n\n    \u003ch3\u003eInterpret the results\u003c\/h3\u003e\n    \u003cp\u003e\u003cstrong\u003eVisits, leads, and customers\u003c\/strong\u003e are projected stage counts. Visits equal impressions multiplied by CTR. Leads equal visits multiplied by the visits-to-leads rate. Customers equal leads multiplied by the leads-to-customers rate. The chart uses the same values as the detail table, so changes in any assumption update the visual, legend, table, summary pills, and Excel workbook together.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eROI\u003c\/strong\u003e equals campaign revenue minus campaign cost, divided by campaign cost. A positive result means attributed revenue exceeded campaign cost; zero means revenue equaled cost; a negative result means revenue was below cost. ROI is undefined when cost is zero, so the calculator shows an unavailable result rather than an infinite number. For a broader explanation of the metric and its limitations, see \u003ca class=\"omr-link\" href=\"https:\/\/www.investopedia.com\/terms\/r\/returnoninvestment.asp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInvestopedia’s ROI overview\u003c\/a\u003e.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eNet campaign profit\u003c\/strong\u003e is revenue minus campaign cost. This is a contribution-style campaign result, not company net income. It excludes product cost, fulfillment, payment fees, returns, taxes, and general overhead unless those amounts are included in the campaign cost input. A positive ROI can still be economically unattractive when gross margins are thin.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eCPM\u003c\/strong\u003e is cost per thousand impressions. \u003cstrong\u003eCost per click\u003c\/strong\u003e divides campaign cost by visits. \u003cstrong\u003eCost per lead\u003c\/strong\u003e divides cost by leads. \u003cstrong\u003eCost per customer\u003c\/strong\u003e, also called customer acquisition cost in this simplified campaign model, divides cost by acquired customers. A zero stage count makes its unit metric unavailable because division by zero would not be meaningful.\u003c\/p\u003e\n    \u003cp\u003e\u003cstrong\u003eRevenue per click, lead, and customer\u003c\/strong\u003e show the attributed revenue generated at each stage. Compare revenue per customer with cost per customer to assess basic unit economics. The difference is not gross profit unless product and service delivery costs are also considered. Customer lifetime value extends revenue per customer using the repeat-order assumption, while lifetime revenue applies that value across all acquired customers.\u003c\/p\u003e\n\n    \u003ch3\u003eUse the funnel for decisions, not promises\u003c\/h3\u003e\n    \u003cp\u003eThe chart makes compounding visible. A 10% improvement in CTR affects every downstream stage, but an improvement in lead quality or sales close rate may create more profit without increasing traffic. Test one assumption at a time, compare channels on consistent definitions, and reconcile forecast values to actual campaign reports. The \u003ca class=\"omr-link\" href=\"https:\/\/www.sba.gov\/business-guide\/manage-your-business\/marketing-sales\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eU.S. Small Business Administration marketing and sales guidance\u003c\/a\u003e provides broader planning context for connecting campaign metrics with business objectives.\u003c\/p\u003e\n    \u003cp\u003eReset clears the assumptions to a neutral state. The chart then switches to a compact empty message instead of drawing a fake or all-zero visual. Download Excel creates a current-state workbook with summary, inputs, funnel, metrics, and notes sheets. This calculator is an analytical planning tool and does not provide personalized financial, tax, legal, or investment advice.\u003c\/p\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909480718579,"sku":"online-marketing-roi","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/online-marketing-roi.webp?v=1783935379","url":"https:\/\/financialmodelslab.com\/products\/online-marketing-roi","provider":"Financial Models Lab","version":"1.0","type":"link"}