Agency client reporting: 9 numbers that prove ROI

August 21, 2026·16 min read
Man in his early thirties presenting a printed monthly client report across a round oak table in a warm co-working library with tall plants and floor to ceiling shelves, rust orange linen shirt, late afternoon light through high windows

Agency client reporting is the one moment each month where a client decides, on paper, whether your retainer is worth keeping. Everything else is conversation. The report is the artifact they forward to their own finance person, and if it answers the wrong question it does not matter how good the work was underneath it.

This is written for the person who owns several client accounts or several closers and has to produce the same report for all of them: agency owner, head of sales, ops manager. There are no market benchmarks in what follows, because none that we could verify would fit your offer, your price point and your country. What you get instead is the definition of each number, the formula behind it, and the specific way each one lies when nobody is watching.

TL;DR

  • A client report proves ROI only if it ends on money the client recognises. Conversations and messages sent are inputs, not outcomes, and clients stop reading before they reach them.
  • Nine numbers are enough: conversations opened, qualified conversations, median speed to first reply, booked calls, show rate, booked calls per closer seat, cost per booked call, pipeline value created, closed revenue attributed to the inbox.
  • Every number needs a written definition that does not change between accounts or between months. A metric that gets redefined is a metric the client will stop trusting.
  • Cost per booked call is the number that ends renewal arguments, because it is the one the client can compare against every other channel they buy.
  • The metrics to cut are the ones that go up when nothing improves: follower count, total messages sent, raw response rate, engagement.

Table of contents

Why agency client reporting decides the renewal

A retainer is cancelled in a meeting where nobody disputes the work. The client says the results are hard to see, you answer with activity, and the conversation ends politely. That is a reporting failure, not a delivery failure, and it happens because the report was built from what was easy to export rather than from what the client is accountable for internally.

The client has one question and it does not change: what did I get for what I paid. Every number in the report either moves toward that answer or gets in its way. A report that opens with reach and closes with a screenshot never arrives at the answer, so the client supplies their own, usually the wrong one.

There is a second reason this matters at agency scale. When you run ten accounts, the report is also your own control panel. If a client's numbers are only assembled the day before the call, you learn about a broken account four weeks late. The reporting cycle described here is the same instrument in both directions: it is what proves the value outward and what catches the drift inward.

The 9 numbers on one page

The nine numbers below fit on a single page, in three groups that follow the actual path of a lead: the inbox does something, the calendar receives something, the client earns something. Report them in that order and the page reads as a chain instead of a pile.

# Number What it answers How to compute it Where it can lie
1 Conversations opened How much raw demand reached the inbox Distinct threads with at least one inbound message in the period Counts bots, spam and repeat threads from the same person
2 Qualified conversations How much of that demand was real Threads that met the written qualification criteria Moves the moment the criteria get loosened
3 Median speed to first reply Whether the team answered while the lead was still warm Median minutes between first inbound message and first human or automated reply Averages hide a long tail, medians do not
4 Booked calls What the calendar received Confirmed bookings created from a thread in the period Double counts reschedules as new bookings
5 Show rate Whether those bookings were real Attended calls divided by booked calls Improves when you book fewer, softer leads
6 Booked calls per closer seat Whether capacity is the constraint Booked calls divided by active closer seats Looks fine when one seat carries the team
7 Cost per booked call What each opportunity costs to create Total spend on the channel divided by booked calls Excludes labour and understates the true figure
8 Pipeline value created What is in play, not yet won Sum of the deal value of opportunities created from the inbox Inflates when deal values are aspirational
9 Closed revenue attributed to the inbox What the client actually banked Revenue from deals whose first touch was an inbox thread Attribution rules decide the number, so publish the rule

Nine is a ceiling, not a target. If an account cannot produce number 9 honestly yet, report eight and say why in one line. A missing number with a stated reason costs you nothing. A guessed number costs you the whole report the first time the client checks it.

Numbers 1 to 3, what the inbox actually produced

Conversations opened is the demand meter. It tells you and the client whether the month was quiet because the market was quiet or because the team was slow. Without it, every drop downstream gets blamed on the setting team, including the ones caused by paid media being switched off. Count distinct threads, not messages, and deduplicate people who wrote on two channels.

