playbook-doc.md84.4 KBView on GitHub

Introduced 1 production defect in 180 days, median 13 days to fix.

# What is your top rep doing differently?

A living breakdown of how the team converts pipeline — org and per-rep conversion, response habits, and the per-stage patterns, objections, messaging, features, and pain points that move deals. Last 90 days, 100 deals per rep.

## Org-wide conversion rate

```dashboard
{
  "id": "org_conversion",
  "dataSources": {
    "org": {
      "mock": [
        {
          "winRate": 21,
          "deals": 400,
          "avgAttainment": 93,
          "pipeline": 4250000
        }
      ]
    },
    "funnel": {
      "mock": [
        {
          "label": "Discovery",
          "count": 400
        },
        {
          "label": "Demo",
          "count": 285
        },
        {
          "label": "Negot.",
          "count": 145
        },
        {
          "label": "Close",
          "count": 84
        }
      ]
    }
  },
  "layout": {
    "type": "column",
    "gap": "lg",
    "children": [
      {
        "type": "grid",
        "columns": 4,
        "gap": "lg",
        "children": [
          {
            "type": "stat",
            "source": "org",
            "field": "winRate",
            "label": "Org win rate",
            "format": "percent",
            "style": "radial"
          },
          {
            "type": "stat",
            "source": "org",
            "field": "avgAttainment",
            "label": "Avg quota attainment",
            "format": "percent"
          },
          {
            "type": "stat",
            "source": "org",
            "field": "pipeline",
            "label": "Total pipeline",
            "format": "currency-compact"
          },
          {
            "type": "stat",
            "source": "org",
            "field": "deals",
            "label": "Deals (last 90 days)",
            "format": "number"
          }
        ]
      },
      {
        "type": "funnel",
        "source": "funnel",
        "size": "lg"
      }
    ]
  },
  "spec_version": "2.0"
}
```

## Per rep conversion rate

Each card is a rep's funnel. Click a rep to open their full playbook — their conversion versus the team average and what they do at each stage.

```dashboard
{
  "id": "per_rep_conversion",
  "dataSources": {
    "reps": {
      "mock": [
        {
          "name": "Willem",
          "initials": "WE",
          "label": "Top rep",
          "steps": [
            {
              "label": "Discovery",
              "count": 100
            },
            {
              "label": "Demo",
              "count": 82
            },
            {
              "label": "Negot.",
              "count": 53
            },
            {
              "label": "Close",
              "count": 38
            }
          ],
          "attainment": 142,
          "docPath": "user/files/users/willem"
        },
        {
          "name": "Sarah",
          "initials": "SK",
          "label": "Account Exec",
          "steps": [
            {
              "label": "Discovery",
              "count": 100
            },
            {
              "label": "Demo",
              "count": 74
            },
            {
              "label": "Negot.",
              "count": 38
            },
            {
              "label": "Close",
              "count": 21
            }
          ],
          "attainment": 88,
          "docPath": "user/files/users/sarah"
        },
        {
          "name": "Marcus",
          "initials": "MR",
          "label": "Account Exec",
          "steps": [
            {
              "label": "Discovery",
              "count": 100
            },
            {
              "label": "Demo",
              "count": 61
            },
            {
              "label": "Negot.",
              "count": 23
            },
            {
              "label": "Close",
              "count": 10
            }
          ],
          "attainment": 61,
          "docPath": "user/files/users/marcus"
        },
        {
          "name": "Lily",
          "initials": "LP",
          "label": "Account Exec",
          "steps": [
            {
              "label": "Discovery",
              "count": 100
            },
            {
              "label": "Demo",
              "count": 68
            },
            {
              "label": "Negot.",
              "count": 31
            },
            {
              "label": "Close",
              "count": 15
            }
          ],
          "attainment": 79,
          "docPath": "user/files/users/lily"
        }
      ]
    }
  },
  "layout": {
    "type": "repeater",
    "source": "reps",
    "as": "rep",
    "layout": "grid",
    "columns": 4,
    "gap": "lg",
    "template": {
      "type": "entityCard",
      "linkField": "docPath",
      "children": [
        {
          "type": "profile",
          "name": "{{rep.name}}",
          "initials": "{{rep.initials}}",
          "label": "{{rep.label}}"
        },
        {
          "type": "stat",
          "field": "attainment",
          "label": "Quota attainment",
          "format": "percent"
        },
        {
          "type": "funnel",
          "field": "steps"
        }
      ]
    }
  },
  "spec_version": "2.0"
}
```

## Playbook

### Follow-up

Speed and cadence of follow-up is the biggest separator between won and lost deals. Times are medians; "first response" is the gap from an inbound message to the first reply, "follow-up gap" is the gap between consecutive outbound emails.

```dashboard
{
  "id": "follow_ups",
  "dataSources": {
    "headline": {
      "mock": [
        {
          "response": 13680,
          "postMeeting": 21600,
          "followup": 354240
        }
      ]
    },
    "outcome": {
      "mock": [
        {
          "outcome": "Won deals",
          "firstResponse": 4320,
          "followup": 155520,
          "replyRate": 71,
          "deals": 42
        },
        {
          "outcome": "Lost deals",
          "firstResponse": 19440,
          "followup": 535680,
          "replyRate": 34,
          "deals": 61
        },
        {
          "outcome": "All deals",
          "firstResponse": 13680,
          "followup": 354240,
          "replyRate": 49,
          "deals": 103
        }
      ]
    },
    "content": {
      "mock": [
        {
          "content": "Recap + single CTA",
          "replyRate": 71,
          "win": 38
        },
        {
          "content": "Mutual action plan",
          "replyRate": 66,
          "win": 35
        },
        {
          "content": "Case study",
          "replyRate": 59,
          "win": 32
        },
        {
          "content": "Pattern breaker",
          "replyRate": 54,
          "win": 29
        },
        {
          "content": "Generic \"just checking in\"",
          "replyRate": 18,
          "win": 7
        }
      ]
    },
    "breakers": {
      "mock": [
        {
          "name": "The permission-to-close",
          "subject": "Should I close your file?",
          "body": "Haven't heard back, which usually means one of three things: it's not a priority right now, the timing is off, or I dropped the ball. Totally fine either way — just tell me which and I'll act accordingly.",
          "replyRate": 61,
          "context": "After 2 unanswered follow-ups"
        },
        {
          "name": "The trigger event",
          "subject": "Saw the Series B — congrats",
          "body": "Congrats on the raise. New headcount usually means more pipeline than the team can follow up on — which is exactly the gap we close. Worth 15 minutes now that you are scaling the team?",
          "replyRate": 58,
          "context": "Triggered by funding news"
        },
        {
          "name": "The case-study drop",
          "subject": "How Ramp cut follow-up time 60%",
          "body": "You mentioned reps forgetting to follow up. Ramp had the same problem — attached is the one-pager on how they fixed it in 3 weeks. Happy to walk through it live if useful.",
          "replyRate": 52,
          "context": "Mapped to a stated pain"
        }
      ]
    }
  },
  "layout": {
    "type": "column",
    "gap": "lg",
    "children": [
      {
        "type": "grid",
        "columns": 3,
        "gap": "lg",
        "children": [
          {
            "type": "stat",
            "source": "headline",
            "field": "response",
            "label": "Avg response time",
            "format": "duration"
          },
          {
            "type": "stat",
            "source": "headline",
            "field": "postMeeting",
            "label": "Avg post-meeting follow-up",
            "format": "duration"
          },
          {
            "type": "stat",
            "source": "headline",
            "field": "followup",
            "label": "Avg follow-up time",
            "format": "duration"
          }
        ]
      },
      {
        "type": "table",
        "source": "outcome",
        "title": "Response & follow-up by outcome",
        "columns": [
          {
            "key": "outcome",
            "label": "Outcome",
            "weight": 2
          },
          {
            "key": "firstResponse",
            "label": "Avg response time",
            "format": "duration",
            "align": "right"
          },
          {
            "key": "followup",
            "label": "Avg follow-up gap",
            "format": "duration",
            "align": "right"
          },
          {
            "key": "replyRate",
            "label": "Reply rate",
            "format": "percent",
            "align": "right"
          },
          {
            "key": "deals",
            "label": "Deals",
            "format": "number",
            "align": "right"
          }
        ]
      },
      {
        "type": "table",
        "source": "content",
        "title": "Follow-up content — what gets replies",
        "columns": [
          {
            "key": "content",
            "label": "Content type",
            "weight": 3
          },
          {
            "key": "replyRate",
            "label": "Reply rate",
            "format": "percent",
            "align": "right"
          },
          {
            "key": "win",
            "label": "Win %",
            "format": "percent",
            "align": "right"
          }
        ]
      },
      {
        "type": "text",
        "markdown": "### Pattern breakers\nThe emails that break a no-reply streak — short, specific, and easy to say yes (or no) to."
      },
      {
        "type": "repeater",
        "source": "breakers",
        "as": "breaker",
        "layout": "list",
        "gap": "md",
        "template": {
          "type": "entityCard",
          "children": [
            {
              "type": "text",
              "markdown": "**{{breaker.name}}** · {{breaker.context}} · replies {{breaker.replyRate}}%"
            },
            {
              "type": "text",
              "markdown": "**Subject:** {{breaker.subject}}"
            },
            {
              "type": "text",
              "markdown": "{{breaker.body}}",
              "className": "text-muted-foreground italic"
            }
          ]
        }
      }
    ]
  },
  "spec_version": "2.0"
}
```

### Stage 1 — Discovery

**Goal:** Prospect names one use case + success metric, and sees why Cedar (not a build) is the path.

Each objection links to a breakdown of the talk tracks reps use against it and how each performs.

```dashboard
{
  "id": "stage1_playbook",
  "dataSources": {
    "objections": {
      "mock": [
        {
          "objection": "Build vs Buy — \"we build our GTM tools in-house\"",
          "analysisPath": "user/files/playbook/stage1/objections/build-vs-buy-we-build-our-gtm-tools-in-house",
          "mentions": 4,
          "bestReply": "Teams that build this underestimate the upkeep. Cedar ships the playbook engine + self-improving data flywheel out of the box and gets smarter from your reps’ own calls. What would your eng team have to deprioritize to build and maintain follow-up + CRM automation?",
          "win": 25,
          "toNext": 38
        },
        {
          "objection": "We want to own the data",
          "analysisPath": "user/files/playbook/stage1/objections/we-want-to-own-the-data",
          "mentions": 5,
          "bestReply": "You do — Cedar reads and writes your existing CRM and Gmail; we’re not a separate system of record. Happy to send our infosec + data-handling doc and walk your security lead through it.",
          "win": 45,
          "toNext": 58
        },
        {
          "objection": "AI only helps with standardized, templated work",
          "analysisPath": "user/files/playbook/stage1/objections/ai-only-helps-with-standardized-templated-work",
          "mentions": 7,
          "bestReply": "True for generic tools — Cedar runs YOUR playbook with full deal context, so it personalizes the non-standard parts. Can I draft a follow-up live on one of your real stalled deals?",
          "win": 60,
          "toNext": 66
        },
        {
          "objection": "The scaling problem is months away — not urgent now",
          "analysisPath": "user/files/playbook/stage1/objections/the-scaling-problem-is-months-away-not-urgent-no",
          "mentions": 5,
          "bestReply": "Better to codify your best rep’s playbook before the new hires land — Cedar ramps new AEs to your CRM + follow-up standards without manager time. Want a 3-week pilot timed to the hire?",
          "win": 40,
          "toNext": 49
        },
        {
          "objection": "This market is too competitive",
          "analysisPath": "user/files/playbook/stage1/objections/this-market-is-too-competitive",
          "mentions": 6,
          "bestReply": "Crowded on call recording — not on the writing + follow-up layer where deals actually slip. That’s the gap we own, and why Cursor, Warp, and Pylon picked us.",
          "win": 60,
          "toNext": 64
        }
      ]
    },
    "positioning": {
      "mock": [
        {
          "competitor": "Claude / ChatGPT",
          "stance": "Compete",
          "encounter": 44,
          "theyWin": "Free-form drafting, cheap",
          "weWin": "Proactive, full deal context, playbook-controlled",
          "winVs": 62,
          "talkTrack": "ChatGPT writes a fine email — once you paste in the context, remember to send it, and update the CRM yourself. The work was never the writing; it's everything around it. Cedar does all three off your inbox, on your playbook.",
          "reps": [
            {
              "rep": "Willem",
              "winVs": 71,
              "note": "Demos Cedar acting on a live thread, not a blank prompt box"
            },
            {
              "rep": "Sarah",
              "winVs": 60,
              "note": "Anchors on the CRM hygiene the buyer already struggles with"
            }
          ],
          "deals": [
            {
              "deal": "Cursor",
              "stage": "Closed won",
              "status": "Reference"
            },
            {
              "deal": "Pylon",
              "stage": "POC",
              "status": "Active"
            }
          ]
        },
        {
          "competitor": "Status quo (Gmail + manual CRM)",
          "stance": "Compete",
          "encounter": 51,
          "theyWin": "No new tool to adopt",
          "weWin": "Cut admin 75%, no deals slip",
          "winVs": 60,
          "talkTrack": "Gmail is free — the deals slipping through it aren't. What does a dropped follow-up cost you a quarter? Cedar cuts the admin 75% and nothing falls through the cracks.",
          "reps": [
            {
              "rep": "Willem",
              "winVs": 68,
              "note": "Quantifies the cost of inaction before showing anything"
            },
            {
              "rep": "Lily",
              "winVs": 55,
              "note": "Maps the manual steps the team already hates"
            }
          ],
          "deals": [
            {
              "deal": "Warp",
              "stage": "Negotiation",
              "status": "At risk"
            },
            {
              "deal": "Two Dots",
              "stage": "Discovery",
              "status": "Active"
            }
          ]
        },
        {
          "competitor": "Sybill",
          "stance": "Compete",
          "encounter": 29,
          "theyWin": "Call notes + CRM autofill",
          "weWin": "Writing + follow-up + playbook execution",
          "winVs": 55,
          "talkTrack": "Sybill is great at notes after the call. Deals are won or lost in the writing and follow-up between calls — that's the layer we own. We sit alongside your notetaker, not against it.",
          "reps": [
            {
              "rep": "Willem",
              "winVs": 58,
              "note": "Splits 'capture' from 'execution' so the wedge is obvious"
            },
            {
              "rep": "Marcus",
              "winVs": 41,
              "note": "Still feature-battles — coach toward the layer framing"
            }
          ],
          "deals": [
            {
              "deal": "Bread Labs",
              "stage": "Closed lost",
              "status": "Win-back"
            }
          ]
        },
        {
          "competitor": "Clari",
          "stance": "Compete",
          "encounter": 24,
          "theyWin": "Forecast hygiene",
          "weWin": "Per-deal execution + next steps",
          "winVs": 58,
          "talkTrack": "Clari tells the manager the forecast. Cedar helps the rep actually hit it — per-deal next steps, not roll-up dashboards. Different buyer, different job; most teams run both.",
          "reps": [
            {
              "rep": "Willem",
              "winVs": 62,
              "note": "Sells to the rep's pain, not the VP's"
            },
            {
              "rep": "Sarah",
              "winVs": 54,
              "note": "Positions Cedar as the execution under the forecast"
            }
          ],
          "deals": [
            {
              "deal": "Pirros",
              "stage": "Pilot details",
              "status": "Active"
            }
          ]
        },
        {
          "competitor": "HubSpot Sequences",
          "stance": "Compete",
          "encounter": 26,
          "theyWin": "Bundled with the CRM",
          "weWin": "Reply quality + deal context",
          "winVs": 49,
          "talkTrack": "Sequences blast the same template at everyone — that's why reply rates crater. Cedar writes in the rep's voice with the deal's context. It's a reply-quality difference, not a volume one.",
          "reps": [
            {
              "rep": "Willem",
              "winVs": 55,
              "note": "Shows a side-by-side reply-rate gap on real threads"
            },
            {
              "rep": "Lily",
              "winVs": 44,
              "note": "Leads with 'bundled ≠ better' on the actual emails"
            }
          ],
          "deals": [
            {
              "deal": "Globex",
              "stage": "Proposal",
              "status": "At risk"
            }
          ]
        },
        {
          "competitor": "Gong",
          "stance": "Integrate",
          "encounter": 38,
          "theyWin": "Call recording + coaching",
          "weWin": "We integrate — surface the writing/follow-up Gong misses",
          "winVs": 78,
          "talkTrack": "We don't replace Gong — we read it. Gong shows you the call; Cedar acts on it: the recap, the follow-up, the CRM update. Keep Gong, add the execution layer.",
          "reps": [
            {
              "rep": "Willem",
              "winVs": 82,
              "note": "Frames as 'and', never 'or' — disarms the incumbent"
            },
            {
              "rep": "Sarah",
              "winVs": 74,
              "note": "Brings the Gong admin into the room as a champion"
            }
          ],
          "deals": [
            {
              "deal": "Acme Corp",
              "stage": "Negotiation",
              "status": "At risk"
            }
          ]
        }
      ]
    },
    "tracks": {
      "mock": [
        {
          "track": "Reframe to maintenance + opportunity cost",
          "objection": "Build vs Buy — \"we build our GTM tools in-house\"",
          "rep": "Willem",
          "uses": 14,
          "toNext": 42,
          "win": 31
        },
        {
          "track": "Show the self-improving data flywheel",
          "objection": "Build vs Buy — \"we build our GTM tools in-house\"",
          "rep": "Willem",
          "uses": 11,
          "toNext": 38,
          "win": 28
        },
        {
          "track": "Concede + offer API / integration path",
          "objection": "Build vs Buy — \"we build our GTM tools in-house\"",
          "rep": "Lily",
          "uses": 8,
          "toNext": 30,
          "win": 19
        },
        {
          "track": "Cedar writes to your CRM, not a new silo",
          "objection": "We want to own the data",
          "rep": "Willem",
          "uses": 12,
          "toNext": 58,
          "win": 45
        },
        {
          "track": "Share infosec + SOC2 Type II packet",
          "objection": "We want to own the data",
          "rep": "Sarah",
          "uses": 9,
          "toNext": 50,
          "win": 38
        },
        {
          "track": "Offer a data-handling review with security",
          "objection": "We want to own the data",
          "rep": "Lily",
          "uses": 7,
          "toNext": 44,
          "win": 33
        },
        {
          "track": "Draft live on a real stalled deal",
          "objection": "AI only helps with standardized, templated work",
          "rep": "Willem",
          "uses": 16,
          "toNext": 66,
          "win": 60
        },
        {
          "track": "Show the 90% no-edit send rate",
          "objection": "AI only helps with standardized, templated work",
          "rep": "Lily",
          "uses": 10,
          "toNext": 54,
          "win": 47
        },
        {
          "track": "Contrast vs generic ChatGPT output",
          "objection": "AI only helps with standardized, templated work",
          "rep": "Sarah",
          "uses": 9,
          "toNext": 48,
          "win": 40
        },
        {
          "track": "Tie the pilot to the upcoming hire",
          "objection": "The scaling problem is months away — not urgent now",
          "rep": "Willem",
          "uses": 11,
          "toNext": 49,
          "win": 40
        },
        {
          "track": "Ramp-time proof point (Cursor)",
          "objection": "The scaling problem is months away — not urgent now",
          "rep": "Lily",
          "uses": 8,
          "toNext": 44,
          "win": 35
        },
        {
          "track": "Differentiate on the follow-up layer",
          "objection": "This market is too competitive",
          "rep": "Willem",
          "uses": 13,
          "toNext": 64,
          "win": 60
        },
        {
          "track": "Name-drop Cursor / Warp / Pylon",
          "objection": "This market is too competitive",
          "rep": "Sarah",
          "uses": 9,
          "toNext": 52,
          "win": 44
        }
      ]
    },
    "pains": {
      "mock": [
        {
          "pain": "Deals slip through the cracks on timing",
          "feltBy": "AE",
          "freq": 64,
          "win": 39
        },
        {
          "pain": "Follow-ups are manual and impersonal",
          "feltBy": "AE",
          "freq": 58,
          "win": 36
        },
        {
          "pain": "CRM busywork — moving info column A → B",
          "feltBy": "AE",
          "freq": 55,
          "win": 34
        },
        {
          "pain": "Pipeline analysis = copy-pasting scattered context",
          "feltBy": "Strategic AE",
          "freq": 47,
          "win": 33
        },
        {
          "pain": "Can't clone the top rep's playbook",
          "feltBy": "Manager",
          "freq": 38,
          "win": 37
        },
        {
          "pain": "New reps ramp slowly",
          "feltBy": "Manager",
          "freq": 34,
          "win": 31
        },
        {
          "pain": "Dormant pipeline goes uncovered",
          "feltBy": "RevOps",
          "freq": 29,
          "win": 28
        }
      ]
    },
    "icp": {
      "mock": [
        {
          "segment": "Mid-market SaaS (50–500)",
          "deals": 142,
          "win": 41,
          "avgDeal": 38000,
          "cycle": 34,
          "signal": "Champion + follow-up pain"
        },
        {
          "segment": "Enterprise (500+)",
          "deals": 63,
          "win": 33,
          "avgDeal": 96000,
          "cycle": 61,
          "signal": "Multi-thread, security-ready"
        },
        {
          "segment": "Fintech",
          "deals": 44,
          "win": 37,
          "avgDeal": 72000,
          "cycle": 52,
          "signal": "Compliance + SOC2 matters"
        },
        {
          "segment": "Healthcare",
          "deals": 31,
          "win": 29,
          "avgDeal": 58000,
          "cycle": 58,
          "signal": "Slow legal, high ACV"
        },
        {
          "segment": "SMB (<50)",
          "deals": 118,
          "win": 22,
          "avgDeal": 11000,
          "cycle": 18,
          "signal": "Fast cycle, price-sensitive"
        }
      ]
    }
  },
  "layout": {
    "type": "tabs",
    "tabs": [
      {
        "label": "Objections",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "objections",
              "columns": [
                {
                  "key": "objection",
                  "label": "Objection",
                  "weight": 3
                },
                {
                  "key": "analysisPath",
                  "label": "Analysis",
                  "type": "docLink",
                  "linkLabel": "Analysis",
                  "weight": 1
                },
                {
                  "key": "mentions",
                  "label": "Deals seen",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "bestReply",
                  "label": "Best-performing response",
                  "weight": 4
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "objections",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by objection",
              "xAxis": "objection",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Competitive Positioning",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "text",
              "markdown": "Six alternatives show up in discovery. For each: where they beat us, the wedge that wins, the exact talk track, which reps run it best, and live deals to watch."
            },
            {
              "type": "table",
              "source": "positioning",
              "title": "Discovery competitive landscape",
              "columns": [
                {
                  "key": "competitor",
                  "label": "Alternative",
                  "weight": 2
                },
                {
                  "key": "stance",
                  "label": "Stance",
                  "weight": 1
                },
                {
                  "key": "encounter",
                  "label": "Seen in % of deals",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "winVs",
                  "label": "Win rate vs",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "repeater",
              "source": "positioning",
              "as": "comp",
              "layout": "list",
              "gap": "md",
              "template": {
                "type": "entityCard",
                "children": [
                  {
                    "type": "row",
                    "gap": "md",
                    "align": "center",
                    "children": [
                      {
                        "type": "profile",
                        "name": "{{comp.competitor}}",
                        "label": "{{comp.stance}} · seen in {{comp.encounter}}% of deals"
                      },
                      {
                        "type": "stat",
                        "field": "winVs",
                        "label": "Win rate vs",
                        "format": "percent"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "markdown": "**They win on:** {{comp.theyWin}}  ·  **We win on:** {{comp.weWin}}",
                    "className": "text-muted-foreground"
                  },
                  {
                    "type": "text",
                    "markdown": "Talk track",
                    "className": "text-[11px] font-semibold uppercase tracking-wider text-emerald-600 dark:text-emerald-400"
                  },
                  {
                    "type": "text",
                    "markdown": "{{comp.talkTrack}}",
                    "className": "italic"
                  },
                  {
                    "type": "table",
                    "rowField": "reps",
                    "title": "Reps who win this matchup",
                    "columns": [
                      {
                        "key": "rep",
                        "label": "Rep",
                        "type": "rep",
                        "weight": 2
                      },
                      {
                        "key": "winVs",
                        "label": "Win rate vs",
                        "format": "percent",
                        "align": "right"
                      },
                      {
                        "key": "note",
                        "label": "What they do",
                        "weight": 3
                      }
                    ]
                  },
                  {
                    "type": "table",
                    "rowField": "deals",
                    "title": "Example deals to watch",
                    "columns": [
                      {
                        "key": "deal",
                        "label": "Deal",
                        "weight": 2
                      },
                      {
                        "key": "stage",
                        "label": "Stage",
                        "weight": 2
                      },
                      {
                        "key": "status",
                        "label": "Status",
                        "weight": 1
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
      },
      {
        "label": "Talk tracks",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "tracks",
              "columns": [
                {
                  "key": "track",
                  "label": "Talk track",
                  "weight": 3
                },
                {
                  "key": "objection",
                  "label": "Used against",
                  "weight": 2
                },
                {
                  "key": "rep",
                  "label": "Top rep",
                  "type": "rep",
                  "weight": 1
                },
                {
                  "key": "uses",
                  "label": "Uses",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "tracks",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by talk track",
              "xAxis": "track",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Pain points",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "pains",
              "columns": [
                {
                  "key": "pain",
                  "label": "Pain point",
                  "weight": 3
                },
                {
                  "key": "feltBy",
                  "label": "Felt by",
                  "weight": 1
                },
                {
                  "key": "freq",
                  "label": "Frequency",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win % when raised",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "pains",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by pain point",
              "xAxis": "pain",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "ICP",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "icp",
              "columns": [
                {
                  "key": "segment",
                  "label": "Segment",
                  "weight": 3
                },
                {
                  "key": "deals",
                  "label": "Deals",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "avgDeal",
                  "label": "Avg deal",
                  "format": "currency-compact",
                  "align": "right"
                },
                {
                  "key": "cycle",
                  "label": "Cycle (days)",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "signal",
                  "label": "Best-fit signal",
                  "weight": 2
                }
              ]
            },
            {
              "type": "chart",
              "source": "icp",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by segment",
              "xAxis": "segment",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "spec_version": "2.0"
}
```

