Agency reporting board that builds each client's Slides deck

By General Input

See every client's month, numbers and report status on one board, then generate their branded Google Slides deck in a single click.

Integrations

  • Google Slides
  • Google Analytics
  • Google Sheets
  • Google Drive

Type

App

Categories

  • Marketing
  • Operations

Build me a monthly reporting studio for my agency, where I can see every client's numbers and report status on one screen and generate the actual Google Slides deck from it. My client roster lives in a config sheet in Google Sheets, so read it with Get Values instead of hardcoding clients. The config tab has one row per client with the client name, their GA4 property id, the file id of their branded template deck in Google Slides, the spreadsheet id of their chart sheet, and the Google Drive folder id where finished decks should go. A second tracking tab in the same spreadsheet is keyed by client and month, with columns for report status (not started, draft, sent), the deck link, and when it was generated.

The main view is a month by month board with a month selector at the top, defaulting to the last complete month, and one card per client below it. Each card shows headline performance pulled live for the selected month with Google Analytics Run Report (GA4): sessions, total users and conversions for that month against the prior period, each with the percent change, plus a compact channel breakdown by default channel group. It also shows a status chip reading not started, draft or sent from the tracking tab, and a link to last month's deck. Fetch each card's metrics independently so the board fills in progressively rather than blocking on the slowest property, and visually flag any client whose headline metrics moved more than the configured threshold, so I can eyeball who had a rough month and needs a careful narrative before I generate anything.

Every card has a Generate report deck button that kicks off a background agent for that client and the selected month. The agent should: pull the month's figures and the channel breakdown from Google Analytics Run Report (GA4) for both the selected month and the prior period; push those figures into the client's chart sheet with Google Sheets Update Values, writing into the exact range the client's existing charts read from; copy the branded template with Google Drive Copy File into the client's reporting folder, named for the client and the reporting month; swap the metric and client placeholders with Google Slides ReplaceAllText, covering the client name, the month label, each headline metric and its change, and the top channel; replace the placeholder chart shapes with the live visuals using Google Slides ReplaceAllShapesWithSheetsChart, pointing at the chart sheet id and chart id from the config row and linking the chart so it stays connected to the sheet; write the commentary slide with Google Slides InsertText; then record the deck link, set the status to draft and stamp the generated time back into the tracking tab with Google Sheets Update Values so the board reflects it.

The commentary matters more than the rest. It should be plain language a client can read, explaining what actually moved and why, and it must explicitly call out month over month swings past a threshold I can set, defaulting to 15 percent, rather than narrating every metric. Use the channel breakdown to attribute the movement where it is honest to do so, for example organic search falling while paid held flat. If nothing crossed the threshold, say the month was steady and note the one or two things worth watching, rather than padding the slide.

Clicking a client opens a detail view with the full metric detail for the selected month, current versus prior with the channel table expanded, and the generated deck's slide thumbnails so I can review before sending without leaving the app. Get the slide object ids with Google Slides Get Slides, then render each one with Google Slides Get Page Thumbnail in slide order, clickable through to the deck itself. The detail view also has a control to flip the status from draft to sent, which writes back to the tracking tab with Google Sheets Update Values and updates the chip on the board.

A few behaviours to bake in. The month selector drives everything, so I can back-fill a period I never reported on or regenerate one after a data correction, and regenerating overwrites the tracked deck link for that client and month. The swing threshold is an editable setting that persists, defaulting to 15 percent. Generation runs in the background so I can keep working, with the card showing a generating state and refreshing itself when the agent finishes, and surfacing a clear error on the card if a step fails. Note in the app's setup guidance that ReplaceAllShapesWithSheetsChart requires the chart to already exist in the linked chart sheet and the template to contain matching placeholder text shapes, so the config sheet must carry the chart sheet id and the template has to be prepared that way first. When a deck already exists and I am only refreshing figures, Google Slides RefreshSheetsChart can update the embedded charts in place instead of copying a new template.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads