A Reporting Platform That Proves Client Value
How we designed the platform a digital marketing agency's own team built to show every client, on every reporting call, the calls, rankings, and work their retainer paid for.
1 yr
Of call tracking data backfilled
2 clicks
For an analysis that took 30 minutes
9
Roadmap milestones, each shippable on its own
CLIENT OVERVIEW
A digital marketing agency serving local service businesses, most of them personal injury law firms. It had already built a lot: a custom tracking pixel, a UTM plugin, a data warehouse, and a branded dashboard. But the dashboard showed sessions, events, and rankings, not leads or money. The CEO joined most monthly reporting calls because the CEO was the one who could turn that data into a story a client believed. The agency had an in-house dev and data team. What it needed was an architecture, a sequence, and someone in the room asking what an account manager needs on a live call.
THE PROBLEM
What was broken
Reporting proved activity, not value
The dashboard recreated analytics data on a branded page. It could show that traffic moved, but it couldn't show which calls came in, where they came from, or what the work was worth against the retainer. Clients asked whether leads were up, and the answer depended on who was on the call.
The CEO was the reporting system
The CEO and one senior SEO leader ran most reporting calls, jumping between six to eight tools to tell the story from memory. Account managers couldn't learn that by watching, and when they built their own reports, they reached for metrics clients didn't care about.
The lead data wasn't connected yet
Calls, chats, and forms, the first thing the CEO asked for, still weren't flowing into the warehouse. Without them, every added dashboard page showed more activity and still couldn't answer the client's real question: did this bring me cases?
THE GOALS
What success looks like
Get call tracking data into the warehouse first, before building more dashboard
Attribute each call to a source using what the caller said, the number they dialed, and the visit that led to it
Show value delivered against the retainer with numbers an account manager can defend, without needing every client's CRM
Give account managers one fast, client-scoped report they can run on a live call
OUR APPROACH & SOLUTION
Connection first, presentation second
We assessed the existing pixel, warehouse, and dashboard, then wrote a stack-agnostic architecture and a nine-milestone roadmap. The agency's own dev and data team built the platform. We ran six working sessions with that team, set the order of work, and tested each release against one question: can an account manager run a client call from this?
Phase 1
Architecture and Roadmap
One canonical data model, with every tool plugged in as a replaceable lane. Attribution stays deterministic on hard keys like phone and email, and AI enriches it but never decides a dollar figure. Nine milestones, from auditing the existing stack to an AI insight layer, each shippable on its own.
Phase 2
Calls First
Their team connected call tracking and backfilled about a year of call history into the warehouse. On our recommendation, AI reads each transcript for the answer to "how did you hear about us" and maps it to a source. Sources are ranked by reliability: what the caller said, then the number they dialed, then the campaign tags on their visit.
Phase 3
Value Without Waiting on a CRM
Most law firm cases take months or years to pay out, and few clients had a clean CRM. So value comes from the CEO's own lead-value math, the hours the team delivered, and the retainer, with a CRM as an optional upgrade. A connections view shows each client what every integration adds.
Phase 4
Built for the Live Call
Their team built a custom app to replace the dashboard tool, and we shaped it for the live call: the client stays selected across every page, pages stay cached for the day of the call, and account managers can switch off modules that don't apply. A PDF report goes to clients who skip the meeting. We mapped the reporting-call training to each page, so the playbook and the platform tell the same story.
WHAT WE BUILT
Features and capabilities
01
Client Health Status
The status page blends leads and visibility into one weighted health score with a trend, so every reporting call opens with a verdict. A down week shows up there before the client finds it.
02
Call Tracking Per Client
Calls, answer rate, first-time callers, missed calls, and recordings for each client, with about a year of history in the warehouse. Caller identity stays masked, and the recording behind any number is one click away.
03
Call Source Attribution
We designed how the platform decides where a call came from. AI reads the transcript for the caller's own answer and the platform trusts that first, then falls back to the tracking number they dialed, then to the campaign tags on their visit.
04
Value Against the Retainer
The value page puts leads, work invested from the team's logged hours, and value generated on one page. It counts leads above the prior 90 days and multiplies them by a lead value, so it works for clients who have no CRM.
05
Competitor Ranking Grids
Map pack ranking grids for each client location, with Analyze and Compare views against competitors. They answer the question every law firm owner asks: how am I doing against the firm down the street?
06
AI Search Visibility
Visits and citations from AI search tools, shown for clients enrolled in AI search tracking. Account managers can answer AI search questions with the client's own data instead of a guess.
07
Live-Call Controls
The selected client stays selected on every page, and pages cache on first load for that client and date range, so nothing reloads mid-call. Per-module toggles hide anything that doesn't apply to that client. We recommended these controls after the first walkthrough, and their team built them.
08
Report and PDF Summary
The report page tells the story of the past 90 days and the plan for the next 90, and generates a PDF summary. Decision-makers who weren't on the call see the same story.
09
Connections View
Shows each client what every connected source adds. Lead tracking gives verified leads by channel, team hours show work above the retainer, and a CRM upgrades lead estimates to signed cases, as an option rather than a requirement.
KEY TAKEAWAYS & IMPACT
What changed for this business
2 clicks
For an analysis that took 30 minutes
Breaking a multi-state client's results down to a single state took a senior SEO leader about 30 minutes in analytics. In the platform, it took two clicks, and it became the tool they reach for on their hardest client calls.
1 yr
Of call history in one warehouse
About a year of call tracking data sits next to traffic, rankings, and search data in one warehouse. Account managers can show calls, answer rate, missed calls, and first-time callers per client, and play the recording behind any number.
70+
Client accounts lined up for rollout
The client-facing version ran on four demo accounts before launch. The rollout to more than 70 client accounts is planned for October 2026, largest clients first, so account managers can run each client's reporting call from one place.
THE OUTCOME
What it's built to deliver
-
Account managers get one client-scoped tool and one call flow, so the story the CEO and a senior SEO leader told from memory becomes something any account manager can learn and repeat.
-
Each client sees value against the retainer, built on lead-value estimates and logged hours, without waiting on a CRM that few clients have in place.
-
Dollar figures trace on hard keys like phone and email, and AI only enriches them, so an account manager can defend every number on a live call.
-
The first version runs inside the agency, where the SEO team and some account managers use it on client calls.
-
Agency leadership made the platform one of the three parts of its sales system.
-
Clients who skip the meeting get the same story in a PDF summary, so decision-makers who weren't on the call see what was delivered.
-
Account managers hide modules that don't apply to a client, so a call never stalls on a blank or broken page.