### Stage 2 — Demo

**Goal:** Live aha on the prospect's own pipeline + a named champion.

Each objection links to a breakdown of the talk tracks reps use against it and how each performs.

```dashboard
{
  "id": "stage2_playbook",
  "dataSources": {
    "objections": {
      "mock": [
        {
          "objection": "Our team works in the CRM, not Gmail",
          "analysisPath": "user/files/playbook/stage2/objections/our-team-works-in-the-crm-not-gmail",
          "mentions": 6,
          "bestReply": "Cedar layers onto both — it reads/writes your CRM and drafts from Gmail, so reps don’t switch context. Want to see it update a HubSpot deal straight from an email thread?",
          "win": 60,
          "toNext": 64
        },
        {
          "objection": "We want to keep Gmail as our default",
          "analysisPath": "user/files/playbook/stage2/objections/we-want-to-keep-gmail-as-our-default",
          "mentions": 9,
          "bestReply": "Keep it — Cedar runs inside your Gmail workflow, no migration. You only adopt Send when the drafts are good enough, and they hit a 90% no-edit rate.",
          "win": 88,
          "toNext": 90
        },
        {
          "objection": "Product's not ready — don't want to waste time",
          "analysisPath": "user/files/playbook/stage2/objections/product-s-not-ready-don-t-want-to-waste-time",
          "mentions": 6,
          "bestReply": "Fair — let’s not demo vapor. I’ll run it on your real pipeline, and if an integration isn’t ready we’ll scope the pilot around what is.",
          "win": 40,
          "toNext": 48
        },
        {
          "objection": "Differentiation doesn't show up in our sales-tool data",
          "analysisPath": "user/files/playbook/stage2/objections/differentiation-doesn-t-show-up-in-our-sales-too",
          "mentions": 5,
          "bestReply": "Exactly — Gong captures the call, not the writing + follow-up where your top rep wins. Cedar surfaces those tactics so you can clone them across the team.",
          "win": 40,
          "toNext": 47
        },
        {
          "objection": "Inbox layout doesn't match how we work",
          "analysisPath": "user/files/playbook/stage2/objections/inbox-layout-doesn-t-match-how-we-work",
          "mentions": 4,
          "bestReply": "We mirror your Gmail sections (starred, then unread) — you keep your layout. Let me show the custom inbox so the switch is zero-friction.",
          "win": 75,
          "toNext": 78
        }
      ]
    },
    "positioning": {
      "mock": [
        {
          "competitor": "Claude / ChatGPT",
          "stance": "Compete",
          "encounter": 44,
          "theyWin": "Free-form drafting, cheap",
          "weWin": "Proactive, full deal context, playbook-controlled",
          "winVs": 62
        },
        {
          "competitor": "Status quo (Gmail + manual CRM)",
          "stance": "Compete",
          "encounter": 51,
          "theyWin": "No new tool to adopt",
          "weWin": "Cut admin 75%, no deals slip",
          "winVs": 60
        },
        {
          "competitor": "Sybill",
          "stance": "Compete",
          "encounter": 29,
          "theyWin": "Call notes + CRM autofill",
          "weWin": "Writing + follow-up + playbook execution",
          "winVs": 55
        },
        {
          "competitor": "Clari",
          "stance": "Compete",
          "encounter": 24,
          "theyWin": "Forecast hygiene",
          "weWin": "Per-deal execution + next steps",
          "winVs": 58
        },
        {
          "competitor": "HubSpot Sequences",
          "stance": "Compete",
          "encounter": 26,
          "theyWin": "Bundled with the CRM",
          "weWin": "Reply quality + deal context",
          "winVs": 49
        },
        {
          "competitor": "Gong",
          "stance": "Integrate",
          "encounter": 38,
          "theyWin": "Call recording + coaching",
          "weWin": "We integrate — surface the writing/follow-up Gong misses",
          "winVs": 78
        }
      ]
    },
    "tracks": {
      "mock": [
        {
          "track": "Show CRM write-back from an email",
          "objection": "Our team works in the CRM, not Gmail",
          "rep": "Willem",
          "uses": 12,
          "toNext": 64,
          "win": 60
        },
        {
          "track": "Layer onto, don't replace, the CRM",
          "objection": "Our team works in the CRM, not Gmail",
          "rep": "Lily",
          "uses": 9,
          "toNext": 55,
          "win": 48
        },
        {
          "track": "No migration — runs inside Gmail",
          "objection": "We want to keep Gmail as our default",
          "rep": "Willem",
          "uses": 18,
          "toNext": 90,
          "win": 88
        },
        {
          "track": "Adopt Send gradually as drafts prove out",
          "objection": "We want to keep Gmail as our default",
          "rep": "Lily",
          "uses": 11,
          "toNext": 80,
          "win": 75
        },
        {
          "track": "Demo on real pipeline only",
          "objection": "Product's not ready — don't want to waste time",
          "rep": "Willem",
          "uses": 10,
          "toNext": 48,
          "win": 40
        },
        {
          "track": "Scope the pilot to ready integrations",
          "objection": "Product's not ready — don't want to waste time",
          "rep": "Sarah",
          "uses": 8,
          "toNext": 42,
          "win": 34
        },
        {
          "track": "Position vs Gong's blind spot",
          "objection": "Differentiation doesn't show up in our sales-tool data",
          "rep": "Willem",
          "uses": 9,
          "toNext": 47,
          "win": 40
        },
        {
          "track": "Surface top-rep tactics to clone",
          "objection": "Differentiation doesn't show up in our sales-tool data",
          "rep": "Lily",
          "uses": 7,
          "toNext": 43,
          "win": 35
        },
        {
          "track": "Mirror Gmail custom sections",
          "objection": "Inbox layout doesn't match how we work",
          "rep": "Willem",
          "uses": 8,
          "toNext": 78,
          "win": 75
        },
        {
          "track": "Zero-friction switch walkthrough",
          "objection": "Inbox layout doesn't match how we work",
          "rep": "Lily",
          "uses": 6,
          "toNext": 70,
          "win": 66
        }
      ]
    },
    "pains": {
      "mock": [
        {
          "pain": "Deals slip through the cracks on timing",
          "feltBy": "AE",
          "freq": 64,
          "win": 39
        },
        {
          "pain": "Follow-ups are manual and impersonal",
          "feltBy": "AE",
          "freq": 58,
          "win": 36
        },
        {
          "pain": "CRM busywork — moving info column A → B",
          "feltBy": "AE",
          "freq": 55,
          "win": 34
        },
        {
          "pain": "Pipeline analysis = copy-pasting scattered context",
          "feltBy": "Strategic AE",
          "freq": 47,
          "win": 33
        },
        {
          "pain": "Can't clone the top rep's playbook",
          "feltBy": "Manager",
          "freq": 38,
          "win": 37
        },
        {
          "pain": "New reps ramp slowly",
          "feltBy": "Manager",
          "freq": 34,
          "win": 31
        },
        {
          "pain": "Dormant pipeline goes uncovered",
          "feltBy": "RevOps",
          "freq": 29,
          "win": 28
        }
      ]
    },
    "icp": {
      "mock": [
        {
          "segment": "Mid-market SaaS (50–500)",
          "deals": 142,
          "win": 41,
          "avgDeal": 38000,
          "cycle": 34,
          "signal": "Champion + follow-up pain"
        },
        {
          "segment": "Enterprise (500+)",
          "deals": 63,
          "win": 33,
          "avgDeal": 96000,
          "cycle": 61,
          "signal": "Multi-thread, security-ready"
        },
        {
          "segment": "Fintech",
          "deals": 44,
          "win": 37,
          "avgDeal": 72000,
          "cycle": 52,
          "signal": "Compliance + SOC2 matters"
        },
        {
          "segment": "Healthcare",
          "deals": 31,
          "win": 29,
          "avgDeal": 58000,
          "cycle": 58,
          "signal": "Slow legal, high ACV"
        },
        {
          "segment": "SMB (<50)",
          "deals": 118,
          "win": 22,
          "avgDeal": 11000,
          "cycle": 18,
          "signal": "Fast cycle, price-sensitive"
        }
      ]
    }
  },
  "layout": {
    "type": "tabs",
    "tabs": [
      {
        "label": "Objections",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "objections",
              "columns": [
                {
                  "key": "objection",
                  "label": "Objection",
                  "weight": 3
                },
                {
                  "key": "analysisPath",
                  "label": "Analysis",
                  "type": "docLink",
                  "linkLabel": "Analysis",
                  "weight": 1
                },
                {
                  "key": "mentions",
                  "label": "Deals seen",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "bestReply",
                  "label": "Best-performing response",
                  "weight": 4
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "objections",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by objection",
              "xAxis": "objection",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Competitive Positioning",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "positioning",
              "columns": [
                {
                  "key": "competitor",
                  "label": "Competitor",
                  "weight": 2
                },
                {
                  "key": "stance",
                  "label": "Stance",
                  "weight": 1
                },
                {
                  "key": "encounter",
                  "label": "Encounter %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "theyWin",
                  "label": "They win on",
                  "weight": 2
                },
                {
                  "key": "weWin",
                  "label": "We win on",
                  "weight": 3
                },
                {
                  "key": "winVs",
                  "label": "Win rate vs",
                  "format": "percent",
                  "align": "right"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Talk tracks",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "tracks",
              "columns": [
                {
                  "key": "track",
                  "label": "Talk track",
                  "weight": 3
                },
                {
                  "key": "objection",
                  "label": "Used against",
                  "weight": 2
                },
                {
                  "key": "rep",
                  "label": "Top rep",
                  "type": "rep",
                  "weight": 1
                },
                {
                  "key": "uses",
                  "label": "Uses",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "tracks",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by talk track",
              "xAxis": "track",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Pain points",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "pains",
              "columns": [
                {
                  "key": "pain",
                  "label": "Pain point",
                  "weight": 3
                },
                {
                  "key": "feltBy",
                  "label": "Felt by",
                  "weight": 1
                },
                {
                  "key": "freq",
                  "label": "Frequency",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win % when raised",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "pains",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by pain point",
              "xAxis": "pain",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "ICP",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "icp",
              "columns": [
                {
                  "key": "segment",
                  "label": "Segment",
                  "weight": 3
                },
                {
                  "key": "deals",
                  "label": "Deals",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "avgDeal",
                  "label": "Avg deal",
                  "format": "currency-compact",
                  "align": "right"
                },
                {
                  "key": "cycle",
                  "label": "Cycle (days)",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "signal",
                  "label": "Best-fit signal",
                  "weight": 2
                }
              ]
            },
            {
              "type": "chart",
              "source": "icp",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by segment",
              "xAxis": "segment",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "spec_version": "2.0"
}
```

