Auto-build QBR decks in Google Slides every quarter

On the first Monday of every quarter, draft a Google Slides QBR deck for every Tier 1 customer and Slack each CSM links to their finished decks.

Agentic Task
Google SlidesGoogle DriveGoogle SheetsHubSpotSlackSalesOperationsAI ReportsContent GenerationMeeting Workflows

On a quarterly cron, first Monday of every quarter at 7am ET, I want an agent that drafts a Google Slides Quarterly Business Review (QBR) deck for every Tier 1 customer so each CSM walks into prep meetings with a 70 percent finished deck.

Step 1: In HubSpot, List Companies filtered to our QBR tier (the custom company property we use to mark Tier 1). For each matching company, run HubSpot Get Company to pull current ARR, renewal date, owner (CSM), industry, and any notes fields we have. Then HubSpot List Deals associated with that company to grab the open opportunities and their stages and amounts.

Step 2: Skip any company whose renewal date is more than 9 months from today. Those are too early to QBR.

Step 3: From our shared Customer Usage spreadsheet in Google Sheets, Get Values from the past-quarter tab. Match rows to each company by company ID (the key column) and pull logins, key feature adoption percentages, and support ticket count. If a company has no row, flag it but keep going.

Step 4: For each customer, Google Drive Copy File to clone our QBR master template into that customer's account folder in Drive. Name the copy "{Customer} QBR {Quarter} {Year}".

Step 5: In Google Slides ReplaceAllText on the new copy to swap template tokens with the data we collected: {{customer}}, {{arr}}, {{renewal_date}}, {{owner}}, {{open_opps}}, {{logins}}, {{feature_adoption}}, {{ticket_count}}, plus AI-drafted narrative for {{wins}}, {{risks}}, and {{next_quarter_goals}}. Generate the narrative from the structured HubSpot and usage data, kept to 3 to 5 bullets per section in plain talk-track language.

Step 6: Use Google Slides ReplaceAllShapesWithSheetsChart to swap the chart placeholders in the template with embedded, live-linked charts from the Customer Usage sheet (one for logins trend, one for feature adoption, one for support volume). Embedding live charts means the deck refreshes if the sheet updates before the meeting.

Step 7: For each CSM, group the decks they own and Slack Send a Message as a DM with a list of links to their decks and a one-line health summary per customer (green/yellow/red plus the headline reason). If a deck failed to generate or a customer was missing usage data, call that out in the DM so the CSM can patch it before their meeting.

Quality bar: never edit the master template, always copy first. Don't create executions for customers outside Tier 1 or outside the 9 month renewal window. If HubSpot, Drive, Sheets, or Slack errors on a single customer, log it and continue with the others so one bad row doesn't block the batch.

Additional information

What does this prompt do?
  • Drafts a 70 percent finished QBR deck for every Tier 1 customer at the start of each quarter, so CSMs walk into prep with a head start instead of a blank slide.
  • Pulls each account's renewal date, ARR, owner, and open opportunities straight from HubSpot, then layers in last quarter's usage metrics from your shared Customer Usage sheet.
  • Writes a short health narrative (wins, risks, next quarter goals) directly into each deck and embeds live usage charts so the numbers stay current.
  • DMs every CSM a Slack message with links to their decks and a one-line health summary, so nobody has to chase down where this quarter's QBRs live.
What do I need to use this?
  • A HubSpot account with access to companies and deals, including the field you use to mark QBR tier.
  • A Google account with Slides, Drive, and Sheets connected, plus a QBR master template stored in Drive.
  • A shared Customer Usage spreadsheet with last quarter's logins, feature adoption, and support ticket counts keyed by company.
  • A Slack workspace where CSMs can receive direct messages from the workflow.
How can I customize it?
  • Change the cadence or run time. The default is the first Monday of every quarter at 7am ET, but monthly or mid-quarter check-ins work the same way.
  • Adjust the renewal window. Out of the box it skips customers whose renewal is more than 9 months away. Tighten or loosen that filter to match your motion.
  • Swap which usage metrics get embedded, or change the health narrative tone (executive summary vs. detailed talk track).
  • Send the summary to a shared CSM Slack channel instead of DMing each owner individually.

Frequently asked questions

Does this overwrite our QBR master template?
No. The workflow copies the master into each customer's folder before filling in any data, so the master stays clean and reusable.
What if a customer is missing usage data in the sheet?
The agent flags it in the Slack summary and leaves the chart placeholders untouched, so the CSM can decide whether to fill them in or remove the slide.
Can I run this on demand for one customer instead of the whole tier?
Yes. You can ask the agent to draft a single QBR deck any time outside the quarterly cadence. The same template and logic still apply.
Will it work with Salesforce instead of HubSpot?
This template is wired for HubSpot, but the structure (CRM accounts plus a usage source plus a Slides template) translates directly. Swap the HubSpot steps for Salesforce when you customize.
How are the charts kept up to date after the deck is generated?
Charts are embedded as live links to your Customer Usage sheet, so they refresh inside Slides whenever the source data updates.

Walk into every QBR with a 70 percent finished deck.

Connect HubSpot, Google Slides, Drive, Sheets, and Slack once, and Geni drafts a QBR deck for every Tier 1 customer at the start of each quarter.