📊AI report generation

Engage Media: dashboard commentary that writes itself

We built Engage Media an AI reporting system that writes campaign-performance commentary for every client dashboard automatically, and keeps that commentary correct no matter which date range the client selects.

In short

We removed the monthly narrative-writing job across 26+ clients

Engage Media is a media agency that runs paid campaigns for more than 26 clients, each with their own performance dashboard. Every month the team wrote the narrative commentary on those dashboards by hand, and the commentary broke the moment a client changed the date range. We replaced that with an automated reporting system: ad data from nine platforms flows into a warehouse, an n8n workflow generates the commentary with Gemini per client and per dashboard section, and Looker Studio binds the right narrative to whatever date range the client picks. The manual monthly writing is gone, the commentary stays accurate for any range, and any edits a person makes are kept when the workflow runs again.

🎯The problem

Hand-written commentary that broke on every date change

Client dashboards are only useful if the numbers come with a story. So every month, someone on the Engage Media team sat down and wrote the performance narrative for each client: what spend did, which campaigns moved, what changed since last period. Across 26+ clients that is a lot of repetitive writing, and it landed at the same time every month.

The deeper problem was correctness. The commentary was written for one fixed period, but a dashboard lets the client drag the date range to whatever they want. The moment a client looked at a different window, the words on the page no longer matched the chart above them. The narrative was stale by design, and there was no good way to keep static text in sync with an interactive report.

🧭The approach

Generate the narrative once, bind it dynamically

The fix was to stop treating commentary as a block of static text and start treating it as data. If a short narrative exists for every client, for every dashboard section, and for every date range that matters, then the dashboard can simply look up the right one instead of showing whatever was typed last month. That turns reporting commentary into something a workflow can produce on a schedule and a report can query on demand.

We kept the division of labour deliberate. The AI extracts the figures and drafts the words. The structure, the routing, and the storage stay deterministic, one clean row per client, per section, per date range, so the same input always lands in the same place. That is what makes the dynamic binding reliable rather than a guess.

⚙️What we built

An ingestion-to-narrative reporting system

An ingestion layer feeds a warehouse, an n8n workflow generates commentary with Gemini per client and per section, and Looker Studio binds the right narrative to the date range the client selects. Built on Windsor AI, BigQuery, n8n, Gemini, Looker Studio, and Google Sheets.

1

Ingest nine platforms

An ingestion layer built on Windsor AI pulls performance data from nine ad platforms into BigQuery, so every client's numbers live in one consistent warehouse instead of scattered platform exports.

2

Generate commentary monthly

A monthly n8n workflow reads each client's data and uses Gemini to write the narrative per client and per dashboard section. The output is stored as one row per client, per section, per date range, so the right text always exists for the right window.

3

Bind it to the live date range

Looker Studio pulls the matching narrative dynamically, so when a client changes the dashboard date range the commentary changes with it and keeps describing the data on screen.

4

Preserve human edits

When a person refines a piece of commentary, those edits are preserved the next time the workflow runs. The automation never silently overwrites human judgment.

5

Expand to per-page insights

We later extended the system to per-page insights, driven by a Google Sheets config layer so the team can shape what gets generated where without touching the workflow.

🧱The stack

Named, and chosen on purpose

  • Windsor AI ingestion layer pulling nine ad platforms into one place
  • BigQuery as the warehouse all client performance data lands in
  • n8n orchestrating the monthly generation run with no execution timeouts
  • Gemini drafting the commentary per client and per dashboard section
  • Looker Studio binding the matching narrative to the live date range
  • Google Sheets as the config layer driving the later per-page insights
📈Outcome

The monthly job of writing dashboard commentary by hand across 26+ clients is gone. The team no longer rewrites the same narratives every period, and the commentary now stays correct for any date range a client chooses, because the dashboard looks up the right text instead of showing last month's.

  • Manual writing eliminated across every client dashboard, every month
  • Always-correct commentary that matches whatever date range the client selects
  • Human edits respected and preserved when the workflow re-runs
  • One source of truth with nine platforms unified in the warehouse and per-page insights added on top
"Bastien was great to work with. He is very responsive, supportive, and takes strong initiative throughout the project. He is amazing at what he does and the value he offers. He did strong research, stayed accountable, and handled his responsibilities very well. He also completed tasks before the deadline, which made the whole process smooth and reliable. I strongly recommend Bastien to any client looking for someone dependable, proactive, and professional."
Alyssa Phillips, Engage Media
Verified on Upwork
📬Contact

Want your reporting to run like this?

Book a free audit. We will map where your reporting eats time every month and show you exactly what to automate first. Confidential, no obligation.

Book My Free Audit