Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/manusapis/Agix/llms.txt

Use this file to discover all available pages before exploring further.

Once Agix has analysed your data, you need a way to communicate the findings. The reporting layer provides three output formats: AI-written executive summaries for on-screen use, PDF exports for distribution, and PowerPoint decks for presentations. All three integrate with the scheduler so reports can regenerate themselves on a weekly or daily cadence without any manual work.

Executive Summaries

summaryService lives at src/services/reports/summary.service.ts. It generates structured, plain-English interpretations of any sheet range and can target its language at the intended audience.

generateExecutiveSummary(dataRange, audience?)

Produces a full ExecutiveSummary object with a title, key findings, and recommended actions.
async generateExecutiveSummary(
  dataRange: string,
  audience: "executive" | "technical" | "general" = "executive"
): Promise<ExecutiveSummary>
interface ExecutiveSummary {
  title: string;
  keyFindings: string[];
  recommendations: string[];
  generatedAt: string;    // ISO-8601 timestamp
}
Example:
const summary = await summaryService.generateExecutiveSummary("A1:F200", "executive");

console.log(summary.title);
summary.keyFindings.forEach((f) => console.log("•", f));
summary.recommendations.forEach((r) => console.log("→", r));
The audience parameter shapes the vocabulary and depth of the output:
AudienceOutput style
executiveHigh-level narrative, business impact, minimal technical detail
technicalMethodology, column statistics, model assumptions, edge cases
generalPlain language accessible to any reader without domain expertise

generateOnePager(dataRange)

Returns a formatted single-page summary string — suitable for embedding in an email body, a Notion page, or a Slack message.
async generateOnePager(dataRange: string): Promise<string>

bulletPoints(dataRange, maxPoints?)

Returns a concise string[] of the most important takeaways. Defaults to five bullets; pass maxPoints to adjust.
async bulletPoints(dataRange: string, maxPoints: number = 5): Promise<string[]>

// Example output:
// [
//   "Revenue grew 18% month-over-month in March.",
//   "Churn rate dropped to 2.1%, the lowest in six months.",
//   "Enterprise segment accounts for 61% of total ARR.",
//   ...
// ]

PDF Export

pdfService lives at src/services/reports/pdf.service.ts. It accepts a ReportRequest and returns a ReportResult with metadata about the generated file.
interface ReportRequest {
  format: "pptx" | "pdf" | "markdown";
  title: string;
  dataRanges: string[];    // One or more sheet ranges to include
  chartIds?: string[];     // UUIDs from chartService.generate()
  template?: string;
  audience?: "executive" | "technical" | "general";
}

interface ReportResult {
  format: "pptx" | "pdf" | "markdown";
  title: string;
  generatedAt: string;
  filePath: string;
  pageCount: number;
}

generate(request)

const pdf = await pdfService.generate({
  format: "pdf",
  title: "Q2 Financial Report",
  dataRanges: ["A1:F200", "Sheet2!A1:D50"],
  chartIds: ["uuid-from-chart-service"],
  audience: "technical",
});

console.log(`Generated: ${pdf.filePath} (${pdf.pageCount} pages)`);

Additional PDF utilities

// Embed an exported chart image into an existing PDF
await pdfService.appendChart(pdf.filePath, chartImageBase64);

// Stamp a watermark on every page
await pdfService.addWatermark(pdf.filePath, "CONFIDENTIAL");

PowerPoint Export

powerpointService lives at src/services/reports/powerpoint.service.ts. It generates a .pptx presentation from your spreadsheet data and AI-written analysis, ready to open in Microsoft PowerPoint or present directly.

generate(request)

const deck = await powerpointService.generate({
  format: "pptx",
  title: "Board Update — Q2 2025",
  dataRanges: ["A1:F200"],
  chartIds: ["uuid-from-chart-service"],
  audience: "executive",
});

console.log(`Presentation ready: ${deck.filePath}`);

applyTemplate(templatePath, data)

Populate a pre-built .pptx template with dynamic data, returning a Blob for download.
const blob = await powerpointService.applyTemplate(
  "templates/quarterly-review.pptx",
  { revenue: 1_240_000, growthRate: 0.18 }
);

End-to-end example

The following combines all three report types in one workflow:
import { summaryService } from "@/services/reports/summary.service";
import { pdfService }     from "@/services/reports/pdf.service";
import { powerpointService } from "@/services/reports/powerpoint.service";

const dataRange = "A1:F200";

// 1. Bullet-point summary for Slack
const bullets = await summaryService.bulletPoints(dataRange, 5);
postToSlack(bullets.join("\n"));

// 2. PDF for the data team
const pdf = await pdfService.generate({
  format: "pdf",
  title: "Weekly Data Report",
  dataRanges: [dataRange],
  audience: "technical",
});

// 3. PowerPoint for the leadership meeting
const deck = await powerpointService.generate({
  format: "pptx",
  title: "Weekly Leadership Update",
  dataRanges: [dataRange],
  audience: "executive",
});
Use audience: "executive" when generating reports for board or leadership meetings — the output stays narrative and avoids statistical jargon. Switch to audience: "technical" for data team reviews where methodology and column-level statistics matter.
All three report services integrate with the scheduler. Register a regenerate-report task with a "weekly" frequency and Agix will rebuild your executive summary, PDF, and PowerPoint deck automatically every seven days — without you opening the spreadsheet. See the Scheduler page for a complete example.

Build docs developers (and LLMs) love