> ## Documentation Index
> Fetch the complete documentation index at: https://docs.introw.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Report Builder

> Answer any question about your partner program by building custom reports from CRM and Introw data - no SQL, no BI project, no engineering.

export const Headless = ({prompts = []}) => {
  const PromptRow = ({prompt}) => {
    const [copied, setCopied] = useState(false);
    const copy = () => {
      try {
        navigator.clipboard?.writeText(prompt);
      } catch {}
      setCopied(true);
      setTimeout(() => setCopied(false), 1600);
    };
    return <div className="group flex items-center justify-between gap-3 px-4 py-3 transition-colors hover:bg-[#FD90FF]/[0.06]">
        <span className="text-sm leading-relaxed text-zinc-700 dark:text-zinc-200">{prompt}</span>
        <button type="button" onClick={copy} aria-label={copied ? "Copied to clipboard" : "Copy prompt"} className={`shrink-0 rounded-md p-1.5 transition-all hover:bg-[#FD90FF]/10 focus:opacity-100 focus:outline-none ${copied ? "text-[#FD90FF] opacity-100" : "text-zinc-400 opacity-0 group-hover:opacity-100 dark:text-zinc-500"}`}>
          {copied ? <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M20 6L9 17l-5-5" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg> : <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <rect x="9" y="9" width="11" height="11" rx="2" stroke="currentColor" strokeWidth="2" />
              <path d="M5 15V5a2 2 0 0 1 2-2h10" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>}
        </button>
      </div>;
  };
  return <>
      <p>
        Introw is <strong>headless</strong> by design: run everything here in plain language from Claude, ChatGPT,
        Slack, Teams, or your own CRM through Introw's <a href="/features/developer/mcp">MCP server</a>, with every
        action written straight back to your CRM source of truth. The portal is one surface, never the only one.
      </p>

      {prompts.length > 0 ? <div className="not-prose my-6 overflow-hidden rounded-2xl border border-zinc-200/80 bg-white shadow-sm dark:border-white/10 dark:bg-white/[0.02]">
          <div className="flex items-center gap-2 border-b border-zinc-200/80 bg-gradient-to-r from-[#FD90FF]/10 via-[#FD90FF]/5 to-transparent px-4 py-2.5 dark:border-white/10">
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4 text-[#FD90FF]" aria-hidden="true">
              <path d="M12 2.5l2 5.5 5.5 2-5.5 2-2 5.5-2-5.5L4.5 10l5.5-2 2-5.5z" fill="currentColor" />
              <path d="M18.5 14l1 2.6 2.6 1-2.6 1-1 2.6-1-2.6-2.6-1 2.6-1 1-2.6z" fill="currentColor" opacity="0.55" />
            </svg>
            <span className="text-xs font-semibold uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
              Try it from your LLM
            </span>
          </div>

          <div className="flex flex-col divide-y divide-zinc-100 dark:divide-white/[0.06]">
            {prompts.map(prompt => <PromptRow key={prompt} prompt={prompt} />)}
          </div>

          <a href="/headless" className="flex items-center justify-between gap-2 border-t border-zinc-200/80 px-4 py-2.5 text-sm font-medium text-zinc-600 no-underline transition-colors hover:text-[#FD90FF] dark:border-white/10 dark:text-zinc-300">
            <span>See the full headless playbook</span>
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
          </a>
        </div> : <Card title="See the headless motion" icon="wand-magic-sparkles" href="/headless">
          The agentic playbook - lifecycle deep dives and a Claude Code skill library that run your partner program
          from Claude, ChatGPT, Slack, and your CRM.
        </Card>}
    </>;
};

> When someone asks "how much pipeline did partners source last quarter?", you should be able to answer in minutes, not wait on RevOps. The report builder lets you build that report yourself from live CRM and Introw data.

## What it does

The report builder lets you create custom reports without code. You pick a data source, from CRM
objects like deals, contacts, and companies, to Introw-native sources like partner engagement,
assets, certifications, commissions, and MDF, then choose how to aggregate and group it. You select a
visualization, a bar chart, line chart, pie chart, or single number, and apply filters, date
properties, and grouping to shape the answer.

Reports respect partner access, multi-currency, and your fiscal year, so the numbers are correct and
scoped. You can save reports, control who can view or edit them, export the raw data to CSV, and use
saved reports as the building blocks for dashboards and portal embeds.

## The problem it solves

Partner reporting usually means waiting on someone else or wrestling with a BI tool:

* **Every question is a RevOps ticket** → Build the report yourself in minutes.
* **The data lives in two systems** → Report on CRM and Introw data together.
* **BI tools need specialists** → No code, just a guided builder.
* **Numbers are hard to trust** → Reports respect access, currency, and fiscal year.

## From problem to solution

The report builder puts answers in the hands of the people who run the program. Pick a source,
shape it, visualize it, and you have a trustworthy report ready to share or drop into a dashboard.

```mermaid theme={"theme":{"light":"github-light","dark":"github-dark"}}
flowchart LR
  source["Pick a data source"] --> shape["Shape metric and grouping"]
  shape --> filter["Filter the audience"]
  filter --> chart["Pick the chart"]
```

## Use cases

<CardGroup cols={2}>
  <Card title="Answer ad hoc questions" icon="circle-check">
    Build a report in minutes.
  </Card>

  <Card title="Blend CRM and Introw data" icon="circle-check">
    Report across both sources.
  </Card>

  <Card title="Share trustworthy numbers" icon="circle-check">
    Respect access and currency.
  </Card>

  <Card title="Feed dashboards" icon="circle-check">
    Reuse reports as building blocks.
  </Card>
</CardGroup>

## Impact

* **Low total cost of ownership** - Partner ops builds reports without engineering.
* **CRM-native** - Reports are computed from live CRM data.

## Who it's for

<CardGroup cols={2}>
  <Card title="Partner Operations" icon="user">
    Builds and shares reports.
  </Card>

  <Card title="RevOps" icon="user">
    Defines metrics and data sources.
  </Card>
</CardGroup>

## Works with

{/* CONNECTS:START - generated content goes here */}

<CardGroup cols={2}>
  <Card title="Dashboards" icon="chart-line" href="/features/reporting/dashboards">
    Reports power dashboards.
  </Card>

  <Card title="Power BI" icon="chart-line" href="/features/reporting/power-bi">
    Export to Power BI.
  </Card>
</CardGroup>

## Headless

<Headless
  prompts={[
"List partners active in the last 30 days with open deals.",
"Build a view of registrations by partner and status.",
]}
/>

## Going deeper

<CardGroup cols={2}>
  <Card title="How to" icon="screwdriver-wrench" href="./technical">
    Setup, configuration, and all how-to guides.
  </Card>

  <Card title="API reference" icon="code" href="/general/introduction">
    Integration surface and code.
  </Card>
</CardGroup>
