What we do with AI Pricing AI Blog Tools FAQ Talk to us

How to Automate Your Sales QBR With AI

QBR prep takes 4-8 hours per account and most of it is pulling the same data every time. Here's how to build an AI workflow that generates a complete QBR brief automatically from your CRM, usage data, and call history.

QBR preparation is one of the highest-value, highest-friction activities in customer success. High-value because a well-prepared QBR strengthens the relationship and surfaces expansion opportunities. High-friction because pulling the data, formatting the deck, and summarizing the account history takes most of the morning just to prep for one meeting.

An AI workflow handles the data pull, the summarization, and the first draft of the brief automatically. The CSM spends 20 minutes reviewing and personalizing instead of 4 hours assembling.


What a QBR brief needs to contain

Before automating anything, define what the output should look like. A complete QBR brief has six sections:

Account health summary. Current health score, trend over the past quarter, key risk factors, and notable positive signals. The CSM should know whether they’re walking into a defensive renewal or an expansion conversation before they start.

Usage and adoption. Active user count vs. licensed seats, core feature adoption rates, usage trend (up, down, flat), and any features they’ve never used that could drive value if adopted.

Value delivered. Specific outcomes the customer has achieved - time saved, revenue influenced, cost reduced. This requires either integration with their success metrics or a summary of what was discussed in previous QBRs and calls.

Support history. Open tickets, resolution time on closed tickets last quarter, any recurring issues or escalations. Shows you’re paying attention and gives the CSM context to address problems proactively.

Expansion signals. New hires at the company (more seats?), usage patterns in a specific department (land-and-expand?), features they’ve asked about that they’re not using. This is where the expansion conversation comes from.

Recommended agenda and talk tracks. Based on the above, what should the meeting focus on? What are the 2-3 things the CSM should make sure to cover?


Step-by-step: building the QBR automation workflow

Step 1: Set the trigger

You have two trigger options. A scheduled trigger scans for accounts with QBRs in the next 7 days and generates briefs automatically each Monday. A manual trigger lets the CSM generate a brief on-demand by pasting a HubSpot company ID into an n8n form.

Start with the scheduled trigger - it removes the action required from the CSM entirely.

In n8n, add a Schedule Trigger set to run every Monday at 7am. Then add a HubSpot node that searches for companies where a custom next_qbr_date property falls within the next 7 days.

If you don’t have a next_qbr_date field yet, create one in HubSpot under Settings > Properties > Company Properties. Have CSMs enter the date when they schedule QBRs. This field drives the automation.

Step 2: Pull CRM account data

For each company found, add a HubSpot node set to Get Company. Pull:

  • Company name, industry, employee count
  • Contract value (from associated deals)
  • Renewal date
  • CSM owner
  • ai_health_score and ai_churn_risk (if you have the churn scoring workflow running)
  • Last CSM activity date
  • Any custom fields you track for accounts (industry vertical, use case, tier)

Add a second HubSpot node to pull the company’s associated open and recently closed support tickets from your support tool (if you have a native HubSpot integration) or via a Zendesk or Intercom API call.

Step 3: Pull usage data

If your product usage data lives in a Google Sheet or data warehouse, add a Google Sheets node (or Postgres/MySQL node) to pull the current quarter’s usage metrics for this account.

Target fields:

  • Monthly active users (last 3 months, to show trend)
  • Licensed seats
  • Core feature adoption rate
  • Any feature-specific usage your product tracks

If you don’t have structured usage data accessible via API, this is the one step that may require a manual input. Have CSMs paste the usage numbers into an n8n form field that feeds the workflow. Imperfect, but better than skipping it.

Step 4: Pull call history from Gong

Add an HTTP Request node to call the Gong API for calls associated with this account in the last 90 days:

GET https://api.gong.io/v2/calls?fromDateTime={{ 90DaysAgo }}&primaryUserIds={{ csmGongUserId }}

Filter by participant company domain to get only calls with this account.

For each call, pull a brief summary (use Gong’s AI summary if available via API, or fetch the transcript and summarize in Claude). You’re not doing full transcript analysis here - you want a 1-2 sentence summary of each call to give context about the relationship history.

If the account has more than 10 calls in the period, take only the 5 most recent. You want context, not a novel.

Step 5: Pull expansion signals

Add an HTTP Request node to check for relevant LinkedIn signals. If you have a Clay account, Clay’s API can check for recent hires at the company that match your buyer personas - a signal that the company is growing into your product’s use case.

If you don’t have Clay, use the company’s headcount data from HubSpot (if you keep it updated) and compare to the licensed seat count. A 50-person company with 10 licenses has room to expand.

Also check HubSpot for any open opportunities or expansion deals associated with the account - you don’t want to walk into a QBR without knowing if there’s already an active renewal or upsell discussion in the pipeline.

Step 6: Call Claude to generate the QBR brief

Add an HTTP Request node to call the Claude API.

