# EC: White-label marketing analytics

Four marketing platforms. One source of truth, refreshed every hour.

*UK creative agency · United Kingdom · 2026 - present · 1 month, then ongoing*

## The brief

A UK creative agency needed to give their e-commerce clients a single view of marketing performance without logging into four different ad platforms. Off-the-shelf tools were either too generic or priced per seat, per source.

They wanted a white-label dashboard matching their designer's Figma pixel for pixel, deployable per client, pulling live data they own.

## What we built

- **3 dashboard screens.** executive, cross-platform, advertising
- **4 platform connectors.** built on the raw APIs, no third-party ETL
- **Filtering everywhere.** date, platform, campaign, shareable URLs
- **Drill-down.** campaign to ad set to individual ad
- **PDF export.** client-ready reports in one click
- **Passwordless auth.** email codes, role-based admin area
- **Per-client deploys.** each client fully isolated

## How it works

Ingestion runs on hourly and daily schedules into a PostgreSQL warehouse of daily fact tables at five granularities, from blended totals down to the individual ad, with automatic backfill on first boot and per-run audit logging. A read-time metrics layer turns the timeline into KPIs, trends and platform scores on demand, and the API and frontend share one set of Zod contracts, so a response the UI doesn't expect can't ship.

## Stack

- **Frontend:** Next.js, React, Tailwind CSS, TanStack Query, Recharts
- **Backend:** NestJS, Prisma, PostgreSQL, Zod
- **Sources:** Google Analytics, Google Ads, Meta Ads, Google Search Console
- **Infra:** Better Auth, Turborepo, Railway

## Numbers

- **4** marketing data sources, unified
- **1M+** datapoints processed every month
- **Hourly** refreshed, 24/7
- **99%+** pipeline reliability over the last month
- **5** granularities, blended totals to single ads
- **60 min** maximum age of any number on screen

## The hardest part

Making four APIs that disagree with each other tell one story. Each platform has its own schema, attribution logic and quirks; Meta alone can double-count a purchase across action types.

The nastiest problem was the metrics you can't add up: impression share, ad frequency and search position are meaningless when summed across days. We solved it by storing them as impression-weighted numerators and re-weighting at read time, so they stay mathematically correct for any date range, platform or campaign filter a user throws at them.

## What the client said

> "We were extremely impressed with the bespoke dashboard developed for us by Dock30. The entire process was handled efficiently and professionally, with excellent attention to detail throughout. The dashboard is well built, intuitive to use and tailored perfectly to our requirements. Their technical knowledge and ability to understand what we needed were exceptional, and they delivered a reliable solution that has significantly improved the way we work."
> Digital Creator, United Kingdom, rated 5/5

More work: https://dock30.com/work

## Contact

- Email: crew@dock30.com
- Book a call: https://dock30.com/contact
