{"product_id":"roas","title":"ROAS Calculator","description":"\u003cstyle\u003e\n.roas-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  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  background: var(--surface);\n}\n.roas-calculator,\n.roas-calculator *,\n.roas-calculator *::before,\n.roas-calculator *::after { box-sizing: border-box; }\n.roas-calculator * { min-width: 0; }\n.roas-calculator h2,\n.roas-calculator h3,\n.roas-calculator p { margin-top: 0; }\n.roas-calculator h2 { font-size: 24px; line-height: 1.25; font-weight: 700; margin-bottom: 8px; }\n.roas-calculator h3 { font-size: 18px; line-height: 1.35; font-weight: 650; margin-bottom: 12px; }\n.roas-header { padding: 24px; border: 1px solid var(--border); border-radius: 8px 8px 0 0; background: linear-gradient(180deg, #ffffff 0%, var(--tint) 100%); }\n.roas-header-copy { color: var(--muted); max-width: 760px; margin-bottom: 16px; }\n.roas-pills { display: flex; flex-wrap: wrap; gap: 8px; }\n.roas-pill { display: inline-flex; align-items: center; gap: 6px; padding: 6px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 13px; font-weight: 500; font-variant-numeric: tabular-nums; }\n.roas-pill strong { color: var(--ink); font-weight: 700; }\n.roas-toolbar { display: flex; flex-wrap: wrap; gap: 8px; padding: 16px 24px; border-inline: 1px solid var(--border); border-bottom: 1px solid var(--border); background: var(--surface); }\n.roas-button { min-height: 44px; border: 1px solid var(--border); border-radius: 6px; padding: 11px 16px; font: inherit; font-weight: 650; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 10px; box-shadow: 0 1px 2px rgba(15,23,42,.06); transition: background .15s ease, border-color .15s ease, transform .15s ease, box-shadow .15s ease; }\n.roas-button:hover { box-shadow: 0 2px 5px rgba(15,23,42,.12); }\n.roas-button:active { transform: translateY(1px); }\n.roas-button:focus-visible,\n.roas-input:focus-visible,\n.roas-radio:focus-visible,\n.roas-link:focus-visible { outline: 3px solid rgba(29,78,216,.35); outline-offset: 2px; }\n.roas-download { background: var(--accent); border-color: var(--accent); color: #ffffff; padding: 12px 18px; white-space: nowrap; }\n.roas-download:hover { background: var(--accent-hover); border-color: var(--accent-hover); }\n.roas-reset { background: var(--surface); color: var(--ink); }\n.roas-workspace { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 24px; padding: 24px; border-inline: 1px solid var(--border); background: var(--tint); }\n.roas-panel,\n.roas-chart-card,\n.roas-table-card,\n.roas-education { border: 1px solid var(--border); border-radius: 8px; background: var(--surface); box-shadow: 0 1px 2px rgba(15,23,42,.06); }\n.roas-panel { padding: 20px; }\n.roas-form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; align-items: start; }\n.roas-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.roas-field-wide { grid-column: 1 \/ -1; }\n.roas-label,\n.roas-legend-title { display: block; font-size: 14px; font-weight: 600; color: var(--ink); }\n.roas-helper,\n.roas-error { min-height: 40px; margin: 0; font-size: 13px; line-height: 1.45; color: var(--muted); }\n.roas-error { color: #b91c1c; min-height: 19px; }\n.roas-input { width: 100%; min-height: 44px; border: 1px solid #cbd5e1; border-radius: 6px; padding: 10px 12px; background: #ffffff; color: var(--ink); font: inherit; font-variant-numeric: tabular-nums; }\n.roas-input[aria-invalid=\"true\"] { border-color: #b91c1c; }\n.roas-fieldset { grid-column: 1 \/ -1; margin: 0; padding: 0; border: 0; }\n.roas-radio-group { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }\n.roas-radio-option { position: relative; }\n.roas-radio { position: absolute; opacity: 0; pointer-events: none; }\n.roas-radio-label { display: inline-flex; align-items: center; justify-content: center; min-height: 42px; padding: 9px 16px; border: 1px solid #cbd5e1; border-radius: 6px; background: #ffffff; color: var(--ink); cursor: pointer; font-size: 14px; font-weight: 600; }\n.roas-radio:checked + .roas-radio-label { border-color: var(--primary); background: #eff6ff; color: #1e3a8a; box-shadow: inset 0 0 0 1px var(--primary); }\n.roas-results { display: flex; flex-direction: column; gap: 16px; }\n.roas-primary-result { padding: 20px; border: 1px solid #bfdbfe; border-radius: 8px; background: #eff6ff; }\n.roas-primary-label { display: block; margin-bottom: 4px; color: #1e3a8a; font-size: 13px; font-weight: 600; }\n.roas-primary-value { display: block; font-size: 30px; line-height: 1.15; font-weight: 700; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }\n.roas-primary-context { margin: 8px 0 0; color: #334155; font-size: 13px; }\n.roas-result-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }\n.roas-result-card { padding: 16px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); }\n.roas-result-label { display: block; margin-bottom: 4px; color: var(--muted); font-size: 13px; font-weight: 500; }\n.roas-result-value { display: block; color: var(--ink); font-size: 20px; line-height: 1.25; font-weight: 700; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }\n.roas-status { padding: 12px; border: 1px solid var(--border); border-radius: 6px; background: var(--tint); color: var(--muted); font-size: 13px; }\n.roas-status strong { color: var(--ink); }\n.roas-section { padding: 0 24px 24px; border-inline: 1px solid var(--border); background: var(--tint); }\n.roas-chart-card,\n.roas-table-card { padding: 20px; }\n.roas-chart-intro { color: var(--muted); margin-bottom: 16px; }\n.roas-chart-cluster { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(240px, .8fr); gap: 24px; align-items: center; max-width: 940px; margin: 0 auto; }\n.roas-plot-wrap { min-height: 300px; display: flex; align-items: center; justify-content: center; }\n.roas-chart-svg { display: block; width: 100%; max-width: 620px; height: 320px; overflow: visible; }\n.roas-chart-empty { display: none; width: 100%; padding: 16px; border: 1px dashed #cbd5e1; border-radius: 6px; background: var(--tint); color: var(--muted); text-align: center; font-size: 13px; }\n.roas-chart-empty[data-visible=\"true\"] { display: block; }\n.roas-legend { display: grid; gap: 10px; align-content: center; }\n.roas-legend-row { display: grid; grid-template-columns: 12px minmax(96px, max-content) minmax(88px, max-content); gap: 10px; align-items: center; width: fit-content; max-width: 100%; font-size: 13px; font-weight: 500; font-variant-numeric: tabular-nums; }\n.roas-swatch { width: 12px; height: 12px; border-radius: 3px; }\n.roas-legend-name { color: var(--muted); }\n.roas-legend-value { color: var(--ink); font-weight: 700; }\n.roas-chart-caption,\n.roas-table-note { margin-top: 16px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 6px; background: var(--tint); color: var(--muted); font-size: 13px; }\n.roas-chart-summary { margin-top: 16px; }\n.roas-chart-summary table { width: 100%; border-collapse: collapse; font-size: 13px; }\n.roas-chart-summary th,\n.roas-chart-summary td { padding: 8px 10px; border-bottom: 1px solid var(--border); text-align: left; }\n.roas-chart-summary th { color: var(--muted); font-weight: 600; }\n.roas-chart-summary td:last-child,\n.roas-chart-summary th:last-child { text-align: right; font-variant-numeric: tabular-nums; }\n.roas-safe-stack .roas-chart-cluster { grid-template-columns: minmax(0, 1fr); gap: 16px; }\n.roas-safe-stack .roas-chart-caption { margin-top: 20px; }\n.roas-table-overflow { width: 100%; overflow-x: auto; overscroll-behavior-inline: contain; }\n.roas-table { width: 100%; min-width: 760px; border-collapse: collapse; font-variant-numeric: tabular-nums; }\n.roas-table th,\n.roas-table td { padding: 11px 12px; border-bottom: 1px solid var(--border); text-align: right; white-space: nowrap; }\n.roas-table th { background: #172554; color: #ffffff; font-size: 13px; font-weight: 650; }\n.roas-table th:first-child,\n.roas-table td:first-child { text-align: left; }\n.roas-table tbody tr:hover { background: #fafafa; }\n.roas-safe-table-stack .roas-table-note { margin-top: 20px; }\n.roas-education { padding: 24px; }\n.roas-education + .roas-education { margin-top: 16px; }\n.roas-education p:last-child { margin-bottom: 0; }\n.roas-education ul { margin: 0 0 16px; padding-left: 22px; }\n.roas-education li + li { margin-top: 6px; }\n.roas-formula { padding: 14px; border-left: 4px solid var(--primary); border-radius: 0 6px 6px 0; background: #eff6ff; font-variant-numeric: tabular-nums; }\n.roas-link { color: var(--primary); text-decoration-thickness: 1px; text-underline-offset: 2px; }\n.roas-link:hover { color: #1e40af; }\n.roas-hidden { display: none !important; }\n@media (max-width: 899px) {\n  .roas-workspace { grid-template-columns: minmax(0, 1fr); }\n}\n@media (max-width: 639px) {\n  .roas-header,\n  .roas-toolbar,\n  .roas-workspace,\n  .roas-section,\n  .roas-education { padding-left: 16px; padding-right: 16px; }\n  .roas-form-grid,\n  .roas-result-grid { grid-template-columns: minmax(0, 1fr); }\n  .roas-chart-cluster { grid-template-columns: minmax(0, 1fr); gap: 16px; }\n  .roas-plot-wrap { min-height: 270px; }\n  .roas-chart-svg { height: 280px; }\n  .roas-legend { justify-content: center; }\n  .roas-chart-caption { margin-top: 16px; }\n}\n@media (max-width: 359px) {\n  .roas-header,\n  .roas-toolbar,\n  .roas-workspace,\n  .roas-section,\n  .roas-education { padding-left: 12px; padding-right: 12px; }\n  .roas-panel,\n  .roas-chart-card,\n  .roas-table-card { padding: 16px; }\n  .roas-button { width: 100%; }\n  .roas-legend-row { grid-template-columns: 12px minmax(82px, max-content) minmax(74px, max-content); gap: 8px; }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"roas-calculator\" data-calculator-root\u003e\n  \u003csection class=\"roas-header\"\u003e\n    \u003ch2\u003eROAS Calculator\u003c\/h2\u003e\n    \u003cp class=\"roas-header-copy\"\u003eMeasure advertising efficiency, estimate profit after ad spend, and compare your campaign with contribution break-even benchmarks.\u003c\/p\u003e\n    \u003cdiv class=\"roas-pills\" aria-label=\"Live campaign summary\"\u003e\n      \u003cspan class=\"roas-pill\"\u003eRevenue multiple \u003cstrong data-roas-pill-multiple\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"roas-pill\"\u003eROAS \u003cstrong data-roas-pill-roas\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"roas-pill\"\u003eROI \u003cstrong data-roas-pill-roi\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"roas-pill\"\u003eStatus \u003cstrong data-roas-pill-status\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv class=\"roas-toolbar\"\u003e\n    \u003cbutton class=\"roas-button roas-download\" type=\"button\" data-roas-download aria-label=\"Download current ROAS analysis as Excel\"\u003e\n      \u003cspan aria-hidden=\"true\"\u003e⇩\u003c\/span\u003e\u003cspan\u003eDownload Excel\u003c\/span\u003e\n    \u003c\/button\u003e\n    \u003cbutton class=\"roas-button roas-reset\" type=\"button\" data-roas-reset\u003eReset\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003csection class=\"roas-workspace\" aria-label=\"ROAS calculator workspace\"\u003e\n    \u003cdiv class=\"roas-panel\"\u003e\n      \u003ch3\u003eCampaign inputs\u003c\/h3\u003e\n      \u003cdiv class=\"roas-form-grid\"\u003e\n        \u003cdiv class=\"roas-field roas-field-wide\"\u003e\n          \u003clabel class=\"roas-label\" for=\"roas-ad-spend\"\u003eAd spend\u003c\/label\u003e\n          \u003cinput class=\"roas-input\" id=\"roas-ad-spend\" data-roas-input=\"spend\" type=\"text\" inputmode=\"decimal\" value=\"$1,000.00\" aria-describedby=\"roas-ad-spend-help roas-ad-spend-error\"\u003e\n          \u003cp class=\"roas-helper\" id=\"roas-ad-spend-help\"\u003eTotal media cost attributed to the campaign or channel.\u003c\/p\u003e\n          \u003cp class=\"roas-error\" id=\"roas-ad-spend-error\" data-roas-error=\"spend\"\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cfieldset class=\"roas-fieldset\"\u003e\n          \u003clegend class=\"roas-legend-title\"\u003eDo you know your ad revenue?\u003c\/legend\u003e\n          \u003cdiv class=\"roas-radio-group\"\u003e\n            \u003cspan class=\"roas-radio-option\"\u003e\n              \u003cinput class=\"roas-radio\" id=\"roas-revenue-yes\" data-roas-mode type=\"radio\" name=\"roas-revenue-mode\" value=\"yes\" checked\u003e\n              \u003clabel class=\"roas-radio-label\" for=\"roas-revenue-yes\"\u003eYes, enter revenue\u003c\/label\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"roas-radio-option\"\u003e\n              \u003cinput class=\"roas-radio\" id=\"roas-revenue-no\" data-roas-mode type=\"radio\" name=\"roas-revenue-mode\" value=\"no\"\u003e\n              \u003clabel class=\"roas-radio-label\" for=\"roas-revenue-no\"\u003eNo, use target ROAS\u003c\/label\u003e\n            \u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/fieldset\u003e\n\n        \u003cdiv class=\"roas-field roas-field-wide\" data-roas-revenue-field\u003e\n          \u003clabel class=\"roas-label\" for=\"roas-ad-revenue\"\u003eAd-attributed revenue\u003c\/label\u003e\n          \u003cinput class=\"roas-input\" id=\"roas-ad-revenue\" data-roas-input=\"revenue\" type=\"text\" inputmode=\"decimal\" value=\"$3,000.00\" aria-describedby=\"roas-ad-revenue-help roas-ad-revenue-error\"\u003e\n          \u003cp class=\"roas-helper\" id=\"roas-ad-revenue-help\"\u003eRevenue credited to the same campaign, period, and attribution rule as ad spend.\u003c\/p\u003e\n          \u003cp class=\"roas-error\" id=\"roas-ad-revenue-error\" data-roas-error=\"revenue\"\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roas-field roas-field-wide roas-hidden\" data-roas-target-field\u003e\n          \u003clabel class=\"roas-label\" for=\"roas-target-roas\"\u003eTarget ROAS\u003c\/label\u003e\n          \u003cinput class=\"roas-input\" id=\"roas-target-roas\" data-roas-input=\"targetRoas\" type=\"text\" inputmode=\"decimal\" value=\"300.00%\" aria-describedby=\"roas-target-roas-help roas-target-roas-error\"\u003e\n          \u003cp class=\"roas-helper\" id=\"roas-target-roas-help\"\u003eDesired revenue divided by ad spend, expressed as a percentage.\u003c\/p\u003e\n          \u003cp class=\"roas-error\" id=\"roas-target-roas-error\" data-roas-error=\"targetRoas\"\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roas-field roas-field-wide\"\u003e\n          \u003clabel class=\"roas-label\" for=\"roas-margin\"\u003eContribution margin before ad spend\u003c\/label\u003e\n          \u003cinput class=\"roas-input\" id=\"roas-margin\" data-roas-input=\"margin\" type=\"text\" inputmode=\"decimal\" value=\"40.00%\" aria-describedby=\"roas-margin-help roas-margin-error\"\u003e\n          \u003cp class=\"roas-helper\" id=\"roas-margin-help\"\u003eRevenue remaining after product, fulfillment, transaction, and other variable costs, but before advertising.\u003c\/p\u003e\n          \u003cp class=\"roas-error\" id=\"roas-margin-error\" data-roas-error=\"margin\"\u003e\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"roas-panel roas-results\"\u003e\n      \u003ch3\u003eLive results\u003c\/h3\u003e\n      \u003cdiv class=\"roas-primary-result\" aria-live=\"polite\" aria-atomic=\"true\"\u003e\n        \u003cspan class=\"roas-primary-label\"\u003eReturn on ad spend\u003c\/span\u003e\n        \u003cstrong class=\"roas-primary-value\" data-roas-result=\"roas\"\u003e—\u003c\/strong\u003e\n        \u003cp class=\"roas-primary-context\" data-roas-primary-context\u003eEnter campaign values to calculate ROAS.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"roas-result-grid\"\u003e\n        \u003cdiv class=\"roas-result-card\"\u003e\n          \u003cspan class=\"roas-result-label\"\u003eAd-attributed revenue\u003c\/span\u003e\n          \u003cstrong class=\"roas-result-value\" data-roas-result=\"revenue\"\u003e—\u003c\/strong\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"roas-result-card\"\u003e\n          \u003cspan class=\"roas-result-label\"\u003eEstimated ROI\u003c\/span\u003e\n          \u003cstrong class=\"roas-result-value\" data-roas-result=\"roi\"\u003e—\u003c\/strong\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"roas-result-card\"\u003e\n          \u003cspan class=\"roas-result-label\"\u003eProfit after ad spend\u003c\/span\u003e\n          \u003cstrong class=\"roas-result-value\" data-roas-result=\"profitAfterAds\"\u003e—\u003c\/strong\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"roas-result-card\"\u003e\n          \u003cspan class=\"roas-result-label\"\u003eContribution break-even ROAS\u003c\/span\u003e\n          \u003cstrong class=\"roas-result-value\" data-roas-result=\"breakEvenRoas\"\u003e—\u003c\/strong\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"roas-status\" data-roas-status\u003e\n\u003cstrong\u003eCampaign status:\u003c\/strong\u003e Enter valid values to see an interpretation.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"roas-section\"\u003e\n    \u003cdiv class=\"roas-chart-card\" data-roas-chart-card\u003e\n      \u003ch3\u003eCampaign economics\u003c\/h3\u003e\n      \u003cp class=\"roas-chart-intro\"\u003eCompare media cost, attributed revenue, and estimated contribution profit using the same current-state assumptions.\u003c\/p\u003e\n      \u003cdiv class=\"roas-chart-cluster\"\u003e\n        \u003cdiv class=\"roas-plot-wrap\" data-roas-plot-wrap\u003e\n          \u003csvg class=\"roas-chart-svg\" data-roas-chart-svg viewbox=\"0 0 620 320\" role=\"img\" aria-label=\"Campaign economics bar chart\"\u003e\u003c\/svg\u003e\n          \u003cdiv class=\"roas-chart-empty\" data-roas-chart-empty\u003eEnter values above to see the campaign economics chart.\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"roas-legend\" data-roas-legend aria-label=\"Chart legend\"\u003e\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"roas-chart-summary roas-table-overflow\" data-roas-chart-summary\u003e\u003c\/div\u003e\n      \u003cdiv class=\"roas-chart-caption\" data-roas-chart-caption\u003eChart interpretation will appear when valid campaign values are available.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"roas-section\"\u003e\n    \u003cdiv class=\"roas-table-card\" data-roas-table-card\u003e\n      \u003ch3\u003eScenario comparison\u003c\/h3\u003e\n      \u003cdiv class=\"roas-table-overflow\" data-roas-table-wrap\u003e\n        \u003ctable class=\"roas-table\"\u003e\n          \u003cthead\u003e\n            \u003ctr\u003e\n              \u003cth scope=\"col\"\u003eScenario\u003c\/th\u003e\n              \u003cth scope=\"col\"\u003eRevenue\u003c\/th\u003e\n              \u003cth scope=\"col\"\u003eROAS\u003c\/th\u003e\n              \u003cth scope=\"col\"\u003eGross contribution\u003c\/th\u003e\n              \u003cth scope=\"col\"\u003eProfit after ads\u003c\/th\u003e\n              \u003cth scope=\"col\"\u003eROI\u003c\/th\u003e\n            \u003c\/tr\u003e\n          \u003c\/thead\u003e\n          \u003ctbody data-roas-scenario-body\u003e\u003c\/tbody\u003e\n        \u003c\/table\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"roas-table-note\" data-roas-table-note\u003eBenchmarks hold ad spend and contribution margin constant so you can isolate the effect of revenue efficiency.\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"roas-section\"\u003e\n    \u003carticle class=\"roas-education\"\u003e\n      \u003ch2\u003eWhat does this ROAS calculator estimate?\u003c\/h2\u003e\n      \u003cp\u003eThis calculator estimates return on ad spend, attributed revenue, contribution profit, profit after advertising, and advertising ROI. ROAS answers a narrow efficiency question: how many dollars of attributed revenue were generated for each dollar of media spend? ROI adds the contribution margin so that variable product and service costs are considered before the advertising cost is deducted.\u003c\/p\u003e\n      \u003cp\u003eROAS is useful for comparing campaigns that use the same attribution method and reporting period. It is not a complete measure of company profitability. Payroll, rent, software, creative production, agency fees, taxes, returns, and overhead may sit outside the calculation unless they are already reflected in your contribution margin or ad spend.\u003c\/p\u003e\n\n      \u003ch2\u003eHow should each input be used?\u003c\/h2\u003e\n      \u003ch3\u003eAd spend\u003c\/h3\u003e\n      \u003cp\u003eEnter the media cost for one campaign, channel, or reporting period. The value is required for a meaningful percentage because ROAS divides revenue by spend. Use the same scope as the revenue figure: for example, one month of paid search spend with one month of paid search revenue. A higher spend lowers ROAS when revenue stays unchanged. Do not mix gross marketing budget with a revenue figure attributed only to one platform.\u003c\/p\u003e\n      \u003ch3\u003eRevenue mode and ad-attributed revenue\u003c\/h3\u003e\n      \u003cp\u003eSelect “Yes, enter revenue” when you already know the revenue credited to the campaign. Enter gross sales under the attribution model used by your analytics system. Revenue should be nonnegative and should exclude unrelated organic sales. Attribution windows, cross-device tracking, returns, taxes, and duplicated platform conversions can materially change this number. For a practical overview of conversion measurement, see the \u003ca class=\"roas-link\" href=\"https:\/\/support.google.com\/google-ads\/answer\/1722022\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGoogle Ads conversion tracking guidance\u003c\/a\u003e.\u003c\/p\u003e\n      \u003ch3\u003eTarget ROAS\u003c\/h3\u003e\n      \u003cp\u003eSelect “No, use target ROAS” when revenue is unknown or when you are planning a campaign. Enter the desired percentage. A 300% target means $3.00 of revenue for every $1.00 spent. The calculator converts the target into required revenue. Higher target ROAS increases the revenue requirement at the same spend; lower target ROAS reduces it. A target should reflect your economics rather than an arbitrary industry benchmark.\u003c\/p\u003e\n      \u003ch3\u003eContribution margin before ad spend\u003c\/h3\u003e\n      \u003cp\u003eEnter the percentage of revenue remaining after variable costs but before advertising. For an ecommerce business, variable costs may include product cost, payment processing, shipping subsidies, packaging, marketplace commissions, and expected returns. For a service business, include delivery labor and other costs that scale with the sale. The field is required for the ROI and contribution break-even calculations. A higher margin improves ROI and lowers the ROAS needed to break even.\u003c\/p\u003e\n\n      \u003ch2\u003eHow are the results calculated?\u003c\/h2\u003e\n      \u003cp class=\"roas-formula\"\u003e\u003cstrong\u003eROAS\u003c\/strong\u003e = attributed revenue ÷ ad spend × 100\u003cbr\u003e\u003cstrong\u003eGross contribution\u003c\/strong\u003e = attributed revenue × contribution margin\u003cbr\u003e\u003cstrong\u003eProfit after ads\u003c\/strong\u003e = gross contribution − ad spend\u003cbr\u003e\u003cstrong\u003eROI\u003c\/strong\u003e = profit after ads ÷ ad spend × 100\u003cbr\u003e\u003cstrong\u003eContribution break-even ROAS\u003c\/strong\u003e = 100 ÷ contribution margin as a decimal\u003c\/p\u003e\n      \u003cp\u003eFor example, $1,000 of spend and $3,000 of attributed revenue produce 300% ROAS, or 3.0× revenue per ad dollar. At a 40% contribution margin, the campaign creates $1,200 of gross contribution. After subtracting $1,000 of ad spend, estimated profit after ads is $200 and ROI is 20%. The contribution break-even ROAS is 250%, because $2.50 of revenue at a 40% margin contributes exactly $1.00 before advertising.\u003c\/p\u003e\n\n      \u003ch2\u003eHow should the outputs be interpreted?\u003c\/h2\u003e\n      \u003ch3\u003eROAS and revenue multiple\u003c\/h3\u003e\n      \u003cp\u003eROAS below 100% means attributed revenue is lower than media spend, but 100% is usually not economic break-even because the sale still carries variable costs. A 400% ROAS equals a 4.0× revenue multiple. Higher is generally better, but campaign quality also depends on incremental sales, customer quality, retention, and the accuracy of attribution.\u003c\/p\u003e\n      \u003ch3\u003eEstimated ROI and profit after ads\u003c\/h3\u003e\n      \u003cp\u003ePositive ROI means the estimated contribution generated by the campaign exceeds media spend. Zero indicates contribution break-even. Negative ROI means the campaign does not recover media cost under the entered margin. These figures can still overstate full profit if creative, agency, discount, refund, or overhead costs are omitted. For broader small-business financial planning, the \u003ca class=\"roas-link\" href=\"https:\/\/www.sba.gov\/business-guide\/manage-your-business\/manage-your-finances\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eU.S. Small Business Administration finance guide\u003c\/a\u003e provides useful context.\u003c\/p\u003e\n      \u003ch3\u003eContribution break-even ROAS\u003c\/h3\u003e\n      \u003cp\u003eThis is the ROAS required for gross contribution to equal ad spend. It is more informative than the simple 100% revenue break-even threshold. A 25% margin needs 400% ROAS; a 50% margin needs 200%. If the margin is zero, contribution break-even cannot be reached because none of the revenue remains to pay for advertising.\u003c\/p\u003e\n      \u003ch3\u003eChart and scenario table\u003c\/h3\u003e\n      \u003cp\u003eThe bar chart compares spend, revenue, and gross contribution from the current model. Its legend and accessible data table use the same values as the visual. The scenario table holds spend and margin constant while showing current performance, contribution break-even, 4× revenue, and 8× revenue benchmarks. This isolates the effect of revenue efficiency; it does not forecast traffic, conversion rate, or customer retention.\u003c\/p\u003e\n\n      \u003ch2\u003eWhat assumptions have the greatest impact?\u003c\/h2\u003e\n      \u003cp\u003eAttribution quality is often the largest source of uncertainty. Platform-reported revenue may include customers who would have purchased without the ad, while privacy restrictions can also undercount conversions. Compare platform reports with first-party analytics, experiments, and incrementality tests where possible. The \u003ca class=\"roas-link\" href=\"https:\/\/www.ftc.gov\/business-guidance\/advertising-marketing\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eFederal Trade Commission advertising guidance\u003c\/a\u003e is relevant when evaluating claims and campaign practices.\u003c\/p\u003e\n      \u003cp\u003eContribution margin is equally important. Using gross margin without deducting payment fees, fulfillment, refunds, or variable service costs can make a campaign appear profitable when it is not. Recalculate ROAS using conservative, base, and optimistic margin assumptions. Also keep the time horizon consistent: a customer-acquisition campaign may look weak on first-order ROAS but attractive when repeat purchases are measured with a defensible lifetime-value model.\u003c\/p\u003e\n\n      \u003ch2\u003eCommon ROAS mistakes\u003c\/h2\u003e\n      \u003cul\u003e\n        \u003cli\u003eComparing channels that use different attribution windows or conversion definitions.\u003c\/li\u003e\n        \u003cli\u003eUsing revenue before refunds while using spend after credits or rebates.\u003c\/li\u003e\n        \u003cli\u003eCalling 100% ROAS “profitable” without accounting for contribution margin.\u003c\/li\u003e\n        \u003cli\u003eIncluding view-through or branded conversions without testing incrementality.\u003c\/li\u003e\n        \u003cli\u003eOptimizing only for ROAS and unintentionally reducing total profitable volume.\u003c\/li\u003e\n      \u003c\/ul\u003e\n      \u003cp\u003eUse ROAS as one operating signal alongside contribution profit, new-customer mix, conversion rate, customer acquisition cost, payback period, retention, and cash flow. For a general definition and comparison with ROI, see \u003ca class=\"roas-link\" href=\"https:\/\/www.investopedia.com\/terms\/r\/return-on-investmentcapital.asp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInvestopedia’s return-on-investment overview\u003c\/a\u003e. This calculator is educational and does not provide personalized financial, tax, legal, or investment advice.\u003c\/p\u003e\n    \u003c\/article\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909479899379,"sku":"roas","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/roas.webp?v=1783935358","url":"https:\/\/financialmodelslab.com\/products\/roas","provider":"Financial Models Lab","version":"1.0","type":"link"}