{
  "model": "claude-opus-4-6",
  "max_tokens": 1500,
  "messages": [{
    "role": "user",
    "content": "You are a customer success assistant. Generate a QBR preparation brief for the following account.\n\nAccount: {{ $json.companyName }}\nIndustry: {{ $json.industry }}\nContract value: ${{ $json.contractValue }} ARR\nRenewal date: {{ $json.renewalDate }}\nCurrent health score: {{ $json.aiHealthScore }}/100 ({{ $json.aiChurnRisk }} risk)\nLast CSM activity: {{ $json.daysSinceLastActivity }} days ago\n\nUsage (last 90 days):\n- Active users: {{ $json.activeUsers }} of {{ $json.licensedSeats }} licensed seats ({{ $json.adoptionRate }}%)\n- Core feature adoption: {{ $json.coreFeatureAdoption }}%\n- Usage trend: {{ $json.usageTrend }} (last 3 months vs prior 3 months)\n\nSupport (last quarter):\n- Open tickets: {{ $json.openTickets }}\n- Resolved tickets: {{ $json.resolvedTickets }}\n- Avg resolution time: {{ $json.avgResolutionDays }} days\n- Escalations: {{ $json.escalations }}\n\nRecent call history:\n{{ $json.callSummaries }}\n\nExpansion signals:\n{{ $json.expansionSignals }}\n\nGenerate a QBR brief with these sections:\n1. Account Health Summary (2-3 sentences, honest assessment)\n2. Usage and Adoption (what's working, what's not, specific numbers)\n3. Value Delivered (what outcomes can be highlighted based on available data)\n4. Support Review (any patterns or recurring issues to address)\n5. Expansion Opportunity (specific, based on actual signals - none if no signals)\n6. Recommended Agenda (3-4 bullet points with suggested talk tracks)\n7. Watch Out (1-2 things the CSM should be prepared to address)\n\nBe specific and direct. This is for the CSM to use internally, not to show the customer."
  }]
}

Step 7: Format and deliver the brief

Add a Code node to extract Claude’s text response. Then deliver it in two places:

Slack DM to the CSM: Send a Slack message with the full brief. Format with Slack markdown for readability - bold section headers, bullet points. Include a direct link to the HubSpot company record at the top.

HubSpot note: Add an internal note to the company record in HubSpot containing the full brief. This gives it a permanent home in the CRM and creates a paper trail.

The Slack message format:

*QBR Brief: {{ companyName }}* | Renewal: {{ renewalDate }} | ${{ contractValue }} ARR

Health: {{ aiHealthScore }}/100 ({{ aiChurnRisk }})

{{ full brief content, formatted with section headers }}

<HubSpot link | View in CRM>

_Generated automatically. Review and personalize before your QBR._

Step 8: Create a follow-up task

After the QBR date passes, add a branch that fires 48 hours after next_qbr_date:

  1. Create a HubSpot task for the CSM: “Log QBR outcomes and update next steps”
  2. Clear the next_qbr_date field (so the account doesn’t trigger the brief workflow again)
  3. Prompt the CSM to update next_qbr_date for the following quarter

This keeps your QBR data current without requiring manual cleanup.


Building a QBR template in Notion (optional)

If your CS team uses Notion for account documentation, add a step to create a Notion page automatically using the mcp__notion__notion-create-pages tool (or Notion API). Structure the page with the QBR brief as the starting content and leave room for the CSM to add notes during the meeting.

The QBR history in Notion becomes a searchable reference across accounts - useful when a new CSM inherits an account and needs to understand the relationship history quickly.


Handling the value delivered section

The hardest section to automate is “value delivered” because it requires customer-specific outcome data that often lives outside your systems - in emails, in anecdotal rep comments, in the customer’s own reporting.

Three approaches, in order of robustness:

Pull from previous QBR notes: If your CSMs log QBR outcomes as HubSpot notes, Claude can read the last 2-3 QBR notes and extract the outcomes that were discussed. This works if your team is disciplined about logging.

Use product-adjacent metrics: If your product tracks anything that maps to business outcomes - documents processed, hours saved per user, revenue influenced - pull those and include them in the brief. Claude can frame them as value delivered.

Ask the CSM to fill in the blank: Add a step in your Monday brief that flags accounts where value delivered data is missing and asks the CSM to input the customer’s top 1-2 outcomes before the meeting. Make it a Slack prompt with a simple form. Better to have accurate data than automated guesses.


What this workflow replaces

The typical QBR prep process:

  • 30 minutes pulling usage data from the product dashboard
  • 30 minutes pulling support history from Zendesk
  • 30 minutes reading through the last 3 months of call summaries in Gong
  • 60 minutes writing up the brief and building the talking points

That’s 2.5 hours per account. A CSM with 8 quarterly QBRs per quarter is spending 20 hours on prep. This workflow gets it to under 30 minutes of review time.

The brief isn’t perfect on the first run. It will miss nuance the CSM knows about the relationship that isn’t in any system. But it handles 85% of the research and gives the CSM a starting point instead of a blank page. That’s where the time goes.


For the health scoring that feeds this brief, see how to use AI to reduce churn before your CS team notices. For the pre-call brief equivalent on the new business side, see the pre-call brief agent.


Related reading: How to Build an AI Sales Forecast That’s Actually Accurate - How to Automate Pipeline Reviews With AI - How to Automate Win/Loss Analysis With AI

Want to get this running in your sales org? Talk to us or see what we build.