[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-competitive-intelligence":3,"mdc--6qyi25-key":35,"related-repo-microsoft-competitive-intelligence":1622,"related-org-microsoft-competitive-intelligence":1723},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":33,"mdContent":34},"competitive-intelligence","generate competitive intelligence from sales data","Analyzes opportunity data and activity notes to generate competitive intelligence including win\u002Floss rates by competitor, patterns, and rep-ready battlecard talking points. Use when user asks \"how are we doing against [competitor]\", \"competitive analysis\", \"competitor win rate\", \"battlecard for [competitor]\", \"competitive landscape\", \"why are we losing to [competitor]\", or \"competitor intelligence\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,15,16,19,22],{"name":13,"slug":4,"type":14},"Competitive Intelligence","tag",{"name":9,"slug":8,"type":14},{"name":17,"slug":18,"type":14},"CRM","crm",{"name":20,"slug":21,"type":14},"Sales","sales",{"name":23,"slug":24,"type":14},"Dataverse","dataverse",41,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdataverse-business-skills","2026-04-06T18:36:23.280253",null,9,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":28},[],"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fdataverse-business-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fcompetitive-intelligence","---\nname: competitive-intelligence\ndescription: Analyzes opportunity data and activity notes to generate competitive intelligence including win\u002Floss rates by competitor, patterns, and rep-ready battlecard talking points. Use when user asks \"how are we doing against [competitor]\", \"competitive analysis\", \"competitor win rate\", \"battlecard for [competitor]\", \"competitive landscape\", \"why are we losing to [competitor]\", or \"competitor intelligence\".\nmetadata:\n  author: Dataverse\n  version: 1.0.0\n  category: sales-analytics\n---\n\n# Competitive Intelligence\n\nCompetitive insights are often locked in deal notes, lost opportunity records, and anecdotal rep knowledge. This skill mines Dataverse to surface structured competitive intelligence: which competitors appear most frequently, where deals are being lost to them, what deal patterns correlate with wins vs losses, and what talking points reps should use. This is the Dataverse-internal equivalent of competitive research — drawing from closed deal history rather than external sources.\n\n## Instructions\n\n### Step 1: Identify Competitor or Analysis Scope\nAccept input from the user:\n- **Specific competitor name** (to analyze one rival)\n- **All competitors** (for a full competitive landscape view)\n- **Time range** (default: last 12 months)\n- **Segment filter** (by owner, territory, deal size, or industry)\n\nCalculate date range for analysis: `createdon >= '[start_date]'`\n\n#### Step 2: Identify Lost Deals with Competitor Information\n\n**Important:** The `opportunity` entity does not have a direct `competitorid` field — the opportunity-to-competitor relationship is many-to-many (`opportunitycompetitors_association`). When an opportunity is closed, Dynamics 365 creates an `opportunityclose` activity record which **does** have a direct `competitorid` lookup. Use `opportunityclose` for structured competitor data on closed deals.\n\n**Query closed-lost opportunityclose records:**\n```\nSELECT oc.opportunityid, oc.competitorid, oc.description, oc.createdon,\n       oc.actualrevenue\nFROM opportunityclose oc\nWHERE oc.statecode = 1\nAND oc.createdon >= '[start_date]'\nORDER BY oc.createdon DESC\n```\n\nThen join to the `opportunity` table by `opportunityid` to get deal details:\n```\nSELECT opportunityid, name, estimatedvalue, actualclosedate, salesstage,\n       description, ownerid, customerid, closeprobability\nFROM opportunity\nWHERE statecode = 2\nAND actualclosedate >= '[start_date]'\nORDER BY actualclosedate DESC\n```\n\n**Note:** If `opportunityclose` is not populated (competitor not selected at close), fall back to text pattern matching in opportunity description fields as described in Step 3.\n\n**Fetch competitor names if competitor table is used:**\n```\nSELECT competitorid, name, websiteurl, overview, strengths, weaknesses,\n       opportunitiescomments, threatscomments\nFROM competitor\n```\n\n#### Step 3: Mine Opportunity Descriptions for Competitor Mentions\nFor opportunities without structured competitor fields, search text fields for competitor names:\n```\nSELECT opportunityid, name, estimatedvalue, statecode, actualclosedate,\n       salesstage, description, currentsituation, customerneed, customerpainpoints\nFROM opportunity\nWHERE statecode IN (1, 2)\nAND actualclosedate >= '[start_date]'\n```\n\nSearch description, currentsituation, and customerpainpoints for known competitor keywords or names provided by the user. Categorize each mention as:\n- Win with competitor present (statecode = 1)\n- Loss to competitor (statecode = 2)\n\n#### Step 4: Pull Competitor Annotations from Activities\nSearch activity notes for competitor mentions:\n```\nSELECT annotationid, notetext, subject, objectid, createdon\nFROM annotation\nWHERE createdon >= '[start_date]'\n```\n\nSearch notetext for competitor name patterns. Extract:\n- Context of mention (evaluation, objection, price comparison)\n- Outcome (linked opportunity won or lost)\n- Frequency of mention\n\nAlso search phonecall and appointment descriptions:\n```\nSELECT activityid, subject, description, regardingobjectid, statecode\nFROM phonecall\nWHERE createdon >= '[start_date]'\n```\n\n#### Step 5: Calculate Win\u002FLoss Rates by Competitor\n\nFrom Step 2, you now have two lists of opportunityids: `[lost_opportunityids]` (from `opportunityclose` where `competitorid` matches and deal was lost) and `[won_opportunityids]` (from a separate `opportunityclose` query for won deals). Run an additional query to capture won opportunityclose records for this competitor:\n\n```\nSELECT oc.opportunityid, oc.createdon, oc.actualrevenue\nFROM opportunityclose oc\nWHERE oc.competitorid = '[competitorid]'\nAND oc.createdon >= '[start_date]'\n```\n\nCross-reference these opportunityids against `opportunity.statecode` to split into won vs lost buckets. Then aggregate:\n\n**Won opportunities where competitor was present:**\n```\nSELECT COUNT(opportunityid) as won_count, SUM(estimatedvalue) as won_value\nFROM opportunity\nWHERE statecode = 1\nAND actualclosedate >= '[start_date]'\n```\nFilter results programmatically to only those opportunityids found in the won opportunityclose results above.\n\n**Lost opportunities to competitor:**\n```\nSELECT COUNT(opportunityid) as lost_count, SUM(estimatedvalue) as lost_value\nFROM opportunity\nWHERE statecode = 2\nAND actualclosedate >= '[start_date]'\n```\nFilter results programmatically to only those opportunityids in `[lost_opportunityids]` from Step 2.\n\nCalculate:\n- **Win rate** = won_count \u002F (won_count + lost_count) × 100\n- **Average deal size (wins)** vs **average deal size (losses)**\n- **Average sales cycle (wins)** vs **average sales cycle (losses)**\n\n#### Step 6: Identify Deal Patterns\n\nFor won deals with competitor present vs lost deals to competitor, compare:\n\n**Deal size distribution:**\n```\nSELECT COUNT(opportunityid) as count, SUM(estimatedvalue) as total_value\nFROM opportunity\nWHERE statecode = 1\nAND estimatedvalue \u003C 25000\n```\nFilter results programmatically to only those opportunityids in `[won_opportunityids]`. Repeat for medium ($25K-$100K) and enterprise (>$100K) segments; run equivalent queries for `statecode = 2` filtered to `[lost_opportunityids]`.\n\n**Industry distribution:**\n```\nSELECT account.industrycode, COUNT(opportunity.opportunityid) as count\nFROM opportunity\nJOIN account ON opportunity.customerid = account.accountid\nWHERE opportunity.statecode = 2\nAND opportunity.actualclosedate >= '[start_date]'\nGROUP BY account.industrycode\n```\nFilter results programmatically to only those opportunityids in `[lost_opportunityids]` from Step 2.\n\n**Stage at loss:**\n```\nSELECT salesstage, COUNT(opportunityid) as lost_count, SUM(estimatedvalue) as lost_value\nFROM opportunity\nWHERE statecode = 2\nAND actualclosedate >= '[start_date]'\nGROUP BY salesstage\n```\nFilter results programmatically to only those opportunityids in `[lost_opportunityids]` from Step 2.\n\n#### Step 7: Identify Common Objections and Pain Points\nFrom text mining in Step 4, categorize recurring themes from notes and activity descriptions when competitor is mentioned:\n- **Price objections:** Look for \"cheaper\", \"lower cost\", \"price\", \"pricing\"\n- **Feature gaps:** Look for \"missing\", \"doesn't support\", \"can't do\", \"limitation\"\n- **Existing relationship:** Look for \"incumbent\", \"already using\", \"switching cost\", \"prefer\"\n- **Brand recognition:** Look for \"heard of\", \"well-known\", \"trusted\", \"market leader\"\n- **Implementation concerns:** Look for \"complex\", \"timeline\", \"integration\", \"support\"\n\nCount frequency of each theme across deal notes.\n\n#### Step 8: Extract Win Patterns\nFor won deals where this competitor was present, identify common factors:\n\n**Qualification strength in wins:**\n```\nSELECT budgetstatus, decisionmaker, need, purchasetimeframe, purchaseprocess,\n       COUNT(opportunityid) as count\nFROM opportunity\nWHERE statecode = 1\nAND actualclosedate >= '[start_date]'\nGROUP BY budgetstatus, decisionmaker, need, purchasetimeframe, purchaseprocess\n```\nFilter results programmatically to only those opportunityids in `[won_opportunityids]` from Step 5.\n\nNote which BANT patterns appear most often in wins — these inform the competitive playbook.\n\n**Activity volume in wins vs losses:**\nCount total activities per opportunity for wins and losses separately using activitypointer to identify engagement differences.\n\n#### Step 9: Generate Competitive Intelligence Report\n\n```\nCOMPETITIVE INTELLIGENCE REPORT\nCompetitor: [Competitor Name]\nPeriod: [Start Date] – [End Date]\nGenerated: [Today's Date]\n═══════════════════════════════════════════════════════════\n\nEXECUTIVE SUMMARY\n───────────────────────────────────────────────────────────\nDeals Analyzed: [n won] wins \u002F [n lost] losses\nWin Rate (competitive): [n]%\nRevenue Won (competitive): $[value]\nRevenue Lost to Competitor: $[value]\n\nCOMPETITIVE PERFORMANCE BY DEAL SIZE\n───────────────────────────────────────────────────────────\nSmall (\u003C$25K):     Win rate [n]%  | [n] won, [n] lost\nMedium ($25K-$100K): Win rate [n]% | [n] won, [n] lost\nEnterprise (>$100K): Win rate [n]% | [n] won, [n] lost\n\nWHERE WE LOSE\n───────────────────────────────────────────────────────────\nMost losses occur at: [Stage] stage ([n]% of losses)\nTop industries lost: [Industry 1] ([n] deals), [Industry 2] ([n] deals)\nAverage deal size lost: $[value] vs average deal size won: $[value]\n\nCOMMON OBJECTIONS (from deal notes)\n───────────────────────────────────────────────────────────\n1. Price\u002FCost concerns — mentioned in [n]% of lost deals\n2. [Feature gap] — mentioned in [n]% of lost deals\n3. [Incumbent relationship] — mentioned in [n]% of lost deals\n\nWIN PATTERNS (what works in competitive deals)\n───────────────────────────────────────────────────────────\n✓ Economic buyer engaged: [n]% of wins vs [n]% of losses\n✓ Budget confirmed before Propose: [n]% of wins vs [n]% of losses\n✓ Higher activity volume: [n] avg activities (wins) vs [n] (losses)\n✓ Shorter sales cycle: [n] avg days (wins) vs [n] avg days (losses)\n\nBATTLECARD: [COMPETITOR NAME]\n───────────────────────────────────────────────────────────\n\nTheir strengths (from deal notes):\n• [Strength extracted from notes]\n• [Strength extracted from notes]\n\nCommon objections and responses:\n• \"They're cheaper\" → [Response based on win patterns]\n• \"[Feature gap]\" → [Response\u002Fworkaround]\n• \"We already know them\" → [Response focused on differentiation]\n\nWhere we win:\n• [Scenario 1 — e.g., enterprise deals with complex integration needs]\n• [Scenario 2 — e.g., accounts with active support issues with competitor]\n• [Scenario 3 — e.g., deals where economic buyer is engaged early]\n\nWhere to be careful:\n• [Risk area 1 — e.g., SMB price-sensitive deals]\n• [Risk area 2 — e.g., industries where competitor has strong presence]\n\nRECOMMENDED ACTIONS\n───────────────────────────────────────────────────────────\n1. [Specific action based on loss patterns]\n2. [Coaching recommendation for reps]\n3. [Process change to improve win rate]\n═══════════════════════════════════════════════════════════\n```\n\n### Output Format\nDeliver a two-part output:\n1. **Intelligence report** — quantitative win\u002Floss analysis with patterns\n2. **Battlecard** — rep-ready talking points, objection responses, and when-to-use guidance\n\n### Example Interaction\n\n**User Input:**\n\"Show me competitive intelligence on Acme Corp for the last 6 months.\"\n\n**Skill Output:**\n```\nCOMPETITIVE INTELLIGENCE REPORT\nCompetitor: Acme Corp | Period: Sep 2025 – Mar 2026\n═══════════════════════════════════════════════════════════\n\nEXECUTIVE SUMMARY\nWin Rate vs Acme Corp: 38% (vs 61% overall win rate)\nRevenue Won: $420,000 | Revenue Lost to Acme: $680,000\n\nCOMPETITIVE PERFORMANCE BY DEAL SIZE\nSmall (\u003C$25K): 55% win rate — strongest segment\nMedium ($25K-$100K): 32% win rate — significant gap\nEnterprise (>$100K): 18% win rate — critical weakness\n\nWHERE WE LOSE\nMost losses at: Propose stage (67% of losses)\nTop industries: Financial Services (5 deals), Healthcare (3 deals)\n\nCOMMON OBJECTIONS\n1. Price — mentioned in 71% of lost deals\n2. Existing integration with their platform — 43% of lost deals\n3. Acme's brand recognition in FSI — 29% of lost deals\n\nWIN PATTERNS\n✓ Economic buyer engaged early: 78% of wins vs 22% of losses\n✓ POC completed before proposal: 64% of wins vs 11% of losses\n\nBATTLECARD: ACME CORP\n\"They're cheaper\" → \"Our TCO over 3 years is [X]% lower due to...\"\n\"We use their platform\" → \"Our API integrates in \u003C2 hours — here's a reference customer...\"\n```\n\n### Dataverse Tables Used\n| Table | Purpose |\n|-------|---------|\n| `opportunity` | Win\u002Floss records and deal details |\n| `opportunityclose` | Structured competitor data on closed deals (has direct `competitorid` lookup) |\n| `competitor` | Structured competitor profiles |\n| `account` | Industry and firmographic context |\n| `activitypointer` | Activity volume comparison |\n| `annotation` | Mining notes for competitive mentions |\n| `phonecall` | Call descriptions for competitor mentions |\n\n### Key Fields Reference\n**opportunity:**\n- `statecode` (STATE) - Open(0), Won(1), Lost(2)\n- `description` (MULTILINE TEXT) - General opportunity notes\n- `currentsituation` (MULTILINE TEXT) - Customer's current environment\n- `actualclosedate` (DATE) - When deal was closed\n- `salesstage` (CHOICE) - Stage at close\n- Note: `opportunity` has no direct `competitorid` field — the relationship is many-to-many via `opportunitycompetitors_association`. Use `opportunityclose.competitorid` for closed deal competitor data.\n\n**opportunityclose:**\n- `opportunityid` (LOOKUP) - Links to the closed opportunity\n- `competitorid` (LOOKUP) - Competitor selected at close (direct lookup, use this for competitive analysis)\n- `description` (MULTILINE TEXT) - Close reason \u002F notes entered at time of close\n- `actualrevenue` (MONEY) - Final deal value at close\n- `statecode` (STATE) - Activity completion state\n- `createdon` (DATETIME) - When the close activity was created\n\n**competitor:**\n- `name` (NVARCHAR) - Competitor name\n- `strengths` (MULTILINE TEXT) - Known strengths\n- `weaknesses` (MULTILINE TEXT) - Known weaknesses\n- `overview` (MULTILINE TEXT) - General description\n- `opportunitiescomments` (MULTILINE TEXT) - Where we win\n- `threatscomments` (MULTILINE TEXT) - Where we lose\n\n### Configurable Parameters\n- Analysis period (default: last 12 months)\n- Minimum deal count threshold for statistical confidence (default: 5 deals)\n- Competitor name keywords for text mining (configurable list)\n- Deal size segmentation thresholds\n\n## Examples\n\n### Example 1: Specific Competitor Analysis\n\n**User says:** \"How are we doing against ACME Corp?\"\n\n**Actions:**\n1. Search opportunityclose records for competitorid matching ACME\n2. Query won and lost deals with ACME as competitor\n3. Calculate win\u002Floss rates and deal value analysis\n4. Mine activity notes for competitive mentions\n5. Generate battlecard talking points\n\n**Result:**\n```\nCOMPETITIVE ANALYSIS: ACME CORP (Last 12 Months)\n\nHEAD-TO-HEAD RECORD:\nWins: 8 deals ($420K) | Losses: 12 deals ($680K)\nWin Rate: 40% (vs 55% overall win rate)\n\nWHERE WE LOSE:\n- Price objection in 67% of losses\n- Mid-market segment: 25% win rate\n\nWHERE WE WIN:\n- Enterprise deals: 62% win rate\n- When technical eval involved: 71% win rate\n\nBATTLECARD:\n\"They're cheaper\" → \"Our TCO over 3 years is 23% lower...\"\n\"We use their platform\" → \"Our API integrates in \u003C2 hours...\"\n```\n\n### Example 2: Full Competitive Landscape\n\n**User says:** \"Show me the competitive landscape for Q4\"\n\n**Actions:**\n1. Query all opportunityclose records with competitor data for Q4\n2. Group by competitor name\n3. Calculate win rates and deal values per competitor\n4. Rank by frequency and threat level\n\n**Result:**\n```\nQ4 COMPETITIVE LANDSCAPE\n\n| Competitor | Encounters | Win Rate | Avg Deal |\n|------------|------------|----------|----------|\n| ACME Corp  | 20 deals   | 40%      | $55K     |\n| Globex     | 14 deals   | 57%      | $72K     |\n| Initech    | 8 deals    | 75%      | $45K     |\n\nTOP THREAT: ACME Corp (high volume, low win rate)\nSTRONG AGAINST: Initech (technical differentiation)\n```\n\n### Example 3: Loss Pattern Analysis\n\n**User says:** \"Why are we losing to Globex?\"\n\n**Actions:**\n1. Query lost opportunities with Globex as competitor\n2. Analyze opportunity descriptions and close notes\n3. Extract common patterns and objections\n4. Generate actionable insights\n\n**Result:**\n```\nGLOBEX LOSS ANALYSIS (8 losses, $340K)\n\nCOMMON PATTERNS:\n- 75% lost at Proposal stage (late loss)\n- Avg sales cycle: 45 days (vs our 38 day avg)\n- 5\u002F8 losses in Financial Services vertical\n\nTOP OBJECTIONS (from notes):\n1. \"Existing Globex relationship\" (3 deals)\n2. \"Integration concerns\" (3 deals)\n3. \"Reference requests unfulfilled\" (2 deals)\n\nRECOMMENDATION:\n- Engage technical resources earlier in Financial Services\n- Build reference library for banking customers\n```\n\n## Troubleshooting\n\n### Error: No competitor data found\n**Cause:** Competitors not being recorded at deal close, or competitor table empty\n**Solution:**\n- Check if opportunityclose records have competitorid populated\n- Fall back to text mining in opportunity descriptions\n- Recommend enabling competitor tracking in close workflow\n\n### Error: Insufficient data for analysis\n**Cause:** Too few deals with specific competitor to draw conclusions\n**Solution:**\n- Expand time range beyond default 12 months\n- Combine with related competitors for aggregate view\n- Note statistical limitations in output\n\n### Error: Win rate appears inaccurate\n**Cause:** opportunityclose only captures explicit competitor selection; many deals may not have competitor recorded\n**Solution:**\n- Cross-reference with text mining results\n- Note coverage percentage in output\n- Recommend better competitor capture at deal close",{"data":36,"body":40},{"name":4,"description":6,"metadata":37},{"author":23,"version":38,"category":39},"1.0.0","sales-analytics",{"type":41,"children":42},"root",[43,50,56,63,70,75,121,133,140,203,211,223,243,252,269,277,286,292,297,306,311,324,330,335,344,349,367,372,381,387,429,438,451,459,468,473,481,490,502,507,549,555,560,568,577,603,611,620,630,638,647,657,663,668,721,726,732,737,745,754,765,770,780,786,795,801,806,830,836,846,854,863,869,1021,1027,1035,1127,1135,1200,1208,1277,1283,1306,1312,1318,1328,1336,1364,1372,1381,1387,1396,1403,1426,1433,1442,1448,1457,1464,1487,1494,1503,1509,1515,1530,1548,1554,1567,1585,1591,1604],{"type":44,"tag":45,"props":46,"children":47},"element","h1",{"id":4},[48],{"type":49,"value":13},"text",{"type":44,"tag":51,"props":52,"children":53},"p",{},[54],{"type":49,"value":55},"Competitive insights are often locked in deal notes, lost opportunity records, and anecdotal rep knowledge. This skill mines Dataverse to surface structured competitive intelligence: which competitors appear most frequently, where deals are being lost to them, what deal patterns correlate with wins vs losses, and what talking points reps should use. This is the Dataverse-internal equivalent of competitive research — drawing from closed deal history rather than external sources.",{"type":44,"tag":57,"props":58,"children":60},"h2",{"id":59},"instructions",[61],{"type":49,"value":62},"Instructions",{"type":44,"tag":64,"props":65,"children":67},"h3",{"id":66},"step-1-identify-competitor-or-analysis-scope",[68],{"type":49,"value":69},"Step 1: Identify Competitor or Analysis Scope",{"type":44,"tag":51,"props":71,"children":72},{},[73],{"type":49,"value":74},"Accept input from the user:",{"type":44,"tag":76,"props":77,"children":78},"ul",{},[79,91,101,111],{"type":44,"tag":80,"props":81,"children":82},"li",{},[83,89],{"type":44,"tag":84,"props":85,"children":86},"strong",{},[87],{"type":49,"value":88},"Specific competitor name",{"type":49,"value":90}," (to analyze one rival)",{"type":44,"tag":80,"props":92,"children":93},{},[94,99],{"type":44,"tag":84,"props":95,"children":96},{},[97],{"type":49,"value":98},"All competitors",{"type":49,"value":100}," (for a full competitive landscape view)",{"type":44,"tag":80,"props":102,"children":103},{},[104,109],{"type":44,"tag":84,"props":105,"children":106},{},[107],{"type":49,"value":108},"Time range",{"type":49,"value":110}," (default: last 12 months)",{"type":44,"tag":80,"props":112,"children":113},{},[114,119],{"type":44,"tag":84,"props":115,"children":116},{},[117],{"type":49,"value":118},"Segment filter",{"type":49,"value":120}," (by owner, territory, deal size, or industry)",{"type":44,"tag":51,"props":122,"children":123},{},[124,126],{"type":49,"value":125},"Calculate date range for analysis: ",{"type":44,"tag":127,"props":128,"children":130},"code",{"className":129},[],[131],{"type":49,"value":132},"createdon >= '[start_date]'",{"type":44,"tag":134,"props":135,"children":137},"h4",{"id":136},"step-2-identify-lost-deals-with-competitor-information",[138],{"type":49,"value":139},"Step 2: Identify Lost Deals with Competitor Information",{"type":44,"tag":51,"props":141,"children":142},{},[143,148,150,156,158,164,166,172,174,180,182,187,189,194,196,201],{"type":44,"tag":84,"props":144,"children":145},{},[146],{"type":49,"value":147},"Important:",{"type":49,"value":149}," The ",{"type":44,"tag":127,"props":151,"children":153},{"className":152},[],[154],{"type":49,"value":155},"opportunity",{"type":49,"value":157}," entity does not have a direct ",{"type":44,"tag":127,"props":159,"children":161},{"className":160},[],[162],{"type":49,"value":163},"competitorid",{"type":49,"value":165}," field — the opportunity-to-competitor relationship is many-to-many (",{"type":44,"tag":127,"props":167,"children":169},{"className":168},[],[170],{"type":49,"value":171},"opportunitycompetitors_association",{"type":49,"value":173},"). When an opportunity is closed, Dynamics 365 creates an ",{"type":44,"tag":127,"props":175,"children":177},{"className":176},[],[178],{"type":49,"value":179},"opportunityclose",{"type":49,"value":181}," activity record which ",{"type":44,"tag":84,"props":183,"children":184},{},[185],{"type":49,"value":186},"does",{"type":49,"value":188}," have a direct ",{"type":44,"tag":127,"props":190,"children":192},{"className":191},[],[193],{"type":49,"value":163},{"type":49,"value":195}," lookup. Use ",{"type":44,"tag":127,"props":197,"children":199},{"className":198},[],[200],{"type":49,"value":179},{"type":49,"value":202}," for structured competitor data on closed deals.",{"type":44,"tag":51,"props":204,"children":205},{},[206],{"type":44,"tag":84,"props":207,"children":208},{},[209],{"type":49,"value":210},"Query closed-lost opportunityclose records:",{"type":44,"tag":212,"props":213,"children":217},"pre",{"className":214,"code":216,"language":49},[215],"language-text","SELECT oc.opportunityid, oc.competitorid, oc.description, oc.createdon,\n       oc.actualrevenue\nFROM opportunityclose oc\nWHERE oc.statecode = 1\nAND oc.createdon >= '[start_date]'\nORDER BY oc.createdon DESC\n",[218],{"type":44,"tag":127,"props":219,"children":221},{"__ignoreMap":220},"",[222],{"type":49,"value":216},{"type":44,"tag":51,"props":224,"children":225},{},[226,228,233,235,241],{"type":49,"value":227},"Then join to the ",{"type":44,"tag":127,"props":229,"children":231},{"className":230},[],[232],{"type":49,"value":155},{"type":49,"value":234}," table by ",{"type":44,"tag":127,"props":236,"children":238},{"className":237},[],[239],{"type":49,"value":240},"opportunityid",{"type":49,"value":242}," to get deal details:",{"type":44,"tag":212,"props":244,"children":247},{"className":245,"code":246,"language":49},[215],"SELECT opportunityid, name, estimatedvalue, actualclosedate, salesstage,\n       description, ownerid, customerid, closeprobability\nFROM opportunity\nWHERE statecode = 2\nAND actualclosedate >= '[start_date]'\nORDER BY actualclosedate DESC\n",[248],{"type":44,"tag":127,"props":249,"children":250},{"__ignoreMap":220},[251],{"type":49,"value":246},{"type":44,"tag":51,"props":253,"children":254},{},[255,260,262,267],{"type":44,"tag":84,"props":256,"children":257},{},[258],{"type":49,"value":259},"Note:",{"type":49,"value":261}," If ",{"type":44,"tag":127,"props":263,"children":265},{"className":264},[],[266],{"type":49,"value":179},{"type":49,"value":268}," is not populated (competitor not selected at close), fall back to text pattern matching in opportunity description fields as described in Step 3.",{"type":44,"tag":51,"props":270,"children":271},{},[272],{"type":44,"tag":84,"props":273,"children":274},{},[275],{"type":49,"value":276},"Fetch competitor names if competitor table is used:",{"type":44,"tag":212,"props":278,"children":281},{"className":279,"code":280,"language":49},[215],"SELECT competitorid, name, websiteurl, overview, strengths, weaknesses,\n       opportunitiescomments, threatscomments\nFROM competitor\n",[282],{"type":44,"tag":127,"props":283,"children":284},{"__ignoreMap":220},[285],{"type":49,"value":280},{"type":44,"tag":134,"props":287,"children":289},{"id":288},"step-3-mine-opportunity-descriptions-for-competitor-mentions",[290],{"type":49,"value":291},"Step 3: Mine Opportunity Descriptions for Competitor Mentions",{"type":44,"tag":51,"props":293,"children":294},{},[295],{"type":49,"value":296},"For opportunities without structured competitor fields, search text fields for competitor names:",{"type":44,"tag":212,"props":298,"children":301},{"className":299,"code":300,"language":49},[215],"SELECT opportunityid, name, estimatedvalue, statecode, actualclosedate,\n       salesstage, description, currentsituation, customerneed, customerpainpoints\nFROM opportunity\nWHERE statecode IN (1, 2)\nAND actualclosedate >= '[start_date]'\n",[302],{"type":44,"tag":127,"props":303,"children":304},{"__ignoreMap":220},[305],{"type":49,"value":300},{"type":44,"tag":51,"props":307,"children":308},{},[309],{"type":49,"value":310},"Search description, currentsituation, and customerpainpoints for known competitor keywords or names provided by the user. Categorize each mention as:",{"type":44,"tag":76,"props":312,"children":313},{},[314,319],{"type":44,"tag":80,"props":315,"children":316},{},[317],{"type":49,"value":318},"Win with competitor present (statecode = 1)",{"type":44,"tag":80,"props":320,"children":321},{},[322],{"type":49,"value":323},"Loss to competitor (statecode = 2)",{"type":44,"tag":134,"props":325,"children":327},{"id":326},"step-4-pull-competitor-annotations-from-activities",[328],{"type":49,"value":329},"Step 4: Pull Competitor Annotations from Activities",{"type":44,"tag":51,"props":331,"children":332},{},[333],{"type":49,"value":334},"Search activity notes for competitor mentions:",{"type":44,"tag":212,"props":336,"children":339},{"className":337,"code":338,"language":49},[215],"SELECT annotationid, notetext, subject, objectid, createdon\nFROM annotation\nWHERE createdon >= '[start_date]'\n",[340],{"type":44,"tag":127,"props":341,"children":342},{"__ignoreMap":220},[343],{"type":49,"value":338},{"type":44,"tag":51,"props":345,"children":346},{},[347],{"type":49,"value":348},"Search notetext for competitor name patterns. Extract:",{"type":44,"tag":76,"props":350,"children":351},{},[352,357,362],{"type":44,"tag":80,"props":353,"children":354},{},[355],{"type":49,"value":356},"Context of mention (evaluation, objection, price comparison)",{"type":44,"tag":80,"props":358,"children":359},{},[360],{"type":49,"value":361},"Outcome (linked opportunity won or lost)",{"type":44,"tag":80,"props":363,"children":364},{},[365],{"type":49,"value":366},"Frequency of mention",{"type":44,"tag":51,"props":368,"children":369},{},[370],{"type":49,"value":371},"Also search phonecall and appointment descriptions:",{"type":44,"tag":212,"props":373,"children":376},{"className":374,"code":375,"language":49},[215],"SELECT activityid, subject, description, regardingobjectid, statecode\nFROM phonecall\nWHERE createdon >= '[start_date]'\n",[377],{"type":44,"tag":127,"props":378,"children":379},{"__ignoreMap":220},[380],{"type":49,"value":375},{"type":44,"tag":134,"props":382,"children":384},{"id":383},"step-5-calculate-winloss-rates-by-competitor",[385],{"type":49,"value":386},"Step 5: Calculate Win\u002FLoss Rates by Competitor",{"type":44,"tag":51,"props":388,"children":389},{},[390,392,398,400,405,407,412,414,420,422,427],{"type":49,"value":391},"From Step 2, you now have two lists of opportunityids: ",{"type":44,"tag":127,"props":393,"children":395},{"className":394},[],[396],{"type":49,"value":397},"[lost_opportunityids]",{"type":49,"value":399}," (from ",{"type":44,"tag":127,"props":401,"children":403},{"className":402},[],[404],{"type":49,"value":179},{"type":49,"value":406}," where ",{"type":44,"tag":127,"props":408,"children":410},{"className":409},[],[411],{"type":49,"value":163},{"type":49,"value":413}," matches and deal was lost) and ",{"type":44,"tag":127,"props":415,"children":417},{"className":416},[],[418],{"type":49,"value":419},"[won_opportunityids]",{"type":49,"value":421}," (from a separate ",{"type":44,"tag":127,"props":423,"children":425},{"className":424},[],[426],{"type":49,"value":179},{"type":49,"value":428}," query for won deals). Run an additional query to capture won opportunityclose records for this competitor:",{"type":44,"tag":212,"props":430,"children":433},{"className":431,"code":432,"language":49},[215],"SELECT oc.opportunityid, oc.createdon, oc.actualrevenue\nFROM opportunityclose oc\nWHERE oc.competitorid = '[competitorid]'\nAND oc.createdon >= '[start_date]'\n",[434],{"type":44,"tag":127,"props":435,"children":436},{"__ignoreMap":220},[437],{"type":49,"value":432},{"type":44,"tag":51,"props":439,"children":440},{},[441,443,449],{"type":49,"value":442},"Cross-reference these opportunityids against ",{"type":44,"tag":127,"props":444,"children":446},{"className":445},[],[447],{"type":49,"value":448},"opportunity.statecode",{"type":49,"value":450}," to split into won vs lost buckets. Then aggregate:",{"type":44,"tag":51,"props":452,"children":453},{},[454],{"type":44,"tag":84,"props":455,"children":456},{},[457],{"type":49,"value":458},"Won opportunities where competitor was present:",{"type":44,"tag":212,"props":460,"children":463},{"className":461,"code":462,"language":49},[215],"SELECT COUNT(opportunityid) as won_count, SUM(estimatedvalue) as won_value\nFROM opportunity\nWHERE statecode = 1\nAND actualclosedate >= '[start_date]'\n",[464],{"type":44,"tag":127,"props":465,"children":466},{"__ignoreMap":220},[467],{"type":49,"value":462},{"type":44,"tag":51,"props":469,"children":470},{},[471],{"type":49,"value":472},"Filter results programmatically to only those opportunityids found in the won opportunityclose results above.",{"type":44,"tag":51,"props":474,"children":475},{},[476],{"type":44,"tag":84,"props":477,"children":478},{},[479],{"type":49,"value":480},"Lost opportunities to competitor:",{"type":44,"tag":212,"props":482,"children":485},{"className":483,"code":484,"language":49},[215],"SELECT COUNT(opportunityid) as lost_count, SUM(estimatedvalue) as lost_value\nFROM opportunity\nWHERE statecode = 2\nAND actualclosedate >= '[start_date]'\n",[486],{"type":44,"tag":127,"props":487,"children":488},{"__ignoreMap":220},[489],{"type":49,"value":484},{"type":44,"tag":51,"props":491,"children":492},{},[493,495,500],{"type":49,"value":494},"Filter results programmatically to only those opportunityids in ",{"type":44,"tag":127,"props":496,"children":498},{"className":497},[],[499],{"type":49,"value":397},{"type":49,"value":501}," from Step 2.",{"type":44,"tag":51,"props":503,"children":504},{},[505],{"type":49,"value":506},"Calculate:",{"type":44,"tag":76,"props":508,"children":509},{},[510,520,535],{"type":44,"tag":80,"props":511,"children":512},{},[513,518],{"type":44,"tag":84,"props":514,"children":515},{},[516],{"type":49,"value":517},"Win rate",{"type":49,"value":519}," = won_count \u002F (won_count + lost_count) × 100",{"type":44,"tag":80,"props":521,"children":522},{},[523,528,530],{"type":44,"tag":84,"props":524,"children":525},{},[526],{"type":49,"value":527},"Average deal size (wins)",{"type":49,"value":529}," vs ",{"type":44,"tag":84,"props":531,"children":532},{},[533],{"type":49,"value":534},"average deal size (losses)",{"type":44,"tag":80,"props":536,"children":537},{},[538,543,544],{"type":44,"tag":84,"props":539,"children":540},{},[541],{"type":49,"value":542},"Average sales cycle (wins)",{"type":49,"value":529},{"type":44,"tag":84,"props":545,"children":546},{},[547],{"type":49,"value":548},"average sales cycle (losses)",{"type":44,"tag":134,"props":550,"children":552},{"id":551},"step-6-identify-deal-patterns",[553],{"type":49,"value":554},"Step 6: Identify Deal Patterns",{"type":44,"tag":51,"props":556,"children":557},{},[558],{"type":49,"value":559},"For won deals with competitor present vs lost deals to competitor, compare:",{"type":44,"tag":51,"props":561,"children":562},{},[563],{"type":44,"tag":84,"props":564,"children":565},{},[566],{"type":49,"value":567},"Deal size distribution:",{"type":44,"tag":212,"props":569,"children":572},{"className":570,"code":571,"language":49},[215],"SELECT COUNT(opportunityid) as count, SUM(estimatedvalue) as total_value\nFROM opportunity\nWHERE statecode = 1\nAND estimatedvalue \u003C 25000\n",[573],{"type":44,"tag":127,"props":574,"children":575},{"__ignoreMap":220},[576],{"type":49,"value":571},{"type":44,"tag":51,"props":578,"children":579},{},[580,581,586,588,594,596,601],{"type":49,"value":494},{"type":44,"tag":127,"props":582,"children":584},{"className":583},[],[585],{"type":49,"value":419},{"type":49,"value":587},". Repeat for medium ($25K-$100K) and enterprise (>$100K) segments; run equivalent queries for ",{"type":44,"tag":127,"props":589,"children":591},{"className":590},[],[592],{"type":49,"value":593},"statecode = 2",{"type":49,"value":595}," filtered to ",{"type":44,"tag":127,"props":597,"children":599},{"className":598},[],[600],{"type":49,"value":397},{"type":49,"value":602},".",{"type":44,"tag":51,"props":604,"children":605},{},[606],{"type":44,"tag":84,"props":607,"children":608},{},[609],{"type":49,"value":610},"Industry distribution:",{"type":44,"tag":212,"props":612,"children":615},{"className":613,"code":614,"language":49},[215],"SELECT account.industrycode, COUNT(opportunity.opportunityid) as count\nFROM opportunity\nJOIN account ON opportunity.customerid = account.accountid\nWHERE opportunity.statecode = 2\nAND opportunity.actualclosedate >= '[start_date]'\nGROUP BY account.industrycode\n",[616],{"type":44,"tag":127,"props":617,"children":618},{"__ignoreMap":220},[619],{"type":49,"value":614},{"type":44,"tag":51,"props":621,"children":622},{},[623,624,629],{"type":49,"value":494},{"type":44,"tag":127,"props":625,"children":627},{"className":626},[],[628],{"type":49,"value":397},{"type":49,"value":501},{"type":44,"tag":51,"props":631,"children":632},{},[633],{"type":44,"tag":84,"props":634,"children":635},{},[636],{"type":49,"value":637},"Stage at loss:",{"type":44,"tag":212,"props":639,"children":642},{"className":640,"code":641,"language":49},[215],"SELECT salesstage, COUNT(opportunityid) as lost_count, SUM(estimatedvalue) as lost_value\nFROM opportunity\nWHERE statecode = 2\nAND actualclosedate >= '[start_date]'\nGROUP BY salesstage\n",[643],{"type":44,"tag":127,"props":644,"children":645},{"__ignoreMap":220},[646],{"type":49,"value":641},{"type":44,"tag":51,"props":648,"children":649},{},[650,651,656],{"type":49,"value":494},{"type":44,"tag":127,"props":652,"children":654},{"className":653},[],[655],{"type":49,"value":397},{"type":49,"value":501},{"type":44,"tag":134,"props":658,"children":660},{"id":659},"step-7-identify-common-objections-and-pain-points",[661],{"type":49,"value":662},"Step 7: Identify Common Objections and Pain Points",{"type":44,"tag":51,"props":664,"children":665},{},[666],{"type":49,"value":667},"From text mining in Step 4, categorize recurring themes from notes and activity descriptions when competitor is mentioned:",{"type":44,"tag":76,"props":669,"children":670},{},[671,681,691,701,711],{"type":44,"tag":80,"props":672,"children":673},{},[674,679],{"type":44,"tag":84,"props":675,"children":676},{},[677],{"type":49,"value":678},"Price objections:",{"type":49,"value":680}," Look for \"cheaper\", \"lower cost\", \"price\", \"pricing\"",{"type":44,"tag":80,"props":682,"children":683},{},[684,689],{"type":44,"tag":84,"props":685,"children":686},{},[687],{"type":49,"value":688},"Feature gaps:",{"type":49,"value":690}," Look for \"missing\", \"doesn't support\", \"can't do\", \"limitation\"",{"type":44,"tag":80,"props":692,"children":693},{},[694,699],{"type":44,"tag":84,"props":695,"children":696},{},[697],{"type":49,"value":698},"Existing relationship:",{"type":49,"value":700}," Look for \"incumbent\", \"already using\", \"switching cost\", \"prefer\"",{"type":44,"tag":80,"props":702,"children":703},{},[704,709],{"type":44,"tag":84,"props":705,"children":706},{},[707],{"type":49,"value":708},"Brand recognition:",{"type":49,"value":710}," Look for \"heard of\", \"well-known\", \"trusted\", \"market leader\"",{"type":44,"tag":80,"props":712,"children":713},{},[714,719],{"type":44,"tag":84,"props":715,"children":716},{},[717],{"type":49,"value":718},"Implementation concerns:",{"type":49,"value":720}," Look for \"complex\", \"timeline\", \"integration\", \"support\"",{"type":44,"tag":51,"props":722,"children":723},{},[724],{"type":49,"value":725},"Count frequency of each theme across deal notes.",{"type":44,"tag":134,"props":727,"children":729},{"id":728},"step-8-extract-win-patterns",[730],{"type":49,"value":731},"Step 8: Extract Win Patterns",{"type":44,"tag":51,"props":733,"children":734},{},[735],{"type":49,"value":736},"For won deals where this competitor was present, identify common factors:",{"type":44,"tag":51,"props":738,"children":739},{},[740],{"type":44,"tag":84,"props":741,"children":742},{},[743],{"type":49,"value":744},"Qualification strength in wins:",{"type":44,"tag":212,"props":746,"children":749},{"className":747,"code":748,"language":49},[215],"SELECT budgetstatus, decisionmaker, need, purchasetimeframe, purchaseprocess,\n       COUNT(opportunityid) as count\nFROM opportunity\nWHERE statecode = 1\nAND actualclosedate >= '[start_date]'\nGROUP BY budgetstatus, decisionmaker, need, purchasetimeframe, purchaseprocess\n",[750],{"type":44,"tag":127,"props":751,"children":752},{"__ignoreMap":220},[753],{"type":49,"value":748},{"type":44,"tag":51,"props":755,"children":756},{},[757,758,763],{"type":49,"value":494},{"type":44,"tag":127,"props":759,"children":761},{"className":760},[],[762],{"type":49,"value":419},{"type":49,"value":764}," from Step 5.",{"type":44,"tag":51,"props":766,"children":767},{},[768],{"type":49,"value":769},"Note which BANT patterns appear most often in wins — these inform the competitive playbook.",{"type":44,"tag":51,"props":771,"children":772},{},[773,778],{"type":44,"tag":84,"props":774,"children":775},{},[776],{"type":49,"value":777},"Activity volume in wins vs losses:",{"type":49,"value":779},"\nCount total activities per opportunity for wins and losses separately using activitypointer to identify engagement differences.",{"type":44,"tag":134,"props":781,"children":783},{"id":782},"step-9-generate-competitive-intelligence-report",[784],{"type":49,"value":785},"Step 9: Generate Competitive Intelligence Report",{"type":44,"tag":212,"props":787,"children":790},{"className":788,"code":789,"language":49},[215],"COMPETITIVE INTELLIGENCE REPORT\nCompetitor: [Competitor Name]\nPeriod: [Start Date] – [End Date]\nGenerated: [Today's Date]\n═══════════════════════════════════════════════════════════\n\nEXECUTIVE SUMMARY\n───────────────────────────────────────────────────────────\nDeals Analyzed: [n won] wins \u002F [n lost] losses\nWin Rate (competitive): [n]%\nRevenue Won (competitive): $[value]\nRevenue Lost to Competitor: $[value]\n\nCOMPETITIVE PERFORMANCE BY DEAL SIZE\n───────────────────────────────────────────────────────────\nSmall (\u003C$25K):     Win rate [n]%  | [n] won, [n] lost\nMedium ($25K-$100K): Win rate [n]% | [n] won, [n] lost\nEnterprise (>$100K): Win rate [n]% | [n] won, [n] lost\n\nWHERE WE LOSE\n───────────────────────────────────────────────────────────\nMost losses occur at: [Stage] stage ([n]% of losses)\nTop industries lost: [Industry 1] ([n] deals), [Industry 2] ([n] deals)\nAverage deal size lost: $[value] vs average deal size won: $[value]\n\nCOMMON OBJECTIONS (from deal notes)\n───────────────────────────────────────────────────────────\n1. Price\u002FCost concerns — mentioned in [n]% of lost deals\n2. [Feature gap] — mentioned in [n]% of lost deals\n3. [Incumbent relationship] — mentioned in [n]% of lost deals\n\nWIN PATTERNS (what works in competitive deals)\n───────────────────────────────────────────────────────────\n✓ Economic buyer engaged: [n]% of wins vs [n]% of losses\n✓ Budget confirmed before Propose: [n]% of wins vs [n]% of losses\n✓ Higher activity volume: [n] avg activities (wins) vs [n] (losses)\n✓ Shorter sales cycle: [n] avg days (wins) vs [n] avg days (losses)\n\nBATTLECARD: [COMPETITOR NAME]\n───────────────────────────────────────────────────────────\n\nTheir strengths (from deal notes):\n• [Strength extracted from notes]\n• [Strength extracted from notes]\n\nCommon objections and responses:\n• \"They're cheaper\" → [Response based on win patterns]\n• \"[Feature gap]\" → [Response\u002Fworkaround]\n• \"We already know them\" → [Response focused on differentiation]\n\nWhere we win:\n• [Scenario 1 — e.g., enterprise deals with complex integration needs]\n• [Scenario 2 — e.g., accounts with active support issues with competitor]\n• [Scenario 3 — e.g., deals where economic buyer is engaged early]\n\nWhere to be careful:\n• [Risk area 1 — e.g., SMB price-sensitive deals]\n• [Risk area 2 — e.g., industries where competitor has strong presence]\n\nRECOMMENDED ACTIONS\n───────────────────────────────────────────────────────────\n1. [Specific action based on loss patterns]\n2. [Coaching recommendation for reps]\n3. [Process change to improve win rate]\n═══════════════════════════════════════════════════════════\n",[791],{"type":44,"tag":127,"props":792,"children":793},{"__ignoreMap":220},[794],{"type":49,"value":789},{"type":44,"tag":64,"props":796,"children":798},{"id":797},"output-format",[799],{"type":49,"value":800},"Output Format",{"type":44,"tag":51,"props":802,"children":803},{},[804],{"type":49,"value":805},"Deliver a two-part output:",{"type":44,"tag":807,"props":808,"children":809},"ol",{},[810,820],{"type":44,"tag":80,"props":811,"children":812},{},[813,818],{"type":44,"tag":84,"props":814,"children":815},{},[816],{"type":49,"value":817},"Intelligence report",{"type":49,"value":819}," — quantitative win\u002Floss analysis with patterns",{"type":44,"tag":80,"props":821,"children":822},{},[823,828],{"type":44,"tag":84,"props":824,"children":825},{},[826],{"type":49,"value":827},"Battlecard",{"type":49,"value":829}," — rep-ready talking points, objection responses, and when-to-use guidance",{"type":44,"tag":64,"props":831,"children":833},{"id":832},"example-interaction",[834],{"type":49,"value":835},"Example Interaction",{"type":44,"tag":51,"props":837,"children":838},{},[839,844],{"type":44,"tag":84,"props":840,"children":841},{},[842],{"type":49,"value":843},"User Input:",{"type":49,"value":845},"\n\"Show me competitive intelligence on Acme Corp for the last 6 months.\"",{"type":44,"tag":51,"props":847,"children":848},{},[849],{"type":44,"tag":84,"props":850,"children":851},{},[852],{"type":49,"value":853},"Skill Output:",{"type":44,"tag":212,"props":855,"children":858},{"className":856,"code":857,"language":49},[215],"COMPETITIVE INTELLIGENCE REPORT\nCompetitor: Acme Corp | Period: Sep 2025 – Mar 2026\n═══════════════════════════════════════════════════════════\n\nEXECUTIVE SUMMARY\nWin Rate vs Acme Corp: 38% (vs 61% overall win rate)\nRevenue Won: $420,000 | Revenue Lost to Acme: $680,000\n\nCOMPETITIVE PERFORMANCE BY DEAL SIZE\nSmall (\u003C$25K): 55% win rate — strongest segment\nMedium ($25K-$100K): 32% win rate — significant gap\nEnterprise (>$100K): 18% win rate — critical weakness\n\nWHERE WE LOSE\nMost losses at: Propose stage (67% of losses)\nTop industries: Financial Services (5 deals), Healthcare (3 deals)\n\nCOMMON OBJECTIONS\n1. Price — mentioned in 71% of lost deals\n2. Existing integration with their platform — 43% of lost deals\n3. Acme's brand recognition in FSI — 29% of lost deals\n\nWIN PATTERNS\n✓ Economic buyer engaged early: 78% of wins vs 22% of losses\n✓ POC completed before proposal: 64% of wins vs 11% of losses\n\nBATTLECARD: ACME CORP\n\"They're cheaper\" → \"Our TCO over 3 years is [X]% lower due to...\"\n\"We use their platform\" → \"Our API integrates in \u003C2 hours — here's a reference customer...\"\n",[859],{"type":44,"tag":127,"props":860,"children":861},{"__ignoreMap":220},[862],{"type":49,"value":857},{"type":44,"tag":64,"props":864,"children":866},{"id":865},"dataverse-tables-used",[867],{"type":49,"value":868},"Dataverse Tables Used",{"type":44,"tag":870,"props":871,"children":872},"table",{},[873,892],{"type":44,"tag":874,"props":875,"children":876},"thead",{},[877],{"type":44,"tag":878,"props":879,"children":880},"tr",{},[881,887],{"type":44,"tag":882,"props":883,"children":884},"th",{},[885],{"type":49,"value":886},"Table",{"type":44,"tag":882,"props":888,"children":889},{},[890],{"type":49,"value":891},"Purpose",{"type":44,"tag":893,"props":894,"children":895},"tbody",{},[896,913,936,953,970,987,1004],{"type":44,"tag":878,"props":897,"children":898},{},[899,908],{"type":44,"tag":900,"props":901,"children":902},"td",{},[903],{"type":44,"tag":127,"props":904,"children":906},{"className":905},[],[907],{"type":49,"value":155},{"type":44,"tag":900,"props":909,"children":910},{},[911],{"type":49,"value":912},"Win\u002Floss records and deal details",{"type":44,"tag":878,"props":914,"children":915},{},[916,924],{"type":44,"tag":900,"props":917,"children":918},{},[919],{"type":44,"tag":127,"props":920,"children":922},{"className":921},[],[923],{"type":49,"value":179},{"type":44,"tag":900,"props":925,"children":926},{},[927,929,934],{"type":49,"value":928},"Structured competitor data on closed deals (has direct ",{"type":44,"tag":127,"props":930,"children":932},{"className":931},[],[933],{"type":49,"value":163},{"type":49,"value":935}," lookup)",{"type":44,"tag":878,"props":937,"children":938},{},[939,948],{"type":44,"tag":900,"props":940,"children":941},{},[942],{"type":44,"tag":127,"props":943,"children":945},{"className":944},[],[946],{"type":49,"value":947},"competitor",{"type":44,"tag":900,"props":949,"children":950},{},[951],{"type":49,"value":952},"Structured competitor profiles",{"type":44,"tag":878,"props":954,"children":955},{},[956,965],{"type":44,"tag":900,"props":957,"children":958},{},[959],{"type":44,"tag":127,"props":960,"children":962},{"className":961},[],[963],{"type":49,"value":964},"account",{"type":44,"tag":900,"props":966,"children":967},{},[968],{"type":49,"value":969},"Industry and firmographic context",{"type":44,"tag":878,"props":971,"children":972},{},[973,982],{"type":44,"tag":900,"props":974,"children":975},{},[976],{"type":44,"tag":127,"props":977,"children":979},{"className":978},[],[980],{"type":49,"value":981},"activitypointer",{"type":44,"tag":900,"props":983,"children":984},{},[985],{"type":49,"value":986},"Activity volume comparison",{"type":44,"tag":878,"props":988,"children":989},{},[990,999],{"type":44,"tag":900,"props":991,"children":992},{},[993],{"type":44,"tag":127,"props":994,"children":996},{"className":995},[],[997],{"type":49,"value":998},"annotation",{"type":44,"tag":900,"props":1000,"children":1001},{},[1002],{"type":49,"value":1003},"Mining notes for competitive mentions",{"type":44,"tag":878,"props":1005,"children":1006},{},[1007,1016],{"type":44,"tag":900,"props":1008,"children":1009},{},[1010],{"type":44,"tag":127,"props":1011,"children":1013},{"className":1012},[],[1014],{"type":49,"value":1015},"phonecall",{"type":44,"tag":900,"props":1017,"children":1018},{},[1019],{"type":49,"value":1020},"Call descriptions for competitor mentions",{"type":44,"tag":64,"props":1022,"children":1024},{"id":1023},"key-fields-reference",[1025],{"type":49,"value":1026},"Key Fields Reference",{"type":44,"tag":51,"props":1028,"children":1029},{},[1030],{"type":44,"tag":84,"props":1031,"children":1032},{},[1033],{"type":49,"value":1034},"opportunity:",{"type":44,"tag":76,"props":1036,"children":1037},{},[1038,1049,1060,1071,1082,1093],{"type":44,"tag":80,"props":1039,"children":1040},{},[1041,1047],{"type":44,"tag":127,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":49,"value":1046},"statecode",{"type":49,"value":1048}," (STATE) - Open(0), Won(1), Lost(2)",{"type":44,"tag":80,"props":1050,"children":1051},{},[1052,1058],{"type":44,"tag":127,"props":1053,"children":1055},{"className":1054},[],[1056],{"type":49,"value":1057},"description",{"type":49,"value":1059}," (MULTILINE TEXT) - General opportunity notes",{"type":44,"tag":80,"props":1061,"children":1062},{},[1063,1069],{"type":44,"tag":127,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":49,"value":1068},"currentsituation",{"type":49,"value":1070}," (MULTILINE TEXT) - Customer's current environment",{"type":44,"tag":80,"props":1072,"children":1073},{},[1074,1080],{"type":44,"tag":127,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":49,"value":1079},"actualclosedate",{"type":49,"value":1081}," (DATE) - When deal was closed",{"type":44,"tag":80,"props":1083,"children":1084},{},[1085,1091],{"type":44,"tag":127,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":49,"value":1090},"salesstage",{"type":49,"value":1092}," (CHOICE) - Stage at close",{"type":44,"tag":80,"props":1094,"children":1095},{},[1096,1098,1103,1105,1110,1112,1117,1119,1125],{"type":49,"value":1097},"Note: ",{"type":44,"tag":127,"props":1099,"children":1101},{"className":1100},[],[1102],{"type":49,"value":155},{"type":49,"value":1104}," has no direct ",{"type":44,"tag":127,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":49,"value":163},{"type":49,"value":1111}," field — the relationship is many-to-many via ",{"type":44,"tag":127,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":49,"value":171},{"type":49,"value":1118},". Use ",{"type":44,"tag":127,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":49,"value":1124},"opportunityclose.competitorid",{"type":49,"value":1126}," for closed deal competitor data.",{"type":44,"tag":51,"props":1128,"children":1129},{},[1130],{"type":44,"tag":84,"props":1131,"children":1132},{},[1133],{"type":49,"value":1134},"opportunityclose:",{"type":44,"tag":76,"props":1136,"children":1137},{},[1138,1148,1158,1168,1179,1189],{"type":44,"tag":80,"props":1139,"children":1140},{},[1141,1146],{"type":44,"tag":127,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":49,"value":240},{"type":49,"value":1147}," (LOOKUP) - Links to the closed opportunity",{"type":44,"tag":80,"props":1149,"children":1150},{},[1151,1156],{"type":44,"tag":127,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":49,"value":163},{"type":49,"value":1157}," (LOOKUP) - Competitor selected at close (direct lookup, use this for competitive analysis)",{"type":44,"tag":80,"props":1159,"children":1160},{},[1161,1166],{"type":44,"tag":127,"props":1162,"children":1164},{"className":1163},[],[1165],{"type":49,"value":1057},{"type":49,"value":1167}," (MULTILINE TEXT) - Close reason \u002F notes entered at time of close",{"type":44,"tag":80,"props":1169,"children":1170},{},[1171,1177],{"type":44,"tag":127,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":49,"value":1176},"actualrevenue",{"type":49,"value":1178}," (MONEY) - Final deal value at close",{"type":44,"tag":80,"props":1180,"children":1181},{},[1182,1187],{"type":44,"tag":127,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":49,"value":1046},{"type":49,"value":1188}," (STATE) - Activity completion state",{"type":44,"tag":80,"props":1190,"children":1191},{},[1192,1198],{"type":44,"tag":127,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":49,"value":1197},"createdon",{"type":49,"value":1199}," (DATETIME) - When the close activity was created",{"type":44,"tag":51,"props":1201,"children":1202},{},[1203],{"type":44,"tag":84,"props":1204,"children":1205},{},[1206],{"type":49,"value":1207},"competitor:",{"type":44,"tag":76,"props":1209,"children":1210},{},[1211,1222,1233,1244,1255,1266],{"type":44,"tag":80,"props":1212,"children":1213},{},[1214,1220],{"type":44,"tag":127,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":49,"value":1219},"name",{"type":49,"value":1221}," (NVARCHAR) - Competitor name",{"type":44,"tag":80,"props":1223,"children":1224},{},[1225,1231],{"type":44,"tag":127,"props":1226,"children":1228},{"className":1227},[],[1229],{"type":49,"value":1230},"strengths",{"type":49,"value":1232}," (MULTILINE TEXT) - Known strengths",{"type":44,"tag":80,"props":1234,"children":1235},{},[1236,1242],{"type":44,"tag":127,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":49,"value":1241},"weaknesses",{"type":49,"value":1243}," (MULTILINE TEXT) - Known weaknesses",{"type":44,"tag":80,"props":1245,"children":1246},{},[1247,1253],{"type":44,"tag":127,"props":1248,"children":1250},{"className":1249},[],[1251],{"type":49,"value":1252},"overview",{"type":49,"value":1254}," (MULTILINE TEXT) - General description",{"type":44,"tag":80,"props":1256,"children":1257},{},[1258,1264],{"type":44,"tag":127,"props":1259,"children":1261},{"className":1260},[],[1262],{"type":49,"value":1263},"opportunitiescomments",{"type":49,"value":1265}," (MULTILINE TEXT) - Where we win",{"type":44,"tag":80,"props":1267,"children":1268},{},[1269,1275],{"type":44,"tag":127,"props":1270,"children":1272},{"className":1271},[],[1273],{"type":49,"value":1274},"threatscomments",{"type":49,"value":1276}," (MULTILINE TEXT) - Where we lose",{"type":44,"tag":64,"props":1278,"children":1280},{"id":1279},"configurable-parameters",[1281],{"type":49,"value":1282},"Configurable Parameters",{"type":44,"tag":76,"props":1284,"children":1285},{},[1286,1291,1296,1301],{"type":44,"tag":80,"props":1287,"children":1288},{},[1289],{"type":49,"value":1290},"Analysis period (default: last 12 months)",{"type":44,"tag":80,"props":1292,"children":1293},{},[1294],{"type":49,"value":1295},"Minimum deal count threshold for statistical confidence (default: 5 deals)",{"type":44,"tag":80,"props":1297,"children":1298},{},[1299],{"type":49,"value":1300},"Competitor name keywords for text mining (configurable list)",{"type":44,"tag":80,"props":1302,"children":1303},{},[1304],{"type":49,"value":1305},"Deal size segmentation thresholds",{"type":44,"tag":57,"props":1307,"children":1309},{"id":1308},"examples",[1310],{"type":49,"value":1311},"Examples",{"type":44,"tag":64,"props":1313,"children":1315},{"id":1314},"example-1-specific-competitor-analysis",[1316],{"type":49,"value":1317},"Example 1: Specific Competitor Analysis",{"type":44,"tag":51,"props":1319,"children":1320},{},[1321,1326],{"type":44,"tag":84,"props":1322,"children":1323},{},[1324],{"type":49,"value":1325},"User says:",{"type":49,"value":1327}," \"How are we doing against ACME Corp?\"",{"type":44,"tag":51,"props":1329,"children":1330},{},[1331],{"type":44,"tag":84,"props":1332,"children":1333},{},[1334],{"type":49,"value":1335},"Actions:",{"type":44,"tag":807,"props":1337,"children":1338},{},[1339,1344,1349,1354,1359],{"type":44,"tag":80,"props":1340,"children":1341},{},[1342],{"type":49,"value":1343},"Search opportunityclose records for competitorid matching ACME",{"type":44,"tag":80,"props":1345,"children":1346},{},[1347],{"type":49,"value":1348},"Query won and lost deals with ACME as competitor",{"type":44,"tag":80,"props":1350,"children":1351},{},[1352],{"type":49,"value":1353},"Calculate win\u002Floss rates and deal value analysis",{"type":44,"tag":80,"props":1355,"children":1356},{},[1357],{"type":49,"value":1358},"Mine activity notes for competitive mentions",{"type":44,"tag":80,"props":1360,"children":1361},{},[1362],{"type":49,"value":1363},"Generate battlecard talking points",{"type":44,"tag":51,"props":1365,"children":1366},{},[1367],{"type":44,"tag":84,"props":1368,"children":1369},{},[1370],{"type":49,"value":1371},"Result:",{"type":44,"tag":212,"props":1373,"children":1376},{"className":1374,"code":1375,"language":49},[215],"COMPETITIVE ANALYSIS: ACME CORP (Last 12 Months)\n\nHEAD-TO-HEAD RECORD:\nWins: 8 deals ($420K) | Losses: 12 deals ($680K)\nWin Rate: 40% (vs 55% overall win rate)\n\nWHERE WE LOSE:\n- Price objection in 67% of losses\n- Mid-market segment: 25% win rate\n\nWHERE WE WIN:\n- Enterprise deals: 62% win rate\n- When technical eval involved: 71% win rate\n\nBATTLECARD:\n\"They're cheaper\" → \"Our TCO over 3 years is 23% lower...\"\n\"We use their platform\" → \"Our API integrates in \u003C2 hours...\"\n",[1377],{"type":44,"tag":127,"props":1378,"children":1379},{"__ignoreMap":220},[1380],{"type":49,"value":1375},{"type":44,"tag":64,"props":1382,"children":1384},{"id":1383},"example-2-full-competitive-landscape",[1385],{"type":49,"value":1386},"Example 2: Full Competitive Landscape",{"type":44,"tag":51,"props":1388,"children":1389},{},[1390,1394],{"type":44,"tag":84,"props":1391,"children":1392},{},[1393],{"type":49,"value":1325},{"type":49,"value":1395}," \"Show me the competitive landscape for Q4\"",{"type":44,"tag":51,"props":1397,"children":1398},{},[1399],{"type":44,"tag":84,"props":1400,"children":1401},{},[1402],{"type":49,"value":1335},{"type":44,"tag":807,"props":1404,"children":1405},{},[1406,1411,1416,1421],{"type":44,"tag":80,"props":1407,"children":1408},{},[1409],{"type":49,"value":1410},"Query all opportunityclose records with competitor data for Q4",{"type":44,"tag":80,"props":1412,"children":1413},{},[1414],{"type":49,"value":1415},"Group by competitor name",{"type":44,"tag":80,"props":1417,"children":1418},{},[1419],{"type":49,"value":1420},"Calculate win rates and deal values per competitor",{"type":44,"tag":80,"props":1422,"children":1423},{},[1424],{"type":49,"value":1425},"Rank by frequency and threat level",{"type":44,"tag":51,"props":1427,"children":1428},{},[1429],{"type":44,"tag":84,"props":1430,"children":1431},{},[1432],{"type":49,"value":1371},{"type":44,"tag":212,"props":1434,"children":1437},{"className":1435,"code":1436,"language":49},[215],"Q4 COMPETITIVE LANDSCAPE\n\n| Competitor | Encounters | Win Rate | Avg Deal |\n|------------|------------|----------|----------|\n| ACME Corp  | 20 deals   | 40%      | $55K     |\n| Globex     | 14 deals   | 57%      | $72K     |\n| Initech    | 8 deals    | 75%      | $45K     |\n\nTOP THREAT: ACME Corp (high volume, low win rate)\nSTRONG AGAINST: Initech (technical differentiation)\n",[1438],{"type":44,"tag":127,"props":1439,"children":1440},{"__ignoreMap":220},[1441],{"type":49,"value":1436},{"type":44,"tag":64,"props":1443,"children":1445},{"id":1444},"example-3-loss-pattern-analysis",[1446],{"type":49,"value":1447},"Example 3: Loss Pattern Analysis",{"type":44,"tag":51,"props":1449,"children":1450},{},[1451,1455],{"type":44,"tag":84,"props":1452,"children":1453},{},[1454],{"type":49,"value":1325},{"type":49,"value":1456}," \"Why are we losing to Globex?\"",{"type":44,"tag":51,"props":1458,"children":1459},{},[1460],{"type":44,"tag":84,"props":1461,"children":1462},{},[1463],{"type":49,"value":1335},{"type":44,"tag":807,"props":1465,"children":1466},{},[1467,1472,1477,1482],{"type":44,"tag":80,"props":1468,"children":1469},{},[1470],{"type":49,"value":1471},"Query lost opportunities with Globex as competitor",{"type":44,"tag":80,"props":1473,"children":1474},{},[1475],{"type":49,"value":1476},"Analyze opportunity descriptions and close notes",{"type":44,"tag":80,"props":1478,"children":1479},{},[1480],{"type":49,"value":1481},"Extract common patterns and objections",{"type":44,"tag":80,"props":1483,"children":1484},{},[1485],{"type":49,"value":1486},"Generate actionable insights",{"type":44,"tag":51,"props":1488,"children":1489},{},[1490],{"type":44,"tag":84,"props":1491,"children":1492},{},[1493],{"type":49,"value":1371},{"type":44,"tag":212,"props":1495,"children":1498},{"className":1496,"code":1497,"language":49},[215],"GLOBEX LOSS ANALYSIS (8 losses, $340K)\n\nCOMMON PATTERNS:\n- 75% lost at Proposal stage (late loss)\n- Avg sales cycle: 45 days (vs our 38 day avg)\n- 5\u002F8 losses in Financial Services vertical\n\nTOP OBJECTIONS (from notes):\n1. \"Existing Globex relationship\" (3 deals)\n2. \"Integration concerns\" (3 deals)\n3. \"Reference requests unfulfilled\" (2 deals)\n\nRECOMMENDATION:\n- Engage technical resources earlier in Financial Services\n- Build reference library for banking customers\n",[1499],{"type":44,"tag":127,"props":1500,"children":1501},{"__ignoreMap":220},[1502],{"type":49,"value":1497},{"type":44,"tag":57,"props":1504,"children":1506},{"id":1505},"troubleshooting",[1507],{"type":49,"value":1508},"Troubleshooting",{"type":44,"tag":64,"props":1510,"children":1512},{"id":1511},"error-no-competitor-data-found",[1513],{"type":49,"value":1514},"Error: No competitor data found",{"type":44,"tag":51,"props":1516,"children":1517},{},[1518,1523,1525],{"type":44,"tag":84,"props":1519,"children":1520},{},[1521],{"type":49,"value":1522},"Cause:",{"type":49,"value":1524}," Competitors not being recorded at deal close, or competitor table empty\n",{"type":44,"tag":84,"props":1526,"children":1527},{},[1528],{"type":49,"value":1529},"Solution:",{"type":44,"tag":76,"props":1531,"children":1532},{},[1533,1538,1543],{"type":44,"tag":80,"props":1534,"children":1535},{},[1536],{"type":49,"value":1537},"Check if opportunityclose records have competitorid populated",{"type":44,"tag":80,"props":1539,"children":1540},{},[1541],{"type":49,"value":1542},"Fall back to text mining in opportunity descriptions",{"type":44,"tag":80,"props":1544,"children":1545},{},[1546],{"type":49,"value":1547},"Recommend enabling competitor tracking in close workflow",{"type":44,"tag":64,"props":1549,"children":1551},{"id":1550},"error-insufficient-data-for-analysis",[1552],{"type":49,"value":1553},"Error: Insufficient data for analysis",{"type":44,"tag":51,"props":1555,"children":1556},{},[1557,1561,1563],{"type":44,"tag":84,"props":1558,"children":1559},{},[1560],{"type":49,"value":1522},{"type":49,"value":1562}," Too few deals with specific competitor to draw conclusions\n",{"type":44,"tag":84,"props":1564,"children":1565},{},[1566],{"type":49,"value":1529},{"type":44,"tag":76,"props":1568,"children":1569},{},[1570,1575,1580],{"type":44,"tag":80,"props":1571,"children":1572},{},[1573],{"type":49,"value":1574},"Expand time range beyond default 12 months",{"type":44,"tag":80,"props":1576,"children":1577},{},[1578],{"type":49,"value":1579},"Combine with related competitors for aggregate view",{"type":44,"tag":80,"props":1581,"children":1582},{},[1583],{"type":49,"value":1584},"Note statistical limitations in output",{"type":44,"tag":64,"props":1586,"children":1588},{"id":1587},"error-win-rate-appears-inaccurate",[1589],{"type":49,"value":1590},"Error: Win rate appears inaccurate",{"type":44,"tag":51,"props":1592,"children":1593},{},[1594,1598,1600],{"type":44,"tag":84,"props":1595,"children":1596},{},[1597],{"type":49,"value":1522},{"type":49,"value":1599}," opportunityclose only captures explicit competitor selection; many deals may not have competitor recorded\n",{"type":44,"tag":84,"props":1601,"children":1602},{},[1603],{"type":49,"value":1529},{"type":44,"tag":76,"props":1605,"children":1606},{},[1607,1612,1617],{"type":44,"tag":80,"props":1608,"children":1609},{},[1610],{"type":49,"value":1611},"Cross-reference with text mining results",{"type":44,"tag":80,"props":1613,"children":1614},{},[1615],{"type":49,"value":1616},"Note coverage percentage in output",{"type":44,"tag":80,"props":1618,"children":1619},{},[1620],{"type":49,"value":1621},"Recommend better competitor capture at deal close",{"items":1623,"total":1722},[1624,1641,1655,1663,1679,1693,1705],{"slug":1625,"name":1625,"fn":1626,"description":1627,"org":1628,"tags":1629,"stars":25,"repoUrl":26,"updatedAt":1640},"account-briefing-generator","generate account briefings for sales meetings","Generates meeting briefings by aggregating account info, contacts, opportunities, cases, and activity history into structured prep documents with talking points and discovery questions. Use when user says \"prep me for my call\", \"brief me on this account\", \"meeting prep\", \"I have a meeting with [company]\", \"account briefing\", \"customer briefing\", or \"prepare for customer meeting\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1630,1631,1632,1635,1636,1637],{"name":17,"slug":18,"type":14},{"name":23,"slug":24,"type":14},{"name":1633,"slug":1634,"type":14},"Meetings","meetings",{"name":9,"slug":8,"type":14},{"name":20,"slug":21,"type":14},{"name":1638,"slug":1639,"type":14},"Summarization","summarization","2026-04-06T18:36:32.277939",{"slug":1642,"name":1642,"fn":1643,"description":1644,"org":1645,"tags":1646,"stars":25,"repoUrl":26,"updatedAt":1654},"account-risk-early-warning","identify account churn risks from engagement signals","Identifies accounts showing warning signs of churn by analyzing activity trends, support cases, and engagement signals. Scores risk and prioritizes intervention targets. Use when user asks \"which accounts are at risk\", \"churn risk analysis\", \"find accounts that might leave\", \"customer health check\", \"at-risk customers\", \"retention warning signs\", or \"account health score\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1647,1648,1649,1650,1653],{"name":17,"slug":18,"type":14},{"name":23,"slug":24,"type":14},{"name":9,"slug":8,"type":14},{"name":1651,"slug":1652,"type":14},"Risk Assessment","risk-assessment",{"name":20,"slug":21,"type":14},"2026-04-06T18:36:28.462732",{"slug":4,"name":4,"fn":5,"description":6,"org":1656,"tags":1657,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1658,1659,1660,1661,1662],{"name":13,"slug":4,"type":14},{"name":17,"slug":18,"type":14},{"name":23,"slug":24,"type":14},{"name":9,"slug":8,"type":14},{"name":20,"slug":21,"type":14},{"slug":1664,"name":1664,"fn":1665,"description":1666,"org":1667,"tags":1668,"stars":25,"repoUrl":26,"updatedAt":1678},"create-an-asset","generate customized sales assets from Dataverse","Generates customized sales assets including one-pagers, proposals, executive summaries, ROI summaries, and mutual action plans from Dataverse context. Use when user says \"create a one-pager\", \"draft a proposal\", \"generate executive summary\", \"build ROI summary\", \"create mutual action plan\", \"sales asset for [account]\", \"proposal outline\", or \"customer-facing document\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1669,1672,1673,1676,1677],{"name":1670,"slug":1671,"type":14},"Content Creation","content-creation",{"name":23,"slug":24,"type":14},{"name":1674,"slug":1675,"type":14},"Marketing","marketing",{"name":9,"slug":8,"type":14},{"name":20,"slug":21,"type":14},"2026-04-06T18:36:24.562421",{"slug":1680,"name":1680,"fn":1681,"description":1682,"org":1683,"tags":1684,"stars":25,"repoUrl":26,"updatedAt":1692},"cross-sell-target-identifier","identify cross-sell targets from customer patterns","Analyzes successful product customers to identify patterns, then finds similar accounts that are good cross-sell candidates with fit scores and reasoning. Use when user asks \"who should I pitch this product to\", \"find cross-sell opportunities\", \"which customers should buy Product X\", \"identify upsell targets\", \"product expansion candidates\", or \"who else would buy this\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1685,1688,1689,1690,1691],{"name":1686,"slug":1687,"type":14},"Analytics","analytics",{"name":17,"slug":18,"type":14},{"name":23,"slug":24,"type":14},{"name":9,"slug":8,"type":14},{"name":20,"slug":21,"type":14},"2026-04-06T18:36:37.380929",{"slug":1694,"name":1694,"fn":1695,"description":1696,"org":1697,"tags":1698,"stars":25,"repoUrl":26,"updatedAt":1704},"daily-briefing","prepare daily business briefings from Dataverse","Delivers a prioritized morning summary covering today's meetings, overdue tasks, pipeline alerts, and recommended actions from Dataverse. Use when user says \"what's on my plate today\", \"daily briefing\", \"morning summary\", \"what do I need to focus on today\", \"start my day\", \"daily digest\", \"today's priorities\", or \"what's happening today\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1699,1700,1701,1702,1703],{"name":17,"slug":18,"type":14},{"name":23,"slug":24,"type":14},{"name":9,"slug":8,"type":14},{"name":20,"slug":21,"type":14},{"name":1638,"slug":1639,"type":14},"2026-04-06T18:36:31.028078",{"slug":1706,"name":1706,"fn":1707,"description":1708,"org":1709,"tags":1710,"stars":25,"repoUrl":26,"updatedAt":1721},"draft-outreach","draft personalized sales outreach from Dataverse","Generates personalized outreach messages by pulling context from Dataverse records. Creates tailored emails for new prospects, re-engagement, follow-ups, or cross-sell. Use when user says \"draft an email to [contact]\", \"write outreach for\", \"help me reach out to\", \"compose email\", \"re-engage this contact\", \"follow-up email\", \"prospecting email\", or \"outreach message for\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1711,1712,1713,1716,1717,1720],{"name":17,"slug":18,"type":14},{"name":23,"slug":24,"type":14},{"name":1714,"slug":1715,"type":14},"Email","email",{"name":9,"slug":8,"type":14},{"name":1718,"slug":1719,"type":14},"Outreach","outreach",{"name":20,"slug":21,"type":14},"2026-04-06T18:36:36.103544",16,{"items":1724,"total":1917},[1725,1747,1768,1787,1802,1819,1830,1843,1858,1873,1892,1905],{"slug":1726,"name":1726,"fn":1727,"description":1728,"org":1729,"tags":1730,"stars":1744,"repoUrl":1745,"updatedAt":1746},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1731,1734,1737,1738,1741],{"name":1732,"slug":1733,"type":14},"Engineering","engineering",{"name":1735,"slug":1736,"type":14},"Local Development","local-development",{"name":9,"slug":8,"type":14},{"name":1739,"slug":1740,"type":14},"Project Management","project-management",{"name":1742,"slug":1743,"type":14},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1748,"name":1748,"fn":1749,"description":1750,"org":1751,"tags":1752,"stars":1765,"repoUrl":1766,"updatedAt":1767},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1753,1756,1759,1762],{"name":1754,"slug":1755,"type":14},".NET","net",{"name":1757,"slug":1758,"type":14},"Agents","agents",{"name":1760,"slug":1761,"type":14},"Azure","azure",{"name":1763,"slug":1764,"type":14},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1769,"name":1769,"fn":1770,"description":1771,"org":1772,"tags":1773,"stars":1765,"repoUrl":1766,"updatedAt":1786},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1774,1775,1776,1779,1782,1783],{"name":1686,"slug":1687,"type":14},{"name":1760,"slug":1761,"type":14},{"name":1777,"slug":1778,"type":14},"Data Analysis","data-analysis",{"name":1780,"slug":1781,"type":14},"Java","java",{"name":9,"slug":8,"type":14},{"name":1784,"slug":1785,"type":14},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1788,"name":1788,"fn":1789,"description":1790,"org":1791,"tags":1792,"stars":1765,"repoUrl":1766,"updatedAt":1801},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1793,1796,1797,1798],{"name":1794,"slug":1795,"type":14},"AI Infrastructure","ai-infrastructure",{"name":1760,"slug":1761,"type":14},{"name":1780,"slug":1781,"type":14},{"name":1799,"slug":1800,"type":14},"Security","security","2026-07-07T06:53:31.293235",{"slug":1803,"name":1803,"fn":1804,"description":1805,"org":1806,"tags":1807,"stars":1765,"repoUrl":1766,"updatedAt":1818},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1808,1809,1812,1813,1814,1817],{"name":1760,"slug":1761,"type":14},{"name":1810,"slug":1811,"type":14},"Compliance","compliance",{"name":1763,"slug":1764,"type":14},{"name":9,"slug":8,"type":14},{"name":1815,"slug":1816,"type":14},"Python","python",{"name":1799,"slug":1800,"type":14},"2026-07-18T05:14:23.017504",{"slug":1820,"name":1820,"fn":1821,"description":1822,"org":1823,"tags":1824,"stars":1765,"repoUrl":1766,"updatedAt":1829},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1825,1826,1827,1828],{"name":1686,"slug":1687,"type":14},{"name":1760,"slug":1761,"type":14},{"name":1763,"slug":1764,"type":14},{"name":1815,"slug":1816,"type":14},"2026-07-31T05:54:29.068751",{"slug":1831,"name":1831,"fn":1832,"description":1833,"org":1834,"tags":1835,"stars":1765,"repoUrl":1766,"updatedAt":1842},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1836,1839,1840,1841],{"name":1837,"slug":1838,"type":14},"API Development","api-development",{"name":1760,"slug":1761,"type":14},{"name":9,"slug":8,"type":14},{"name":1815,"slug":1816,"type":14},"2026-07-18T05:14:16.988376",{"slug":1844,"name":1844,"fn":1845,"description":1846,"org":1847,"tags":1848,"stars":1765,"repoUrl":1766,"updatedAt":1857},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1849,1850,1853,1856],{"name":1760,"slug":1761,"type":14},{"name":1851,"slug":1852,"type":14},"Computer Vision","computer-vision",{"name":1854,"slug":1855,"type":14},"Images","images",{"name":1815,"slug":1816,"type":14},"2026-07-18T05:14:18.007737",{"slug":1859,"name":1859,"fn":1860,"description":1861,"org":1862,"tags":1863,"stars":1765,"repoUrl":1766,"updatedAt":1872},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1864,1865,1868,1871],{"name":1760,"slug":1761,"type":14},{"name":1866,"slug":1867,"type":14},"Configuration","configuration",{"name":1869,"slug":1870,"type":14},"Feature Flags","feature-flags",{"name":1780,"slug":1781,"type":14},"2026-07-03T16:32:01.278468",{"slug":1874,"name":1874,"fn":1875,"description":1876,"org":1877,"tags":1878,"stars":1765,"repoUrl":1766,"updatedAt":1891},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1879,1882,1885,1888],{"name":1880,"slug":1881,"type":14},"Cosmos DB","cosmos-db",{"name":1883,"slug":1884,"type":14},"Database","database",{"name":1886,"slug":1887,"type":14},"NoSQL","nosql",{"name":1889,"slug":1890,"type":14},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1893,"name":1893,"fn":1875,"description":1894,"org":1895,"tags":1896,"stars":1765,"repoUrl":1766,"updatedAt":1904},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1897,1898,1899,1900,1901],{"name":1880,"slug":1881,"type":14},{"name":1883,"slug":1884,"type":14},{"name":9,"slug":8,"type":14},{"name":1886,"slug":1887,"type":14},{"name":1902,"slug":1903,"type":14},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1906,"name":1906,"fn":1907,"description":1908,"org":1909,"tags":1910,"stars":1765,"repoUrl":1766,"updatedAt":1916},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1911,1912,1913,1914,1915],{"name":1760,"slug":1761,"type":14},{"name":1880,"slug":1881,"type":14},{"name":1883,"slug":1884,"type":14},{"name":1780,"slug":1781,"type":14},{"name":1886,"slug":1887,"type":14},"2026-05-13T06:14:17.582229",267]