AI application. Campaign results from five sources in one dashboard
01. Starting point
The client is a marketing agency running campaigns for real-estate developers. Every project they manage is a separate budget, separate campaigns, and a separate set of sales goals.
Performance data was scattered across five independent systems: Google Analytics, Google Ads, Search Console, Meta Ads, and social profiles. None of them answered the question a developer actually asks: how is my project doing. Each showed a slice, in a different layout, with a different conversion definition and a different comparison period.
The result was a monthly ritual of collecting numbers by hand, moving them into a report, and explaining them in comments. The report was built once a month and was outdated on the day it was sent. A developer who wanted mid-month results had to ask for them.
The second layer of the problem was collaboration itself. Communication strategy, brief, system access, agreements, and billing lived in emails, spreadsheets, and drive documents. There was no single place where client and agency saw the same project state.
02. Solution
We built an application that connects campaign results from every channel with the operational side of collaboration.
The developer logs into a dashboard tied to their project and sees current data without asking anyone for a report. In the same place they have the communication strategy, brief, task list, and billing.
The agency team works in a separate admin panel where they configure integrations, manage access, and use an AI assistant that prepares analyses and working materials.
The dashboard stopped being a report and became part of the service. The agency no longer delivers a file summarizing last month; it delivers ongoing access to results.
03. How it works
Data from five sources in one view
The application pulls data from Google Analytics, Google Ads, Search Console, Meta Ads, and social profiles, then presents it in sections: traffic and user behavior, Google paid campaigns, organic visibility, organic Meta activity, and Meta paid campaigns.
Coverage includes users and sessions, traffic sources, devices, demographic and geographic data, costs by platform and in total, impressions, clicks, CTR, CPC, conversions, and paid and organic queries with position. Every metric is shown against the previous period, for a week, thirty days, a year, or a manually chosen range.
Sync runs on a cycle with an interval set per project, and can be triggered immediately when needed.
Conversions defined per project
This is the difference between a dashboard and an off-the-shelf reporting tool. Google Analytics events and Google Ads / Meta conversion types are mapped by hand, split into primary conversions and micro-conversions.
That matters in real estate, where the buying path lasts months. An apartment inquiry, a project card download, and a presentation booking are events of very different weight, and each project defines them its own way. A rigid metric set imposed by a tool would force reality to fit the report instead of the other way around.
Additionally, each project gets filters for campaigns, URLs, and queries so the dashboard shows only actions that belong to it, even when they run from an account that serves many projects.
Operational collaboration layer
Beyond analytics, the client has four modules in the dashboard. Strategy for communication with editable sections and background saving. Client card with brief, survey answers, links, and system access. Tasks with a simple three-status split and assignee. Billing with line items, files, and payment status.
What the client sees is set individually: an administrator decides which tabs each user sees and which projects they can access.
AI assistant for the agency team
The assistant lives in the admin panel and has access to data for the managed projects. It answers questions about costs and comparisons between Google and Meta campaigns, prepares content plans, helps with audiences and message drafts, and exports results to CSV: daily metrics, comparison tables, content plans, ad copy.
The assistant works on system data, not on general information from the internet. Conversations are stored in history, so an analysis from a week ago stays available.
On top of that sits an internal knowledge base and wiki with a text editor, where the team stores procedures and materials reused on later projects.
Access and security
Client and agency login paths are separate. Password authentication, email magic-link login, and password reset are available. Admin accounts are additionally protected with a one-time code from an authenticator app.
The system distinguishes four permission levels, from full administration to read-only. Keys for external integrations are stored encrypted in the database.
Technologies used
- Frontend: React, TanStack Router with server-side rendering, TanStack Query, Vite
- Styling: Tailwind CSS 4, custom components based on Radix
- Data visualization: Recharts
- Validation: Zod
- Authentication: better-auth, password, magic link, two-factor TOTP, roles
- AI layer: OpenRouter, streamed responses, domain tools operating on system data
- Content editor: TipTap
- Integrations: Google Analytics 4, Google Search Console, Google Ads, Meta Graph and Meta Ads, Instagram, YouTube
- Hosting: own VPS, HTTPS with Let’s Encrypt
04. Results
The report stopped being a product someone has to manufacture. Data update themselves, and the client opens them when needed, not when a summary deadline happens to fall.
Team time shifted from collecting numbers to interpreting them. Work that used to mean copying data from five panels now focuses on conclusions and budget decisions.
The developer sees one version of truth about their project, covering paid and organic activity, Google and Meta, traffic and conversions, with comparison to the previous period.
Collaboration stopped being scattered across emails and spreadsheets. Strategy, brief, access, tasks, and billing live in the same place as results, and both sides look at the same project state.
For the agency the dashboard is part of the offer, not an account-management cost. The tool the client sees after login is a sales argument in the conversation with the next developer.
