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

# Prove the outcomes with Magic Analytics

> How MSP leadership reads Thread's impact: Magic Analytics dashboards and topics, the Dashboard Agent, ROI skills, and a weekly scorecard ritual.

export const MarkComplete = ({id, signalDone = false}) => {
  const KEY = "thread-onboarding-completed";
  const read = () => {
    try {
      return JSON.parse(localStorage.getItem(KEY) || "[]");
    } catch (e) {
      return [];
    }
  };
  const [localDone, setLocalDone] = useState(false);
  const done = signalDone || localDone;
  useEffect(() => {
    const sync = () => setLocalDone(read().includes(id));
    sync();
    window.addEventListener("thread-onboarding-updated", sync);
    return () => window.removeEventListener("thread-onboarding-updated", sync);
  }, [id]);
  const toggle = () => {
    if (signalDone) return;
    const list = read();
    const next = list.includes(id) ? list.filter(x => x !== id) : [...list, id];
    try {
      localStorage.setItem(KEY, JSON.stringify(next));
    } catch (e) {}
    setLocalDone(next.includes(id));
    window.dispatchEvent(new Event("thread-onboarding-updated"));
  };
  return <button onClick={toggle} style={{
    width: "100%",
    padding: "0.7rem 1rem",
    marginTop: "1.5rem",
    borderRadius: "8px",
    border: "1px solid " + (done ? "#00B398" : "rgba(128,128,128,0.35)"),
    background: done ? "rgba(0,179,152,0.12)" : "transparent",
    color: done ? "#00B398" : "inherit",
    fontWeight: 600,
    fontSize: "0.95rem",
    cursor: "pointer",
    display: "flex",
    alignItems: "center",
    justifyContent: "center",
    gap: "0.5rem"
  }}>
      <span aria-hidden="true">{done ? "✓" : "○"}</span>
      {done ? "Completed" : "Mark as complete"}
    </button>;
};

