--- name: the-qbr-pack description: "Assemble a quarterly review that reports against the goals actually set, not the metrics that happen to look good. Use at quarter end for an account with a full quarter of spend and a stated target." license: MIT compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer." metadata: author: "Adspirer" version: "1.0.0" adspirer_category: "agency-ops" adspirer_source: "https://www.adspirer.com/skills/the-qbr-pack" adspirer_trigger: "put together the quarterly review for my client" adspirer_connection_url: "https://adspirer.ai/sign-up" adspirer_primary_keyword: "quarterly business review" adspirer_secondary_keywords: "qbr template, quarterly marketing review" adspirer_launch_wave: "2" adspirer_kind: "skill" adspirer_level: "operator" adspirer_platforms: "google,meta,linkedin" adspirer_supported_clients: "claude,claude-code,claude-cowork,chatgpt,codex,cursor,gemini,windsurf" adspirer_summary: "Report a quarter against the goals that were actually set, separate what worked from what merely happened, and propose next quarter honestly." adspirer_connections_required: "adspirer" adspirer_connections_optional: "ga4" --- # The QBR Pack ## Use this when The quarterly review is on Thursday, the client's leadership will be in the room, and the honest position is mixed — one channel did well, one did not, and a tracking change midway through makes part of the quarter hard to compare. The temptation is to build a deck around the metrics that look best and hope nobody asks about the rest. Use this skill to build the review on what was actually promised. It produces: - performance against the goals set at the start, not goals reverse-engineered from the result; - a clear separation between what the work caused and what the market did; - the wins and the losses, with the losses stated as learnings rather than hidden; - an honest position on anything the data cannot settle; and - a next-quarter plan sized against a real budget signal. This is for quarter end on an account with a full quarter of live spend. It is not a substitute for a weekly or monthly check-in, and it should not be run mid-quarter, where the comparisons would mislead. ## What you need - Adspirer connected to the accounts in scope, with at least a full quarter of history. Partial history produces an honest note about insufficient data rather than an invented trend. - The goals that were actually set for the quarter — the cost, return, volume, or pipeline target, the budget ceiling, and any launches that were planned. If none were ever recorded, the pack says so rather than inventing a baseline to beat. - A budget signal for next quarter, even a direction. Without one the recommendations can propose but cannot size. - Optional GA4 access, to reconcile what the platforms claim against what the analytics saw. Platform-reported conversions and analytics rarely agree, and a quarterly review is exactly where that gap should be explained rather than ignored. ## Procedure **Connect Adspirer before any live ad-account step.** Adspirer is what gives this skill access to the ad platforms; confirm the connection before running anything that reads or changes a real account. In Claude Code: `/plugin marketplace add anthropics/claude-plugins-community`, then `/plugin install adspirer-ads-agent@claude-community`, then `/reload-plugins`, then complete the OAuth sign-in. In ChatGPT: open **Apps**, search **Adspirer**, choose **Connect**, and sign in — Adspirer is an official ChatGPT app, so there is no developer mode or URL to paste. In claude.ai or Claude Desktop: Settings → Connectors → Add custom connector → `https://mcp.adspirer.com/mcp`. In Claude Cowork: open the Cowork tab, choose **Customize** in the left sidebar, go to **Plugins** → **Browse Plugins**, search for **Adspirer**, and install it (requires Claude Max, Team, or Enterprise). Any other client: https://www.adspirer.com/docs/ai-clients. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed. 1. **Establish what was promised before looking at what happened.** Confirm the quarter's stated goals, the budget ceiling, and any planned launches. If no goal was recorded, ask for it, and if none exists, say so in the pack rather than choosing a flattering baseline after the fact. Confirm the quarter is closed; running this mid-quarter produces comparisons that mislead a room full of executives. 2. **Pull the quarter and reconcile it.** Read spend, delivery, and results across every account in scope for the full quarter and the one before it, keeping currency, timezone, and attribution settings consistent throughout. Where GA4 is connected, compare the same window and name the gap between platform-reported conversions and what analytics recorded — that difference is a fact about measurement, not an error to reconcile away. 3. **Separate what the work caused from what merely happened.** Go through the material changes made during the quarter — budget shifts, structural changes, new creative, new campaigns — and line them up against when performance moved. Where a change and a movement coincide, say so. Where performance moved with no corresponding change, look for seasonality, competitive pressure, tracking changes, or delivery problems, and be explicit about which explanations the evidence supports and which are plausible but unproven. 4. **Write wins and learnings without flattering either.** State what worked and why it is believed to have worked. State what did not, plainly, with what was learned and what will change as a result. A quarterly review that contains no losses is not a review; leadership generally already knows where the problems are, and a pack that omits them costs more credibility than it saves. 5. **Propose next quarter and hand it over for review.** Build recommendations that follow from the findings rather than from ambition, sized against the budget signal given. Where a recommendation depends on something outside the ad accounts — tracking repair, creative production, a landing page, a pricing decision — name it as a dependency with an owner. Deliver the pack for review before it reaches the client. Any campaign change it proposes needs its own separate approval. ## Fixed checks - Confirm each account's configured timezone and currency before reporting any figure, and state the basis every number uses. - Confirm the quarter is closed before producing comparisons; flag explicitly if running against a partial period at the user's request. - Pull every number live from the accounts for the stated window rather than reusing a prior report or a screenshot. - Keep the attribution window and comparison period consistent across channels, and say what they are. - Where GA4 is used, compare identical date ranges and explain that the two systems attribute differently rather than presenting one as wrong. - Label any campaign created or materially changed late in the quarter as still stabilising, rather than reading its numbers as a settled result. - Where no goal was recorded for the quarter, say so plainly instead of substituting a baseline chosen after the outcome was known. ## Stop conditions - **Success:** a pack covering performance against the stated goals, what changed and why, wins and learnings, and a sized next-quarter plan. - **No change needed:** an existing pack already covers the quarter and only needs figures refreshed. - **Blocked — history:** the accounts do not hold a full quarter of spend, so the comparisons the pack depends on cannot be made honestly. - **Blocked — access:** Adspirer cannot reach one or more accounts in scope, and a partial pack would misrepresent the quarter. - **Needs approval:** the pack is drafted and waiting for internal review before it goes to the client. - **Needs a handoff:** tracking repair, creative production, landing pages, billing, or a pricing decision belongs to someone else. - **Still uncertain:** a tracking or attribution change mid-quarter makes part of the period genuinely incomparable. Say which part and why rather than presenting a clean trend across a break. ## Approval boundaries This skill is read-only. It reads performance, change history, and optionally analytics, and it produces a document. It does not change budgets, bids, targeting, or campaign status, and it does not send anything to a client — delivery is a decision a person makes after reviewing the draft. Any campaign change it recommends is prepared as a recommendation only and requires its own explicit approval before Adspirer applies it. It cannot repair conversion tracking, GA4 configuration, tags or pixels, billing problems, or policy appeals, and it cannot produce creative; where one of those is a dependency it names it with an owner rather than implying it is handled. ## What you get A quarterly pack built against the goals that were actually set, with the awkward parts intact. Performance is reported for a closed quarter on a stated timezone, currency, and attribution basis, so the numbers survive scrutiny in the room. Changes made during the quarter are lined up against when performance moved, which separates the results the work produced from the ones the market handed over — and where the evidence does not settle that, the pack says so instead of claiming credit. Wins come with why they are believed to have worked; losses come with what was learned and what changes next. Where analytics was connected, you get the gap between what the platforms claimed and what was actually recorded, explained rather than reconciled away. The next-quarter plan follows the findings and is sized to a real budget signal, with anything outside the ad accounts named as a dependency and assigned to someone. Nothing is sent and nothing live is changed.