### Stage 3 — Negotiation

**Goal:** Term sheet with a clear concession ladder and the pilot scoped.

Each objection links to a breakdown of the talk tracks reps use against it and how each performs.

```dashboard
{
  "id": "stage3_playbook",
  "dataSources": {
    "objections": {
      "mock": [
        {
          "objection": "Price is too high (founder doing sales)",
          "analysisPath": "user/files/playbook/stage3/objections/price-is-too-high-founder-doing-sales",
          "mentions": 5,
          "bestReply": "You’re comparing to a $30/mo tool — Cedar replaces hours of admin and recovers slipped-deal revenue. One saved deal pays for the year. Want the ROI math on your ACV?",
          "win": 40,
          "toNext": 49
        },
        {
          "objection": "Default cadence is too aggressive for enterprise",
          "analysisPath": "user/files/playbook/stage3/objections/default-cadence-is-too-aggressive-for-enterprise",
          "mentions": 5,
          "bestReply": "Fully configurable — we’ll set a long-cycle cadence so nothing feels spammy. Cedar enforces YOUR cadence, not a default.",
          "win": 75,
          "toNext": 80
        },
        {
          "objection": "Champion lacks authority to approve a pilot",
          "analysisPath": "user/files/playbook/stage3/objections/champion-lacks-authority-to-approve-a-pilot",
          "mentions": 6,
          "bestReply": "Let’s arm you to sell it up — I’ll send a one-page business case and offer a 15-min exec readout so you’re not carrying it alone.",
          "win": 40,
          "toNext": 49
        },
        {
          "objection": "Team has no bandwidth to evaluate",
          "analysisPath": "user/files/playbook/stage3/objections/team-has-no-bandwidth-to-evaluate",
          "mentions": 6,
          "bestReply": "We run the pilot for you — setup is hours not weeks, and Cedar works in the background. Pick 5 deals and we’ll do the lift.",
          "win": 20,
          "toNext": 30
        },
        {
          "objection": "Not ready for a pilot — need internal approvals",
          "analysisPath": "user/files/playbook/stage3/objections/not-ready-for-a-pilot-need-internal-approvals",
          "mentions": 8,
          "bestReply": "Makes sense — let’s map the approval path now and pre-stage the security packet so the pilot starts the day you’re cleared.",
          "win": 33,
          "toNext": 42
        }
      ]
    },
    "positioning": {
      "mock": [
        {
          "competitor": "Claude / ChatGPT",
          "stance": "Compete",
          "encounter": 44,
          "theyWin": "Free-form drafting, cheap",
          "weWin": "Proactive, full deal context, playbook-controlled",
          "winVs": 62
        },
        {
          "competitor": "Status quo (Gmail + manual CRM)",
          "stance": "Compete",
          "encounter": 51,
          "theyWin": "No new tool to adopt",
          "weWin": "Cut admin 75%, no deals slip",
          "winVs": 60
        },
        {
          "competitor": "Sybill",
          "stance": "Compete",
          "encounter": 29,
          "theyWin": "Call notes + CRM autofill",
          "weWin": "Writing + follow-up + playbook execution",
          "winVs": 55
        },
        {
          "competitor": "Clari",
          "stance": "Compete",
          "encounter": 24,
          "theyWin": "Forecast hygiene",
          "weWin": "Per-deal execution + next steps",
          "winVs": 58
        },
        {
          "competitor": "HubSpot Sequences",
          "stance": "Compete",
          "encounter": 26,
          "theyWin": "Bundled with the CRM",
          "weWin": "Reply quality + deal context",
          "winVs": 49
        },
        {
          "competitor": "Gong",
          "stance": "Integrate",
          "encounter": 38,
          "theyWin": "Call recording + coaching",
          "weWin": "We integrate — surface the writing/follow-up Gong misses",
          "winVs": 78
        }
      ]
    },
    "tracks": {
      "mock": [
        {
          "track": "Anchor to recovered-deal revenue, not tool price",
          "objection": "Price is too high (founder doing sales)",
          "rep": "Willem",
          "uses": 11,
          "toNext": 49,
          "win": 40
        },
        {
          "track": "Run the ROI on their ACV",
          "objection": "Price is too high (founder doing sales)",
          "rep": "Lily",
          "uses": 8,
          "toNext": 44,
          "win": 35
        },
        {
          "track": "Offer a founder / seat-based starter",
          "objection": "Price is too high (founder doing sales)",
          "rep": "Sarah",
          "uses": 6,
          "toNext": 38,
          "win": 28
        },
        {
          "track": "Configure a long-cycle cadence",
          "objection": "Default cadence is too aggressive for enterprise",
          "rep": "Willem",
          "uses": 10,
          "toNext": 80,
          "win": 75
        },
        {
          "track": "Show the cadence controls",
          "objection": "Default cadence is too aggressive for enterprise",
          "rep": "Lily",
          "uses": 7,
          "toNext": 72,
          "win": 66
        },
        {
          "track": "Arm the champion with a 1-pager",
          "objection": "Champion lacks authority to approve a pilot",
          "rep": "Willem",
          "uses": 11,
          "toNext": 49,
          "win": 40
        },
        {
          "track": "Offer a 15-min exec readout",
          "objection": "Champion lacks authority to approve a pilot",
          "rep": "Lily",
          "uses": 9,
          "toNext": 45,
          "win": 36
        },
        {
          "track": "We run the pilot (low lift)",
          "objection": "Team has no bandwidth to evaluate",
          "rep": "Willem",
          "uses": 8,
          "toNext": 30,
          "win": 20
        },
        {
          "track": "Background — no workflow change",
          "objection": "Team has no bandwidth to evaluate",
          "rep": "Lily",
          "uses": 6,
          "toNext": 26,
          "win": 16
        },
        {
          "track": "Map the approval path together",
          "objection": "Not ready for a pilot — need internal approvals",
          "rep": "Willem",
          "uses": 12,
          "toNext": 42,
          "win": 33
        },
        {
          "track": "Pre-stage the security packet",
          "objection": "Not ready for a pilot — need internal approvals",
          "rep": "Sarah",
          "uses": 9,
          "toNext": 38,
          "win": 28
        }
      ]
    },
    "pains": {
      "mock": [
        {
          "pain": "Deals slip through the cracks on timing",
          "feltBy": "AE",
          "freq": 64,
          "win": 39
        },
        {
          "pain": "Follow-ups are manual and impersonal",
          "feltBy": "AE",
          "freq": 58,
          "win": 36
        },
        {
          "pain": "CRM busywork — moving info column A → B",
          "feltBy": "AE",
          "freq": 55,
          "win": 34
        },
        {
          "pain": "Pipeline analysis = copy-pasting scattered context",
          "feltBy": "Strategic AE",
          "freq": 47,
          "win": 33
        },
        {
          "pain": "Can't clone the top rep's playbook",
          "feltBy": "Manager",
          "freq": 38,
          "win": 37
        },
        {
          "pain": "New reps ramp slowly",
          "feltBy": "Manager",
          "freq": 34,
          "win": 31
        },
        {
          "pain": "Dormant pipeline goes uncovered",
          "feltBy": "RevOps",
          "freq": 29,
          "win": 28
        }
      ]
    },
    "icp": {
      "mock": [
        {
          "segment": "Mid-market SaaS (50–500)",
          "deals": 142,
          "win": 41,
          "avgDeal": 38000,
          "cycle": 34,
          "signal": "Champion + follow-up pain"
        },
        {
          "segment": "Enterprise (500+)",
          "deals": 63,
          "win": 33,
          "avgDeal": 96000,
          "cycle": 61,
          "signal": "Multi-thread, security-ready"
        },
        {
          "segment": "Fintech",
          "deals": 44,
          "win": 37,
          "avgDeal": 72000,
          "cycle": 52,
          "signal": "Compliance + SOC2 matters"
        },
        {
          "segment": "Healthcare",
          "deals": 31,
          "win": 29,
          "avgDeal": 58000,
          "cycle": 58,
          "signal": "Slow legal, high ACV"
        },
        {
          "segment": "SMB (<50)",
          "deals": 118,
          "win": 22,
          "avgDeal": 11000,
          "cycle": 18,
          "signal": "Fast cycle, price-sensitive"
        }
      ]
    }
  },
  "layout": {
    "type": "tabs",
    "tabs": [
      {
        "label": "Objections",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "objections",
              "columns": [
                {
                  "key": "objection",
                  "label": "Objection",
                  "weight": 3
                },
                {
                  "key": "analysisPath",
                  "label": "Analysis",
                  "type": "docLink",
                  "linkLabel": "Analysis",
                  "weight": 1
                },
                {
                  "key": "mentions",
                  "label": "Deals seen",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "bestReply",
                  "label": "Best-performing response",
                  "weight": 4
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "objections",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by objection",
              "xAxis": "objection",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Competitive Positioning",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "positioning",
              "columns": [
                {
                  "key": "competitor",
                  "label": "Competitor",
                  "weight": 2
                },
                {
                  "key": "stance",
                  "label": "Stance",
                  "weight": 1
                },
                {
                  "key": "encounter",
                  "label": "Encounter %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "theyWin",
                  "label": "They win on",
                  "weight": 2
                },
                {
                  "key": "weWin",
                  "label": "We win on",
                  "weight": 3
                },
                {
                  "key": "winVs",
                  "label": "Win rate vs",
                  "format": "percent",
                  "align": "right"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Talk tracks",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "tracks",
              "columns": [
                {
                  "key": "track",
                  "label": "Talk track",
                  "weight": 3
                },
                {
                  "key": "objection",
                  "label": "Used against",
                  "weight": 2
                },
                {
                  "key": "rep",
                  "label": "Top rep",
                  "type": "rep",
                  "weight": 1
                },
                {
                  "key": "uses",
                  "label": "Uses",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "tracks",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by talk track",
              "xAxis": "track",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Pain points",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "pains",
              "columns": [
                {
                  "key": "pain",
                  "label": "Pain point",
                  "weight": 3
                },
                {
                  "key": "feltBy",
                  "label": "Felt by",
                  "weight": 1
                },
                {
                  "key": "freq",
                  "label": "Frequency",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win % when raised",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "pains",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by pain point",
              "xAxis": "pain",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "ICP",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "icp",
              "columns": [
                {
                  "key": "segment",
                  "label": "Segment",
                  "weight": 3
                },
                {
                  "key": "deals",
                  "label": "Deals",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "avgDeal",
                  "label": "Avg deal",
                  "format": "currency-compact",
                  "align": "right"
                },
                {
                  "key": "cycle",
                  "label": "Cycle (days)",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "signal",
                  "label": "Best-fit signal",
                  "weight": 2
                }
              ]
            },
            {
              "type": "chart",
              "source": "icp",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by segment",
              "xAxis": "segment",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "spec_version": "2.0"
}
```

