AI ROI Calculator for Law Enforcement

Give Your Investigators Their Time Back

Every hour on a report is an hour off a case. Use our AI ROI calculator to see how much investigative capacity your department could get back with Rev.

01. Case Reports

02. Number Of Investigators?

03. Average Annual Salary

Investigative hours recovered per year
0
hours
Annual value of recovered investigative capacity
$0
USD/year
Breaks even in
0
months
Thank you!
You'll recieve your estimated quote in just a bit!
Oops! Something went wrong while submitting the form.
HTTPS · www.rev.com
← Home
tag" section (or in a Custom Embed element at the bottom of the page). ============================================================ */ (function () { // ─── Assumptions (from spreadsheet Tab 2) ────────────────────── var AVG_REPORT_TIME_BEFORE = 2; // hours per report, before Rev var AVG_REPORT_TIME_AFTER = 0.5; // hours per report, after Rev var BENEFITS_OVERHEAD_MULTIPLIER = 1.3; var SUBSCRIPTION_COST_PER_USER_PER_YR = 1440; // USD / user / year var WORK_HOURS_PER_YEAR = 2080; // ─── Input elements ──────────────────────────────────────────── var inputReports = document.getElementById('Case-Reports'); var inputInvest = document.getElementById('Number-of-Investigators'); var inputSalary = document.getElementById('Average-Annual-Salary'); // ─── Output elements (targeted via custom calculate attribute) ── var outHours = document.querySelector('[calculate="hours-per-year"]'); var outValue = document.querySelector('[calculate="recovered-capacity-value"]'); var outBreakEven = document.querySelector('[calculate="breaks-even-months"]'); // ─── Core calculation ─────────────────────────────────────────── function runCalc() { var reports = parseFloat(inputReports.value) || 0; var investors = parseFloat(inputInvest.value) || 0; var salary = parseFloat(inputSalary.value) || 0; // annual USD // 1. Investigative hours recovered per year // = reports/person/month × investigators × time-saved-per-report × 12 months var timeSaved = AVG_REPORT_TIME_BEFORE - AVG_REPORT_TIME_AFTER; // 1.5 hrs var hoursRecovered = reports * investors * timeSaved * 12; // 2. Annual value of recovered investigative capacity // = hours recovered × hourly-rate × benefits multiplier var hourlyRate = salary / WORK_HOURS_PER_YEAR; var annualValue = hoursRecovered * hourlyRate * BENEFITS_OVERHEAD_MULTIPLIER; // 3. Break-even in months // = (subscription cost for all users / annual value) × 12 var totalSubCost = SUBSCRIPTION_COST_PER_USER_PER_YR * investors; var breakEven = (annualValue > 0) ? (totalSubCost / annualValue) * 12 : 0; // ─── Update the DOM ───────────────────────────────────────── outHours.textContent = fmt(hoursRecovered, 0); outValue.textContent = '$' + fmt(annualValue, 2); outBreakEven.textContent = fmt(breakEven, 2); } // ─── Number formatter ─────────────────────────────────────────── function fmt(n, decimals) { if (!isFinite(n) || isNaN(n) || n === 0) { return decimals > 0 ? (0).toFixed(decimals) : '0'; } return n.toLocaleString('en-US', { minimumFractionDigits: decimals, maximumFractionDigits: decimals }); } // ─── Wire up listeners ───────────────────────────────────────── [inputReports, inputInvest, inputSalary].forEach(function (el) { el.addEventListener('input', runCalc); el.addEventListener('change', runCalc); // catches paste & autofill }); // Run once on load so outputs start clean runCalc(); })();