PPTX.gallery
narrativesquarterly-reviewbusinessapi

Overview

Quarterly business reviews (QBRs) follow a predictable format: KPIs vs. plan, trends, risks, and next steps. The quarterly-review narrative guides that structure; your application authors the complete slides from your data.

The Quarterly Review Structure

Use the quarterly-review narrative to guide these authored sections:

  1. KPIs — quarterly metrics vs. plan, shown as charts
  2. Risks — identified risks with mitigations

Full API Example

Use this complete OPF document with the complete authenticated API recipe, which saves the response bytes as a .pptx file.

{
  "$schema": "https://openpresentation.org/schema/opf/v1",
  "name": "Q1 2026 Business Review",
  "slides": [
    {
      "layout": "cover",
      "title": "Q1 2026 Business Review",
      "subtitle": "Board Meeting — March 28, 2026",
      "design": {
        "titleAlignment": "center"
      }
    },
    {
      "layout": "metrics",
      "title": "Q1 Scorecard",
      "blocks": [
        {
          "metric": {
            "value": "$4.8M",
            "label": "Revenue (Plan: $4.5M)"
          }
        },
        {
          "metric": {
            "value": "92%",
            "label": "Gross Margin"
          }
        },
        {
          "metric": {
            "value": "1,240",
            "label": "Active Customers"
          }
        },
        {
          "metric": {
            "value": "72",
            "label": "NPS Score"
          }
        }
      ],
      "design": {
        "titleAlignment": "center",
        "contentAlignment": "center"
      }
    },
    {
      "layout": "chart",
      "title": "Revenue: Actual vs. Plan",
      "chart": {
        "type": "column",
        "data": {
          "columns": [
            "Series",
            "Jan",
            "Feb",
            "Mar"
          ],
          "rows": [
            [
              "Actual",
              1500,
              1600,
              1700
            ],
            [
              "Plan",
              1400,
              1500,
              1600
            ]
          ]
        }
      },
      "design": {
        "titleAlignment": "center",
        "contentAlignment": "center"
      }
    },
    {
      "layout": "chart",
      "title": "Customer Metrics",
      "blocks": [
        {
          "chart": {
            "type": "line-with-markers",
            "data": {
              "columns": [
                "Series",
                "Jan",
                "Feb",
                "Mar"
              ],
              "rows": [
                [
                  "New Customers",
                  45,
                  52,
                  68
                ]
              ]
            }
          }
        },
        {
          "chart": {
            "type": "doughnut",
            "data": {
              "columns": [
                "Series",
                "Enterprise",
                "Mid-Market",
                "SMB"
              ],
              "rows": [
                [
                  "Mix",
                  40,
                  35,
                  25
                ]
              ]
            }
          }
        }
      ],
      "design": {
        "contentAlignment": "center"
      }
    },
    {
      "layout": "list",
      "title": "Key Risks & Mitigations",
      "blocks": [
        {
          "items": [
            {
              "text": "Churn in SMB segment",
              "description": "Mitigation: Launching self-serve onboarding in Q2 to reduce time-to-value."
            }
          ]
        },
        {
          "items": [
            {
              "text": "Engineering hiring behind plan",
              "description": "Mitigation: Opened remote positions and partnered with two new recruiting firms."
            }
          ]
        },
        {
          "items": [
            {
              "text": "Competitor pricing pressure",
              "description": "Mitigation: Shipping enterprise tier with custom SLAs in April."
            }
          ]
        }
      ],
      "design": {
        "titleAlignment": "center",
        "contentAlignment": "center"
      }
    },
    {
      "layout": "list",
      "title": "Q2 Priorities",
      "blocks": [
        {
          "items": [
            {
              "text": "Launch Enterprise Tier",
              "description": "Custom pricing, SLAs, and SSO"
            }
          ]
        },
        {
          "items": [
            {
              "text": "Expand Sales Team",
              "description": "Hire 3 AEs for mid-market segment"
            }
          ]
        },
        {
          "items": [
            {
              "text": "Reduce Churn",
              "description": "Self-serve onboarding and health scoring"
            }
          ]
        }
      ],
      "design": {
        "titleAlignment": "center",
        "contentAlignment": "center"
      }
    }
  ],
  "narrative": "business-review",
  "design": {
    "colorScheme": "slate-gray",
    "fontScheme": "calibri"
  },
  "catalogs": {
    "default": {
      "source": "https://www.pptx.gallery",
      "narratives": {
        "business-review": {
          "name": "Business Review",
          "summary": "Full-loop review of recent activities to identify achievements, address challenges, and plan improvements. Goes deeper than a status update — closer to a customer-facing or partner-facing relationship review.",
          "audienceFit": [
            "customers",
            "partners",
            "stakeholders",
            "leadership"
          ],
          "duration": {
            "min": 30,
            "max": 90
          },
          "tags": [
            "customer-relationship",
            "review",
            "operations"
          ],
          "beats": [
            {
              "id": "logo",
              "name": "Logo",
              "description": "Cover slide with logos and the review period. Establishes brand identity and signals the level of formality the rest of the deck will hold to.",
              "layout": "cover",
              "instructions": "Identity & representation",
              "type": "text"
            },
            {
              "id": "opening",
              "name": "Opening",
              "description": "Frame the meeting context and the goals for the next hour. What you'll cover, what decisions you want, what you don't intend to relitigate.",
              "instructions": "Meeting context & goals",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "review",
              "name": "Review",
              "description": "Outline the recent activities in scope: launches, projects, programs. Just enough scope-setting that the rest of the deck has shared vocabulary.",
              "instructions": "Outline recent activities",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "successes",
              "name": "Successes",
              "description": "Recognize the achievements in the review window. Lead with outcomes the audience cares about, not effort. Specific moves earn more credibility than aggregate progress.",
              "instructions": "Recognize achievements",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "challenges",
              "name": "Challenges",
              "description": "Address the problems faced honestly. What didn't work, what's still hard. Naming challenges in front of the audience earns more trust than letting them ask.",
              "instructions": "Address problems faced",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "solutions",
              "name": "Solutions",
              "description": "Discuss the fixes already implemented. Pair each with the result it produced, or, if it's still in flight, with the leading indicator you're watching.",
              "instructions": "Discuss implemented fixes",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "outcome",
              "name": "Outcome",
              "description": "Display the results achieved across the review window. Let the data carry the slide; supporting commentary should explain context, not inflate the numbers.",
              "instructions": "Display results achieved",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "insights",
              "name": "Insights",
              "description": "Highlight the key learnings. What was confirmed, what surprised you, what the audience should take away. Insights are the slides people quote in follow-on meetings.",
              "instructions": "Highlight key learnings",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "future-strategy",
              "name": "Future Strategy",
              "description": "Define the next steps and the strategic direction that follows from the review. Specific enough to sequence; flexible enough to adapt.",
              "instructions": "Define next steps",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "feedback",
              "name": "Feedback",
              "description": "Capture audience thoughts. Two or three explicit prompts where you want input or alignment. The strength of a relationship review is in the conversation it provokes.",
              "instructions": "Capture audience thoughts",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "next-review",
              "name": "Next Review",
              "description": "Plan for follow-up: when the next review happens, what evidence you'll bring, what decisions are deferred until then. Continuity is the point of the cadence.",
              "instructions": "Plan for follow-up",
              "type": "text",
              "layout": "text"
            },
            {
              "id": "closing",
              "name": "Closing",
              "description": "Recap and express optimism about the path forward. Close with the next concrete step and the people responsible for it.",
              "layout": "cover",
              "instructions": "Recap and express optimism",
              "type": "text"
            }
          ]
        }
      },
      "colorSchemes": {
        "slate-gray": {
          "name": "Slate Gray",
          "summary": "Neutral gray palette for understated executive communication.",
          "description": "A disciplined gray scale with strong neutral contrast. Use it when the content should feel calm, mature, and analytical.",
          "accent1": "#9E9E9E",
          "accent2": "#424242",
          "accent3": "#616161",
          "accent4": "#757575",
          "accent5": "#9E9E9E",
          "accent6": "#212121",
          "dark1": "#000000",
          "dark2": "#1B1B1B",
          "light1": "#FFFFFF",
          "light2": "#F8F8F8",
          "hyperlink": "#212121",
          "followedHyperlink": "#424242",
          "tags": [
            "neutral",
            "minimal",
            "mature",
            "analytical",
            "restrained"
          ]
        }
      },
      "fontSchemes": {
        "calibri": {
          "name": "Calibri",
          "major": "Calibri",
          "minor": "Calibri",
          "type": "sans-serif",
          "app": "powerpoint",
          "languageFamily": "latin",
          "languages": [],
          "textSample": "Smooth professional look",
          "description": "Calibri is a sans serif OPF font scheme for Latin presentations, using Calibri for both headings and body text."
        }
      },
      "layouts": {
        "cover": {
          "name": "Cover",
          "summary": "The opening slide: title, subtitle and an optional picture.",
          "tags": [
            "Openers and closers"
          ],
          "design": {
            "titleAlignment": "center",
            "contentAlignment": "center"
          },
          "direction": "row",
          "regions": [
            {
              "name": "title"
            },
            {
              "name": "media",
              "accepts": [
                "image",
                "video"
              ],
              "role": "media",
              "flow": "none",
              "bleed": true
            }
          ],
          "description": "Open a presentation with its subject and a short introduction. Add a picture when it helps establish the context.",
          "preview": {
            "vectorSrc": "https://www.pptx.gallery/layout-previews/cover.svg"
          }
        },
        "metrics": {
          "name": "Metrics",
          "summary": "One to six headline numbers, with an optional note.",
          "tags": [
            "Numbers"
          ],
          "design": {
            "contentAlignment": "center"
          },
          "direction": "column",
          "regions": [
            {
              "name": "title"
            },
            {
              "name": "metrics",
              "accepts": [
                "metric",
                "group"
              ],
              "role": "primary",
              "flow": "grid",
              "anchor": "middle"
            },
            {
              "name": "note",
              "size": "auto",
              "accepts": [
                "text",
                "list"
              ],
              "role": "supporting",
              "flow": "none"
            }
          ],
          "description": "Highlight a small set of important numbers. Give each number a label and the context needed to interpret it.",
          "preview": {
            "vectorSrc": "https://www.pptx.gallery/layout-previews/metrics.svg"
          }
        },
        "chart": {
          "name": "Chart",
          "summary": "One to six charts, with an optional note.",
          "tags": [
            "Visuals"
          ],
          "direction": "column",
          "regions": [
            {
              "name": "title"
            },
            {
              "name": "charts",
              "accepts": [
                "chart",
                "group"
              ],
              "role": "primary",
              "flow": "grid"
            },
            {
              "name": "note",
              "size": "auto",
              "accepts": [
                "text"
              ],
              "role": "supporting",
              "flow": "none"
            }
          ],
          "description": "Give a chart enough space to show its evidence. Use the title to state the conclusion and labels to explain the measures.",
          "preview": {
            "vectorSrc": "https://www.pptx.gallery/layout-previews/chart.svg"
          }
        },
        "list": {
          "name": "List",
          "summary": "Bulleted or numbered points; one long list flows into columns.",
          "tags": [
            "Text"
          ],
          "direction": "column",
          "regions": [
            {
              "name": "title"
            },
            {
              "name": "body",
              "accepts": [
                "list",
                "text",
                "group"
              ],
              "role": "primary",
              "flow": "auto",
              "listColumns": "auto"
            }
          ],
          "description": "Present several related points in a clear sequence. Use bullets for independent points or numbered items for an ordered list.",
          "preview": {
            "vectorSrc": "https://www.pptx.gallery/layout-previews/list.svg"
          }
        }
      }
    }
  }
}

Automating QBR Generation

Since QBRs follow the same structure every quarter, you can automate deck generation by pulling data from your analytics tools:

const kpis = await fetchQuarterlyKPIs("2026-Q1");
const risks = await fetchRiskRegister();

const document = {
  name: "Q1 2026 Business Review",
  narrative: "business-review",
  design: { colorScheme: "slate-gray", fontScheme: "calibri" },
  slides: buildQBRSlides(kpis, risks),
};

The builder uses the current published business-review narrative; the portable example above embeds its own quarterly-review record. Your builder supplies the slides in the intended order. Send its complete document using the complete authenticated API recipe.

Best Practices for QBRs

  1. Always show plan vs. actual. Context matters more than raw numbers.
  2. Lead with the scorecard. Use a metrics layout for the headline metrics.
  3. Use slate-gray or forest-green for a professional, understated tone.
  4. End with priorities, not risks. Leave the audience with forward momentum.

Next Steps