How We Cut 20 Hours from a Marketer’s Weekly Routine
Marketing Agency
- Problem: 6 ad accounts → 4 hours of manual export to cross-reference identical campaigns across different platforms.
- Goal: A single dashboard that shows ad performance in seconds.
- Priority: Accurate analytics in one window, with the potential to expand the product into a SaaS after internal testing.
- Timeline: 10 weeks for MVP, immediately testing with our own 1 million events/day.
- Result: Report built in 30 seconds. Ability to connect new platforms.
Learn how an internal "crutch" turned into a SaaS product – API adapters, metric normalization, caching, Vue frontend + Laravel backend.
Request a consultation
Our PR managers will analyze your problem and suggest solutions.
What Marketers Gained
The client received one analytical dashboard instead of 6 accounts – Google Ads, Facebook Ads, TikTok Ads, AdMob, Pangle, and AppMetrica. Metrics are already converted to a single currency, time zone, and campaigns are automatically matched. Identifying where a lead comes from takes less than 30 seconds. No need to switch between dozens of tabs – all key metrics in one place.
| Node and Purpose | Output |
|---|---|
| API Adapters – 6 ready connectors | Quickly add new data sources |
| Unified API + Database – normalizes currency, field names | Get clean, comparable metrics |
| Campaign Match Engine – cross-reference by internal IDs | One graph – one campaign. See its performance across platforms. |
| Vue Interface – render in < 500 ms | "Date-Source-Campaign" filter – no lags |
| Laravel Backend – 1 million events/day, horizontal scaling | Handle high loads – no crashes with traffic growth. |
API Adapters – 6 ready connectors
Quickly add new data sources
Unified API + Database – normalizes currency, field names
Get clean, comparable metrics
Campaign Match Engine – cross-reference by internal IDs
One graph – one campaign. See its performance across platforms.
Vue Interface – render in < 500 ms
"Date-Source-Campaign" filter – no lags
Laravel Backend – 1 million events/day, horizontal scaling
Handle high loads – no crashes with traffic growth.
Auto-update data — no exports or Excel summaries. Analysts open their browser and immediately see fresh KPIs.
Three Main Issues and How We Solved Them
| Problem | What We Did | What the Marketer Gained |
|---|---|---|
| 1. Google calculates CTR one way, TikTok another; currencies fluctuate from $ to € to ₽, time zones diverge. It took half a day of Excel routine to consolidate metrics. |
Created a normalization layer:
|
Opened the dashboard – all campaigns are already in one standard. "Honest" comparison of channels takes seconds, not hours. Connecting a new platform takes 1–2 days. |
| 2. Google Ads calls a campaign Spring_Sale, TikTok – spring-sale-TTK, Facebook – its own version. Consolidating results and understanding where a lead is cheaper could only be done manually. |
The match-ID algorithm unifies all variations under one internal code. In the dashboard:
|
The platform automatically matches campaigns by internal ID. Immediately see where clicks, lead cost, and conversion are higher. |
| 3. The system "crashes" on large data sets. Marketers built selections by dates, channels, and historical data. Queries overloaded the DB – waiting took minutes. |
Implemented a two-stage scheme:
|
|
1. Google calculates CTR one way, TikTok another; currencies fluctuate from $ to € to ₽, time zones diverge. It took half a day of Excel routine to consolidate metrics.
Created a normalization layer:
- 6 APIs → a single metric schema, one currency, one time zone.
- Automatic renaming of CPC, CTR, Cost fields.
- A new ad network connects in 1–2 days without changing the core.
Opened the dashboard – all campaigns are already in one standard. "Honest" comparison of channels takes seconds, not hours.
Connecting a new platform takes 1–2 days.
2. Google Ads calls a campaign Spring_Sale, TikTok – spring-sale-TTK, Facebook – its own version. Consolidating results and understanding where a lead is cheaper could only be done manually.
The match-ID algorithm unifies all variations under one internal code. In the dashboard:
- one campaign – one graph,
- sources highlighted by color.
The platform automatically matches campaigns by internal ID. Immediately see where clicks, lead cost, and conversion are higher.
3. The system "crashes" on large data sets. Marketers built selections by dates, channels, and historical data. Queries overloaded the DB – waiting took minutes.
Implemented a two-stage scheme:
- Raw data cache. Data flow is immediately written to a "raw" table and aggregated hourly.
- Background tasks. When a manager requests an analytical report, a background task is launched. After the report is generated, the system that it’s ready.
- The interface responds in < 0.5 s even with 1 million events/day.
- Deep analytics are built without lags and don't "crash" the server.
- You can run any slices and calmly move on to campaign optimization, without waiting for the screen to load.
Results
- Reduced analytics time from hours to seconds.
- 6 advertising platforms connected in a single window.
- Comparison of a single campaign across different platforms – in one graph.
- Processing up to 1 million events per day without performance loss.
- Ready for scaling as SaaS.
What's Next – And How It Can Help You
The platform has passed "combat tests" on our campaigns. The next stage is release as SaaS with a module for:
- Automatic KPI alerts → you notice dips before the budget drains;
- CPL/ROAS forecast based on history → plan purchases for the quarter ahead;
- Connectors to Power BI and Looker → pull data where your analytics operate.
Request a demo and discuss a pilot
We are ready to onboard the first external users and fine-tune it to your metrics.