Qualified conversations is where most reports quietly break. Qualification has to be a written rule that a new setter could apply on their first day, not a feeling. Whatever criteria you choose, the rule needs to be printed in the report itself, once, in a footnote. The moment qualification is a judgement call, the number becomes an opinion, and opinions do not survive a renewal meeting. If you are still building that rule, the setter and closer model is where the handoff criteria belong, and training a setting team is where they get taught.

Median speed to first reply is the number that predicts the other eight. Report the median rather than the average: one thread answered three days late will drag an average into fiction while the median keeps telling the truth about the typical lead. Report it in minutes, not hours, because hours make a slow team look acceptable. The full treatment of how to set and hold that commitment is in the lead response time SLA rules, and it is worth pairing with what to do when the messaging window has closed, since a fast first reply is wasted if the follow up never lands.

The verdict on this group: these three are inputs and belong at the top of the page, where a client glances rather than reads. They exist to explain the money numbers later, not to impress anyone on their own.

Numbers 4 to 6, what the calendars actually got

Booked calls is the number most agencies already report, and the one most often inflated by accident. A rescheduled call is not a new booking. A call booked in March for April belongs to the month it was created, not the month it happens, as long as you pick one rule and keep it. Write the rule down and never change it mid contract.

Show rate is the honesty check on booked calls, and the two must always appear together. Booked calls alone can be gamed by lowering the bar for what deserves a slot, and the show rate is what exposes it. When show rate falls while bookings rise, qualification has drifted, not improved. Keeping ten calendars full without that drift is the subject of the high ticket closing team playbook.

Booked calls per closer seat is the number that tells the client whether more spend would even help. If the seats are not full, adding lead volume creates waste rather than revenue, and saying so before the client asks is the single most credible thing an agency can do in a reporting call. This is also the view that reveals a team carried by one strong closer, which is a risk the client should hear about from you first.

The verdict on this group: report booked calls and show rate side by side, permanently. Either one alone is a number that can be made to look good while the account gets worse.

Numbers 7 to 9, what the client actually earned

Cost per booked call is the number that ends arguments, because it is the only one a client can compare against every other channel they buy. Compute it as total spend on the channel divided by booked calls, and be explicit about what total spend includes. If your figure excludes the labour cost of the setters, say so in the same line, because the client's finance person will add it back and you want to be the one who mentioned it. The three ways to buy this capacity, and what each one really costs, are broken down in the cost of appointment setting services.

Pipeline value created converts bookings into a language the client's leadership already uses. It is also the easiest number to inflate, so tie each opportunity to a real deal value from the client's own system rather than to an average deal size you invented. If the client has no system, report the count of opportunities and skip the value. A count you can defend beats a value you cannot.

Closed revenue attributed to the inbox is the only number in the report that is unambiguously the client's own outcome. Attribution is a rule, not a truth, so publish the rule you use in one sentence and keep it identical across accounts. First touch attribution is the usual choice for inbox work because it credits the conversation that started the relationship, and it is defensible precisely because it is simple. Revenue closed in a month often belongs to conversations opened two months earlier, so show the lag rather than hiding it.

The verdict on this group: this is the part of the report the client reads. If only three numbers survive a redesign, keep 7, 8 and 9.

Ready to build reporting into the setting layer instead of rebuilding it every month? Join the waitlist.

The numbers to leave out of the report

Some metrics survive in agency reports because they are easy to export and they rarely go down. That is exactly why they should go. Every one of them can improve while the account gets worse.

  • Follower count and reach. They describe an audience, not a pipeline, and they climb on their own. If the client wanted an audience report they would have hired a content agency. The account level version of this work belongs in the multi account Instagram playbook, not in a revenue report.
  • Total messages sent. This measures effort, and effort is what you are paid to absorb, not what the client is paying for. It also rewards the wrong behaviour the moment a setter notices it is being counted.
  • Raw response rate across all messages. It mixes real prospects with bots and cold outreach, and it can be pushed up by answering the easiest threads first. Speed to first reply on qualified threads is the honest version.
  • Engagement. It has no agreed definition, which means it cannot be compared between two months, let alone two accounts.
  • Anything with a screenshot instead of a number. A screenshot of an inbox proves activity happened. It does not survive being forwarded to someone who was not in the meeting.

