Why we built a reporting system instead of buying off-the-shelf
In most agencies, the monthly report is built by hand. Someone exports data from several ad accounts, pastes it into a spreadsheet, and hopes an interface update didn’t break a column along the way.
We built our own reporting and campaign management system because our clients manage real budgets, and you can’t wait until the end of the month to discover that a campaign burned through its budget. The system runs AI agents that continuously collect and analyze data, alerting while there’s still time to fix things.
We considered off-the-shelf tools. They know how to display data, but they don’t understand the concept of a course cohort, and connecting spend to actual enrollees was something we’d have to build manually on top of them every month. That was precisely the part we wanted to eliminate.
The goal wasn’t to build yet another pretty dashboard, but an infrastructure that every client can trust even when the account manager isn’t in front of the screen at that moment.
What the system actually is: from a static report to a live infrastructure
Every client gets a dashboard that connects their ad accounts (Facebook, Google, TikTok) alongside the CRM system. The data isn’t imported once a month; it’s pulled and updated continuously, so the picture the client sees matches what’s happening now, not three weeks ago.
On top of the data sit several tools that communicate with each other, not separate tools where each lives in its own tab:
- Marketing Dashboard: Spend, leads, enrollees, and costs broken down by course, platform, and cohort, all in one place.
- Leads and Funnel: Each lead is tagged according to its true status in the CRM, ensuring the conversion rate the client sees is real.
- Budgets Screen: How much remains for each course and cohort in real time, without waiting for month-end.
- Rules Engine: Checks campaigns against predefined conditions and detects rules that should have triggered but didn’t.
When a campaign deviates from what was defined—for example, high spend against a low close rate—the system sends an alert instead of waiting for someone to notice it in a spreadsheet. Sometimes the alert triggers an automated action, and sometimes it flags “requires human eyes” and waits for approval, because with large spend, decisions are best made by a human.
Cost-per-enrollee: The metric that actually tells the story
Cost per lead is a convenient and misleading metric. A cheap lead that doesn’t enroll in a course still costs the business money. That’s why we developed the “cost-per-enrollee” methodology: summing all ad spend across the full campaign period of a specific cohort, and dividing by the actual number of enrollees that cohort generated, based on the true CRM status and not on estimates.
The difference jumps out when looking at two courses with similar cost per lead but a 2x difference in cost per enrollee. Suddenly it’s clear where to shift the budget—not based on gut feeling, but on a number representing actual revenue.
Advertising for a single cohort usually spans several months before it closes, which is why the metric looks at the entire cohort lifecycle rather than a single month. An evergreen course without a defined cohort continues to be tracked monthly, ensuring no process disappears from the report just because it isn’t scheduled like the others.
Automated Tagging and Budgeting: Less manual work, fewer errors
Before the system, attributing spend to a course and cohort was done manually, and anyone who has done this knows how easy it is to make an error on a single date and mix up months. Today, a tagging agent parses campaign names and identifies the course and cohort according to predefined rules, while the budgets screen shows the client in real time how much was spent and how much remains, without a marketer needing to update a spreadsheet at the end of each week.
When something isn’t clear—such as a campaign with an unconventional name—the system doesn’t make silent guesses. It openly flags a data gap so the client sees “this number is partial” rather than receiving a report that looks complete but isn’t. A visible issue is far better than a figure that feels right but misleads.
Models in production: Gemini for insights, Claude for building
Two types of AI run in the system for two distinct roles. Inside the product, Gemini 3.x generates a summary and three natural-language recommendations for each client, based solely on their own data. No guessing and no generic content—only insights that complement what’s already in the report.
Behind the scenes, the system itself is built and maintained by Claude-based AI agents: Opus 4.8 for complex tasks like feature planning or security audits, and Haiku for low-cost, mechanical tasks like updating documentation or minor fixes. This is the agentic implementation we mean: not just a product running AI for the client, but a development process where agents build, test, and improve the code itself under human supervision.
Every change follows a strict pipeline: an agent builds on a separate branch, an automated quality gate checks security and tenant isolation, and only after approval is the change deployed to the production client environment. No change goes live without verification, whether authored by human or agent.
The choice between an expensive model and a cheap model isn’t just a budget consideration. A mechanical task run on an oversized model doesn’t get executed any better—it just costs more and responds slower.
What this actually means for the client
A client managing multiple courses and cohorts in parallel sees one accurate picture, without asking five people and getting five different versions. When something deviates, they know before excess spend accumulates, not after. And no client ever sees another client’s data, because tenant isolation is built into the system from the ground up, not patched on as an afterthought.
The system also doesn’t try to replace your account manager. It equips them with accurate, up-to-date data so conversations with you focus on strategy, rather than deciphering why a number in a spreadsheet doesn’t match what actually happened.
This is our clearest example of an Agentic AI implementation that doesn’t remain just a slide presentation: a running system handling real money, proving itself to clients week after week. And because we use it ourselves to manage our clients, any issue is caught by us before it ever reaches you.