> ## 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.

# Run the retention and expansion playbooks

> A CSM's playbooks in Thread: catch risk early, prep every renewal, mine accounts for expansion, and lead the customer value story with outcomes over technology.

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 />

Reading health and proving value only matter if they change what you do. This lesson is the doing: catch risk before it becomes churn, walk into every renewal with the story already told, find the expansion the account's own history is asking for, and frame all of it in the customer value language that lands. Each play is a skill you can run today, backed by the health and analytics you set up in the previous two lessons.

## Catch risk before it's churn

Retention is won weeks before a renewal, not the week of. Two skills keep you ahead of it:

<CardGroup cols={2}>
  <Card title="Client Risk Scan" icon="triangle-exclamation" href="/skill-library/account-management/client-risk-scan">
    Rank at-risk accounts across sentiment, aging, recurring issues, and incidents — with the evidence.
  </Card>

  <Card title="Health Score Reconciliation" icon="scale-balanced" href="/skill-library/account-management/health-score-reconciliation">
    Reconcile a client's Thread health signals against your own CS health score so the two agree.
  </Card>
</CardGroup>

Run the risk scan across your book on a cadence — the [CSM weekly ritual](/skill-library/role-rituals/csm-weekly-ritual) chains it in — and treat any [sentiment](/start-here/roles/csm-account-manager/client-intelligence-and-health) decline as a reason to promote an account to a call, not a note for later. Every flag needs evidence (scores, ticket references, dates); a risk list built on hunches costs you credibility the first time it's wrong.

<Warning>
  When an account is already signaling it's ready to leave, don't improvise. Run the [Churn-Save Deep Dive](/skill-library/client-lifecycle/churn-save-deep-dive) — it builds a structured recovery plan from the account's real history — and if the relationship still ends, the [Post-Churn Autopsy](/skill-library/client-lifecycle/post-churn-autopsy) captures what to fix for the next account like it.
</Warning>

## Prep every renewal

A renewal conversation should be a formality, because the value story was already told at the last QBR. When one comes up, prep it the same way every time:

<Steps>
  <Step title="Pull the service record and the value story">
    Run [Renewal Prep](/skill-library/account-management/renewal-prep) for a pre-renewal readout — service record, open risks, and the value delivered. Ground the numbers in the Value Realization topic from the [reporting lesson](/start-here/roles/csm-account-manager/qbrs-and-reporting).
  </Step>

  <Step title="Clear the risks first">
    Resolve or acknowledge anything a [Client Risk Scan](/skill-library/account-management/client-risk-scan) surfaced. Walking into a renewal with a known-but-unaddressed risk is how good accounts get discounted.
  </Step>

  <Step title="Route the paperwork">
    Use [Contract Renewal Routing](/skill-library/client-lifecycle/contract-renewal-routing) to get the renewal to the right owner and process on time — no renewal should slip because it sat in the wrong queue.
  </Step>
</Steps>

## Mine accounts for expansion

The healthiest accounts are the ones asking — in their ticket history — for the next thing. Expansion isn't a cold pitch; it's noticing a pattern and naming it.

<CardGroup cols={2}>
  <Card title="Expansion Opportunity Scan" icon="arrow-trend-up" href="/skill-library/account-management/expansion-opportunity-scan">
    Mine a client's history for upsell, project, and training signals — the asks hiding in their tickets.
  </Card>

  <Card title="IT Roadmap Builder" icon="road" href="/skill-library/account-management/it-roadmap-builder">
    Turn recurring issues and gaps into a forward-looking roadmap the client will fund.
  </Card>
</CardGroup>

<Tip>
  The strongest expansion story writes itself from the data: an account whose after-hours ticket volume is climbing is a Voice AI conversation; a client with recurring password and VPN issues is a security or training conversation. Let the Expansion Opportunity Scan find the signal, then deep-dive only the strongest one — a scattershot pitch reads as sales, a specific one reads as advice.
</Tip>

## Lead with the customer value story

Every one of these plays ends in a conversation with the client — and the rule for all of them is the same: **lead with outcomes, not technology.** The [customer value messaging playbook](/get-started/talking-to-customers-about-ai-powered-support-thread-customer-value-messaging) is the script library for exactly this.

It gives you:

* The **FAST framework** — every conversation maps to one of four outcomes: Faster, Always Available, Smarter Service, Tailored to You.
* A **"Say this, not that" table** that swaps internal language ("we deployed a Triage Agent") for customer language ("you get an instant response the moment you reach out").
* **Objection handling** for the real pushback — "I don't want to talk to a bot," "is my data safe?", "the old way worked fine" — each with acknowledge / reframe / reassure / offer.
* **Conversation scripts** for the moments you'll actually be in: onboarding, the skeptical customer, the QBR, complaint handling, and the expansion pitch.

<Note>
  The metrics-translation table in that playbook pairs directly with the [Business Value Summary](/skill-library/account-management/business-value-summary) skill — the summary gives you the number, the table gives you the sentence a stakeholder cares about.
</Note>

That's the loop: read health, prove value, run the play, tell the story — then start over at the next QBR with better data than you had before.

<MarkComplete id="csm-account-manager/retention-and-expansion" />

## Next

You've got the full course. Keep the playbooks close and make the weekly ritual a habit.

<CardGroup cols={2}>
  <Card title="Back to your course hub" icon="house" href="/start-here/roles/csm-account-manager">
    The starter kit, the weekly ritual, and the 30-day ramp — all in one place.
  </Card>

  <Card title="Browse all CSM skills" icon="address-card" href="/skill-library/by-role/csm-account-manager">
    Every Super Magic skill tagged for account management.
  </Card>
</CardGroup>


## Related topics

- [Client Health Report](/skill-library/account-management/client-health-report.md)
- [Run QBRs with Magic Analytics and the Dashboard Agent](/start-here/roles/csm-account-manager/qbrs-and-reporting.md)
- [Expansion Opportunity Scan](/skill-library/account-management/expansion-opportunity-scan.md)
