Back to case studies

Agency Ops

A CPG account team went from three-day answers to same-morning answers.

Every client question kicked off a fire drill: the account lead pinged each channel owner, everyone pulled their own data into Excel, someone stitched the sheets together, and an answer went back one to three days later. After the cleanup and automation, the account team self-served from one source of truth and answered the same questions in one to three hours.

Global CPG brand, run through a media agency. Account team of eight covering paid, owned, and earned channels.

Airbyte + dbt Core, Looker Studio for client-facing views

10xfaster client turnaround, days to hours

The problem

When the client asked a question, and they asked a lot of them, the account lead had to run a small project to answer it. Ping the paid social lead, the search lead, the programmatic lead, the influencer lead. Each one pulled their own numbers into their own Excel workbook. Someone else combined the workbooks by hand, reconciled the mismatched date ranges and channel names, wrote up the answer, and sent it back. Best case was a day. Bad weeks were three.

The pain was not that the work was hard. The pain was that every question started from scratch, because there was no shared, trusted view of the account. Three people asked to pull spend for the same campaign would return three slightly different numbers.

The work

Nobody on the account team had to do anything. I handled the platform connections, the pulls, the cleanup and the dashboard send. That is the whole reason the turnaround moved. The work did not get redistributed to someone more junior, it got taken off the team.

Spend meant platform spend. Whatever the ad platform reported was the number, and it was the number everywhere. That sounds obvious until you have three people in a room with three spreadsheets, each correct by its own definition and none of them matching. Picking one source and holding to it is what ended that argument, not a better reconciliation process.

The naming had to reconcile three levels rather than one. Campaign, ad and creative each carried their own name, and each had to line up with the level above it or the rollups came apart. Getting a campaign convention agreed is the easy half. Getting the creative underneath it to match, across paid, owned and earned, is where most of the work went.

Fifteen sources, four marts

Sources in

15ad platforms, owned channels and first-party feeds

Marts out

Paid
Owned
Earned
All channels
Fifteen sources landed in one warehouse and resolved into four marts: one per channel and one combining them. Spend meant platform spend in all four, which is what ended the argument about which sheet was right.

The solution

We consolidated the channel feeds into a single warehouse with one definition for spend, impressions, clicks, conversions, and every campaign attribute the team cared about. Naming got standardized across platforms, with a mapping layer that pulled legacy variants forward so historical comparisons held up.

On top of that we built the source-of-truth marts the account team actually needed for client work: campaign-level performance, weekly and monthly rollups, channel comparisons, and the specific cuts the client asked for most often. The account leads got a Looker Studio surface pointed at those marts. When a question came in, they answered it themselves, from the same numbers everyone else on the team was looking at.

We left the fire-drill workflow in place as a fallback for a month so people trusted the new one. After that first month nobody was using it.

Results

  • Client-question turnaround dropped from 1-3 days to 1-3 hours
  • Account leads self-serve the top 80% of client questions without pinging channel owners
  • Channel teams got their weekly Excel-stitching afternoons back
  • One number for spend across the account, ending the "which sheet is right" debate

“The client used to email on a Monday and get an answer Wednesday if we were lucky. Now I answer it before lunch and I know the number matches what everyone else on the team is seeing.”

Group Account Director, CPG Client

If your stack looks anything like this, let’s talk.

Engagements run four to eight weeks and land as pull requests against your analytics repo. One person, one email, no account team.