Estimate the ROI, payback, and NPV of an investment, project, or purchase. Use when asked to calculate ROI, build a business case, justify a purchase/initiative, work out payback period, or compare options by return. Produces a computed ROI summary (net benefit, ROI %, payback, simple NPV) with the assumptions made explicit and a sensitivity note, so a business case is defensible.
Scanned 9/2/2026
Install to Claude Code
npx -y skills add majiayu000/claude-skill-registry --skill roi-estimator --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Roi Estimator?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-roi-estimator)More formats (shields.io, HTML) on the badges page.
---
name: roi-estimator
description: "Estimate the ROI, payback, and NPV of an investment, project, or purchase. Use when asked to calculate ROI, build a business case, justify a purchase/initiative, work out payback period, or compare options by return. Produces a computed ROI summary (net benefit, ROI %, payback, simple NPV) with the assumptions made explicit and a sensitivity note, so a business case is defensible."
---
# ROI Estimator Skill
Every "should we spend on this?" decision needs a defensible number. This skill estimates the return —
ROI %, payback period, and a simple NPV that accounts for the time value of money — from costs and
expected benefits, with the assumptions stated and a sensitivity check, so a business case survives the
first sceptical question instead of collapsing.
## Required Inputs
Ask for these only if they aren't already provided:
- **Costs** — upfront cost, and any ongoing/recurring cost (per period).
- **Benefits** — the expected gain per period (revenue uplift, cost saved, time saved × loaded rate). Quantify; if it's an estimate, say so.
- **Time horizon** — over how many periods to evaluate (e.g. 3 years).
- **Discount rate** — for NPV (default ~10%); state it.
## Output Format
### ROI: [investment]
**1. The numbers** (via the helper):
| Metric | Value |
|---|---|
| Total cost (over horizon) | |
| Total benefit (over horizon) | |
| Net benefit | |
| **ROI %** | |
| **Payback period** | |
| Simple NPV (@ discount rate) | |
**2. The verdict** — worth it / marginal / no, in one line, and against what bar (e.g. beats the discount-rate hurdle, payback within tolerance).
**3. Assumptions** — list them explicitly. The benefit is usually the soft number — flag it, and give a **conservative / expected / optimistic** range rather than a single point.
**4. Sensitivity** — the one assumption the conclusion hinges on, and at what value the decision flips.
## Programmatic Helper
`scripts/roi.py` (stdlib only) computes ROI, payback, and NPV:
```bash
# in.json: {"upfront_cost":50000,"recurring_cost":2000,"benefit_per_period":18000,"periods":36,"discount_rate_annual":0.1,"period":"month"}
python3 scripts/roi.py in.json
python3 scripts/roi.py in.json --json
```
## Quality Checks
- [ ] Costs include recurring/ongoing, not just upfront
- [ ] NPV is computed (time value of money), not just raw ROI
- [ ] Benefits are given as a range (conservative/expected/optimistic), not a single optimistic point
- [ ] Every assumption is listed explicitly
- [ ] A sensitivity note names the assumption the verdict hinges on and its flip point
## Anti-Patterns
- [ ] Do not ignore ongoing costs — a low upfront, high-recurring option can lose to a pricier one-time buy
- [ ] Do not present a single benefit number as fact — it's the softest input; give a range and flag it
- [ ] Do not skip discounting for multi-year cases — $1 in year 3 isn't $1 today
- [ ] Do not bury the assumptions — a business case is only as credible as its stated inputs
- [ ] Do not omit payback — a great 5-year ROI with a 4-year payback may still be too slow to fund
## Based On
Business-case / capital-budgeting practice — ROI, payback period, NPV, and assumption sensitivity.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!