QBR Deck Builder
Assembles one customer's quarterly business review from usage, goal, support, and commercial data into deck-ready sections covering adoption trend, value delivered against stated goals, open risks, and ranked expansion opportunities.
At a glance
QBR Deck Builder is an AI skill that you can use in Claude Code, Codex, or type.com.
- Updated
See an example
Example output from a sample run. Company names and figures are sample data.
Quarterly business review: Northwind Logistics (ACC-1001), as of 2026-09-22
$420,000 ARR renews 2026-11-30 (69d) with 286 active users on 300 seats (95% utilization) and 3 of 4 goals on track or achieved. Two risks are rated high, and 3 expansion opportunities are worth $156,760 weighted.
Trailing 3 months vs prior 3: active users 245 -> 279 (+13.7%); key actions 52,833 -> 60,167 (+13.9%).
| Goal | Baseline | Current | Target | Attained | Status |
|---|---|---|---|---|---|
| G-01 Lift on-time delivery to 95% before peak season | 86.2 | 92.4 | 95 by 2026-12-31 | 70% | On track |
| G-02 Cut manual touches per order from 3.4 to 1.5 | 3.4 | 1.9 | 1.5 by 2026-10-31 | 79% | On track |
| G-03 Roll the platform out to 280 dispatch and warehouse users | 210 | 286 | 280 by 2026-09-30 | 109% | Achieved |
| G-04 Reduce average dock wait to 20 minutes | 41 | 38 | 20 by 2026-11-30 | 14% | Off track |
| Expansion opportunity | Type | ARR | Confidence | Weighted |
|---|---|---|---|---|
| Seat expansion (+58 seats) | seats | $81,200 | 0.95 | $77,140 |
| Advanced Analytics (ANALYTICS) | cross-sell | $66,000 | 0.65 | $42,900 |
| International Compliance (INTL) | cross-sell | $54,000 | 0.68 | $36,720 |
Open risks
- High: open P1 T-512 is aging, opened 2026-09-05 (17d) against a 7d threshold: inventory sync failing for two warehouses.
- High: goal G-04 is off track at 14% attained, target 20 by 2026-11-30.
- Medium: average CSAT 3.4 over 12 responses, below the 4.0 floor.
- Medium: support volume climbed from 8 to 14 tickets (+75%) across 90-day windows.
- Medium: renewal is inside the decision window, 69d out.
Talk track for the top opportunity: 286 active users on 300 seats is past the 85% trigger; 358 seats keeps utilization at 80% at $1,400/seat, and buying ahead of the next hiring wave avoids mid-term amendments.
Inputs: monthly usage, goals, support tickets, commercial terms and product catalog, 2026-03 to 2026-09 (7 months). CSM: Helena Voss.
Produced by running bash examples/run.sh on the sample data bundled with this skill.
How to use QBR Deck Builder
- type.com: Choose Use Skill to add QBR Deck Builder to your type.com workspace.
- Claude Code: Download the skill and extract it into
~/.claude/skills/qbr-deck-builder/(or.claude/skills/qbr-deck-builder/in a project). Then ask Claude to use QBR Deck Builder. - Codex: Download the skill and extract it into
~/.agents/skills/qbr-deck-builder/(or.agents/skills/qbr-deck-builder/in a repository). Then ask Codex to use QBR Deck Builder.
AI agents can read this page as Markdown or fetch the raw SKILL.md.
Frequently asked questions
What is QBR Deck Builder?
QBR Deck Builder is an AI skill that you can use in Claude Code, Codex, or type.com.
What does QBR Deck Builder do?
Assembles one customer's quarterly business review from usage, goal, support, and commercial data into deck-ready sections covering adoption trend, value delivered against stated goals, open risks, and ranked expansion opportunities.
Can I use QBR Deck Builder in Claude Code or Codex?
Yes. QBR Deck Builder is a standard Agent Skills folder with a SKILL.md file. Download it and extract it into ~/.claude/skills/ for Claude Code or ~/.agents/skills/ for Codex.
Who created QBR Deck Builder?
The type.com team created QBR Deck Builder. The type.com team reviews every skill before it is published in the Skills Library.
Related guide
Browse the technical files
--- name: qbr-deck-builder description: Assembles one customer's quarterly business review from usage, goal, support, and commercial data into deck-ready sections covering adoption trend, value delivered against stated goals, open risks, and ranked expansion opportunities. --- # QBR Deck Builder Builds the analytical half of a quarterly business review for a single account: what adoption did, whether the customer got what they said they wanted, what is currently going wrong, and what to sell next — each with the arithmetic shown. ## Before you run This skill ships scripts and sample data alongside this SKILL.md. Before running any command: 1. **Get the files.** Make sure the skill's other files (`scripts/`, `examples/` and anything else listed with this skill) are in your working folder at the same relative paths. Some environments load only SKILL.md; if yours did, fetch each file from this skill's published files and write it to the matching path. In Type, read them with the skill-file tools. Anywhere else, the Type Skills Library API lists every file with its path, content and `sha256`: GET `https://api.type.com/api/public/library/skills` and take the entry with slug `qbr-deck-builder`. 2. **Check the copies are exact.** Compare each file's size in bytes, not characters (and its hash, where your tools report one), with the published version before running. A copy written out from the published file is fine once its byte size and hash match; never run a script you summarised or reconstructed from memory. 3. **Run from the skill's folder**, calling interpreters explicitly: `python3 scripts/…` and `bash examples/run.sh`. 4. **Try the sample first.** If the skill ships `examples/run.sh` and `examples/expected_output.txt`, run `bash examples/run.sh`; its output should match the expected file exactly. If it doesn't, stop and report the first differing line rather than running on real data. ## When to use this - Preparing a QBR or EBR and you want the numbers assembled before anyone opens the template. - Renewal prep: the same sections answer "is this account healthy and what is the expansion case?" - Account handover between CSMs, where a written, evidence-backed state of the account beats a conversation. Run it per account. Batch it by looping over account ids if you need a portfolio view; for ranking a whole book by risk, use `churn-risk-scanner` instead. ## Inputs `DATA_CONTRACT.md` has the exact columns, types, and units. You need five files: 1. `usage_monthly.csv` — long format: account, month, metric name, value. 2. `goals.csv` — what the customer said success looks like, with baselines and targets. 3. `support.csv` — tickets with priority, dates, and CSAT. 4. `commercial.csv` — ARR, seats, renewal date, owned products, CSM. 5. `products.csv` — the cross-sell catalog with its trigger signals. ### Gathering the inputs through Type integrations - **Usage**: your product warehouse (Snowflake, BigQuery, Postgres) or product analytics (Amplitude, PostHog). One row per account/month/metric. Include the goal metrics — the goals section is scored from the same table. - **Goals**: usually the success plan in the CRM, a Notion or Google Doc, or the onboarding kickoff notes. Someone has to translate them into a metric, baseline, and target; that translation is the valuable part of this skill's input, and it is not automatable. - **Support**: Zendesk, Intercom, Plain, or Jira Service Management. Export created/resolved dates, priority, status, subject, and CSAT for the last two support windows (180 days at the default settings). - **Commercial**: Salesforce/HubSpot/Attio for ARR, renewal date, and owned products; billing (Stripe, NetSuite) if the CRM's ARR is not trustworthy. - **Products**: your own catalog. Pick one usage metric per product that genuinely predicts need, and a threshold you would defend to a customer. ## Running it ```bash python3 scripts/qbr_builder.py \ --account-id ACC-1001 \ --usage path/to/usage_monthly.csv \ --goals path/to/goals.csv \ --support path/to/support.csv \ --commercial path/to/commercial.csv \ --products path/to/products.csv \ --config config/qbr.json \ --as-of 2026-09-22 ``` - `--as-of` is required. The reporting window is the `history_months` calendar months ending with the month containing `--as-of`. - `--json` emits every section as structured data for a deck generator. - Bad input exits `2` naming the file, row, and column. An unknown `--account-id` lists the ids that are present. See `examples/run.sh` for a complete working invocation. ## What it computes - **Adoption trend**: the monthly series, seat utilization per month, and the trailing `trend_window_months` average against the window before it. Averages use only months that exist; missing months are listed in section 7 rather than imputed. - **Goals**: `attainment = (current - baseline) / (target - baseline)`, which works for both increase and reduction goals. Status bands come from `goal_status_thresholds`. A goal whose metric has no readings is reported as "no data", not as zero. - **Support health**: ticket volume in the last `support_window_days` against the window before it, P1 count, currently open tickets with ages, median time to resolve, and average CSAT with the response count (so a 5.0 from one survey cannot masquerade as a trend). - **Risks**: rule-based, each with severity and the evidence that triggered it — adoption or engagement decline, low utilization, goals at risk or off track, aging open P1s, support volume spikes, low CSAT, and a renewal inside the decision window. - **Expansion**: seat expansion when utilization clears the trigger (`additional seats = ceil(active / target_utilization) - licensed`, priced at the account's own ARR per seat), plus cross-sell for any catalogue product the account does not own whose trigger metric is over threshold. Ranked by `estimated ARR x confidence`, where confidence rises with how far the signal clears its threshold and is capped by `expansion.confidence_cap`. All thresholds are in `config/qbr.json`. ## Presenting the output - Section 1 is the "state of the account" slide. Each bullet already carries its number. - Section 2 is the adoption chart; paste the table straight into the deck, then say the trailing-average line out loud. - Section 3 is the slide that earns the renewal: the customer's own goals, with the delta. Lead with the achieved ones, then the off-track one and what you are doing about it. - Sections 4 and 5 belong to the internal pre-read, not the customer deck. Bring only the risks you are prepared to discuss, with the fix. - Section 6 is the expansion recommendation. Bring the top one or two with the signal, never the whole list. - Section 7 keeps everyone honest about what the data did not cover. Read it before presenting; do not paste it into the customer deck. ## Limits - **One account per run.** No portfolio rollup, no cohort comparison. - It does not produce slides. Output is structured text or JSON; a human or a deck tool does the layout. - Risk rules are thresholds, not a model. They flag patterns that usually matter and will miss a relationship problem that never shows up in usage or tickets. - Expansion estimates use list price per seat and the account's current seat count. They are conversation starters, not quotes, and they ignore discounts, contract terms, and procurement reality. - Confidence is a transparent function of how far a signal clears its threshold. It is not a probability and should never be presented as one. - Sentiment is CSAT only. No call transcripts, no email tone, no NPS. - Goal attainment is linear between baseline and target, with no expected pace for elapsed time. A goal at 70% with one week left is not the same as 70% with a quarter left; the target date is printed so a human can judge that. - Monthly granularity. A collapse in the last two weeks of the month is invisible until the month closes.