[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-posthog-monthly-to-annual":3,"mdc--kajkgx-key":40,"related-org-posthog-monthly-to-annual":1867,"related-repo-posthog-monthly-to-annual":2038},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":35,"sourceUrl":38,"mdContent":39},"monthly-to-annual","convert PostHog customers to annual plans","Build the case for converting a PostHog monthly\u002FPAYG customer to an annual prepaid credit plan. Pulls 12-24 months of invoice history from the data warehouse, runs the handbook eligibility check, projects forward growth, applies the handbook discount tiers, scans recent customer touchpoints (Slack, Gmail, Granola) for confounding variables, fetches customer momentum signals via Exa, emulates the rep's own writing voice, and emits a succinct briefing plus a plain-text Slack draft. Trigger on \"annual conversion math for [account]\", \"monthly to annual for [account]\", \"draft annual nudge for [account]\", or \"credit-discount math for [account]\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"posthog","PostHog","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fposthog.png",[12,14,17,20,23,26],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Reporting","reporting",{"name":18,"slug":19,"type":13},"Finance","finance",{"name":21,"slug":22,"type":13},"Customer Success","customer-success",{"name":24,"slug":25,"type":13},"Sales","sales",{"name":27,"slug":28,"type":13},"Analytics","analytics",56,"https:\u002F\u002Fgithub.com\u002FPostHog\u002Fskills","2026-06-13T07:34:21.477791",null,4,[],{"repoUrl":30,"stars":29,"forks":33,"topics":36,"description":37},[],"PostHog skills (under construction)","https:\u002F\u002Fgithub.com\u002FPostHog\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fteam\u002Fcustomer-success\u002Fmonthly-to-annual","---\nname: monthly-to-annual\ndescription: Build the case for converting a PostHog monthly\u002FPAYG customer to an annual prepaid credit plan. Pulls 12-24 months of invoice history from the data warehouse, runs the handbook eligibility check, projects forward growth, applies the handbook discount tiers, scans recent customer touchpoints (Slack, Gmail, Granola) for confounding variables, fetches customer momentum signals via Exa, emulates the rep's own writing voice, and emits a succinct briefing plus a plain-text Slack draft. Trigger on \"annual conversion math for [account]\", \"monthly to annual for [account]\", \"draft annual nudge for [account]\", or \"credit-discount math for [account]\".\n---\n\n# monthly-to-annual\n\nYou are helping a PostHog employee make the case for converting a monthly\u002FPAYG customer to an annual prepaid credit plan. **Be succinct.** One tight briefing, one Slack draft, no preamble.\n\nKey context: PostHog does **not** offer discounts to monthly customers no matter how long they commit. The discount only unlocks on conversion to a prepaid credit plan. Frame everything around that.\n\n## How PostHog sells (read before drafting)\n\nInternalize this before writing anything customer-facing. Source: posthog.com\u002Fhandbook\u002Fgrowth\u002Fsales\u002F.\n\n- **Customers buy from us, we don't sell to them.** No BS sales-y talk. Direct, open, honest.\n- **Curiosity over pitching.** Find the pain — people buy solutions to problems, not features. \"Forced interest is gross and salesy.\"\n- **Helpful, not pushy.** Primary focus is making *paying customers successful*, not forcing sales through.\n- **We sell use cases. We bill products.** Frame around the customer's outcome (e.g. \"lock in your unit cost ahead of your next growth phase\"), not the line item (\"buy credits\").\n- **Be prescriptive about next steps.** \"Waiting for a customer to come back to you is not a valid next step.\" Every output ends with a concrete next step or question.\n- **We don't care about losing deals.** No pressure tactics, no artificial deadlines, no fake scarcity. The 5% mutual-commitment discount is *not* an end-of-quarter discount — it's earned with a real, mutually-agreed signing date.\n- **Speed & responsiveness.** If a customer is in a rush we move at their pace; otherwise we don't manufacture urgency.\n\nThe draft should sound like a teammate giving the customer useful info, not a vendor closing a deal. If the rep asks for harder closing language, push back once — then comply if they insist.\n\n## Inputs\n\nRequired: customer name.\nOptional: org ID (look up if missing), prior-quote URL, contract length, payment terms, whether they're a non-profit \u002F on the startup plan, whether they already have a mutually-agreed signing date.\n\nIf the rep doesn't specify discount levers, **ask** — there is no default. Apply the tiers in the next section.\n\n## Discount tiers (PostHog handbook, inline)\n\nLast synced from posthog.com\u002Fhandbook\u002Fgrowth\u002Fsales\u002Fcontract-rules on 2026-06-12. If the handbook has changed, refetch via Exa and update this section.\n\n### Lever 1 — Volume (base, required for any discount)\n| Annual credit purchase | Base discount |\n|---|---|\n| \u003C$25k | self-serve only (10%) or non-profit (15%) |\n| $25-59k | 20% |\n| $60-99k | 25% |\n| $100-249k | 30% |\n| $250-499k | 35% |\n| $500-999k | 40% |\n| $1M+ | custom (escalate) |\n\n> Monthly customers get **0% no matter the commitment** — must convert to credit purchase to unlock anything. Customers must qualify for the volume tier before any of levers 2-4 apply.\n\n### Lever 2 — Length of commitment (additive, **initial order form only**)\n- 1-year: +0%\n- 2-year: +3%\n- 3-year: +5% (doesn't stack into longer terms)\n- 4+ years: custom\n\n> Does NOT apply to additional credit purchases made within the first half of the term — those inherit the original discount but don't restack length.\n\n### Lever 3 — Timing of cash (additive)\n- Net 30 (standard): +0%\n- Multi-year paid upfront: +2.5% per additional year (2-yr upfront = +2.5%, 3-yr upfront = +5%)\n- Extended terms: **–2.5%** per 15 days beyond Net 30 (Net 60 → −5%)\n\n> Upfront payment is required for all discounted contracts. Quarterly \u002F split payment terms not available. If budget can't cover full projected amount, customer can purchase fewer credits at the corresponding (likely lower) tier and add more later.\n\n### Lever 4 — Mutual commitment to timing (additive, one-time)\n- **Monthly-to-annual conversion or net-new: +5%** with **written confirmation from the customer's actual signatory** of intent to sign by a specific mutually-agreed date. One-time per conversion cycle.\n- **Renewal: +5%** if signed 60+ days before expiration **AND the customer is currently on an active prepaid credit plan**. If credits ran out and they rolled to PAYG, the +5% does NOT apply — that's treated as a re-entry into a credit plan, not an early renewal.\n- If timelines slip, default is to withdraw the additional discount.\n\n### Stacking notes\n- Volume tier is mandatory before any of the others apply.\n- All four levers stack additively (sum the percentages).\n- Anything beyond these levels requires sign-off from **Ben** (TAEs\u002FTAMs) or **Simon** (CSMs).\n\n### Special programs (replace the standard stack)\n- **Non-profit:** +15% flat below $25k; +5% on top of volume tier between $25-100k; standard tiers only above $100k. Requires proof per country tax law.\n- **Self-serve credits:** Below $25k → 10% off, applied 1\u002F12 per month over 12 months (not upfront). $25k+ → standard volume tiers. Requires 3+ paid invoices, $280+ avg, no open invoices, not on up plan \u002F legacy \u002F existing credits.\n- **Startup plan rolloff:** 2 months free credit when prepaying ~12 months. If buying fewer credits, +1\u002F6 of purchase as free credit. Applied before contract start date, one-time.\n- **Legacy 30% Stripe-discount customers:** these are on old event pricing; should be migrated to standard pricing before any new discount conversation.\n- **Contract buyout (leaving a competitor mid-contract):** up to 6 months free PostHog usage on a signed $20k+\u002Fyr annual contract paid upfront, proportional to remaining time on competitor contract. Requires proof.\n- **New business renewal credits:** for prospects shopping a competitor renewal, undercut to a total 40% discount via first-year credit. Requires full competitor quote.\n- **Margin-negative deals:** only for (a) strategic logo, (b) taking from competitor, (c) preventing churn to competitor. ~1\u002Fyear. Escalate to manager → Simon\u002FBen.\n\n## Eligibility check — RUN BEFORE PRODUCING ANY OUTPUT\n\nWalk through these *before* doing the math. If anything is unknown or unclear, ask the rep one focused question. Don't quote a discount stack that the handbook doesn't support — quoting first and walking back later erodes customer trust.\n\n1. **Current plan state.** Is the customer on monthly\u002FPAYG, an active credit plan, or rolled off a credit plan to PAYG?\n   - Monthly\u002FPAYG → this is a *conversion*; the +5% mutual-commitment lever (lever 4) is available\n   - Active credit plan → this is a *renewal*; the +5% renewal lever is available IF signed 60+ days before expiration\n   - Rolled-off-to-PAYG → this is a *re-entry*; NEITHER the conversion +5% nor the renewal +5% apply by default; only volume + commitment-length + cash-timing\n2. **Projected annual credit purchase.** Does it cross a volume tier? If projected spend is $30k\u002Fyr, customer qualifies for 20% only — even if rep proposes 25%. If it's \u003C$25k, no standard discount applies — they're in self-serve \u002F non-profit territory.\n3. **Special program eligibility:**\n   - Non-profit? → different stack (above)\n   - Startup plan? → different stack (above)\n   - Legacy 30% Stripe-discount customer? → flag, recommend migration first\n4. **Renewal context (if applicable):**\n   - Contract end date known? Are we 60+ days out?\n   - Currently on credit plan at the time of signing?\n   - Within first half of original term? (Additional credit purchases at original discount only valid here)\n5. **Commitment length & timing:**\n   - 1 \u002F 2 \u002F 3 \u002F 4+ years? (Drives lever 2)\n   - Paid upfront or yearly billing? (Drives lever 3 and credit-allocation mechanics)\n   - Net 30 or extended terms? (Penalty −2.5% per 15 extra days)\n6. **Mutual-commitment lever requirements:**\n   - Is there a specific, mutually-agreed signing date?\n   - Has the customer's *actual signatory* (not just the champion) given written confirmation?\n   - If no, the +5% should be quoted as *available pending written commitment*, not as a baked-in number\n7. **Payment method:**\n   - Bank transfer (standard for prepaid)? Or credit card? CC requires Mine (Simon as backup) sign-off — flag it.\n8. **Margin & escalation triggers:**\n   - $250k+ deal → run margin calculation; flag for sign-off\n   - $1M+ → custom pricing, escalate\n   - Anything below tier-implied math → margin-negative; escalate to manager\n9. **Uptime SLA \u002F legal redline appetite (optional, but surface if relevant):**\n   - $100k+ post-discount ARR → SLA is on the table as a negotiated term\n   - \u003C$20k → no legal redlines\n   - $20-160k → proportional, minor\u002Fmedium edits only\n\n**If the rep can't answer 1-4, pause and ask.** A clean briefing on a wrong assumption wastes everyone's time.\n\n## Workflow\n\n### Step 1 — Resolve the org\n```sql\nSELECT id, name, created_at FROM postgres.posthog_organization WHERE name ILIKE '%\u003Cname>%' LIMIT 5\n```\nIf multiple match, ask which one.\n\n### Step 2 — Pull billing trajectory\n```sql\nSELECT bi.period_start, bi.period_end, bi.mrr, bi.mrr_per_product\nFROM postgres.prod.billing_invoice bi\nJOIN postgres.prod.billing_customer bc ON bi.customer_id = bc.id\nWHERE bc.organization_id = '\u003Corg_id>'\nORDER BY bi.period_start DESC\nLIMIT 24\n```\n\nCompute, in order:\n- Current MRR (most recent closed invoice)\n- Annual run-rate (current MRR × 12)\n- Trailing 12-month total spend\n- YoY growth (latest invoice vs same month a year ago)\n- Recent slope (annualized growth over last 5 invoices)\n- Product mix on the latest invoice (line items > 1% of total)\n\n### Step 3 — Scan for confounding variables (do not skip)\n\nThe purpose: catch things that would make the ask tone-deaf or premature. **Surface every signal you find — don't pre-judge significance.** Examples: active support escalations, product complaints, in-flight migrations or churn signals, missed commitments, an unhappy stakeholder, an upcoming internal review, a pricing concern they already raised, a champion who left.\n\nRun these in parallel:\n\n**3a. Slack — customer channel + DMs.** Search the customer's PostHog Slack channel for the last 60 days:\n```\nin:#posthog-\u003Ccustomer-slug> after:\u003C60d-ago>\n```\nAlso search recent DMs between the rep and customer contacts.\n\n**3b. Gmail — recent threads.** Search for the customer name (and key contacts if known) in the rep's inbox for the last 90 days. Tool: `mcp__claude_ai_Gmail__search_threads` with a query like `\"\u003CCustomer Name>\" newer_than:90d` and any explicitly-known contact emails. Read snippets; only `get_thread` on the most relevant 1-3 threads.\n\n**3c. Granola — meeting transcripts.** Use `mcp__claude_ai_Granola__query_granola_meetings` with the customer name to find recent transcripts. Look for: stated procurement timelines, budget cycles, named blockers, expansion or contraction signals. Quote one or two sentences verbatim if pivotal.\n\n**Output of step 3:** a short \"**Confounding variables**\" section in the briefing (2-5 bullets max). If nothing meaningful surfaced, say \"no recent friction signals in Slack \u002F email \u002F meetings (last 60-90 days).\" If something significant surfaced — e.g. a churn-risk meeting last week — **pause before drafting** and ask the rep whether to proceed.\n\n### Step 4 — Anchor on customer momentum (Exa MCP)\n\nUse `mcp__claude_ai_Exa__web_search_exa`:\n> \"[Customer name] product launches growth metrics 2026 blog announcements\"\n\nIf results are thin, follow with `mcp__claude_ai_Exa__web_fetch_exa` on their official blog\u002Fnews page. Capture 2-4 concrete anchors from the **last 6 months** — product launches, user-count or revenue claims, partnerships. These are the *reason-to-revisit-now* hook, not the *reason-to-buy*.\n\nSkip if rep says `--no-anchors`.\n\n### Step 5 — Learn the REP's voice (Slack only)\n\nThe rep is the one sending this draft — it should sound like them, not generic PostHog tone.\n\n**If Slack MCP is connected:** before drafting, pull 15-25 recent messages *written by the rep* in customer-facing channels. Use `slack_search_public_and_private` with `from:me in:#posthog-` (or filter by `from:\u003Crep_user_id>` if running on someone else's behalf). Prioritize messages to *other customers* in similar nudge contexts (annual conversion, billing, expansion) over internal-team messages. Note:\n- Greeting (hey \u002F hi \u002F no greeting)\n- Sign-off (name \u002F nothing \u002F emoji)\n- Casing (lowercase \u002F sentence case)\n- Punctuation density (terse fragments \u002F full sentences)\n- Emoji use (none \u002F occasional \u002F heavy)\n- Hedging vs. directness\n- Signature phrases or recurring sentence shapes\n\nEmulate the *register*, not the *content*. If the rep writes terse-lowercase-with-bufo-emoji, the draft is too. If they write polished sentences with full sign-offs, match that.\n\n**If Slack MCP is not connected:** suggest to the rep that connecting Slack would let the skill emulate their own voice. Default to neutral, lowercase, plain-text PostHog tone if not available.\n\n> Step 5 is about the *rep's* style — step 3 separately surfaces the *customer's* recent tone as a confounding-variables read. Don't mirror the customer; emulate the rep.\n\n### Step 6 — Confirm the discount stack with the rep\n\nAsk which levers apply. Use the eligibility check above to constrain the answer. Don't assume.\n\nCommon stacks:\n- **Standard 1-year, signing-date committed (conversion):** volume tier + 5% mutual-commitment\n- **2-year prepaid upfront:** volume tier + 3% commitment + 5% upfront payment\n- **3-year prepaid upfront:** volume tier + 5% commitment + 5% upfront payment\n- **Early renewal (60+ days, active credits):** volume tier + 5% early-renewal\n- **Re-entry after PAYG rolloff:** volume tier only (no +5%)\n\nSanity-check the **volume tier** against projected annual spend before quoting.\n\n### Step 7 — Run three scenarios\n\n| Scenario | Projected PAYG spend | Logic |\n|---|---|---|\n| **Floor (zero-growth)** | current MRR × 12 | hard floor; even if they stop growing |\n| **Base** | apply recent-slope annualized rate | most defensible mid-case |\n| **Bull** | apply trailing YoY | upper bound based on actual history |\n\nFor each: PAYG spend → discounted credit cash → absolute savings.\n\n### Step 8 — Emit the briefing\n\nExactly these 6 sections, in this order. **Nothing before, nothing between, nothing after.** The Slack draft is the closer.\n\n1. **Eligibility check** — one line. Plan state + applicable lever stack.\n2. **Trajectory** — one table, 4-6 rows of recent MRR + one-line growth summary.\n3. **Confounding variables** — 2-5 bullets max. One line each. If nothing surfaced, one sentence.\n4. **Math** — **ONE table.** Three rows (floor \u002F base \u002F bull). Columns: PAYG \u002F discounted \u002F savings. One line below stating the lever stack. If the rep wants to show +5% uplift, add it as a single line (\"with +5% mutual-commitment: floor savings → ~$X, base → ~$Y, bull → ~$Z\"). Do NOT add a second table.\n5. **Momentum anchors** — 2-3 bullets max from Exa. One line each.\n6. **Slack draft** — plain text, per rules below.\n\n**Hard prohibitions** (these have actually happened, do not do them):\n- No TL;DR, \"key takeaways,\" \"notes on the draft,\" \"recommendations,\" \"decision needed,\" \"next steps,\" or any explanatory section after the Slack draft. If the rep wants more, they'll ask.\n- No second math table for an alternate lever stack. One table.\n- No commentary paragraphs between sections.\n- No restating the eligibility check inside other sections.\n\nIf something genuinely cannot be expressed inside the 6 sections (e.g. \"should we proceed given a churn signal?\"), end the *Confounding variables* section with a single italicized question like *\"proceed, or pause until X resolves?\"* and stop — don't add a \"Decision needed\" block.\n\n## Slack draft rules\n\n- **Plain text only.** No blockquote wrapping. No bullet\u002Fnumbered list markers. Blank lines between paragraphs.\n- **Voice-matched to the rep** (per step 5).\n- **Three short paragraphs max.**\n  - Para 1: hook (their momentum \u002F what's changed since last touchpoint), not the ask\n  - Para 2: the floor-case dollar savings + one-line clarification of how the discount stacks if it's a likely point of confusion (e.g. volume vs. credit)\n  - Para 3: a concrete question that gives an out other than ghosting (e.g. \"is annual budgeting on the table this year, or does month-to-month fit how you handle vendor spend?\")\n- **Quote URL** included only if rep provided one. Don't make one up.\n- **No artificial urgency.** No \"this expires at end of quarter,\" no \"limited time.\" The mutual-commitment +5% is earned, not deadlined.\n- **No \"let me know if you have questions\" \u002F \"happy to chat\" closer.** Replace with a real question.\n- **Address by name** (the primary contact). Use Slack handle format `\u003C@USER_ID|Name>` only if the rep gave a Slack mention; otherwise just the first name.\n\n## What NOT to do\n\n- Don't write Obsidian-style profile files, dated investigation files, or any vault artifacts. Personal-workflow concern, not skill output.\n- Don't default to any discount %. Rep names the levers; skill applies the math.\n- Don't quote the +5% mutual-commitment or +5% early-renewal lever without checking eligibility against step 1 of the eligibility check.\n- Don't pad the draft with hedges, gratitude, or \"just checking in.\"\n- Don't conflate volume discount (only available on credit purchase) with mutual-commitment \u002F commitment-length \u002F cash-timing add-ons. They stack — name them separately if the rep is mixing them.\n- Don't claim a PAYG customer is \"getting a 25% volume discount\" — they aren't. PAYG has tiered unit pricing only.\n- Don't manufacture urgency or invoke quarter-end. PostHog doesn't sell that way.\n- Don't skip step 3 (confounding variables). A great math case sent into an active escalation is a worse outcome than no nudge at all.\n\n## When the rep asks for extras\n\nIf asked to save to a file, ask for the path. If asked for a longer writeup, expand inline — but the default is the succinct briefing above.\n",{"data":41,"body":42},{"name":4,"description":6},{"type":43,"children":44},"root",[45,52,66,78,85,90,179,184,190,195,207,213,218,225,344,360,373,396,404,410,435,443,449,491,497,529,535,608,614,626,875,885,891,897,919,924,930,989,994,1027,1033,1045,1050,1060,1070,1075,1109,1127,1151,1157,1170,1185,1219,1231,1237,1242,1289,1327,1346,1356,1378,1384,1389,1394,1447,1459,1465,1555,1560,1566,1578,1647,1657,1680,1698,1704,1801,1807,1850,1856,1861],{"type":46,"tag":47,"props":48,"children":49},"element","h1",{"id":4},[50],{"type":51,"value":4},"text",{"type":46,"tag":53,"props":54,"children":55},"p",{},[56,58,64],{"type":51,"value":57},"You are helping a PostHog employee make the case for converting a monthly\u002FPAYG customer to an annual prepaid credit plan. ",{"type":46,"tag":59,"props":60,"children":61},"strong",{},[62],{"type":51,"value":63},"Be succinct.",{"type":51,"value":65}," One tight briefing, one Slack draft, no preamble.",{"type":46,"tag":53,"props":67,"children":68},{},[69,71,76],{"type":51,"value":70},"Key context: PostHog does ",{"type":46,"tag":59,"props":72,"children":73},{},[74],{"type":51,"value":75},"not",{"type":51,"value":77}," offer discounts to monthly customers no matter how long they commit. The discount only unlocks on conversion to a prepaid credit plan. Frame everything around that.",{"type":46,"tag":79,"props":80,"children":82},"h2",{"id":81},"how-posthog-sells-read-before-drafting",[83],{"type":51,"value":84},"How PostHog sells (read before drafting)",{"type":46,"tag":53,"props":86,"children":87},{},[88],{"type":51,"value":89},"Internalize this before writing anything customer-facing. Source: posthog.com\u002Fhandbook\u002Fgrowth\u002Fsales\u002F.",{"type":46,"tag":91,"props":92,"children":93},"ul",{},[94,105,115,133,143,153,169],{"type":46,"tag":95,"props":96,"children":97},"li",{},[98,103],{"type":46,"tag":59,"props":99,"children":100},{},[101],{"type":51,"value":102},"Customers buy from us, we don't sell to them.",{"type":51,"value":104}," No BS sales-y talk. Direct, open, honest.",{"type":46,"tag":95,"props":106,"children":107},{},[108,113],{"type":46,"tag":59,"props":109,"children":110},{},[111],{"type":51,"value":112},"Curiosity over pitching.",{"type":51,"value":114}," Find the pain — people buy solutions to problems, not features. \"Forced interest is gross and salesy.\"",{"type":46,"tag":95,"props":116,"children":117},{},[118,123,125,131],{"type":46,"tag":59,"props":119,"children":120},{},[121],{"type":51,"value":122},"Helpful, not pushy.",{"type":51,"value":124}," Primary focus is making ",{"type":46,"tag":126,"props":127,"children":128},"em",{},[129],{"type":51,"value":130},"paying customers successful",{"type":51,"value":132},", not forcing sales through.",{"type":46,"tag":95,"props":134,"children":135},{},[136,141],{"type":46,"tag":59,"props":137,"children":138},{},[139],{"type":51,"value":140},"We sell use cases. We bill products.",{"type":51,"value":142}," Frame around the customer's outcome (e.g. \"lock in your unit cost ahead of your next growth phase\"), not the line item (\"buy credits\").",{"type":46,"tag":95,"props":144,"children":145},{},[146,151],{"type":46,"tag":59,"props":147,"children":148},{},[149],{"type":51,"value":150},"Be prescriptive about next steps.",{"type":51,"value":152}," \"Waiting for a customer to come back to you is not a valid next step.\" Every output ends with a concrete next step or question.",{"type":46,"tag":95,"props":154,"children":155},{},[156,161,163,167],{"type":46,"tag":59,"props":157,"children":158},{},[159],{"type":51,"value":160},"We don't care about losing deals.",{"type":51,"value":162}," No pressure tactics, no artificial deadlines, no fake scarcity. The 5% mutual-commitment discount is ",{"type":46,"tag":126,"props":164,"children":165},{},[166],{"type":51,"value":75},{"type":51,"value":168}," an end-of-quarter discount — it's earned with a real, mutually-agreed signing date.",{"type":46,"tag":95,"props":170,"children":171},{},[172,177],{"type":46,"tag":59,"props":173,"children":174},{},[175],{"type":51,"value":176},"Speed & responsiveness.",{"type":51,"value":178}," If a customer is in a rush we move at their pace; otherwise we don't manufacture urgency.",{"type":46,"tag":53,"props":180,"children":181},{},[182],{"type":51,"value":183},"The draft should sound like a teammate giving the customer useful info, not a vendor closing a deal. If the rep asks for harder closing language, push back once — then comply if they insist.",{"type":46,"tag":79,"props":185,"children":187},{"id":186},"inputs",[188],{"type":51,"value":189},"Inputs",{"type":46,"tag":53,"props":191,"children":192},{},[193],{"type":51,"value":194},"Required: customer name.\nOptional: org ID (look up if missing), prior-quote URL, contract length, payment terms, whether they're a non-profit \u002F on the startup plan, whether they already have a mutually-agreed signing date.",{"type":46,"tag":53,"props":196,"children":197},{},[198,200,205],{"type":51,"value":199},"If the rep doesn't specify discount levers, ",{"type":46,"tag":59,"props":201,"children":202},{},[203],{"type":51,"value":204},"ask",{"type":51,"value":206}," — there is no default. Apply the tiers in the next section.",{"type":46,"tag":79,"props":208,"children":210},{"id":209},"discount-tiers-posthog-handbook-inline",[211],{"type":51,"value":212},"Discount tiers (PostHog handbook, inline)",{"type":46,"tag":53,"props":214,"children":215},{},[216],{"type":51,"value":217},"Last synced from posthog.com\u002Fhandbook\u002Fgrowth\u002Fsales\u002Fcontract-rules on 2026-06-12. If the handbook has changed, refetch via Exa and update this section.",{"type":46,"tag":219,"props":220,"children":222},"h3",{"id":221},"lever-1-volume-base-required-for-any-discount",[223],{"type":51,"value":224},"Lever 1 — Volume (base, required for any discount)",{"type":46,"tag":226,"props":227,"children":228},"table",{},[229,248],{"type":46,"tag":230,"props":231,"children":232},"thead",{},[233],{"type":46,"tag":234,"props":235,"children":236},"tr",{},[237,243],{"type":46,"tag":238,"props":239,"children":240},"th",{},[241],{"type":51,"value":242},"Annual credit purchase",{"type":46,"tag":238,"props":244,"children":245},{},[246],{"type":51,"value":247},"Base discount",{"type":46,"tag":249,"props":250,"children":251},"tbody",{},[252,266,279,292,305,318,331],{"type":46,"tag":234,"props":253,"children":254},{},[255,261],{"type":46,"tag":256,"props":257,"children":258},"td",{},[259],{"type":51,"value":260},"\u003C$25k",{"type":46,"tag":256,"props":262,"children":263},{},[264],{"type":51,"value":265},"self-serve only (10%) or non-profit (15%)",{"type":46,"tag":234,"props":267,"children":268},{},[269,274],{"type":46,"tag":256,"props":270,"children":271},{},[272],{"type":51,"value":273},"$25-59k",{"type":46,"tag":256,"props":275,"children":276},{},[277],{"type":51,"value":278},"20%",{"type":46,"tag":234,"props":280,"children":281},{},[282,287],{"type":46,"tag":256,"props":283,"children":284},{},[285],{"type":51,"value":286},"$60-99k",{"type":46,"tag":256,"props":288,"children":289},{},[290],{"type":51,"value":291},"25%",{"type":46,"tag":234,"props":293,"children":294},{},[295,300],{"type":46,"tag":256,"props":296,"children":297},{},[298],{"type":51,"value":299},"$100-249k",{"type":46,"tag":256,"props":301,"children":302},{},[303],{"type":51,"value":304},"30%",{"type":46,"tag":234,"props":306,"children":307},{},[308,313],{"type":46,"tag":256,"props":309,"children":310},{},[311],{"type":51,"value":312},"$250-499k",{"type":46,"tag":256,"props":314,"children":315},{},[316],{"type":51,"value":317},"35%",{"type":46,"tag":234,"props":319,"children":320},{},[321,326],{"type":46,"tag":256,"props":322,"children":323},{},[324],{"type":51,"value":325},"$500-999k",{"type":46,"tag":256,"props":327,"children":328},{},[329],{"type":51,"value":330},"40%",{"type":46,"tag":234,"props":332,"children":333},{},[334,339],{"type":46,"tag":256,"props":335,"children":336},{},[337],{"type":51,"value":338},"$1M+",{"type":46,"tag":256,"props":340,"children":341},{},[342],{"type":51,"value":343},"custom (escalate)",{"type":46,"tag":345,"props":346,"children":347},"blockquote",{},[348],{"type":46,"tag":53,"props":349,"children":350},{},[351,353,358],{"type":51,"value":352},"Monthly customers get ",{"type":46,"tag":59,"props":354,"children":355},{},[356],{"type":51,"value":357},"0% no matter the commitment",{"type":51,"value":359}," — must convert to credit purchase to unlock anything. Customers must qualify for the volume tier before any of levers 2-4 apply.",{"type":46,"tag":219,"props":361,"children":363},{"id":362},"lever-2-length-of-commitment-additive-initial-order-form-only",[364,366,371],{"type":51,"value":365},"Lever 2 — Length of commitment (additive, ",{"type":46,"tag":59,"props":367,"children":368},{},[369],{"type":51,"value":370},"initial order form only",{"type":51,"value":372},")",{"type":46,"tag":91,"props":374,"children":375},{},[376,381,386,391],{"type":46,"tag":95,"props":377,"children":378},{},[379],{"type":51,"value":380},"1-year: +0%",{"type":46,"tag":95,"props":382,"children":383},{},[384],{"type":51,"value":385},"2-year: +3%",{"type":46,"tag":95,"props":387,"children":388},{},[389],{"type":51,"value":390},"3-year: +5% (doesn't stack into longer terms)",{"type":46,"tag":95,"props":392,"children":393},{},[394],{"type":51,"value":395},"4+ years: custom",{"type":46,"tag":345,"props":397,"children":398},{},[399],{"type":46,"tag":53,"props":400,"children":401},{},[402],{"type":51,"value":403},"Does NOT apply to additional credit purchases made within the first half of the term — those inherit the original discount but don't restack length.",{"type":46,"tag":219,"props":405,"children":407},{"id":406},"lever-3-timing-of-cash-additive",[408],{"type":51,"value":409},"Lever 3 — Timing of cash (additive)",{"type":46,"tag":91,"props":411,"children":412},{},[413,418,423],{"type":46,"tag":95,"props":414,"children":415},{},[416],{"type":51,"value":417},"Net 30 (standard): +0%",{"type":46,"tag":95,"props":419,"children":420},{},[421],{"type":51,"value":422},"Multi-year paid upfront: +2.5% per additional year (2-yr upfront = +2.5%, 3-yr upfront = +5%)",{"type":46,"tag":95,"props":424,"children":425},{},[426,428,433],{"type":51,"value":427},"Extended terms: ",{"type":46,"tag":59,"props":429,"children":430},{},[431],{"type":51,"value":432},"–2.5%",{"type":51,"value":434}," per 15 days beyond Net 30 (Net 60 → −5%)",{"type":46,"tag":345,"props":436,"children":437},{},[438],{"type":46,"tag":53,"props":439,"children":440},{},[441],{"type":51,"value":442},"Upfront payment is required for all discounted contracts. Quarterly \u002F split payment terms not available. If budget can't cover full projected amount, customer can purchase fewer credits at the corresponding (likely lower) tier and add more later.",{"type":46,"tag":219,"props":444,"children":446},{"id":445},"lever-4-mutual-commitment-to-timing-additive-one-time",[447],{"type":51,"value":448},"Lever 4 — Mutual commitment to timing (additive, one-time)",{"type":46,"tag":91,"props":450,"children":451},{},[452,469,486],{"type":46,"tag":95,"props":453,"children":454},{},[455,460,462,467],{"type":46,"tag":59,"props":456,"children":457},{},[458],{"type":51,"value":459},"Monthly-to-annual conversion or net-new: +5%",{"type":51,"value":461}," with ",{"type":46,"tag":59,"props":463,"children":464},{},[465],{"type":51,"value":466},"written confirmation from the customer's actual signatory",{"type":51,"value":468}," of intent to sign by a specific mutually-agreed date. One-time per conversion cycle.",{"type":46,"tag":95,"props":470,"children":471},{},[472,477,479,484],{"type":46,"tag":59,"props":473,"children":474},{},[475],{"type":51,"value":476},"Renewal: +5%",{"type":51,"value":478}," if signed 60+ days before expiration ",{"type":46,"tag":59,"props":480,"children":481},{},[482],{"type":51,"value":483},"AND the customer is currently on an active prepaid credit plan",{"type":51,"value":485},". If credits ran out and they rolled to PAYG, the +5% does NOT apply — that's treated as a re-entry into a credit plan, not an early renewal.",{"type":46,"tag":95,"props":487,"children":488},{},[489],{"type":51,"value":490},"If timelines slip, default is to withdraw the additional discount.",{"type":46,"tag":219,"props":492,"children":494},{"id":493},"stacking-notes",[495],{"type":51,"value":496},"Stacking notes",{"type":46,"tag":91,"props":498,"children":499},{},[500,505,510],{"type":46,"tag":95,"props":501,"children":502},{},[503],{"type":51,"value":504},"Volume tier is mandatory before any of the others apply.",{"type":46,"tag":95,"props":506,"children":507},{},[508],{"type":51,"value":509},"All four levers stack additively (sum the percentages).",{"type":46,"tag":95,"props":511,"children":512},{},[513,515,520,522,527],{"type":51,"value":514},"Anything beyond these levels requires sign-off from ",{"type":46,"tag":59,"props":516,"children":517},{},[518],{"type":51,"value":519},"Ben",{"type":51,"value":521}," (TAEs\u002FTAMs) or ",{"type":46,"tag":59,"props":523,"children":524},{},[525],{"type":51,"value":526},"Simon",{"type":51,"value":528}," (CSMs).",{"type":46,"tag":219,"props":530,"children":532},{"id":531},"special-programs-replace-the-standard-stack",[533],{"type":51,"value":534},"Special programs (replace the standard stack)",{"type":46,"tag":91,"props":536,"children":537},{},[538,548,558,568,578,588,598],{"type":46,"tag":95,"props":539,"children":540},{},[541,546],{"type":46,"tag":59,"props":542,"children":543},{},[544],{"type":51,"value":545},"Non-profit:",{"type":51,"value":547}," +15% flat below $25k; +5% on top of volume tier between $25-100k; standard tiers only above $100k. Requires proof per country tax law.",{"type":46,"tag":95,"props":549,"children":550},{},[551,556],{"type":46,"tag":59,"props":552,"children":553},{},[554],{"type":51,"value":555},"Self-serve credits:",{"type":51,"value":557}," Below $25k → 10% off, applied 1\u002F12 per month over 12 months (not upfront). $25k+ → standard volume tiers. Requires 3+ paid invoices, $280+ avg, no open invoices, not on up plan \u002F legacy \u002F existing credits.",{"type":46,"tag":95,"props":559,"children":560},{},[561,566],{"type":46,"tag":59,"props":562,"children":563},{},[564],{"type":51,"value":565},"Startup plan rolloff:",{"type":51,"value":567}," 2 months free credit when prepaying ~12 months. If buying fewer credits, +1\u002F6 of purchase as free credit. Applied before contract start date, one-time.",{"type":46,"tag":95,"props":569,"children":570},{},[571,576],{"type":46,"tag":59,"props":572,"children":573},{},[574],{"type":51,"value":575},"Legacy 30% Stripe-discount customers:",{"type":51,"value":577}," these are on old event pricing; should be migrated to standard pricing before any new discount conversation.",{"type":46,"tag":95,"props":579,"children":580},{},[581,586],{"type":46,"tag":59,"props":582,"children":583},{},[584],{"type":51,"value":585},"Contract buyout (leaving a competitor mid-contract):",{"type":51,"value":587}," up to 6 months free PostHog usage on a signed $20k+\u002Fyr annual contract paid upfront, proportional to remaining time on competitor contract. Requires proof.",{"type":46,"tag":95,"props":589,"children":590},{},[591,596],{"type":46,"tag":59,"props":592,"children":593},{},[594],{"type":51,"value":595},"New business renewal credits:",{"type":51,"value":597}," for prospects shopping a competitor renewal, undercut to a total 40% discount via first-year credit. Requires full competitor quote.",{"type":46,"tag":95,"props":599,"children":600},{},[601,606],{"type":46,"tag":59,"props":602,"children":603},{},[604],{"type":51,"value":605},"Margin-negative deals:",{"type":51,"value":607}," only for (a) strategic logo, (b) taking from competitor, (c) preventing churn to competitor. ~1\u002Fyear. Escalate to manager → Simon\u002FBen.",{"type":46,"tag":79,"props":609,"children":611},{"id":610},"eligibility-check-run-before-producing-any-output",[612],{"type":51,"value":613},"Eligibility check — RUN BEFORE PRODUCING ANY OUTPUT",{"type":46,"tag":53,"props":615,"children":616},{},[617,619,624],{"type":51,"value":618},"Walk through these ",{"type":46,"tag":126,"props":620,"children":621},{},[622],{"type":51,"value":623},"before",{"type":51,"value":625}," doing the math. If anything is unknown or unclear, ask the rep one focused question. Don't quote a discount stack that the handbook doesn't support — quoting first and walking back later erodes customer trust.",{"type":46,"tag":627,"props":628,"children":629},"ol",{},[630,679,689,715,741,767,807,823,849],{"type":46,"tag":95,"props":631,"children":632},{},[633,638,640],{"type":46,"tag":59,"props":634,"children":635},{},[636],{"type":51,"value":637},"Current plan state.",{"type":51,"value":639}," Is the customer on monthly\u002FPAYG, an active credit plan, or rolled off a credit plan to PAYG?\n",{"type":46,"tag":91,"props":641,"children":642},{},[643,655,667],{"type":46,"tag":95,"props":644,"children":645},{},[646,648,653],{"type":51,"value":647},"Monthly\u002FPAYG → this is a ",{"type":46,"tag":126,"props":649,"children":650},{},[651],{"type":51,"value":652},"conversion",{"type":51,"value":654},"; the +5% mutual-commitment lever (lever 4) is available",{"type":46,"tag":95,"props":656,"children":657},{},[658,660,665],{"type":51,"value":659},"Active credit plan → this is a ",{"type":46,"tag":126,"props":661,"children":662},{},[663],{"type":51,"value":664},"renewal",{"type":51,"value":666},"; the +5% renewal lever is available IF signed 60+ days before expiration",{"type":46,"tag":95,"props":668,"children":669},{},[670,672,677],{"type":51,"value":671},"Rolled-off-to-PAYG → this is a ",{"type":46,"tag":126,"props":673,"children":674},{},[675],{"type":51,"value":676},"re-entry",{"type":51,"value":678},"; NEITHER the conversion +5% nor the renewal +5% apply by default; only volume + commitment-length + cash-timing",{"type":46,"tag":95,"props":680,"children":681},{},[682,687],{"type":46,"tag":59,"props":683,"children":684},{},[685],{"type":51,"value":686},"Projected annual credit purchase.",{"type":51,"value":688}," Does it cross a volume tier? If projected spend is $30k\u002Fyr, customer qualifies for 20% only — even if rep proposes 25%. If it's \u003C$25k, no standard discount applies — they're in self-serve \u002F non-profit territory.",{"type":46,"tag":95,"props":690,"children":691},{},[692,697],{"type":46,"tag":59,"props":693,"children":694},{},[695],{"type":51,"value":696},"Special program eligibility:",{"type":46,"tag":91,"props":698,"children":699},{},[700,705,710],{"type":46,"tag":95,"props":701,"children":702},{},[703],{"type":51,"value":704},"Non-profit? → different stack (above)",{"type":46,"tag":95,"props":706,"children":707},{},[708],{"type":51,"value":709},"Startup plan? → different stack (above)",{"type":46,"tag":95,"props":711,"children":712},{},[713],{"type":51,"value":714},"Legacy 30% Stripe-discount customer? → flag, recommend migration first",{"type":46,"tag":95,"props":716,"children":717},{},[718,723],{"type":46,"tag":59,"props":719,"children":720},{},[721],{"type":51,"value":722},"Renewal context (if applicable):",{"type":46,"tag":91,"props":724,"children":725},{},[726,731,736],{"type":46,"tag":95,"props":727,"children":728},{},[729],{"type":51,"value":730},"Contract end date known? Are we 60+ days out?",{"type":46,"tag":95,"props":732,"children":733},{},[734],{"type":51,"value":735},"Currently on credit plan at the time of signing?",{"type":46,"tag":95,"props":737,"children":738},{},[739],{"type":51,"value":740},"Within first half of original term? (Additional credit purchases at original discount only valid here)",{"type":46,"tag":95,"props":742,"children":743},{},[744,749],{"type":46,"tag":59,"props":745,"children":746},{},[747],{"type":51,"value":748},"Commitment length & timing:",{"type":46,"tag":91,"props":750,"children":751},{},[752,757,762],{"type":46,"tag":95,"props":753,"children":754},{},[755],{"type":51,"value":756},"1 \u002F 2 \u002F 3 \u002F 4+ years? (Drives lever 2)",{"type":46,"tag":95,"props":758,"children":759},{},[760],{"type":51,"value":761},"Paid upfront or yearly billing? (Drives lever 3 and credit-allocation mechanics)",{"type":46,"tag":95,"props":763,"children":764},{},[765],{"type":51,"value":766},"Net 30 or extended terms? (Penalty −2.5% per 15 extra days)",{"type":46,"tag":95,"props":768,"children":769},{},[770,775],{"type":46,"tag":59,"props":771,"children":772},{},[773],{"type":51,"value":774},"Mutual-commitment lever requirements:",{"type":46,"tag":91,"props":776,"children":777},{},[778,783,795],{"type":46,"tag":95,"props":779,"children":780},{},[781],{"type":51,"value":782},"Is there a specific, mutually-agreed signing date?",{"type":46,"tag":95,"props":784,"children":785},{},[786,788,793],{"type":51,"value":787},"Has the customer's ",{"type":46,"tag":126,"props":789,"children":790},{},[791],{"type":51,"value":792},"actual signatory",{"type":51,"value":794}," (not just the champion) given written confirmation?",{"type":46,"tag":95,"props":796,"children":797},{},[798,800,805],{"type":51,"value":799},"If no, the +5% should be quoted as ",{"type":46,"tag":126,"props":801,"children":802},{},[803],{"type":51,"value":804},"available pending written commitment",{"type":51,"value":806},", not as a baked-in number",{"type":46,"tag":95,"props":808,"children":809},{},[810,815],{"type":46,"tag":59,"props":811,"children":812},{},[813],{"type":51,"value":814},"Payment method:",{"type":46,"tag":91,"props":816,"children":817},{},[818],{"type":46,"tag":95,"props":819,"children":820},{},[821],{"type":51,"value":822},"Bank transfer (standard for prepaid)? Or credit card? CC requires Mine (Simon as backup) sign-off — flag it.",{"type":46,"tag":95,"props":824,"children":825},{},[826,831],{"type":46,"tag":59,"props":827,"children":828},{},[829],{"type":51,"value":830},"Margin & escalation triggers:",{"type":46,"tag":91,"props":832,"children":833},{},[834,839,844],{"type":46,"tag":95,"props":835,"children":836},{},[837],{"type":51,"value":838},"$250k+ deal → run margin calculation; flag for sign-off",{"type":46,"tag":95,"props":840,"children":841},{},[842],{"type":51,"value":843},"$1M+ → custom pricing, escalate",{"type":46,"tag":95,"props":845,"children":846},{},[847],{"type":51,"value":848},"Anything below tier-implied math → margin-negative; escalate to manager",{"type":46,"tag":95,"props":850,"children":851},{},[852,857],{"type":46,"tag":59,"props":853,"children":854},{},[855],{"type":51,"value":856},"Uptime SLA \u002F legal redline appetite (optional, but surface if relevant):",{"type":46,"tag":91,"props":858,"children":859},{},[860,865,870],{"type":46,"tag":95,"props":861,"children":862},{},[863],{"type":51,"value":864},"$100k+ post-discount ARR → SLA is on the table as a negotiated term",{"type":46,"tag":95,"props":866,"children":867},{},[868],{"type":51,"value":869},"\u003C$20k → no legal redlines",{"type":46,"tag":95,"props":871,"children":872},{},[873],{"type":51,"value":874},"$20-160k → proportional, minor\u002Fmedium edits only",{"type":46,"tag":53,"props":876,"children":877},{},[878,883],{"type":46,"tag":59,"props":879,"children":880},{},[881],{"type":51,"value":882},"If the rep can't answer 1-4, pause and ask.",{"type":51,"value":884}," A clean briefing on a wrong assumption wastes everyone's time.",{"type":46,"tag":79,"props":886,"children":888},{"id":887},"workflow",[889],{"type":51,"value":890},"Workflow",{"type":46,"tag":219,"props":892,"children":894},{"id":893},"step-1-resolve-the-org",[895],{"type":51,"value":896},"Step 1 — Resolve the org",{"type":46,"tag":898,"props":899,"children":904},"pre",{"className":900,"code":901,"language":902,"meta":903,"style":903},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","SELECT id, name, created_at FROM postgres.posthog_organization WHERE name ILIKE '%\u003Cname>%' LIMIT 5\n","sql","",[905],{"type":46,"tag":906,"props":907,"children":908},"code",{"__ignoreMap":903},[909],{"type":46,"tag":910,"props":911,"children":914},"span",{"class":912,"line":913},"line",1,[915],{"type":46,"tag":910,"props":916,"children":917},{},[918],{"type":51,"value":901},{"type":46,"tag":53,"props":920,"children":921},{},[922],{"type":51,"value":923},"If multiple match, ask which one.",{"type":46,"tag":219,"props":925,"children":927},{"id":926},"step-2-pull-billing-trajectory",[928],{"type":51,"value":929},"Step 2 — Pull billing trajectory",{"type":46,"tag":898,"props":931,"children":933},{"className":900,"code":932,"language":902,"meta":903,"style":903},"SELECT bi.period_start, bi.period_end, bi.mrr, bi.mrr_per_product\nFROM postgres.prod.billing_invoice bi\nJOIN postgres.prod.billing_customer bc ON bi.customer_id = bc.id\nWHERE bc.organization_id = '\u003Corg_id>'\nORDER BY bi.period_start DESC\nLIMIT 24\n",[934],{"type":46,"tag":906,"props":935,"children":936},{"__ignoreMap":903},[937,945,954,963,971,980],{"type":46,"tag":910,"props":938,"children":939},{"class":912,"line":913},[940],{"type":46,"tag":910,"props":941,"children":942},{},[943],{"type":51,"value":944},"SELECT bi.period_start, bi.period_end, bi.mrr, bi.mrr_per_product\n",{"type":46,"tag":910,"props":946,"children":948},{"class":912,"line":947},2,[949],{"type":46,"tag":910,"props":950,"children":951},{},[952],{"type":51,"value":953},"FROM postgres.prod.billing_invoice bi\n",{"type":46,"tag":910,"props":955,"children":957},{"class":912,"line":956},3,[958],{"type":46,"tag":910,"props":959,"children":960},{},[961],{"type":51,"value":962},"JOIN postgres.prod.billing_customer bc ON bi.customer_id = bc.id\n",{"type":46,"tag":910,"props":964,"children":965},{"class":912,"line":33},[966],{"type":46,"tag":910,"props":967,"children":968},{},[969],{"type":51,"value":970},"WHERE bc.organization_id = '\u003Corg_id>'\n",{"type":46,"tag":910,"props":972,"children":974},{"class":912,"line":973},5,[975],{"type":46,"tag":910,"props":976,"children":977},{},[978],{"type":51,"value":979},"ORDER BY bi.period_start DESC\n",{"type":46,"tag":910,"props":981,"children":983},{"class":912,"line":982},6,[984],{"type":46,"tag":910,"props":985,"children":986},{},[987],{"type":51,"value":988},"LIMIT 24\n",{"type":46,"tag":53,"props":990,"children":991},{},[992],{"type":51,"value":993},"Compute, in order:",{"type":46,"tag":91,"props":995,"children":996},{},[997,1002,1007,1012,1017,1022],{"type":46,"tag":95,"props":998,"children":999},{},[1000],{"type":51,"value":1001},"Current MRR (most recent closed invoice)",{"type":46,"tag":95,"props":1003,"children":1004},{},[1005],{"type":51,"value":1006},"Annual run-rate (current MRR × 12)",{"type":46,"tag":95,"props":1008,"children":1009},{},[1010],{"type":51,"value":1011},"Trailing 12-month total spend",{"type":46,"tag":95,"props":1013,"children":1014},{},[1015],{"type":51,"value":1016},"YoY growth (latest invoice vs same month a year ago)",{"type":46,"tag":95,"props":1018,"children":1019},{},[1020],{"type":51,"value":1021},"Recent slope (annualized growth over last 5 invoices)",{"type":46,"tag":95,"props":1023,"children":1024},{},[1025],{"type":51,"value":1026},"Product mix on the latest invoice (line items > 1% of total)",{"type":46,"tag":219,"props":1028,"children":1030},{"id":1029},"step-3-scan-for-confounding-variables-do-not-skip",[1031],{"type":51,"value":1032},"Step 3 — Scan for confounding variables (do not skip)",{"type":46,"tag":53,"props":1034,"children":1035},{},[1036,1038,1043],{"type":51,"value":1037},"The purpose: catch things that would make the ask tone-deaf or premature. ",{"type":46,"tag":59,"props":1039,"children":1040},{},[1041],{"type":51,"value":1042},"Surface every signal you find — don't pre-judge significance.",{"type":51,"value":1044}," Examples: active support escalations, product complaints, in-flight migrations or churn signals, missed commitments, an unhappy stakeholder, an upcoming internal review, a pricing concern they already raised, a champion who left.",{"type":46,"tag":53,"props":1046,"children":1047},{},[1048],{"type":51,"value":1049},"Run these in parallel:",{"type":46,"tag":53,"props":1051,"children":1052},{},[1053,1058],{"type":46,"tag":59,"props":1054,"children":1055},{},[1056],{"type":51,"value":1057},"3a. Slack — customer channel + DMs.",{"type":51,"value":1059}," Search the customer's PostHog Slack channel for the last 60 days:",{"type":46,"tag":898,"props":1061,"children":1065},{"className":1062,"code":1064,"language":51},[1063],"language-text","in:#posthog-\u003Ccustomer-slug> after:\u003C60d-ago>\n",[1066],{"type":46,"tag":906,"props":1067,"children":1068},{"__ignoreMap":903},[1069],{"type":51,"value":1064},{"type":46,"tag":53,"props":1071,"children":1072},{},[1073],{"type":51,"value":1074},"Also search recent DMs between the rep and customer contacts.",{"type":46,"tag":53,"props":1076,"children":1077},{},[1078,1083,1085,1091,1093,1099,1101,1107],{"type":46,"tag":59,"props":1079,"children":1080},{},[1081],{"type":51,"value":1082},"3b. Gmail — recent threads.",{"type":51,"value":1084}," Search for the customer name (and key contacts if known) in the rep's inbox for the last 90 days. Tool: ",{"type":46,"tag":906,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":51,"value":1090},"mcp__claude_ai_Gmail__search_threads",{"type":51,"value":1092}," with a query like ",{"type":46,"tag":906,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":51,"value":1098},"\"\u003CCustomer Name>\" newer_than:90d",{"type":51,"value":1100}," and any explicitly-known contact emails. Read snippets; only ",{"type":46,"tag":906,"props":1102,"children":1104},{"className":1103},[],[1105],{"type":51,"value":1106},"get_thread",{"type":51,"value":1108}," on the most relevant 1-3 threads.",{"type":46,"tag":53,"props":1110,"children":1111},{},[1112,1117,1119,1125],{"type":46,"tag":59,"props":1113,"children":1114},{},[1115],{"type":51,"value":1116},"3c. Granola — meeting transcripts.",{"type":51,"value":1118}," Use ",{"type":46,"tag":906,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":51,"value":1124},"mcp__claude_ai_Granola__query_granola_meetings",{"type":51,"value":1126}," with the customer name to find recent transcripts. Look for: stated procurement timelines, budget cycles, named blockers, expansion or contraction signals. Quote one or two sentences verbatim if pivotal.",{"type":46,"tag":53,"props":1128,"children":1129},{},[1130,1135,1137,1142,1144,1149],{"type":46,"tag":59,"props":1131,"children":1132},{},[1133],{"type":51,"value":1134},"Output of step 3:",{"type":51,"value":1136}," a short \"",{"type":46,"tag":59,"props":1138,"children":1139},{},[1140],{"type":51,"value":1141},"Confounding variables",{"type":51,"value":1143},"\" section in the briefing (2-5 bullets max). If nothing meaningful surfaced, say \"no recent friction signals in Slack \u002F email \u002F meetings (last 60-90 days).\" If something significant surfaced — e.g. a churn-risk meeting last week — ",{"type":46,"tag":59,"props":1145,"children":1146},{},[1147],{"type":51,"value":1148},"pause before drafting",{"type":51,"value":1150}," and ask the rep whether to proceed.",{"type":46,"tag":219,"props":1152,"children":1154},{"id":1153},"step-4-anchor-on-customer-momentum-exa-mcp",[1155],{"type":51,"value":1156},"Step 4 — Anchor on customer momentum (Exa MCP)",{"type":46,"tag":53,"props":1158,"children":1159},{},[1160,1162,1168],{"type":51,"value":1161},"Use ",{"type":46,"tag":906,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":51,"value":1167},"mcp__claude_ai_Exa__web_search_exa",{"type":51,"value":1169},":",{"type":46,"tag":345,"props":1171,"children":1172},{},[1173],{"type":46,"tag":53,"props":1174,"children":1175},{},[1176,1178,1183],{"type":51,"value":1177},"\"",{"type":46,"tag":910,"props":1179,"children":1180},{},[1181],{"type":51,"value":1182},"Customer name",{"type":51,"value":1184}," product launches growth metrics 2026 blog announcements\"",{"type":46,"tag":53,"props":1186,"children":1187},{},[1188,1190,1196,1198,1203,1205,1210,1212,1217],{"type":51,"value":1189},"If results are thin, follow with ",{"type":46,"tag":906,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":51,"value":1195},"mcp__claude_ai_Exa__web_fetch_exa",{"type":51,"value":1197}," on their official blog\u002Fnews page. Capture 2-4 concrete anchors from the ",{"type":46,"tag":59,"props":1199,"children":1200},{},[1201],{"type":51,"value":1202},"last 6 months",{"type":51,"value":1204}," — product launches, user-count or revenue claims, partnerships. These are the ",{"type":46,"tag":126,"props":1206,"children":1207},{},[1208],{"type":51,"value":1209},"reason-to-revisit-now",{"type":51,"value":1211}," hook, not the ",{"type":46,"tag":126,"props":1213,"children":1214},{},[1215],{"type":51,"value":1216},"reason-to-buy",{"type":51,"value":1218},".",{"type":46,"tag":53,"props":1220,"children":1221},{},[1222,1224,1230],{"type":51,"value":1223},"Skip if rep says ",{"type":46,"tag":906,"props":1225,"children":1227},{"className":1226},[],[1228],{"type":51,"value":1229},"--no-anchors",{"type":51,"value":1218},{"type":46,"tag":219,"props":1232,"children":1234},{"id":1233},"step-5-learn-the-reps-voice-slack-only",[1235],{"type":51,"value":1236},"Step 5 — Learn the REP's voice (Slack only)",{"type":46,"tag":53,"props":1238,"children":1239},{},[1240],{"type":51,"value":1241},"The rep is the one sending this draft — it should sound like them, not generic PostHog tone.",{"type":46,"tag":53,"props":1243,"children":1244},{},[1245,1250,1252,1257,1259,1265,1266,1272,1274,1280,1282,1287],{"type":46,"tag":59,"props":1246,"children":1247},{},[1248],{"type":51,"value":1249},"If Slack MCP is connected:",{"type":51,"value":1251}," before drafting, pull 15-25 recent messages ",{"type":46,"tag":126,"props":1253,"children":1254},{},[1255],{"type":51,"value":1256},"written by the rep",{"type":51,"value":1258}," in customer-facing channels. Use ",{"type":46,"tag":906,"props":1260,"children":1262},{"className":1261},[],[1263],{"type":51,"value":1264},"slack_search_public_and_private",{"type":51,"value":461},{"type":46,"tag":906,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":51,"value":1271},"from:me in:#posthog-",{"type":51,"value":1273}," (or filter by ",{"type":46,"tag":906,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":51,"value":1279},"from:\u003Crep_user_id>",{"type":51,"value":1281}," if running on someone else's behalf). Prioritize messages to ",{"type":46,"tag":126,"props":1283,"children":1284},{},[1285],{"type":51,"value":1286},"other customers",{"type":51,"value":1288}," in similar nudge contexts (annual conversion, billing, expansion) over internal-team messages. Note:",{"type":46,"tag":91,"props":1290,"children":1291},{},[1292,1297,1302,1307,1312,1317,1322],{"type":46,"tag":95,"props":1293,"children":1294},{},[1295],{"type":51,"value":1296},"Greeting (hey \u002F hi \u002F no greeting)",{"type":46,"tag":95,"props":1298,"children":1299},{},[1300],{"type":51,"value":1301},"Sign-off (name \u002F nothing \u002F emoji)",{"type":46,"tag":95,"props":1303,"children":1304},{},[1305],{"type":51,"value":1306},"Casing (lowercase \u002F sentence case)",{"type":46,"tag":95,"props":1308,"children":1309},{},[1310],{"type":51,"value":1311},"Punctuation density (terse fragments \u002F full sentences)",{"type":46,"tag":95,"props":1313,"children":1314},{},[1315],{"type":51,"value":1316},"Emoji use (none \u002F occasional \u002F heavy)",{"type":46,"tag":95,"props":1318,"children":1319},{},[1320],{"type":51,"value":1321},"Hedging vs. directness",{"type":46,"tag":95,"props":1323,"children":1324},{},[1325],{"type":51,"value":1326},"Signature phrases or recurring sentence shapes",{"type":46,"tag":53,"props":1328,"children":1329},{},[1330,1332,1337,1339,1344],{"type":51,"value":1331},"Emulate the ",{"type":46,"tag":126,"props":1333,"children":1334},{},[1335],{"type":51,"value":1336},"register",{"type":51,"value":1338},", not the ",{"type":46,"tag":126,"props":1340,"children":1341},{},[1342],{"type":51,"value":1343},"content",{"type":51,"value":1345},". If the rep writes terse-lowercase-with-bufo-emoji, the draft is too. If they write polished sentences with full sign-offs, match that.",{"type":46,"tag":53,"props":1347,"children":1348},{},[1349,1354],{"type":46,"tag":59,"props":1350,"children":1351},{},[1352],{"type":51,"value":1353},"If Slack MCP is not connected:",{"type":51,"value":1355}," suggest to the rep that connecting Slack would let the skill emulate their own voice. Default to neutral, lowercase, plain-text PostHog tone if not available.",{"type":46,"tag":345,"props":1357,"children":1358},{},[1359],{"type":46,"tag":53,"props":1360,"children":1361},{},[1362,1364,1369,1371,1376],{"type":51,"value":1363},"Step 5 is about the ",{"type":46,"tag":126,"props":1365,"children":1366},{},[1367],{"type":51,"value":1368},"rep's",{"type":51,"value":1370}," style — step 3 separately surfaces the ",{"type":46,"tag":126,"props":1372,"children":1373},{},[1374],{"type":51,"value":1375},"customer's",{"type":51,"value":1377}," recent tone as a confounding-variables read. Don't mirror the customer; emulate the rep.",{"type":46,"tag":219,"props":1379,"children":1381},{"id":1380},"step-6-confirm-the-discount-stack-with-the-rep",[1382],{"type":51,"value":1383},"Step 6 — Confirm the discount stack with the rep",{"type":46,"tag":53,"props":1385,"children":1386},{},[1387],{"type":51,"value":1388},"Ask which levers apply. Use the eligibility check above to constrain the answer. Don't assume.",{"type":46,"tag":53,"props":1390,"children":1391},{},[1392],{"type":51,"value":1393},"Common stacks:",{"type":46,"tag":91,"props":1395,"children":1396},{},[1397,1407,1417,1427,1437],{"type":46,"tag":95,"props":1398,"children":1399},{},[1400,1405],{"type":46,"tag":59,"props":1401,"children":1402},{},[1403],{"type":51,"value":1404},"Standard 1-year, signing-date committed (conversion):",{"type":51,"value":1406}," volume tier + 5% mutual-commitment",{"type":46,"tag":95,"props":1408,"children":1409},{},[1410,1415],{"type":46,"tag":59,"props":1411,"children":1412},{},[1413],{"type":51,"value":1414},"2-year prepaid upfront:",{"type":51,"value":1416}," volume tier + 3% commitment + 5% upfront payment",{"type":46,"tag":95,"props":1418,"children":1419},{},[1420,1425],{"type":46,"tag":59,"props":1421,"children":1422},{},[1423],{"type":51,"value":1424},"3-year prepaid upfront:",{"type":51,"value":1426}," volume tier + 5% commitment + 5% upfront payment",{"type":46,"tag":95,"props":1428,"children":1429},{},[1430,1435],{"type":46,"tag":59,"props":1431,"children":1432},{},[1433],{"type":51,"value":1434},"Early renewal (60+ days, active credits):",{"type":51,"value":1436}," volume tier + 5% early-renewal",{"type":46,"tag":95,"props":1438,"children":1439},{},[1440,1445],{"type":46,"tag":59,"props":1441,"children":1442},{},[1443],{"type":51,"value":1444},"Re-entry after PAYG rolloff:",{"type":51,"value":1446}," volume tier only (no +5%)",{"type":46,"tag":53,"props":1448,"children":1449},{},[1450,1452,1457],{"type":51,"value":1451},"Sanity-check the ",{"type":46,"tag":59,"props":1453,"children":1454},{},[1455],{"type":51,"value":1456},"volume tier",{"type":51,"value":1458}," against projected annual spend before quoting.",{"type":46,"tag":219,"props":1460,"children":1462},{"id":1461},"step-7-run-three-scenarios",[1463],{"type":51,"value":1464},"Step 7 — Run three scenarios",{"type":46,"tag":226,"props":1466,"children":1467},{},[1468,1489],{"type":46,"tag":230,"props":1469,"children":1470},{},[1471],{"type":46,"tag":234,"props":1472,"children":1473},{},[1474,1479,1484],{"type":46,"tag":238,"props":1475,"children":1476},{},[1477],{"type":51,"value":1478},"Scenario",{"type":46,"tag":238,"props":1480,"children":1481},{},[1482],{"type":51,"value":1483},"Projected PAYG spend",{"type":46,"tag":238,"props":1485,"children":1486},{},[1487],{"type":51,"value":1488},"Logic",{"type":46,"tag":249,"props":1490,"children":1491},{},[1492,1513,1534],{"type":46,"tag":234,"props":1493,"children":1494},{},[1495,1503,1508],{"type":46,"tag":256,"props":1496,"children":1497},{},[1498],{"type":46,"tag":59,"props":1499,"children":1500},{},[1501],{"type":51,"value":1502},"Floor (zero-growth)",{"type":46,"tag":256,"props":1504,"children":1505},{},[1506],{"type":51,"value":1507},"current MRR × 12",{"type":46,"tag":256,"props":1509,"children":1510},{},[1511],{"type":51,"value":1512},"hard floor; even if they stop growing",{"type":46,"tag":234,"props":1514,"children":1515},{},[1516,1524,1529],{"type":46,"tag":256,"props":1517,"children":1518},{},[1519],{"type":46,"tag":59,"props":1520,"children":1521},{},[1522],{"type":51,"value":1523},"Base",{"type":46,"tag":256,"props":1525,"children":1526},{},[1527],{"type":51,"value":1528},"apply recent-slope annualized rate",{"type":46,"tag":256,"props":1530,"children":1531},{},[1532],{"type":51,"value":1533},"most defensible mid-case",{"type":46,"tag":234,"props":1535,"children":1536},{},[1537,1545,1550],{"type":46,"tag":256,"props":1538,"children":1539},{},[1540],{"type":46,"tag":59,"props":1541,"children":1542},{},[1543],{"type":51,"value":1544},"Bull",{"type":46,"tag":256,"props":1546,"children":1547},{},[1548],{"type":51,"value":1549},"apply trailing YoY",{"type":46,"tag":256,"props":1551,"children":1552},{},[1553],{"type":51,"value":1554},"upper bound based on actual history",{"type":46,"tag":53,"props":1556,"children":1557},{},[1558],{"type":51,"value":1559},"For each: PAYG spend → discounted credit cash → absolute savings.",{"type":46,"tag":219,"props":1561,"children":1563},{"id":1562},"step-8-emit-the-briefing",[1564],{"type":51,"value":1565},"Step 8 — Emit the briefing",{"type":46,"tag":53,"props":1567,"children":1568},{},[1569,1571,1576],{"type":51,"value":1570},"Exactly these 6 sections, in this order. ",{"type":46,"tag":59,"props":1572,"children":1573},{},[1574],{"type":51,"value":1575},"Nothing before, nothing between, nothing after.",{"type":51,"value":1577}," The Slack draft is the closer.",{"type":46,"tag":627,"props":1579,"children":1580},{},[1581,1591,1601,1610,1627,1637],{"type":46,"tag":95,"props":1582,"children":1583},{},[1584,1589],{"type":46,"tag":59,"props":1585,"children":1586},{},[1587],{"type":51,"value":1588},"Eligibility check",{"type":51,"value":1590}," — one line. Plan state + applicable lever stack.",{"type":46,"tag":95,"props":1592,"children":1593},{},[1594,1599],{"type":46,"tag":59,"props":1595,"children":1596},{},[1597],{"type":51,"value":1598},"Trajectory",{"type":51,"value":1600}," — one table, 4-6 rows of recent MRR + one-line growth summary.",{"type":46,"tag":95,"props":1602,"children":1603},{},[1604,1608],{"type":46,"tag":59,"props":1605,"children":1606},{},[1607],{"type":51,"value":1141},{"type":51,"value":1609}," — 2-5 bullets max. One line each. If nothing surfaced, one sentence.",{"type":46,"tag":95,"props":1611,"children":1612},{},[1613,1618,1620,1625],{"type":46,"tag":59,"props":1614,"children":1615},{},[1616],{"type":51,"value":1617},"Math",{"type":51,"value":1619}," — ",{"type":46,"tag":59,"props":1621,"children":1622},{},[1623],{"type":51,"value":1624},"ONE table.",{"type":51,"value":1626}," Three rows (floor \u002F base \u002F bull). Columns: PAYG \u002F discounted \u002F savings. One line below stating the lever stack. If the rep wants to show +5% uplift, add it as a single line (\"with +5% mutual-commitment: floor savings → ~$X, base → ~$Y, bull → ~$Z\"). Do NOT add a second table.",{"type":46,"tag":95,"props":1628,"children":1629},{},[1630,1635],{"type":46,"tag":59,"props":1631,"children":1632},{},[1633],{"type":51,"value":1634},"Momentum anchors",{"type":51,"value":1636}," — 2-3 bullets max from Exa. One line each.",{"type":46,"tag":95,"props":1638,"children":1639},{},[1640,1645],{"type":46,"tag":59,"props":1641,"children":1642},{},[1643],{"type":51,"value":1644},"Slack draft",{"type":51,"value":1646}," — plain text, per rules below.",{"type":46,"tag":53,"props":1648,"children":1649},{},[1650,1655],{"type":46,"tag":59,"props":1651,"children":1652},{},[1653],{"type":51,"value":1654},"Hard prohibitions",{"type":51,"value":1656}," (these have actually happened, do not do them):",{"type":46,"tag":91,"props":1658,"children":1659},{},[1660,1665,1670,1675],{"type":46,"tag":95,"props":1661,"children":1662},{},[1663],{"type":51,"value":1664},"No TL;DR, \"key takeaways,\" \"notes on the draft,\" \"recommendations,\" \"decision needed,\" \"next steps,\" or any explanatory section after the Slack draft. If the rep wants more, they'll ask.",{"type":46,"tag":95,"props":1666,"children":1667},{},[1668],{"type":51,"value":1669},"No second math table for an alternate lever stack. One table.",{"type":46,"tag":95,"props":1671,"children":1672},{},[1673],{"type":51,"value":1674},"No commentary paragraphs between sections.",{"type":46,"tag":95,"props":1676,"children":1677},{},[1678],{"type":51,"value":1679},"No restating the eligibility check inside other sections.",{"type":46,"tag":53,"props":1681,"children":1682},{},[1683,1685,1689,1691,1696],{"type":51,"value":1684},"If something genuinely cannot be expressed inside the 6 sections (e.g. \"should we proceed given a churn signal?\"), end the ",{"type":46,"tag":126,"props":1686,"children":1687},{},[1688],{"type":51,"value":1141},{"type":51,"value":1690}," section with a single italicized question like ",{"type":46,"tag":126,"props":1692,"children":1693},{},[1694],{"type":51,"value":1695},"\"proceed, or pause until X resolves?\"",{"type":51,"value":1697}," and stop — don't add a \"Decision needed\" block.",{"type":46,"tag":79,"props":1699,"children":1701},{"id":1700},"slack-draft-rules",[1702],{"type":51,"value":1703},"Slack draft rules",{"type":46,"tag":91,"props":1705,"children":1706},{},[1707,1717,1727,1753,1763,1773,1783],{"type":46,"tag":95,"props":1708,"children":1709},{},[1710,1715],{"type":46,"tag":59,"props":1711,"children":1712},{},[1713],{"type":51,"value":1714},"Plain text only.",{"type":51,"value":1716}," No blockquote wrapping. No bullet\u002Fnumbered list markers. Blank lines between paragraphs.",{"type":46,"tag":95,"props":1718,"children":1719},{},[1720,1725],{"type":46,"tag":59,"props":1721,"children":1722},{},[1723],{"type":51,"value":1724},"Voice-matched to the rep",{"type":51,"value":1726}," (per step 5).",{"type":46,"tag":95,"props":1728,"children":1729},{},[1730,1735],{"type":46,"tag":59,"props":1731,"children":1732},{},[1733],{"type":51,"value":1734},"Three short paragraphs max.",{"type":46,"tag":91,"props":1736,"children":1737},{},[1738,1743,1748],{"type":46,"tag":95,"props":1739,"children":1740},{},[1741],{"type":51,"value":1742},"Para 1: hook (their momentum \u002F what's changed since last touchpoint), not the ask",{"type":46,"tag":95,"props":1744,"children":1745},{},[1746],{"type":51,"value":1747},"Para 2: the floor-case dollar savings + one-line clarification of how the discount stacks if it's a likely point of confusion (e.g. volume vs. credit)",{"type":46,"tag":95,"props":1749,"children":1750},{},[1751],{"type":51,"value":1752},"Para 3: a concrete question that gives an out other than ghosting (e.g. \"is annual budgeting on the table this year, or does month-to-month fit how you handle vendor spend?\")",{"type":46,"tag":95,"props":1754,"children":1755},{},[1756,1761],{"type":46,"tag":59,"props":1757,"children":1758},{},[1759],{"type":51,"value":1760},"Quote URL",{"type":51,"value":1762}," included only if rep provided one. Don't make one up.",{"type":46,"tag":95,"props":1764,"children":1765},{},[1766,1771],{"type":46,"tag":59,"props":1767,"children":1768},{},[1769],{"type":51,"value":1770},"No artificial urgency.",{"type":51,"value":1772}," No \"this expires at end of quarter,\" no \"limited time.\" The mutual-commitment +5% is earned, not deadlined.",{"type":46,"tag":95,"props":1774,"children":1775},{},[1776,1781],{"type":46,"tag":59,"props":1777,"children":1778},{},[1779],{"type":51,"value":1780},"No \"let me know if you have questions\" \u002F \"happy to chat\" closer.",{"type":51,"value":1782}," Replace with a real question.",{"type":46,"tag":95,"props":1784,"children":1785},{},[1786,1791,1793,1799],{"type":46,"tag":59,"props":1787,"children":1788},{},[1789],{"type":51,"value":1790},"Address by name",{"type":51,"value":1792}," (the primary contact). Use Slack handle format ",{"type":46,"tag":906,"props":1794,"children":1796},{"className":1795},[],[1797],{"type":51,"value":1798},"\u003C@USER_ID|Name>",{"type":51,"value":1800}," only if the rep gave a Slack mention; otherwise just the first name.",{"type":46,"tag":79,"props":1802,"children":1804},{"id":1803},"what-not-to-do",[1805],{"type":51,"value":1806},"What NOT to do",{"type":46,"tag":91,"props":1808,"children":1809},{},[1810,1815,1820,1825,1830,1835,1840,1845],{"type":46,"tag":95,"props":1811,"children":1812},{},[1813],{"type":51,"value":1814},"Don't write Obsidian-style profile files, dated investigation files, or any vault artifacts. Personal-workflow concern, not skill output.",{"type":46,"tag":95,"props":1816,"children":1817},{},[1818],{"type":51,"value":1819},"Don't default to any discount %. Rep names the levers; skill applies the math.",{"type":46,"tag":95,"props":1821,"children":1822},{},[1823],{"type":51,"value":1824},"Don't quote the +5% mutual-commitment or +5% early-renewal lever without checking eligibility against step 1 of the eligibility check.",{"type":46,"tag":95,"props":1826,"children":1827},{},[1828],{"type":51,"value":1829},"Don't pad the draft with hedges, gratitude, or \"just checking in.\"",{"type":46,"tag":95,"props":1831,"children":1832},{},[1833],{"type":51,"value":1834},"Don't conflate volume discount (only available on credit purchase) with mutual-commitment \u002F commitment-length \u002F cash-timing add-ons. They stack — name them separately if the rep is mixing them.",{"type":46,"tag":95,"props":1836,"children":1837},{},[1838],{"type":51,"value":1839},"Don't claim a PAYG customer is \"getting a 25% volume discount\" — they aren't. PAYG has tiered unit pricing only.",{"type":46,"tag":95,"props":1841,"children":1842},{},[1843],{"type":51,"value":1844},"Don't manufacture urgency or invoke quarter-end. PostHog doesn't sell that way.",{"type":46,"tag":95,"props":1846,"children":1847},{},[1848],{"type":51,"value":1849},"Don't skip step 3 (confounding variables). A great math case sent into an active escalation is a worse outcome than no nudge at all.",{"type":46,"tag":79,"props":1851,"children":1853},{"id":1852},"when-the-rep-asks-for-extras",[1854],{"type":51,"value":1855},"When the rep asks for extras",{"type":46,"tag":53,"props":1857,"children":1858},{},[1859],{"type":51,"value":1860},"If asked to save to a file, ask for the path. If asked for a longer writeup, expand inline — but the default is the succinct briefing above.",{"type":46,"tag":1862,"props":1863,"children":1864},"style",{},[1865],{"type":51,"value":1866},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1868,"total":2037},[1869,1886,1898,1911,1924,1939,1955,1972,1986,2001,2011,2027],{"slug":1870,"name":1870,"fn":1871,"description":1872,"org":1873,"tags":1874,"stars":1883,"repoUrl":1884,"updatedAt":1885},"analyzing-expensive-users","analyze expensive users in AI observability","Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top spenders, expensive users, per-user LLM cost, user-level cost drivers, or patterns behind high AI observability spend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1875,1876,1879,1882],{"name":27,"slug":28,"type":13},{"name":1877,"slug":1878,"type":13},"Cost Optimization","cost-optimization",{"name":1880,"slug":1881,"type":13},"Observability","observability",{"name":9,"slug":8,"type":13},35568,"https:\u002F\u002Fgithub.com\u002FPostHog\u002Fposthog","2026-07-28T05:34:11.117757",{"slug":1887,"name":1887,"fn":1888,"description":1889,"org":1890,"tags":1891,"stars":1883,"repoUrl":1884,"updatedAt":1897},"auditing-endpoints","audit PostHog project endpoints","Audit every endpoint in a PostHog project for staleness, failed materialisations, and unused materialised versions. Use when the user asks \"what endpoints can I clean up?\", \"are any of my endpoints broken?\", \"which materialised versions are still being called?\", or wants a one-shot cleanup pass over the Endpoints product. Produces a prioritised report grouped by issue type, with recommended actions but does not modify anything without explicit confirmation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1892,1893,1896],{"name":27,"slug":28,"type":13},{"name":1894,"slug":1895,"type":13},"Audit","audit",{"name":9,"slug":8,"type":13},"2026-06-08T08:08:33.693989",{"slug":1899,"name":1899,"fn":1900,"description":1901,"org":1902,"tags":1903,"stars":1883,"repoUrl":1884,"updatedAt":1910},"auditing-warehouse-source-health","audit PostHog data warehouse source health","Audit the health of a PostHog project's data warehouse sources and syncs — find every broken or degraded source connection, sync schema, and webhook channel. Use when the user asks \"why are my imports failing?\", \"what's broken with my sources?\", \"why is my warehouse data stale?\", or wants a one-shot triage of source\u002Fsync health before deciding where to dig in. Produces a prioritized report grouped by severity, with recommended next steps. For materialized-view health use `auditing-warehouse-view-health`; for a single failing sync use `diagnosing-failed-warehouse-syncs`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1904,1905,1908,1909],{"name":1894,"slug":1895,"type":13},{"name":1906,"slug":1907,"type":13},"Data Warehouse","data-warehouse",{"name":1880,"slug":1881,"type":13},{"name":9,"slug":8,"type":13},"2026-06-18T08:22:57.67984",{"slug":1912,"name":1912,"fn":1913,"description":1914,"org":1915,"tags":1916,"stars":1883,"repoUrl":1884,"updatedAt":1923},"auditing-warehouse-view-health","audit PostHog materialized view health","Audit the health of a PostHog project's materialized views (saved queries) — find every failed materialization and flag unused or stale materialized views that cost storage and compute. Use when the user asks \"which of my views are broken?\", \"why is this materialized view failing?\", \"are any of my views wasting compute?\", or wants a one-shot triage of view health. For source\u002Fsync health use `auditing-warehouse-source-health`.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1917,1918,1919,1922],{"name":1894,"slug":1895,"type":13},{"name":1906,"slug":1907,"type":13},{"name":1920,"slug":1921,"type":13},"Performance","performance",{"name":9,"slug":8,"type":13},"2026-06-18T08:25:10.936787",{"slug":1925,"name":1925,"fn":1926,"description":1927,"org":1928,"tags":1929,"stars":1883,"repoUrl":1884,"updatedAt":1938},"authoring-error-tracking-alerts","author PostHog error tracking alerts","Author error tracking alerts that fire when an issue is created, reopened, or starts spiking. Use when the user asks to set up error notifications, route exceptions to Slack\u002Fwebhook\u002FLinear, or evaluate which error events are worth alerting on. Covers trigger-event selection, integration choice, dedup against existing alerts, and shipping with the canonical message body shape.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1930,1933,1936,1937],{"name":1931,"slug":1932,"type":13},"Alerting","alerting",{"name":1934,"slug":1935,"type":13},"Debugging","debugging",{"name":1880,"slug":1881,"type":13},{"name":9,"slug":8,"type":13},"2026-06-18T08:24:40.318583",{"slug":1940,"name":1940,"fn":1941,"description":1942,"org":1943,"tags":1944,"stars":1883,"repoUrl":1884,"updatedAt":1954},"authoring-log-alerts","author log alerts in PostHog","Author useful, low-noise log alerts on services in a PostHog project. Use when the user asks to set up alerts for their logs, suggest alerts they should add, or evaluate whether a service is worth monitoring. Covers service triage, baseline characterisation, threshold drafting, back-testing via simulate, and shipping with a notification destination.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1945,1946,1949,1950,1953],{"name":27,"slug":28,"type":13},{"name":1947,"slug":1948,"type":13},"Monitoring","monitoring",{"name":1880,"slug":1881,"type":13},{"name":1951,"slug":1952,"type":13},"Operations","operations",{"name":9,"slug":8,"type":13},"2026-07-18T05:10:54.430898",{"slug":1956,"name":1956,"fn":1957,"description":1958,"org":1959,"tags":1960,"stars":1883,"repoUrl":1884,"updatedAt":1971},"building-workflows","build and edit PostHog workflows","Build, edit, test, enable, and monitor PostHog workflows over MCP. Author the action\u002Fedge graph so it runs and opens cleanly in the visual editor, then change drafts surgically with patch operations. Use when asked to build, set up, automate, change, fix, or debug a workflow, campaign, broadcast, drip sequence, or event-triggered automation in the workflows product.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1961,1964,1967,1968],{"name":1962,"slug":1963,"type":13},"Automation","automation",{"name":1965,"slug":1966,"type":13},"MCP","mcp",{"name":9,"slug":8,"type":13},{"name":1969,"slug":1970,"type":13},"Workflow Automation","workflow-automation","2026-07-28T05:34:12.167015",{"slug":1973,"name":1973,"fn":1974,"description":1975,"org":1976,"tags":1977,"stars":1883,"repoUrl":1884,"updatedAt":1985},"check-posthog-loading","inspect PostHog SDK loading across URLs","Inspect how the PostHog JavaScript SDK is loaded across a list of URLs. Use to confirm consistent installation across pages, find pages missing the snippet, detect mismatched API keys or hosts between pages, and verify the load method (head snippet vs deferred vs array.js).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1978,1979,1980,1983,1984],{"name":27,"slug":28,"type":13},{"name":1934,"slug":1935,"type":13},{"name":1981,"slug":1982,"type":13},"Frontend","frontend",{"name":1880,"slug":1881,"type":13},{"name":9,"slug":8,"type":13},"2026-05-07T05:56:19.828048",{"slug":1987,"name":1987,"fn":1988,"description":1989,"org":1990,"tags":1991,"stars":1883,"repoUrl":1884,"updatedAt":2000},"consuming-endpoints-from-client-code","integrate PostHog endpoints into client applications","Wire a PostHog endpoint into a client app or SDK. Covers fetching the OpenAPI spec, generating a typed client with openapi-generator or @hey-api\u002Fopenapi-ts, sending the right auth header, shaping the variables payload (HogQL code_name vs insight breakdown property), handling rate-limit and materialised-endpoint error responses. Use when the user says \"how do I call my endpoint\", \"generate a client for this\", or \"what auth header do I use\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1992,1995,1996,1997],{"name":1993,"slug":1994,"type":13},"API Development","api-development",{"name":1981,"slug":1982,"type":13},{"name":9,"slug":8,"type":13},{"name":1998,"slug":1999,"type":13},"SDK","sdk","2026-06-08T08:08:34.929454",{"slug":2002,"name":2002,"fn":2003,"description":2004,"org":2005,"tags":2006,"stars":1883,"repoUrl":1884,"updatedAt":2010},"copying-endpoints-across-projects","copy PostHog endpoints across projects","Copy a PostHog endpoint (a saved HogQL\u002Finsight query exposed as an API route) to another project in the same organization, or duplicate it under a new name in the same project. Use when the user wants to duplicate an endpoint, promote an endpoint from staging to production, replicate an endpoint's query\u002Fvariables\u002Ffreshness config in another workspace, or clone an endpoint to iterate on it. Unlike feature flags and experiments, endpoints have NO native cross-project copy tool — this skill covers the read-then-recreate flow (endpoint-get then endpoint-create), the active-project switching it requires, name-collision checks, and the safe defaults (land unmaterialised in the target, verify with endpoint-run). Does not cover editing endpoint versions (see managing-endpoint-versions) or authoring a brand-new endpoint from scratch (see creating-an-endpoint).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2007,2008,2009],{"name":1993,"slug":1994,"type":13},{"name":1951,"slug":1952,"type":13},{"name":9,"slug":8,"type":13},"2026-07-15T05:29:58.442727",{"slug":2012,"name":2012,"fn":2013,"description":2014,"org":2015,"tags":2016,"stars":1883,"repoUrl":1884,"updatedAt":2026},"creating-ai-subscription","schedule recurring AI-generated PostHog reports","Create a recurring AI-generated PostHog report — schedule a free-text prompt to run on a cron, with the LLM-synthesized markdown delivered to email or Slack on each tick. Use when the user wants a recurring AI summary of X on any cadence (daily, weekly, monthly, yearly) rather than a one-off report. (To attach an AI summary to an existing insight\u002Fdashboard subscription instead of a free-text prompt, see `managing-subscriptions` and its `summary_enabled` option.)\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2017,2018,2021,2022,2023],{"name":1962,"slug":1963,"type":13},{"name":2019,"slug":2020,"type":13},"Email","email",{"name":9,"slug":8,"type":13},{"name":15,"slug":16,"type":13},{"name":2024,"slug":2025,"type":13},"Slack","slack","2026-06-09T07:32:27.935712",{"slug":2028,"name":2028,"fn":2029,"description":2030,"org":2031,"tags":2032,"stars":1883,"repoUrl":1884,"updatedAt":2036},"creating-an-endpoint","create PostHog API endpoints","Create a PostHog endpoint with the right shape on the first try — covers query kind choice, name conventions, what to expose as variables (HogQL code_name vs insight breakdown), data_freshness_seconds, and whether to materialise on day one. Use when the user says \"create an endpoint\", \"expose this query as an API\", \"turn this insight into an endpoint\", or asks for help structuring a new endpoint. Steers away from common mistakes: materialising a query with cohort breakdowns or compare mode, inline-only variables on a materialised endpoint, unbounded date ranges, ambiguous names.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2033,2034,2035],{"name":27,"slug":28,"type":13},{"name":1993,"slug":1994,"type":13},{"name":9,"slug":8,"type":13},"2026-06-08T08:08:29.624498",231,{"items":2039,"total":2140},[2040,2055,2071,2085,2101,2113,2124],{"slug":2041,"name":2041,"fn":2042,"description":2043,"org":2044,"tags":2045,"stars":29,"repoUrl":30,"updatedAt":2054},"account-handover","draft sales account handover notes","Draft structured handover notes for transitioning a PostHog account from one TAM or CSM to another. Use this skill when a TAM needs to hand over an account, prepare a transition briefing, write handover notes, create an account summary for a new owner, or any request involving account transitions between TAMs or CSMs. Triggers on \"hand over this account\", \"transition account to\", \"draft handover notes\", \"account briefing for new TAM\", \"prepare account transition\", or when a TAM names an account and says they're leaving or reassigning it.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2046,2049,2052,2053],{"name":2047,"slug":2048,"type":13},"Communications","communications",{"name":2050,"slug":2051,"type":13},"CRM","crm",{"name":9,"slug":8,"type":13},{"name":24,"slug":25,"type":13},"2026-04-16T05:13:00.172732",{"slug":2056,"name":2056,"fn":2057,"description":2058,"org":2059,"tags":2060,"stars":29,"repoUrl":30,"updatedAt":2070},"auditing-warehouse-data-health","audit PostHog data warehouse health","Audit the health of a PostHog project's data warehouse — find every broken or degraded pipeline item across sources, sync schemas, materialized views, batch exports, and transformations. Use when the user asks \"what's broken in my warehouse?\", \"give me a health check\", \"audit my data pipeline\", \"why are some dashboards stale?\", or wants a one-shot triage summary before deciding where to spend time. Produces a prioritized report of issues grouped by severity and type, with recommended next steps.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2061,2062,2065,2068,2069],{"name":1894,"slug":1895,"type":13},{"name":2063,"slug":2064,"type":13},"Data Engineering","data-engineering",{"name":2066,"slug":2067,"type":13},"Data Quality","data-quality",{"name":1880,"slug":1881,"type":13},{"name":9,"slug":8,"type":13},"2026-06-21T08:19:05.85849",{"slug":2072,"name":2072,"fn":2073,"description":2074,"org":2075,"tags":2076,"stars":29,"repoUrl":30,"updatedAt":2084},"copying-flags-across-projects","copy feature flags across PostHog projects","Copy a feature flag from one PostHog project to one or more target projects in the same organization. Use when the user wants to duplicate a flag, promote a flag from staging to production, sync flags across projects, or replicate a flag configuration in a different workspace. Covers cohort remapping, scheduled-change handling, encrypted payloads, and the safe defaults (disabled in target, no scheduled changes).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2077,2080,2083],{"name":2078,"slug":2079,"type":13},"Deployment","deployment",{"name":2081,"slug":2082,"type":13},"Feature Flags","feature-flags",{"name":9,"slug":8,"type":13},"2026-05-04T05:56:44.484909",{"slug":2086,"name":2086,"fn":2087,"description":2088,"org":2089,"tags":2090,"stars":29,"repoUrl":30,"updatedAt":2100},"diagnosing-experiment-results","diagnose PostHog experiment results and anomalies","Diagnoses bias, anomalies, and strange-looking results on a specific PostHog experiment. Covers empty \u002F 0-exposure experiments, sample ratio mismatch, identity fragmentation, multi-variant exposure, uneven-split exclusion bias, significance traps (peeking, A\u002FA, Bayesian vs Frequentist), PostHog-vs-SQL discrepancies, and surprises after mid-run edits. Symptom-driven dispatch to the right diagnostic.\nTRIGGER when: user asks 'is my experiment biased?' or 'why 0 exposures?', references the bias banner, says a variant looks strange \u002F wrong \u002F off, sees significance flipping, notices PostHog numbers disagreeing with their SQL, sees an A\u002FA test showing significance, or reports surprises after mid-run edits.\nDO NOT TRIGGER when: creating a new experiment (use creating-experiments), only configuring rollout (use configuring-experiment-rollout) or metrics (use configuring-experiment-analytics), or only asking lifecycle questions (use managing-experiment-lifecycle).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2091,2094,2095,2098,2099],{"name":2092,"slug":2093,"type":13},"A\u002FB Testing","a-b-testing",{"name":27,"slug":28,"type":13},{"name":2096,"slug":2097,"type":13},"Data Analysis","data-analysis",{"name":1934,"slug":1935,"type":13},{"name":9,"slug":8,"type":13},"2026-05-22T06:59:58.103867",{"slug":2102,"name":2102,"fn":2103,"description":2104,"org":2105,"tags":2106,"stars":29,"repoUrl":30,"updatedAt":2112},"diagnosing-missing-recordings","diagnose missing PostHog session recordings","Diagnoses why a session recording is missing or was not captured. Use when a user asks why a session has no replay, why recordings aren't appearing, or wants to troubleshoot session replay capture issues for a specific session ID or across their project. Covers SDK diagnostic signals, project settings, sampling, triggers, ad blockers, and quota\u002Fbilling scenarios.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2107,2108,2109,2110,2111],{"name":27,"slug":28,"type":13},{"name":1934,"slug":1935,"type":13},{"name":1981,"slug":1982,"type":13},{"name":1880,"slug":1881,"type":13},{"name":9,"slug":8,"type":13},"2026-04-22T05:06:51.989772",{"slug":2114,"name":2114,"fn":2115,"description":2116,"org":2117,"tags":2118,"stars":29,"repoUrl":30,"updatedAt":2123},"diagnosing-sdk-health","diagnose PostHog SDK health","Diagnoses the health of a project's PostHog SDK integrations — which SDKs are out of date and how to fix them. Use when a user asks about PostHog SDK versions, outdated SDKs, upgrade recommendations, \"SDK health\", \"SDK doctor\" (the former name), or when events or features seem off and it might be due to an old SDK.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2119,2120,2121,2122],{"name":27,"slug":28,"type":13},{"name":1934,"slug":1935,"type":13},{"name":1880,"slug":1881,"type":13},{"name":9,"slug":8,"type":13},"2026-04-27T05:46:14.554016",{"slug":2125,"name":2125,"fn":2126,"description":2127,"org":2128,"tags":2129,"stars":29,"repoUrl":30,"updatedAt":2139},"error-tracking-android","track Android errors with PostHog","PostHog error tracking for Android",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2130,2133,2134,2137,2138],{"name":2131,"slug":2132,"type":13},"Android","android",{"name":1934,"slug":1935,"type":13},{"name":2135,"slug":2136,"type":13},"Mobile","mobile",{"name":1880,"slug":1881,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:46:26.982494",110]