The Problem: No Single View of Agent Activity
The client manufactures and sells fitness equipment through a team of sales agents who talk to customers constantly — across calls, emails, and SMS. The conversations were happening; what was missing was any way to see the whole picture. There was no single view of who talked to whom, when the conversation happened, or how it went.
The data existed, but it was scattered across separate platforms with no awareness of each other. The calling tool knew about calls. The support tool knew about tickets. Neither knew about the other, and nothing tied them to the same person. Tracking an individual agent's progress meant opening several tools and manually stitching together a story from fragments. Tracking collective team performance was, in practice, impossible.
The Solution: Automated Ingestion at the Source
GrowwStacks connected directly into the client's communication platforms: JustCall for calls and SMS, and Gorgias for support tickets. Using a combination of webhooks and scheduled HTTP calls, the system pulls in every agent, every call, and every ticket the moment it happens. There are no manual exports and no copy-pasting between tools — the data moves itself.
Ingestion is defensive by design. Duplicate events are removed before anything is written, and any record that fails to insert is logged to a dedicated failure table and raises an alert in the team's messaging channel. A broken feed announces itself rather than quietly leaving gaps in the numbers — which is exactly the property you need when the whole point of the system is to be the source of truth.
The Data Pipeline in BigQuery
From ingestion, everything flows into a full data pipeline built in BigQuery. Raw platform data lands first in its own tables, then gets cleaned and de-duplicated into staged tables, then resolves into canonical tables that the reporting layer reads from. Every call and every ticket is logged against the agent who actually handled it, so attribution is exact rather than approximate.
The reporting views sit on top as a deliberate seam. Dashboards read from views, never from raw tables directly, so the pipeline underneath can be restructured — tables renamed, staging logic changed, a new source added — without breaking a single chart. The interface the client sees stays stable while the plumbing behind it stays free to evolve.
Identity Resolution Across Platforms
This is the part that makes the numbers trustworthy. The same agent exists as a separate record on each platform, with no shared identifier between them. Left alone, that means one person is counted twice and every per-agent metric is quietly wrong.
GrowwStacks built an identity resolution layer that normalises each platform's user records, matches them against the existing agent list, and classifies the result. An unrecognised person is inserted as a new canonical agent with a generated unique ID. A recognised person updates the record that already exists rather than creating a second one. One agent, one record, one accurate set of numbers — regardless of how many platforms they appear in.
💡 Why identity resolution matters: Without it, a dashboard built on two platforms does not show one team twice as productive. It shows a team of phantom agents, each carrying half their real activity. Every metric above that inherits the error. Resolving identity at the pipeline stage is what makes everything downstream worth reading.
Live Reporting
The cleaned, resolved data feeds into Looker Studio, where the client has live dashboards: individual agent scorecards, daily call metrics, and daily ticket metrics, all visualised so performance is readable at a glance rather than reconstructed from raw rows. Each dashboard is built on a dedicated view, so the pipeline underneath can change without breaking what the client sees.
The Outcome
Instead of digging through three different applications trying to piece together what happened, the client opens one dashboard that tells him everything. It updates automatically, every single day, without anyone touching it. The manual reconciliation that used to stand between the team and an honest view of its own performance is simply gone.
The Right Fit — and When It Isn't
This build suits businesses running customer conversations across several disconnected platforms, where per-person accountability matters and where the same people appear in more than one system. Sales teams, support teams, and agencies with distributed agents fit naturally — the more channels a single agent works across, the more valuable a resolved, unified view becomes.
It is less suited to teams operating entirely inside one platform that already reports well on its own, or to teams small enough that a manual weekly review is still faster than building and maintaining a pipeline. The value here scales with fragmentation; where there is little fragmentation, there is little to unify.