# How to Measure the ROI of an AI Agent

> Saved hours don't show up in payroll on their own: they're paid time nobody has reassigned yet. Take a baseline before launch, count only what your own systems confirm, and decide where the freed hours go, because that one decision can turn the same agent from a loss into a return.

By Vlad Shvets, Partner @ Qvery · Published 2026-10-30 · Updated 2026-11-01 · 17 min read
Canonical: https://qvery.ai/blog/ai-agent-roi/

If you run a company of a few hundred people and pay for an AI agent, the number you'll be shown is hours saved. The tool bill leaves your account every month, while payroll, overtime and revenue don't move on their own.

A year in, nobody can say where the time went. Errors hide the same way: a case the agent closed comes back as a new ticket or a refund weeks later, and its log still reads done.

We measure every agent we build at Qvery in hours saved and errors avoided, and that's where the count should start, as long as it runs from a baseline and nobody reads it as money.

A return you can defend is **three separate numbers**: net hours and errors against a baseline you took before launch, **the cash you stopped spending**, and **the money from extra work** those hours let you take on. The first is a measure. Only the other two are a return.

This page shows how to take the baseline, which counts to trust and where the hours must go to earn, then how we count hours and errors for the custom AI agents we build.

Most published figures on this come from far larger companies, so the benchmark that means most is your own job, last month.

The calculator opens on a made-up example business that the rest of this article reasons on. Type your own numbers over it.

(An interactive calculator on the page: ai-roi.)

## Saved Hours Are Spare Capacity Until Someone Spends Them

On the first tab, the example business's agent saves its team 10 hours a week, and a person spends 4 hours a week checking its work. A vendor's report would lead with the gross line: $2,600 a month at $60 an hour, benefits included, against $1,500 a month in tools.

Take the review out and the calculator prints 26 hours a month, worth $1,560. That $1,560 is salary you were already paying. (Counting it as a saving is like counting your gym membership as exercise.)

If nobody's pay, overtime or contract changes, none of it stays in your account, while the $1,500 for tools does leave it.

Those 26 hours are capacity: paid time with **no new work** assigned to it yet.

Cost accountants have treated spare time this way for two decades. Robert Kaplan and Steven Anderson's costing method reports the capacity a company supplied beside the capacity it used, and leaves managers to decide whether to supply less later.[^1] Until someone decides, **the spare hours cost** what they cost before.

In a randomized experiment across 66 large firms and 7,137 office workers, people using an AI assistant inside their email and documents spent **two fewer hours** a week on email. They answered the same number of threads, sat through the same meetings and finished **the same number of documents** as colleagues without it.[^2]

That was an assistant, tested by Microsoft researchers on Microsoft's own product, but an agent with a job doesn't assign the hours it frees either.

Company results show a gap too. In McKinsey's 2026 global survey of 1,719 people, about a third of them at companies above $1 billion in revenue, **80%** said AI had improved their own productivity and **37%** said it had added to their organization's operating profit.[^3]

A survey can't say how much of that gap is unassigned time, but it's reason enough not to assume the hours get there by themselves.