### Stage 4 — Close

**Goal:** Countersigned MSA + order form within 48h of verbal yes.

Each objection links to a breakdown of the talk tracks reps use against it and how each performs.

```dashboard
{
  "id": "stage4_playbook",
  "dataSources": {
    "objections": {
      "mock": [
        {
          "objection": "SOC 2 required before we can proceed",
          "analysisPath": "user/files/playbook/stage4/objections/soc-2-required-before-we-can-proceed",
          "mentions": 5,
          "bestReply": "We’re SOC 2 Type II — here’s the report and DPA. Happy to set up a 30-min legal-to-legal to clear it fast.",
          "win": 50,
          "toNext": 58
        },
        {
          "objection": "Integration needs IT-admin approval",
          "analysisPath": "user/files/playbook/stage4/objections/integration-needs-it-admin-approval",
          "mentions": 3,
          "bestReply": "Only the Gmail / CRM scopes need admin — I’ll send the exact permission list so IT can approve in one pass, and join the call if useful.",
          "win": 67,
          "toNext": 72
        },
        {
          "objection": "Salesforce sync lag breaks our source of truth",
          "analysisPath": "user/files/playbook/stage4/objections/salesforce-sync-lag-breaks-our-source-of-truth",
          "mentions": 4,
          "bestReply": "We can move you to near-real-time sync (or a webhook on deal update) so closed/updated deals reflect immediately — no more hourly lag.",
          "win": 50,
          "toNext": 58
        },
        {
          "objection": "An acquisition froze new-tool purchases",
          "analysisPath": "user/files/playbook/stage4/objections/an-acquisition-froze-new-tool-purchases",
          "mentions": 4,
          "bestReply": "Understood — let’s keep the pilot warm and re-anchor once the new hierarchy settles. I’ll line up the intro to the new decision-maker.",
          "win": 33,
          "toNext": 42
        },
        {
          "objection": "Data-integrity bugs broke pipeline trust",
          "analysisPath": "user/files/playbook/stage4/objections/data-integrity-bugs-broke-pipeline-trust",
          "mentions": 4,
          "bestReply": "We take that seriously — here’s the incident summary and the fix. Let’s re-verify your pipeline together so you can trust the view.",
          "win": 50,
          "toNext": 58
        }
      ]
    },
    "positioning": {
      "mock": [
        {
          "competitor": "Claude / ChatGPT",
          "stance": "Compete",
          "encounter": 44,
          "theyWin": "Free-form drafting, cheap",
          "weWin": "Proactive, full deal context, playbook-controlled",
          "winVs": 62
        },
        {
          "competitor": "Status quo (Gmail + manual CRM)",
          "stance": "Compete",
          "encounter": 51,
          "theyWin": "No new tool to adopt",
          "weWin": "Cut admin 75%, no deals slip",
          "winVs": 60
        },
        {
          "competitor": "Sybill",
          "stance": "Compete",
          "encounter": 29,
          "theyWin": "Call notes + CRM autofill",
          "weWin": "Writing + follow-up + playbook execution",
          "winVs": 55
        },
        {
          "competitor": "Clari",
          "stance": "Compete",
          "encounter": 24,
          "theyWin": "Forecast hygiene",
          "weWin": "Per-deal execution + next steps",
          "winVs": 58
        },
        {
          "competitor": "HubSpot Sequences",
          "stance": "Compete",
          "encounter": 26,
          "theyWin": "Bundled with the CRM",
          "weWin": "Reply quality + deal context",
          "winVs": 49
        },
        {
          "competitor": "Gong",
          "stance": "Integrate",
          "encounter": 38,
          "theyWin": "Call recording + coaching",
          "weWin": "We integrate — surface the writing/follow-up Gong misses",
          "winVs": 78
        }
      ]
    },
    "tracks": {
      "mock": [
        {
          "track": "Send SOC2 Type II report + DPA",
          "objection": "SOC 2 required before we can proceed",
          "rep": "Willem",
          "uses": 11,
          "toNext": 58,
          "win": 50
        },
        {
          "track": "Legal-to-legal in 30 min",
          "objection": "SOC 2 required before we can proceed",
          "rep": "Lily",
          "uses": 8,
          "toNext": 52,
          "win": 44
        },
        {
          "track": "Send the exact scope list to IT",
          "objection": "Integration needs IT-admin approval",
          "rep": "Willem",
          "uses": 7,
          "toNext": 72,
          "win": 67
        },
        {
          "track": "Offer to join the IT review call",
          "objection": "Integration needs IT-admin approval",
          "rep": "Lily",
          "uses": 5,
          "toNext": 64,
          "win": 58
        },
        {
          "track": "Enable near-real-time sync",
          "objection": "Salesforce sync lag breaks our source of truth",
          "rep": "Willem",
          "uses": 9,
          "toNext": 58,
          "win": 50
        },
        {
          "track": "Webhook on deal update",
          "objection": "Salesforce sync lag breaks our source of truth",
          "rep": "Sarah",
          "uses": 6,
          "toNext": 50,
          "win": 42
        },
        {
          "track": "Keep the pilot warm, re-anchor post-M&A",
          "objection": "An acquisition froze new-tool purchases",
          "rep": "Willem",
          "uses": 9,
          "toNext": 42,
          "win": 33
        },
        {
          "track": "Get an intro to the new decision-maker",
          "objection": "An acquisition froze new-tool purchases",
          "rep": "Lily",
          "uses": 7,
          "toNext": 38,
          "win": 28
        },
        {
          "track": "Share the incident summary + fix",
          "objection": "Data-integrity bugs broke pipeline trust",
          "rep": "Willem",
          "uses": 8,
          "toNext": 58,
          "win": 50
        },
        {
          "track": "Re-verify the pipeline live together",
          "objection": "Data-integrity bugs broke pipeline trust",
          "rep": "Lily",
          "uses": 6,
          "toNext": 52,
          "win": 44
        }
      ]
    },
    "pains": {
      "mock": [
        {
          "pain": "Deals slip through the cracks on timing",
          "feltBy": "AE",
          "freq": 64,
          "win": 39
        },
        {
          "pain": "Follow-ups are manual and impersonal",
          "feltBy": "AE",
          "freq": 58,
          "win": 36
        },
        {
          "pain": "CRM busywork — moving info column A → B",
          "feltBy": "AE",
          "freq": 55,
          "win": 34
        },
        {
          "pain": "Pipeline analysis = copy-pasting scattered context",
          "feltBy": "Strategic AE",
          "freq": 47,
          "win": 33
        },
        {
          "pain": "Can't clone the top rep's playbook",
          "feltBy": "Manager",
          "freq": 38,
          "win": 37
        },
        {
          "pain": "New reps ramp slowly",
          "feltBy": "Manager",
          "freq": 34,
          "win": 31
        },
        {
          "pain": "Dormant pipeline goes uncovered",
          "feltBy": "RevOps",
          "freq": 29,
          "win": 28
        }
      ]
    },
    "icp": {
      "mock": [
        {
          "segment": "Mid-market SaaS (50–500)",
          "deals": 142,
          "win": 41,
          "avgDeal": 38000,
          "cycle": 34,
          "signal": "Champion + follow-up pain"
        },
        {
          "segment": "Enterprise (500+)",
          "deals": 63,
          "win": 33,
          "avgDeal": 96000,
          "cycle": 61,
          "signal": "Multi-thread, security-ready"
        },
        {
          "segment": "Fintech",
          "deals": 44,
          "win": 37,
          "avgDeal": 72000,
          "cycle": 52,
          "signal": "Compliance + SOC2 matters"
        },
        {
          "segment": "Healthcare",
          "deals": 31,
          "win": 29,
          "avgDeal": 58000,
          "cycle": 58,
          "signal": "Slow legal, high ACV"
        },
        {
          "segment": "SMB (<50)",
          "deals": 118,
          "win": 22,
          "avgDeal": 11000,
          "cycle": 18,
          "signal": "Fast cycle, price-sensitive"
        }
      ]
    }
  },
  "layout": {
    "type": "tabs",
    "tabs": [
      {
        "label": "Objections",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "objections",
              "columns": [
                {
                  "key": "objection",
                  "label": "Objection",
                  "weight": 3
                },
                {
                  "key": "analysisPath",
                  "label": "Analysis",
                  "type": "docLink",
                  "linkLabel": "Analysis",
                  "weight": 1
                },
                {
                  "key": "mentions",
                  "label": "Deals seen",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "bestReply",
                  "label": "Best-performing response",
                  "weight": 4
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "objections",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by objection",
              "xAxis": "objection",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Competitive Positioning",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "positioning",
              "columns": [
                {
                  "key": "competitor",
                  "label": "Competitor",
                  "weight": 2
                },
                {
                  "key": "stance",
                  "label": "Stance",
                  "weight": 1
                },
                {
                  "key": "encounter",
                  "label": "Encounter %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "theyWin",
                  "label": "They win on",
                  "weight": 2
                },
                {
                  "key": "weWin",
                  "label": "We win on",
                  "weight": 3
                },
                {
                  "key": "winVs",
                  "label": "Win rate vs",
                  "format": "percent",
                  "align": "right"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Talk tracks",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "tracks",
              "columns": [
                {
                  "key": "track",
                  "label": "Talk track",
                  "weight": 3
                },
                {
                  "key": "objection",
                  "label": "Used against",
                  "weight": 2
                },
                {
                  "key": "rep",
                  "label": "Top rep",
                  "type": "rep",
                  "weight": 1
                },
                {
                  "key": "uses",
                  "label": "Uses",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "toNext",
                  "label": "Move to next",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "tracks",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by talk track",
              "xAxis": "track",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "Pain points",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "pains",
              "columns": [
                {
                  "key": "pain",
                  "label": "Pain point",
                  "weight": 3
                },
                {
                  "key": "feltBy",
                  "label": "Felt by",
                  "weight": 1
                },
                {
                  "key": "freq",
                  "label": "Frequency",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win % when raised",
                  "format": "percent",
                  "align": "right"
                }
              ]
            },
            {
              "type": "chart",
              "source": "pains",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by pain point",
              "xAxis": "pain",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      },
      {
        "label": "ICP",
        "node": {
          "type": "column",
          "gap": "lg",
          "children": [
            {
              "type": "table",
              "source": "icp",
              "columns": [
                {
                  "key": "segment",
                  "label": "Segment",
                  "weight": 3
                },
                {
                  "key": "deals",
                  "label": "Deals",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "win",
                  "label": "Win %",
                  "format": "percent",
                  "align": "right"
                },
                {
                  "key": "avgDeal",
                  "label": "Avg deal",
                  "format": "currency-compact",
                  "align": "right"
                },
                {
                  "key": "cycle",
                  "label": "Cycle (days)",
                  "format": "number",
                  "align": "right"
                },
                {
                  "key": "signal",
                  "label": "Best-fit signal",
                  "weight": 2
                }
              ]
            },
            {
              "type": "chart",
              "source": "icp",
              "chart": "bar",
              "orientation": "horizontal",
              "title": "Win rate by segment",
              "xAxis": "segment",
              "series": [
                {
                  "key": "win",
                  "label": "Win %"
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "spec_version": "2.0"
}
```