River
Y CombinatorBacked by Y Combinator

Business & Revenue OpsFree

Ticket Deflection and Content Gap Analysis

Send your ticket export and help center content, and get repeated questions ranked by the agent hours a working article would save, briefs ready to write.

Start here

River's ticket deflection and content gap analysis reads your ticket export next to your help center content. It clusters repeated questions by intent instead of whatever category taxonomy is or isn't in place, then checks each cluster's real coverage: no article, a partial one, or a working one already in place. Every cluster comes back priced in agent hours, tickets multiplied by the handling time your own export logged, not a raw ticket count. The clusters a working article would actually shrink get a ready-to-write brief, ranked by the hours saved.

Unlike a deflection-rate dashboard reporting one blended percentage, or an ROI calculator modeling what a chatbot might save in theory, this reads the ticket export a support team already has today. No bot, no refusal log, no live AI agent required. It also catches what a plain hours-by-category report cannot: that number describes what a cluster already costs, not what writing or fixing an article would fix. A thousand-ticket cluster with a correct, findable article behind it is a logistics problem wearing a support ticket.

This is for a support operations lead deciding what the content team writes next. It also fits a knowledge base owner who inherited a queue nobody has ever audited by cost, and a support manager building a headcount or tooling case around a real number instead of a hunch. It works whether the export comes from Zendesk, Intercom, or a hand-built spreadsheet, whether or not any help center content exists yet to check coverage against.

Ranked by hours saved, not by ticket count

Most teams rank candidate articles by ticket count alone, which fails from both directions. A cluster can be huge and already fully documented, so writing anything is wasted effort. Or it can be small and quietly expensive: an obscure question eating twenty minutes of an agent's time whenever it lands, never surfacing on a volume-sorted list. Desku's own ROI guidance names the same trap from a different angle: deflection counts everyone who never reached a human, including a customer who simply gave up.

Handling hours fix the volume half: multiply each cluster's ticket count by the average handling time your own export logged, using a fully loaded hourly rate rather than a bare wage. Desku's own figure, the US Bureau of Labor Statistics' $20.59 median customer service wage with its documented 1.25x-1.4x multiplier for benefits and overhead, lands near $26 an hour and is the rate this tool defaults to. A password reset and a multi-step warranty claim both close as one ticket, but they are not one cost, and only handling hours make that visible.

Coverage fixes the other half. One knowledge base gap analysis ranks fixes by frequency times the cost of a wrong answer, a real method for a team already running an AI agent whose refusal log supplies both numbers. Working from a plain ticket export instead means checking coverage directly against your help center content. A cluster with a current, findable article is not a gap no matter its volume, and hours saved on a confirmed gap use a conservative, mid-range planning assumption, never a guarantee.

How it works

  1. Send both exports

    Your ticket export, whatever its source, plus a description or export of what your help center already covers today.

  2. Questions get clustered

    Repeated questions grouped by actual intent, not by whatever category tag happens to already be applied.

  3. Cluster priced and checked

    Ticket count times your export's handling time, then checked against your help center content for real coverage.

  4. Get the ranked briefs

    A sheet of every cluster, plus a document with ready-to-write briefs for the top gaps by hours saved.

What you get

  • Reads your ticket export next to your help center content, so coverage is checked directly rather than assumed.
  • Clusters repeated questions by the actual intent behind them, not by whatever category tag happens to be applied.
  • Prices every cluster in agent hours, using your own export's handling time rather than a flat industry estimate.
  • Ranks gap clusters by the hours a working article would save, not by ticket count.
  • Writes a ready-to-write brief for each top gap, not just a finding still waiting to become content.
  • Works from a plain ticket export, so no AI agent or refusal log needs to exist first.

Common questions

We already track a deflection rate. What does this add?

A deflection rate is one blended percentage across every conversation, so it cannot tell you which specific question to document next. This clusters your repeated questions individually, prices each in the agent hours your own export logged, and ranks by hours a working article would save, which is a worklist rather than a health metric.

How do you decide whether an article already covers a cluster?

By checking the cluster's questions against the help center content you send, not by matching on category names. A cluster gets marked covered only when a current, findable article actually answers it, partial when something exists but misses the specific question, and none when nothing addresses it at all.

We don't run an AI agent, so we have no refusal log. Does this still work?

Yes, and that is the point of reading a plain ticket export instead. A refusal-log method needs a live AI agent already answering questions to generate its data. This works from the ticket export a support team already has today, agent-handled or not, bot or no bot.

Is the hours-saved number a guarantee?

No, and the report says so. It is a conservative, mid-range planning assumption applied only to clusters confirmed as gaps, grounded in the eligible-volume and resolution-rate ranges documented for e-commerce ticket mixes. Treat it as the number that justifies a writer's afternoon, not a committed savings figure.

What ticket export formats does this read?

Zendesk and Intercom exports in CSV or JSON, and a hand-built spreadsheet if that is what your team already keeps. Whatever the source, it needs a subject or body per ticket and, ideally, a handling-time or resolution-time field, since that field is what turns ticket counts into hours.

How is this different from a ticket taxonomy project?

A ticket taxonomy assigns every ticket to a category going forward. This clusters the tickets already in your export by the actual question being asked, whether or not a taxonomy exists, and stops at the specific clusters worth a writer's time rather than reorganizing the whole queue.

How does this relate to a broader voice-of-customer synthesis?

Voice of customer synthesis reads the same ticket pile plus reviews and survey comments to decide which themes are still live against your shipped fixes. This tool answers a narrower question about a cluster already flagged as high-volume: whether it belongs in your help center, not whether it is still an open problem.

Ticket Deflection and Content Gap Analysis

Fill in the form and your workspace opens with the work already underway.