![Ten clock icons for hours saved each week, four search icons for hours spent checking, three coins for hours on paid work earning $1,950 a month, and three muted people for idle hours.](https://qvery.ai/blog/ai-agent-roi/illustration-hours-bridge.webp)

*Only the coins show up in your accounts, and they earn more than the salary those hours cost.*

So before launch you need two things an agent can't produce later: the old numbers, and a decision about where the new hours go.

## Time the Job Before the Agent Starts, While the Old Way Still Exists

Every return is a difference, and its first half is **cheapest to get** before launch, while people still do the job the old way; afterward, [memory is a poor clock](https://qvery.ai/blog/ai-pilot-plan/). Fill in this card for one job, from the last two or three months:

**The baseline card for one job**

| Line | What to record | Where it comes from |
|---|---|---|
| Cases | Cases a month | The system the work ends in |
| Minutes | Start to finish, on about two dozen cases as they arrive | A clock |
| Errors | Mistakes found later, by type, per 100 cases | Corrections, credit notes, complaints |
| Rework | Cases that came back within 30 days | The same system |
| Cost of an error | What each type cost last time | Your accounts |
| Hourly cost | Wage plus benefits | Payroll |
| Cash on this job | Overtime, temps, contractors, outsourced volume | Payroll, supplier invoices |
| Work waiting | Paid work queued or turned away | Backlog, unanswered quotes |

The last two lines do the most work later: **cash on this job** is where a saved hour can stop a bill, and **work waiting** is where it can earn.

If payroll can't give you the hourly cost with benefits (the calculator's Loaded Cost), divide the wage by 0.7. Across US private industry in June 2026, wages were 70.0% of what employers paid per hour worked: $32.82 of $46.89.[^4]

Then write three definitions on one page, and have whoever owns the job sign it before launch: **what counts as done**, how long a result has to stand before you count it, and the date you'll read the number.

That date is the calculator's Evaluation Period. Set it now, because review hours move in the first months and a first-month reading settles nothing.

None of this needs **a data team**: an export, a clock and a spreadsheet, timed during work people were doing anyway.

**Time a sample** rather than putting a logging tool on everyone's screen: a tool that records each person's minutes all month tells them they're what is being measured.

### If the Agent Is Already Live, Hold Back a Share of the Work

Send **one case in ten**, more if your volume is low, picked at random, to people working the old way for a month, and time them. Those cases are your baseline, on the same mix in the same month.

A comparable team without the agent comes next. Last year's same month is the weakest, because volume, mix and staff have changed since.

## Count Only the Work Your Own Systems Confirm

An agent's log records what it says it did, and a payment can fail after the agent has moved on. So the count runs on **the system** the work ends in, by rules you can adopt as written:

- A case is done when the ledger, the bank feed or the case system says so, never when the agent's log does.
- Review goes on the cost side, including time spent on work that got rejected and the hours someone spends keeping the agent's instructions current.
- A result has to survive a window you picked before launch, say 30 days. A refund, correction or reversal inside it takes the case back out.
- A repeat request counts against the first case. A customer who comes back may open a new ticket, from another address or by phone, so match new requests on customer, order and topic within 14 days.
- Each case carries the agent's version. A changed prompt or a new model is a different agent and gets its own row.
- Every figure on the page says measured or estimated.

The window has a cost: **October's number isn't final** until the end of November, because reversals arrive late and an early close flatters the agent. Mark it provisional until then.

## Decide Where the Freed Hours Go Before You Call It a Return

Freed hours can stop a cost, carry paid work, or sit idle, and each is counted differently.

**A cost that stops** means overtime, a temp agency, a contractor, outsourced volume, or a vacancy you don't fill. **Count the invoice** that no longer arrives.

[Staff cuts](https://qvery.ai/blog/ai-layoffs/) are the rare version: among companies reporting AI productivity gains in EY's survey of 500 senior US decision-makers, **17%** said the gains had brought their employee numbers down.[^5]

**Paid work** you'd otherwise have turned down means backlog, or quotes nobody had time to send. Count its contribution: what the customer pays, less what it costs to deliver, leaving out salaries you'd pay anyway. It only counts if that work **would have gone undone** without the agent.

**Idle hours** go back to the team. Report them in the hours column; in the money column they're zero.

Check the second destination against your bottleneck. If every contract still waits for the same partner's signature, preparing contracts faster only lengthens the queue on that desk. Eliyahu Goldratt's line from *The Goal*, written about factories in 1984, fits an office unchanged: "an hour saved at a non-bottleneck is a mirage."

Pricing the hours at salary is **wrong in both directions**. In the example business, half the 26 hours sit idle, and those are worth $0, not $60 each. The other half go to extra work, and each of those earns $150.

That's the Output tab. At 2 hours and $300 of contribution per accepted outcome, 13 hours bring 6.5 outcomes and $1,950 a month. Take off the $1,500 for tools and $450 is left.

On the Payback tab, $3,600 of setup comes back in 8 months, and the 12-month ROI is 8.3%: $1,800 left on $21,600 spent, setup included.

Now change one input. Same agent, same hours saved, same invoice:

**The example business at different shares of its 26 freed hours, with $1,500 a month in tools**

| Share used | Left after tools | 12-month ROI |
|---|---|---|
| 0% | -$1,500 | -100% |
| 25% | -$525 | -45.8% |
| About 38.5% | $0 | -16.7% |
| 50% | $450 | 8.3% |
| 75% | $1,425 | 62.5% |
| 100% | $2,400 | 116.7% |

The calculator calls the 38.5% line the Break-Even Productive Share: below it, the agent loses cash every month. Just above it barely helps: at 40%, $60 a month is left and setup takes 60 months.

Nothing about the agent changes between those rows, only **where its hours go**. Work out your own line and redo it each month, because review hours and prices move.

So **write the destination** into next quarter's plan: which cost line falls and by how much, or which work gets taken on and who does it. If nobody will put their name on that line, you've learned what those hours will earn before paying for setup.

Two of the three people below had no such line. The second found one.

**Tips**

> For my team, we were able to estimate ~600 hrs/qr and although not large, I think the same reasoning applies. Did we save money? Not on paper. Did we generate additional revenue? Not related to this investment.
> ([r/CFO · Oct 2026](https://www.reddit.com/r/CFO/comments/1xcgr96/do_you_trust_ai_roi_numbers_from_your_vendor/19rns3ecvrbs2/))

> It saved the team about six hours a week and nobody with a budget cared. What finally sold it was showing it replaced a $900/month freelance retainer for first-response coverage.
> ([r/AI_Agents · Oct 2026](https://www.reddit.com/r/AI_Agents/comments/1xdbskx/if_your_ai_agent_saves_time_but_not_budget_is_it/19rj6b98p9ojk/))

> Personally, the best uses of AI usage in finance that I've seen have had all the productivity gains absorbed by the user, which is of course useless to the organization unless they use it as a way to reduce HC.
> ([r/FPandA · Jun 2026](https://www.reddit.com/r/FPandA/comments/1ucf8sr/ai_increasing_work/ot4ei31/))

## Failures That Move Work Instead of Removing It Stay Off the Dashboard

Errors avoided are the half of the count a dashboard hides, because **the failure often moves** somewhere nobody is counting.

**Where the failure goes**

| The dashboard shows | What moved | The count that catches it |
|---|---|---|
| More cases closed | Customers come back on new tickets | Repeat requests matched to the first case |
| Fewer cases reviewed | Wrong approvals go up | Errors found later, per 100 cases |
| Faster on routine cases | Hard cases pile up in a queue | Age of the queue; hours per case, exceptions included |
| Fewer errors in total | Typos fall, confident wrong answers rise | Errors by type and cost, never a single total |

To put money on it, take each error type's rate per 100 cases at baseline, subtract this month's rate, scale that to this month's cases, and multiply by **what that type cost** last time. Mark the result as an estimate.

A credit note or a penalty you stopped paying is cash, so it goes in the money column. A mistake that cost nothing but someone's afternoon goes in the hours column.

**One kind of failure** stays out of the average. A payment sent to a fraudster or a missed filing can cost more than a year of saved hours.

Set a limit on those before launch, the way [a pilot's pass rule names its serious errors](https://qvery.ai/blog/ai-pilot-plan/), and **treat one as a stop** whatever the month's return says.

## Have One Person Run the Count Once a Month From Your Own Exports

Whoever owns the job today **owns the count**. Here's the example business's page, in reading order:

**One month's page for the example business**

| Line | This month | Marked |
|---|---|---|
| Net hours freed | 26 hours | Measured |
| Errors per 100, by type | Yours to count | Measured |
| Cash you stopped spending | $0 | Measured |
| Money from extra work | $1,950 | Provisional until the window closes |
| Running cash cost | $1,500 | Measured |
| Left after running cost | $450 | Provisional |
| Setup paid back in | 8 months | Estimated |

What else changed that month goes beside it: a price rise, a new client, someone leaving.

**Keep the held-back share** running if you can, since a slow month then hits both sides. Where you can't, say so and report a range.

The matching is the dull part, and a chat assistant on a plan your company has approved can do it from three exports: the agent's log, the system of record and new requests. It returns one row per agent version, with the case IDs behind each number.

Run it once the month's window has closed.

![Seventy icons, one per case an agent’s log reports as done: 51 counted, 6 where the customer came back, 6 not in the record, and 7 reversed inside the window.](https://qvery.ai/blog/ai-agent-roi/illustration-claimed-vs-counted.webp)

*Read the three short rows first: each is a case you can open by its ID, and each was a win on the agent’s own report.*

When we tried it in October 2026 on a made-up month of 120 cases with planted misses, late reversals and repeats, the table matched the answer key: proof the output can be checked, not that it's accurate.

Check it with a sample: draw **20 cases** at random from the system the work ends in, not the agent's log, and have someone who doesn't run the agent trace each one start to finish. Add a few reversed cases, where logs go wrong most.

Twenty clean cases only let you rule out, at 95% confidence, error rates above **about 14%**, by [the same arithmetic a pilot uses](https://qvery.ai/blog/ai-pilot-plan/), so the sample is **a smoke alarm** rather than a proof. A bad month earns a bigger one.

At an assumed 10 minutes a case, plus the exports, that's about **half a day a month**. Put it on the cost side too, about an hour a week on the calculator's Review Hours line.

A person keeps the definition of done, the window, and the decision.

## How Qvery Counts Hours Saved and Errors Avoided for Each Agent

For every agent we build, the count starts with the baseline card above. We sit with the people doing the job now, time two dozen cases from arrival to done, and note which mistakes come back as corrections, credit notes or complaints. Nothing gets built until that card is full.

The agent is custom, made for that one job in your company. It takes cases on autopilot as they arrive, inside the ledger, bank feed or case system the work already ends in, while the job stays with its owner.

A first working version handles real cases by the end of week two, and we train the people who review it, since their hours sit on the cost side.

From then on we report two lines each week, from your systems and never its log: the **hours the agent returns**, net of review, and the **errors it heads off**, by type per 100 cases against the baseline.

If you can already fill half the baseline card for one job, we can map the rest with you.

Bring Us One Job and Where Its Hours Would Go: https://calendly.com/qvery-vlad/30min

## A Negative Number Is a Result: Fix, Narrow, or Stop

Read the page on the date you signed, top to bottom, and **stop at the first line** that fails.

1. **Check net hours** At or below zero, review is eating the saving. Unless the errors it prevents pay for that time, [narrow the job until each output points at its source](https://qvery.ai/blog/ai-verification-tax/), or stop.
2. **Check errors** If they're up, or a serious one got through, put a person back on that step before you read any further.
3. **Check the money column** If nothing is in it, the hours have no destination. Assign the work or stop the cost by a date, and price the cheaper route beside it: a macro, a temp, a vacancy left open.
4. **Check the share against break-even** Below the line, raise the share, cut the bill at renewal, or stop.
5. **Check setup against the date you set** If it isn't back, decide on what the next period would earn, not on what you've already spent.

You won't be alone with a bad reading: CEOs in IBM's 2025 survey, 2,000 of them across 33 countries, said **25%** of their AI initiatives had delivered the ROI they expected.[^6] Yours says which line failed, and that's the part you can act on.

This week, pick one job and fill in **two lines of the card**: cash on this job and work waiting. If both are empty, you know where the hours would go before anyone has quoted you for an agent.

Build Your AI Transformation on Numbers You Can Check: https://calendly.com/qvery-vlad/30min

## Frequently asked questions



### How do I measure the ROI of an AI agent?

Time the job before launch, then count three things separately each month: net hours and errors against that baseline, the cash you stopped spending, and the money from extra work the hours carried. ROI comes from the last two, against running costs and setup, over a period chosen in advance.

### Why doesn't hours saved prove ROI?

Saved hours are paid time nobody has reassigned yet. Salaries don't fall when hours do, so the hours are worth nothing in cash until they stop a cost, such as overtime or a contractor, or carry paid work that would otherwise have gone undone. Report them as a measure, never as money.

### How do I put a dollar value on an hour my team saves?

Use the hourly cost with benefits. If payroll can't give it, divide the wage by 0.7: US private-industry wages were 70.0% of employer cost per hour worked in June 2026. That price holds only for hours that stop a cost or carry paid work.

### Should review time count against an AI agent?

Yes. Every hour spent checking the agent's work, including work that got rejected, and keeping its instructions current goes on the cost side. In the example business, 10 hours saved a week less 4 hours of review leaves 26 net hours a month, not 43.

### What baseline should I record before launching an AI agent?

For one job over two or three months: cases, minutes per case, errors by type, rework, the cost of an error, hourly cost, cash already spent on the job, and paid work waiting. The job's owner then signs what counts as done, how long a result must stand, and the reading date.

### What if we already launched without a baseline?

Send a random one in ten cases, more if your volume is low, to people working the old way for a month, and time them. That's a baseline on the same mix in the same month. A comparable team comes next; last year's same month is the weakest.

### How do I separate the agent's effect from everything else that changed?

Keep a random share of cases going the old way and compare the two groups, so a slow month or a new client affects both. Where that isn't possible, write what else changed beside the number and report a range rather than one figure.

### Can I trust the AI agent's own log?

Not as the count. The log records what the agent says it did, and a payment can fail after it has moved on while the log still reads done. Count a case only when the ledger, the bank feed or the case system shows it done.

### How do I count rework and repeat requests against the agent?

Take a case back out if it is reversed, refunded or corrected within a window you set before launch, such as 30 days. Match new requests to closed cases on customer, order and topic within about 14 days, because a returning customer may open a new ticket instead of the old one.

### How long should an AI agent run before we judge its ROI?

Set the reading date before launch. Review hours move in the first months, so a first-month reading settles nothing, and with a 30-day window October's number isn't final until the end of November.

### How do I measure errors avoided?

Take each error type's rate per 100 cases at baseline, subtract this month's, scale it to this month's cases, and multiply by what that type cost last time, marked as an estimate. A credit note or penalty you stopped paying is cash; a mistake that cost only someone's afternoon goes in the hours column.

### Which errors should stop an AI agent?

The ones that can cost more than a year of saved hours, such as a payment sent to a fraudster or a missed filing. Keep them out of the average, set a limit before launch, and treat one as a stop whatever the month's return says.

### What share of the freed hours has to go to paid work?

Enough to clear the break-even line, below which the agent loses cash every month. In the example business, with $1,500 a month in tools, that's about 38.5% of its 26 hours; at 40%, $60 a month is left and setup takes 60 months to come back.

### How many cases should we sample to check the count?

Twenty, drawn at random from the system the work ends in and traced start to finish by someone who doesn't run the agent, plus a few reversed cases. Twenty clean cases only rule out error rates above about 14% at 95% confidence, so the sample is a smoke alarm, not a proof.

### What should we do if the ROI comes out negative?

Read the page on the date you set and stop at the first line that fails. Then narrow the job, give the hours a destination, cut the bill, or stop. In IBM's 2025 survey, CEOs said 25% of their AI initiatives had delivered the ROI they expected.

### How does Qvery measure the agents it builds?

Each is a custom agent for one job at your company, on autopilot inside the systems the work ends in, with a first working version inside two weeks. We time the job with your team first, train its reviewers, and report net hours saved and errors avoided by type each week.

## Sources

[^1]: Kaplan and Anderson, excerpted by Harvard Business School Working Knowledge, "Rethinking Activity-Based Costing" (2004), https://www.library.hbs.edu/working-knowledge/rethinking-activity-based-costing
[^2]: Dillon, Jaffe, Immorlica and Stanton, "Shifting Work Patterns with Generative AI" (2025), https://arxiv.org/abs/2504.11436
[^3]: McKinsey, "The State of AI: Global Survey 2026" (2026), https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai
[^4]: U.S. Bureau of Labor Statistics, "Employer Costs for Employee Compensation, June 2026" (2026), https://www.bls.gov/news.release/ecec.nr0.htm
[^5]: EY, "AI-driven productivity is fueling reinvestment over workforce reductions" (2025), https://www.ey.com/en_us/newsroom/2025/12/ai-driven-productivity-is-fueling-reinvestment-over-workforce-reductions
[^6]: IBM Institute for Business Value, "IBM Study: CEOs Double Down on AI" (2025), https://newsroom.ibm.com/2025-05-06-ibm-study-ceos-double-down-on-ai-while-navigating-enterprise-hurdles/
