-
Gather ROI inputs — campaign details, the investment (total spend) table, and the results-data table. (template)
-
Calculate direct ROI — Simple ROI = (Revenue − Investment) / Investment × 100; ROAS = Revenue / Investment. State profit and a Profitable/Break-even/Loss assessment. (template)
-
Calculate Earned Media Value (EMV) — impression-based (Impressions × CPM / 1000) and engagement-based (Engagements × CPE), then average. Flag EMV as directional, not absolute. (template)
-
Calculate cost-efficiency metrics — CPM, CPR, CPE, CPV, CPC, CPA, and CAC. Compare only against a declared, source-dated target with a compatible market, window, and attribution basis; otherwise report the metric descriptively and mark the comparison pending. (template)
-
Apply attribution modeling — run first-touch, last-touch, linear, time-decay, and position-based; recommend the model that fits the customer journey. (template)
-
Calculate customer lifetime value impact — LTV-Based ROI = (New Customers × Avg LTV − Investment) / Investment; project short- vs. long-term and compare customer quality to organic/paid. (template)
-
Calculate by-influencer ROI — per-influencer ROI/ROAS rank, investment efficiency, and ROI by tier (macro/micro/nano). (template)
-
Generate the ROI report summary — investment, returns, ROI by methodology, key metrics vs. benchmark, bottom line, and 1-3 recommendations. (template)
-
Produce the typed C3 ROI scope and, when complete, CVI
Declare goal, profile roi-<goal>, scope: roi, assessment_time: forecast|actual, campaign rollup_id, observation date, and the same catalog version used by ACE/ART. Follow runtime-invocation.md, resolve AARON_SKILLS_ROOT="${CLAUDE_PLUGIN_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || true)}", verify the scorer and typed catalog, then score all 12 ROI items through python3 "$AARON_SKILLS_ROOT/scripts/rubric-score.py" score <run.json>. If the standalone install lacks them, return score_state: NOT_SCORED / score_confidence: not_scored and do not hand-calculate or persist a typed result. Actual-only R1/R2/I1/I2/I3 items are N/A with reasons in a forecast read; they require evidence in an actual read. This 0–100 rubric result is not financial ROI % from steps 1-8: the financial outputs are evidence consumed by ROI.R items, never the CVI input themselves.
ROI.I3 Fail emits results-unverified; report I1/I2/R1/R2 as low-confidence and do not make attributable-return claims. Preserve the scorer result rather than recomputing it in prose.
For CVI, combine complete typed ACE results from fit-scorer, complete ART results from content-reviewer, and exactly one ROI result through python3 "$AARON_SKILLS_ROOT/scripts/rubric-score.py" c3-rollup <results.json>:
CVI = ( ACE_avg × ART_avg × ROI )^(1/3)
Use the typed c3-rollup.schema.json components form for real campaigns: positive budget weights for every ACE result, equal-weight ART results, and one ROI result. All components must share goal, rollup_id, observation date, assessment time, and catalog version. Keep the three aggregate scope scores beside CVI. If ACE/ART is missing, incomplete, or Unknown, emit ROI and mark CVI pending. If any component is BLOCK and therefore has no final scope score, do not emit CVI; report the blocking component instead of capping or averaging it.
-
Persist only with permission — save under memory/influencer/roi-calculator/ (or the paid path) only after authorization; request separate authorization for hot-cache promotion.