export const ByRoleProgress = () => {
  useEffect(() => {
    const KEY = "thread-onboarding-completed";
    const TEAL = "#00B398";
    const BASE = "/start-here/roles/";
    const DONE_ICON = '<svg class="thread-rc-doneicon size-4" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#00B398" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">' + '<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>' + '<polyline points="22 4 12 14.01 9 11.01"/></svg>';
    const COURSES = [{
      slug: "technician",
      steps: ["why-thread", "get-around-inbox", "day-one-setup", "daily-workflows", "ai-toolkit", "notifications-and-customers"]
    }, {
      slug: "dispatcher",
      steps: ["why-dispatch-in-thread", "read-the-board", "assign-and-schedule", "ai-for-dispatch"]
    }, {
      slug: "service-ops-manager",
      steps: ["set-up-the-desk", "sla-and-dispatch", "analytics-and-qa", "roll-out-and-adopt"]
    }, {
      slug: "csm-account-manager",
      steps: ["client-intelligence-and-health", "qbrs-and-reporting", "retention-and-expansion"]
    }, {
      slug: "security-compliance-owner",
      steps: ["security-work-in-thread", "data-and-compliance", "security-runbooks"]
    }, {
      slug: "sales-business-development",
      steps: ["the-ai-service-pitch", "quote-and-handoff"]
    }, {
      slug: "msp-owner-leadership",
      steps: ["the-rollout", "outcomes-and-analytics", "scale-ai-service"]
    }, {
      slug: "automation-engineer",
      steps: ["flows-and-intents", "thread-mcp-and-api", "build-with-super-magic"]
    }];
    const COURSE_SLUGS = new Set(COURSES.map(c => c.slug));
    const readLocal = () => {
      try {
        return JSON.parse(localStorage.getItem(KEY) || "[]");
      } catch (e) {
        return [];
      }
    };
    const isDone = (done, id) => done.includes(id);
    const decorate = () => {
      const done = readLocal();
      const scope = document.getElementById("sidebar-content") || document;
      const links = [...scope.querySelectorAll('a[href*="' + BASE + '"]')].filter(a => !a.closest("main"));
      links.forEach(a => {
        const m = (a.getAttribute("href") || "").match(/\/start-here\/roles\/([^/?#]+)\/([^/?#]+)/);
        if (!m) return;
        if (!COURSE_SLUGS.has(m[1])) return;
        const id = m[1] + "/" + m[2];
        const d = isDone(done, id);
        const has = a.querySelector(".thread-rc-check");
        if (d && !has) {
          const s = document.createElement("span");
          s.className = "thread-rc-check";
          s.textContent = "✓ ";
          s.style.color = TEAL;
          s.style.fontWeight = "700";
          a.insertBefore(s, a.firstChild);
        } else if (!d && has) {
          has.remove();
        }
      });
      COURSES.forEach(course => {
        const li = scope.querySelector('li[id="' + BASE + course.slug + '"]');
        if (!li) return;
        const row = li.querySelector(":scope > button") || li.querySelector(":scope > a") || li.firstElementChild;
        if (!row) return;
        const nameSpan = [...row.querySelectorAll("span")].find(s => s.textContent.trim() && !s.classList.contains("thread-rc-coursecheck"));
        if (!nameSpan) return;
        const allDone = course.steps.length > 0 && course.steps.every(s => isDone(done, course.slug + "/" + s));
        const has = nameSpan.querySelector(".thread-rc-coursecheck");
        if (allDone && !has) {
          const s = document.createElement("span");
          s.className = "thread-rc-coursecheck";
          s.setAttribute("aria-hidden", "true");
          s.style.display = "inline-flex";
          s.style.alignItems = "center";
          s.style.verticalAlign = "-0.2em";
          s.style.marginRight = "0.35em";
          s.innerHTML = DONE_ICON;
          nameSpan.insertBefore(s, nameSpan.firstChild);
        } else if (!allDone && has) {
          has.remove();
        }
      });
    };
    decorate();
    const iv = setInterval(decorate, 600);
    window.addEventListener("thread-onboarding-updated", decorate);
    window.addEventListener("storage", decorate);
    return () => {
      clearInterval(iv);
      window.removeEventListener("thread-onboarding-updated", decorate);
      window.removeEventListener("storage", decorate);
    };
  }, []);
  return null;
};

<ByRoleProgress />

You rolled Thread out; now prove it worked. Magic Analytics brings your service-desk metrics and the impact of Thread's AI into one place, so you can see the value, defend the spend, and decide where to push next. This lesson is how leadership reads the numbers — and turns them into a weekly habit instead of a quarterly scramble.

## Magic Analytics for leadership

Magic Analytics lives at **Thread admin → General → Analytics**. It ships with pre-built dashboards aimed straight at the questions owners ask — including **ROI Value Realization**, **Assistive AI Accuracy**, **Triage Agent Summary**, **Voice AI Summary**, and **Service Team Performance & AI Usage**.

<Card title="Getting started with Magic Analytics" icon="chart-line" href="/analytics/getting-started-with-magic-analytics">
  Access the dashboards, apply filters, read the "Query ran" timestamp, and schedule delivery so the numbers land in your inbox on a cadence.
</Card>

<Note>
  Magic Analytics refreshes on a daily cycle — it's about a day behind, not real-time. For a weekly scorecard that's exactly right; just don't expect this morning's tickets to show up before tomorrow's refresh.
</Note>

## Explore beyond the dashboards

When a dashboard raises a question it doesn't answer, **topics** let you explore your data on a governed footing — the numbers you find always match the numbers on your dashboards, and you only ever see your own organization's data.

<Card title="Topics you can explore" icon="layer-group" href="/analytics/topics-you-can-explore">
  The curated data areas — Magic Agent, AI Accuracy, Value Realization, Voice AI, Messenger, and more — and whether each is a fast rollup or drills to individual records.
</Card>

For owners, the aggregate topics (one row per partner, per tech, per month) are usually what you want: they power scorecards, leaderboards, and trend arrows without drowning you in ticket-level rows.

## Ask in plain English

You don't have to build queries. The **Dashboard Agent** answers questions right on your dashboards — ask in plain English and it replies, often with a chart.

<Card title="Dashboard Agent" icon="comments" href="/analytics/dashboard-agent">
  Query your dashboards conversationally, drill into a tile, and re-cut the data. Available to AI Pro members.
</Card>

Questions worth asking as an owner:

* *"What's my estimated time saved this quarter?"*
* *"How many tickets did the Triage Agent auto-resolve last month?"*
* *"Which customers don't have Messenger enabled yet?"*
* *"Show me first-contact resolution week over week."*

<Tip>
  Name the topic and give it a time frame ("Triage Agent, last 30 days"). Scoped questions get sharper answers.
</Tip>

## Turn numbers into a narrative

Raw metrics don't move a leadership meeting — a story does. These skills take the same analytics and write the brief for you:

<CardGroup cols={2}>
  <Card title="Automation ROI Report" icon="piggy-bank" href="/skill-library/reporting-and-analytics/automation-roi-report">
    Put a dollar figure on hours saved by AI and automation.
  </Card>

  <Card title="CEO Service Desk Brief" icon="briefcase" href="/skill-library/reporting-and-analytics/ceo-service-desk-brief">
    The whole desk rolled up into an owner-ready summary.
  </Card>

  <Card title="Weekly Ops Report" icon="calendar-week" href="/skill-library/reporting-and-analytics/weekly-ops-report">
    A leadership-ready weekly operations summary.
  </Card>

  <Card title="Browse reporting skills" icon="sparkles" href="/skill-library/reporting-and-analytics/overview">
    Every reporting and analytics skill in one place.
  </Card>
</CardGroup>

## Make it a weekly ritual

The owners who get the most from analytics don't wait for the QBR — they run a tight scorecard every week and resolve one blocked decision while they're still in the seat.

<CardGroup cols={2}>
  <Card title="Exec weekly ritual" icon="calendar-check" href="/skill-library/role-rituals/exec-weekly-ritual">
    Twenty minutes: read the scorecard, resolve one decision, clear what's escalated to you.
  </Card>

  <Card title="Daily leadership digest" icon="newspaper" href="/skill-library/reporting-and-analytics/daily-leadership-digest">
    A skimmable pulse on the desk when you want it more often than weekly.
  </Card>
</CardGroup>

The rule that makes the ritual work: **one decision, resolved.** "Noted" isn't a resolution — decide it, or name exactly what's missing and who provides it by when, then tell the person waiting.

<MarkComplete id="msp-owner-leadership/outcomes-and-analytics" />

## Next

Numbers prove the past. The last lesson is about the future: expanding AI across your whole client base and turning outcomes into growth.

<Card title="Scale AI Service Unleashed" icon="trophy" href="/start-here/roles/msp-owner-leadership/scale-ai-service">
  Expand AI across every client, run the business on it, and sell the value story.
</Card>


## Related topics

- [Roll Thread out across your business](/start-here/roles/msp-owner-leadership/the-rollout.md)
- [MSP Owner / Leadership](/start-here/roles/msp-owner-leadership.md)
- [Run QBRs with Magic Analytics and the Dashboard Agent](/start-here/roles/csm-account-manager/qbrs-and-reporting.md)
