Data & Marketing Intelligence
How we replaced 100 Google Sheets tabs and App Scripts with a zero-intervention reporting system that processes 5GB of live data daily — and gives every brand owner real-time visibility into exactly their own spend.
The problem
Before this system existed, the agency was running their entire reporting operation across 10 Google Sheets workbooks — roughly 100 tabs in total — with Google App Scripts written to automate parts of the data flow. Scripts pulled numbers from Google Ads, Meta, and Shopify on a schedule, populated the right tabs, and tried to keep the reports current. On paper it looked automated. In practice, it was fragile.
App Scripts have hard execution limits, break silently when API responses change, and offer no real error visibility. As the brands scaled and data volumes grew, scripts started timing out, tabs stopped refreshing, and the team spent more time debugging broken automations than acting on the data. There was no consolidated view, no reliable pipeline, and no way to trust that yesterday's numbers were actually current.
On top of the broken automation, the App Scripts had no access control layer. The agency founder was personally fielding calls from brand owners asking the same question every day: "how much did you spend on my brand?" The Sheets couldn't be shared securely — showing one brand's data meant showing everyone's. Every answer still required a manual export or a phone call.
The solution
We built a unified backend that takes over every part of the reporting process — data collection, normalization, business logic, and delivery — and runs it automatically, every single day. The agency team wakes up to 35 complete, accurate reports. Each brand owner logs into their own isolated portal and sees exactly their spend and revenue. Nobody pulls a spreadsheet. Nobody makes a phone call.
How it's built
Four processing stages with a role-based access layer on top — raw data flows from four source platforms through to isolated brand-owner views without touching a spreadsheet.
What's inside
Every report is generated automatically overnight and waiting when the team arrives. Here are the six categories that make up the 35.
Daily, weekly, and monthly ad spend broken down per brand and per platform — Meta, Google, and combined totals. Always accurate, always current.
Which creatives are driving results and which are fatiguing — click-through rates, conversion rates, and ROAS per creative asset across every brand.
View-through rate, completion metrics, and audience retention for every video ad running across all brands — tied back to spend and revenue.
SKU-level Shopify sales data matched against ad spend, so the team knows exactly which products the ads are actually converting on.
Minimum Advertised Price reports giving the agency brand-level pricing visibility — flagging any brand that's drifting below agreed price floors.
Side-by-side Meta vs Google vs Shopify performance for every brand — normalized into a single comparable view regardless of platform differences.
At scale
What the system processes on a normal day. Every day. Automatically.
of raw data processed daily from all ad platforms and Shopify stores
brands unified in one normalized data model with completely isolated schemas
reports auto-generated and ready every morning — zero manual steps
in ad spend tracked, analyzed, and reported across all brand accounts
Role-based access
One of the core architectural decisions was building a multi-tenant access layer on top of the reporting system. The agency sees everything. Each brand owner sees only their own brand.
This solved a real accountability problem. The agency founder was fielding calls from 30 different brand owners asking the same question every day. Now each brand owner logs into their own portal and sees exactly their spend, ROAS, and Shopify revenue — nothing from any other brand.
Data isolation is enforced at the PostgreSQL schema level, not just in the UI. Brand A cannot access Brand B's data under any circumstance — it's architecturally impossible, not just hidden.
Agency — Full access
The agency team sees the complete picture — every brand, every platform, every metric — from a single unified view. Cross-brand comparisons, total portfolio spend, and consolidated reporting all in one place.
Brand Owner — Isolated view
Each of the 30 brand owners logs in and sees only their own brand's data — spend, ROAS, Shopify revenue, and product performance. No other brand is visible. No phone calls required.
Tech stack
The full stack powering the data pipeline, normalization, storage, report generation, and role-based access control.
Before
After
Start a project
Whether you're managing one brand or thirty, we build the backend infrastructure that makes your data work for you — not the other way around.
Get in touch →