Cutting these is uncomfortable the first month, because the page gets shorter. It gets easier once a client tells you the new report is the first one they could forward without explaining it.

Running the reporting cycle across ten accounts

One good report is a writing exercise. Ten good reports every month is an operating problem, and it fails in predictable places.

Write the definitions once. A single definition sheet covering all nine numbers, applied to every account, is what makes accounts comparable and what stops a client challenging a metric successfully. When definitions drift per account, you eventually report the same word meaning two different things, and one client will find out.

Freeze the period. Pick a cutoff date and pull every account on the same day. Numbers pulled on different days are not comparable, and a client who reschedules a call should not receive a report built on a longer window than everyone else.

Read your own report before sending it. The report is your early warning system. An account whose speed to first reply doubled is a problem you can still fix in week three, and a problem you cannot fix at all if you first see it the day before the renewal call.

Keep a per seat view for yourself. The client sees their account. You need the view across seats and accounts to know whether a bad month is one client's market or your own capacity. That internal view is what separates an agency that scales from one that adds accounts until quality collapses. If reselling this capacity under your own brand is the direction, white label DM automation covers what has to exist before the first client sees a report.

Automate the collection, not the commentary. Pulling the numbers should cost nothing by month ten. The two paragraphs of interpretation on top are the part the client is actually paying you for, and they are the part that cannot be templated. Where the underlying channel setup makes collection possible or painful is covered in the WhatsApp Business API rules for teams and in what click to WhatsApp ads require.

Where SetScale fits

SetScale is an AI setting layer built for teams and agencies rather than for one person with one inbox. The design assumption is that you are running several client accounts and several closers at once, which is also the assumption behind everything above: reporting per seat and per account is a requirement of that shape, not a feature added later. The broader picture is in the AI setting infrastructure overview.

A white label option is part of the direction, for agencies that need the client to see their brand rather than a vendor's. The product is not open yet, so the only thing to do today is join the waitlist. A seven day free trial is planned at opening.

What we will not do is tell you what a good show rate is. We have no client data, and any number we invented would be worse than the baseline you can compute from your own last ninety days.

FAQ

How often should an agency send a client report? Monthly for the full nine numbers, with a short weekly signal on speed to first reply and booked calls. Weekly full reports invite the client to react to noise, and monthly is long enough for the numbers to mean something without being long enough for a broken account to stay broken.

What if the client has no CRM to source revenue from? Report numbers 1 to 7 and state in one line that closed revenue is not tracked on this account. Then offer to fix it, because number 9 is the one that renews the contract, and an agency that installs the measurement usually keeps the account longer than one that only feeds it.

Should we report conversations the team never answered? Yes. Unanswered threads are the clearest argument for the capacity you are asking to be paid for. Hiding them protects a bad month and costs you the budget conversation.

How do you attribute revenue to the inbox honestly? Pick first touch, write the rule in the report, and apply it identically everywhere. Any attribution model is a convention, so the credibility comes from publishing the convention and never changing it inside a contract, not from picking the cleverest one.

Which single number should we add first if we only report bookings today? Show rate. It costs nothing to collect, it immediately exposes qualification drift, and it stops booked calls from being a number that can be inflated without anyone noticing.

Should the report include what went wrong? One line, in the same place every month. A report that only ever contains good news trains the client to discount all of it, including the parts that are true.

Conclusion

Agency client reporting is not a design problem, it is a definitions problem. Nine numbers, defined once, pulled on the same day for every account, ending on money the client recognises, will outperform a longer report every time. The work is in refusing to add the tenth metric because it looked good this month.

Start with the three that matter most, cost per booked call, pipeline value created and closed revenue attributed to the inbox, and build backwards from there. If a number cannot be computed honestly yet, name the gap in the report instead of filling it.

If you are running several accounts and want the reporting layer to come with the setting rather than after it, join the waitlist. SetScale is being built for teams and agencies, and the per seat view is part of the shape, not an add on. Join the waitlist to hear when it opens.