Overview
This Skill analyzes customer support feedback from multiple data sources (PIT/Roadblocks, Support Tickets, CSAT surveys, Ideas Forum) to identify pain points, categorize by theme, prioritize by customer impact, and generate comprehensive strategic reports.
Supports two analysis modes:
- Comprehensive Analysis: Full categorization, prioritization, and strategic reporting (initial analysis)
- Targeted Deep-Dive: Timeline analysis, theme investigation, resolution tracking (follow-up queries)
When to Apply
Use this skill for analysis of structured support data in the expected format:
Initial Analysis:
- User provides Excel/CSV files with PIT/Roadblocks, Support Tickets, or CSAT data columns
- User asks to "analyze support data", "prioritize customer feedback", or "generate impact report"
- User wants to understand top customer pain points from support channels
- User needs to scope analysis to a specific time period (e.g., "last 60 days")
Expected data format: Excel/CSV with columns like frustration level, MRR, ticket categories, CSAT scores
Follow-up Analysis:
- User asks about specific findings: "Has X issue dropped off?", "Show timeline for Y"
- User wants to investigate a theme mentioned in existing reports
- User needs to verify if an issue is resolved/declining/active
- User asks for examples or details about a specific category
In scope:
- Categorizing issues by product area and sub-category
- Calculating volume, frustration levels, and revenue impact
- Assigning priority levels (P0, P1, P2, P3) based on multiple factors
- Generating markdown reports with executive summaries and customer examples
- Timeline analysis and trend tracking for specific issues
- Deep-dive investigation of specific themes
- Comparing recent trends vs. historical baselines
- CSAT analysis and correlation
Out of scope:
- Sentiment analysis requiring NLP models not available in environment
- Predictive forecasting of future support volumes
- Root cause analysis requiring engineering investigation
- Data collection or export from live systems (only analyzes provided files)
Inputs
Required:
- Excel file(s) or CSV file(s) containing support data with these datasets:
- PIT & Roadblocks: Strategic customer issues with frustration levels (1-5), MRR data, categories, submitted dates
- Support Tickets: Support cases with product areas, roadblock types, created dates, ticket content
- Optional but recommended: CSAT survey responses, Ideas Forum requests
Optional:
- Time range filter (e.g., "last 60 days", "Q4 2025")
- Historical baseline data for trend comparison
- Specific focus areas (e.g., "focus on association issues")
Expected data columns:
- PIT data: Submitted At Date, Category, Sub Category, Frustration Level (1-5), MRR (CS), MRR (Sales), Use Case Title, Use Case Body
- Support data: Created UTC Date, Support Product Area, Support roadblock, Ticket Name, Content
- CSAT data: Created At Date, Score (1-5), Text, Event Trigger
Outputs
Primary artifact:
- Comprehensive markdown report (
*_Support_Analysis.md) containing:
- Executive summary with top 3 critical areas
- Prioritized themes by P0, P1, P2, P3 with metrics
- Customer feedback examples (5 per major theme)
- Strategic recommendations
- Revenue at risk analysis
- Frustration heatmap
- Trend comparison (if historical data provided)
Optional artifacts:
- Customer feedback examples document with detailed quotes
- CSV extracts of filtered data for further analysis
Success criteria:
- Issues categorized into clear themes (e.g., "Object > Associations")
- Priority levels assigned with clear rationale
- At least 3-5 real customer examples per P0/P1 issue
- Actionable recommendations with impact estimates
Instructions for Claude
Step 1: Data Loading and Validation
- Convert Excel files to CSV if needed using Python openpyxl
- Read all data sources and display summary:
- Total records per source
- Date range coverage
- Column validation (check for required fields)
- If time filter specified, parse and apply date filtering
- Report filtered counts and date ranges
Step 2: Theme Categorization
- Combine issues by theme:
{Product Area} > {Sub Category/Roadblock}
- For each theme, calculate:
- Total count (PIT + Support tickets)
- PIT count and Support count separately
- Average frustration (from PIT data where available)
- High frustration count (frustration ≥ 4)
- Total MRR impact (sum of MRR (CS) + MRR (Sales) from PIT data)
- Sort themes by total count descending
- Calculate percentage of total for each theme
Step 3: Priority Assignment
Apply the prioritization framework from resources/PRIORITIZATION_FRAMEWORK.md:
P0 (Critical):
- Volume >150 issues (60-day) OR >1,000 issues (historical) OR
- High frustration (avg ≥3.5) + volume >100 OR
- Revenue impact >$75K (60-day) OR >$4M (historical) OR
- Increasing trend (>20% vs baseline)
P1 (High):
- Volume 100-150 (60-day) OR 700-1,000 (historical) OR
- Frustration avg 3.0-3.5 with volume >50 OR
- Revenue impact $25K-$75K (60-day) OR $1.5M-$4M (historical)
P2 (Medium):
- Volume 30-100 (60-day) OR 200-700 (historical) OR
- High frustration (≥3.5) with lower volume OR
- Specialized use cases affecting specific segments
P3 (Lower):
- Volume <30 (60-day) OR <200 (historical)
- Administrative/low-frequency issues
- Lower frustration with low volume
Step 4: Customer Example Selection
For each P0 and P1 theme:
- Select 5 diverse customer examples:
- Mix of PIT issues (strategic feedback with frustration/MRR) and support tickets (tactical issues)
- Prioritize high frustration examples (≥4) first
- Include variety: different use cases, customer sizes, specific vs. general
- For each example, extract:
- Issue title/ticket name
- Frustration level (if PIT data)
- MRR (if available)
- Full description/content (first 300 chars)
- Add interpretation: "What this means:" explaining the customer impact
Step 5: CSAT Analysis (if data provided)
- Calculate overall metrics:
- Average score
- Distribution by score (1-5)
- Dissatisfaction rate (<4)
- Identify top event triggers (what actions prompted survey)
- Correlate CSAT triggers with support themes
- Extract sample low-score feedback with categories
Step 6: Trend Analysis (if historical data provided)
- Compare key metrics between time periods:
- Average frustration change
- Volume change by theme (percentage point shifts)
- New themes emerging in top 10
- Identify "getting worse" vs "improving" patterns
- Flag NEW issues (not in historical top 10 but now top 5)
Step 7: Report Generation
Use the structure from resources/REPORT_TEMPLATE.md:
Executive Summary (must include):
- Total issues analyzed
- Top 3 critical areas with one-line description
- Key changes vs historical (if applicable)
- Overall frustration trend
- Total revenue at risk
Detailed Analysis by Priority:
- For each P0, P1, P2 theme:
- Metrics table (volume, frustration, MRR, % of total)
- Key pain points (bulleted list)
- 5 customer examples with "What this means"
- "Why P0/P1/P2" explanation
Strategic Recommendations:
- Immediate actions (P0)
- High priority (P1)
- Cross-cutting initiatives
- Impact estimates
Supporting Sections:
- Revenue at risk table
- Frustration heatmap
- Comparison tables (if trend analysis)
- Methodology appendix
Follow-up Analysis Workflow (Deep-Dive Queries)
When user asks specific questions about existing reports (e.g., "Has autosave issue been resolved?", "Show timeline for association complaints"), use this targeted analysis approach:
Step 1: Understand the Context
- Read existing analysis report (if available) to understand:
- Source file path from YAML frontmatter
- Date range of existing analysis
- What theme/issue the user is asking about
- Optionally grep or read data.csv to see how issues were categorized
Step 2: Install Required Dependencies
pip3 install openpyxl pandas --break-system-packages --quiet
Important: Use --break-system-packages flag on macOS to bypass externally-managed-environment errors.
Step 3: Load Raw Data with Python
Use Python via Bash tool with heredoc to load and analyze Excel data:
python3 << 'EOF'
import openpyxl
import pandas as pd
from datetime import datetime, timedelta
# Load Excel file
wb = openpyxl.load_workbook('/full/path/to/feedback-data/file.xlsx')
# Process PIT and Roadblocks sheet
pit_sheet = wb['PIT and Roadblocks']
pit_data = []
pit_headers = [cell.value for cell in pit_sheet[1]]
for row in pit_sheet.iter_rows(min_row=2, values_only=True):
pit_data.append(dict(zip(pit_headers, row)))
pit_df = pd.DataFrame(pit_data)
# Process Support Data sheet
support_sheet = wb['Support Data']
support_data = []
support_headers = [cell.value for cell in support_sheet[1]]
for row in support_sheet.iter_rows(min_row=2, values_only=True):
support_data.append(dict(zip(support_headers, row)))
support_df = pd.DataFrame(support_data)
# Continue with analysis...
EOF
Step 4: Filter and Analyze
# Filter for specific keyword/theme
pit_filtered = pit_df[
pit_df['Use Case Title'].fillna('').str.contains('keyword', case=False, na=False) |
pit_df['Use Case Body'].fillna('').str.contains('keyword', case=False, na=False)
].copy()
support_filtered = support_df[
support_df['Ticket Name'].fillna('').str.contains('keyword', case=False, na=False) |
support_df['Content'].fillna('').str.contains('keyword', case=False, na=False)
].copy()
# Timeline analysis
support_filtered['Created UTC Date'] = pd.to_datetime(support_filtered['Created UTC Date'], errors='coerce')
support_filtered['Month'] = support_filtered['Created UTC Date'].dt.to_period('M')
monthly_counts = support_filtered.groupby('Month').size()
print("Monthly breakdown:")
for month, count in monthly_counts.items():
print(f" {month}: {count} issues")
# Trend analysis
print(f"\nMost recent: {support_filtered['Created UTC Date'].max()}")
print(f"Oldest in dataset: {support_filtered['Created UTC Date'].min()}")
print(f"Total issues: {len(pit_filtered) + len(support_filtered)}")
# Check recent activity (last 30 days)
recent_cutoff = datetime.now() - timedelta(days=30)
recent = support_filtered[support_filtered['Created UTC Date'] >= recent_cutoff]
print(f"Issues in last 30 days: {len(recent)}")
Step 5: Generate Insights
Based on the Python output, provide:
- Total volume of issues matching the query
- Timeline breakdown (monthly or weekly counts)
- Trend analysis: % change from peak to current, identify drop-offs
- Status determination: Resolved / Declining / Active / Increasing
- Specific examples with dates, frustration scores, MRR values
- Recommendation: Whether issue needs action or can be marked resolved
Step 6: Update Existing Report (if applicable)
If the deep-dive reveals the issue is resolved/declining, update the existing report.md:
- Add notes to relevant examples marking them as "(RESOLVED)" or "(DECLINING)"
- Add timeline analysis to report appendix
- Update Strategic Recommendations section
- Add update note to YAML frontmatter
Example: Autosave Timeline Analysis
User question: "Has the autosave issue been resolved?"
Steps taken:
- Read report.md to get source file:
feedback-data/2025-11-03_data-platform-code-orange.xlsx
- Installed pandas/openpyxl
- Loaded raw Excel, filtered for "autosave" mentions in both PIT and Support sheets
- Grouped by month to see trend: April 2025 (9 issues) → Oct 2025 (2 issues)
- Calculated 89% decline from peak
- Determined status: RESOLVED
- Updated report.md with timeline analysis and marked examples as resolved
Edge Cases and Tie-Breakers
- Missing MRR data: Use volume + frustration only for priority
- Ties in volume: Prioritize higher average frustration
- Low sample PIT data: Weight support ticket volume more heavily
- Conflicting signals (high volume, low frustration): Assign P1 and note in report
- New themes: Flag explicitly as "NEW to top X" in report
Quality Checks
Before finalizing report:
Examples
Example Input
User: "Can you analyze this support data and prioritize the top issues? Focus on the last 60 days."
Files provided:
- Data Platform data - Code Orange.xlsx (contains sheets: Ideas Forum, CSAT, PIT and Roadblocks, Support Data)
Example Output
# Data Platform Support Data - Prioritized Analysis (Last 60 Days)
**Analysis Date:** October 31, 2025
**Time Period:** September 1, 2025 - October 31, 2025 (60 days)
**Total Issues Analyzed:** 2,201
## Executive Summary
Analysis of **2,201 customer issues from the last 60 days** reveals:
### Top 3 Critical Areas (P0):
1. **Object Associations** - 468 issues (27.5%), $141K MRR, 3.38 avg frustration
- Association labels unavailable in reports (most common complaint)
2. **Property Edit** - 232 issues (13.6%), $96K MRR, 3.06 avg frustration
- Cannot edit internal values after creation
3. **Property Values & History** - 223 issues (13.1%), $80K MRR
- NEW to top 3 - sync delays and data integrity issues
**Key Changes vs. Historical:**
- Frustration increased 14% (2.71 → 3.09/5)
- Associations now 27.5% of issues (up from 24%)
- Property Values jumped to #3 (was #4)
**Total Revenue at Risk:** $684K MRR
---
## P0 - CRITICAL IMPACT
### 1. Object Associations (468 issues | $141K MRR)
**Metrics:**
- Volume: 21 PIT + 447 Support
- Average Frustration: 3.38/5
- Percentage of Total: 27.5%
**Key Pain Points:**
- Association labels unavailable in reports and lists
- Cannot filter or segment by association labels
- Workflow retrieval requiring custom code
**Customer Examples:**
#### Example 1: Association Label Limits
**Frustration:** 5/5 | **MRR:** $4,049
> "Client wants to be able to have up to 900+ nested relationships, but we cap our association labels at 50."
**What this means:** Customers with complex business models (B2B2B, franchises) hit hard limits on relationship types, forcing them to abandon tracking or use workarounds.
[... 4 more examples ...]
**Why P0:** Highest volume (27.5% of all issues), increasing trend, critical for CRM functionality.
---
## Strategic Recommendations
### Immediate Actions (P0)
1. **Associations Crisis Management**
- Action: Enable association labels in reports/lists
- Impact: 468 issues, $141K MRR
- Timeline: 30 days
[... continued ...]
Testing Checklist
Security & Privacy
Data Handling:
- Support data may contain customer PII (names, emails, company names)
- Do NOT redact customer examples in internal reports (needed for context)
- Do NOT include customer data in Skill files themselves (only process at runtime)
- If creating external reports, ask user if customer names should be redacted
File Storage:
- Converted CSV files stored in /tmp (ephemeral)
- Final reports saved to user-specified location (default: ~/Downloads)
- Do not commit support data to git repositories
MRR Data:
- Treat MRR values as confidential
- Include in internal reports but flag if report will be shared externally
Resources
See resources/ folder for:
- PRIORITIZATION_FRAMEWORK.md: Detailed criteria for assigning P0-P3
- REPORT_TEMPLATE.md: Complete markdown template with all sections
- EXAMPLES.md: Sample analyses with annotations
- ANALYSIS_SCRIPT.py: Python helper for data processing (optional)
1---2name: support-data-analyzer3description: Analyze customer support data (Excel/CSV with PIT, Support Tickets, CSAT) to categorize issues, prioritize by impact (P0-P3), and generate strategic markdown reports with examples and trends.4---5
6## Overview
7
8This Skill analyzes customer support feedback from multiple data sources (PIT/Roadblocks, Support Tickets, CSAT surveys, Ideas Forum) to identify pain points, categorize by theme, prioritize by customer impact, and generate comprehensive strategic reports.
9
10**Supports two analysis modes:**
111. **Comprehensive Analysis**: Full categorization, prioritization, and strategic reporting (initial analysis)
122. **Targeted Deep-Dive**: Timeline analysis, theme investigation, resolution tracking (follow-up queries)
13
14## When to Apply
15
16**Use this skill for analysis of structured support data in the expected format:**
17
18**Initial Analysis:**
19- User provides Excel/CSV files with PIT/Roadblocks, Support Tickets, or CSAT data columns
20- User asks to "analyze support data", "prioritize customer feedback", or "generate impact report"
21- User wants to understand top customer pain points from support channels
22- User needs to scope analysis to a specific time period (e.g., "last 60 days")
23
24**Expected data format:** Excel/CSV with columns like frustration level, MRR, ticket categories, CSAT scores
25
26**Follow-up Analysis:**
27- User asks about specific findings: "Has X issue dropped off?", "Show timeline for Y"
28- User wants to investigate a theme mentioned in existing reports
29- User needs to verify if an issue is resolved/declining/active
30- User asks for examples or details about a specific category
31
32**In scope:**
33- Categorizing issues by product area and sub-category
34- Calculating volume, frustration levels, and revenue impact
35- Assigning priority levels (P0, P1, P2, P3) based on multiple factors
36- Generating markdown reports with executive summaries and customer examples
37- **Timeline analysis and trend tracking for specific issues**
38- **Deep-dive investigation of specific themes**
39- Comparing recent trends vs. historical baselines
40- CSAT analysis and correlation
41
42**Out of scope:**
43- Sentiment analysis requiring NLP models not available in environment
44- Predictive forecasting of future support volumes
45- Root cause analysis requiring engineering investigation
46- Data collection or export from live systems (only analyzes provided files)
47
48## Inputs
49
50**Required:**
51- Excel file(s) or CSV file(s) containing support data with these datasets:
52 - **PIT & Roadblocks**: Strategic customer issues with frustration levels (1-5), MRR data, categories, submitted dates
53 - **Support Tickets**: Support cases with product areas, roadblock types, created dates, ticket content
54 - **Optional but recommended**: CSAT survey responses, Ideas Forum requests
55
56**Optional:**
57- Time range filter (e.g., "last 60 days", "Q4 2025")
58- Historical baseline data for trend comparison
59- Specific focus areas (e.g., "focus on association issues")
60
61**Expected data columns:**
62- PIT data: Submitted At Date, Category, Sub Category, Frustration Level (1-5), MRR (CS), MRR (Sales), Use Case Title, Use Case Body
63- Support data: Created UTC Date, Support Product Area, Support roadblock, Ticket Name, Content
64- CSAT data: Created At Date, Score (1-5), Text, Event Trigger
65
66## Outputs
67
68**Primary artifact:**
69- Comprehensive markdown report (`*_Support_Analysis.md`) containing:
70 - Executive summary with top 3 critical areas
71 - Prioritized themes by P0, P1, P2, P3 with metrics
72 - Customer feedback examples (5 per major theme)
73 - Strategic recommendations
74 - Revenue at risk analysis
75 - Frustration heatmap
76 - Trend comparison (if historical data provided)
77
78**Optional artifacts:**
79- Customer feedback examples document with detailed quotes
80- CSV extracts of filtered data for further analysis
81
82**Success criteria:**
83- Issues categorized into clear themes (e.g., "Object > Associations")
84- Priority levels assigned with clear rationale
85- At least 3-5 real customer examples per P0/P1 issue
86- Actionable recommendations with impact estimates
87
88## Instructions for Claude
89
90### Step 1: Data Loading and Validation
911. Convert Excel files to CSV if needed using Python openpyxl
922. Read all data sources and display summary:
93 - Total records per source
94 - Date range coverage
95 - Column validation (check for required fields)
963. If time filter specified, parse and apply date filtering
974. Report filtered counts and date ranges
98
99### Step 2: Theme Categorization
1001. Combine issues by theme: `{Product Area} > {Sub Category/Roadblock}`
1012. For each theme, calculate:
102 - Total count (PIT + Support tickets)
103 - PIT count and Support count separately
104 - Average frustration (from PIT data where available)
105 - High frustration count (frustration ≥ 4)
106 - Total MRR impact (sum of MRR (CS) + MRR (Sales) from PIT data)
1073. Sort themes by total count descending
1084. Calculate percentage of total for each theme
109
110### Step 3: Priority Assignment
111Apply the prioritization framework from `resources/PRIORITIZATION_FRAMEWORK.md`:
112
113**P0 (Critical):**
114- Volume >150 issues (60-day) OR >1,000 issues (historical) OR
115- High frustration (avg ≥3.5) + volume >100 OR
116- Revenue impact >$75K (60-day) OR >$4M (historical) OR
117- Increasing trend (>20% vs baseline)
118
119**P1 (High):**
120- Volume 100-150 (60-day) OR 700-1,000 (historical) OR
121- Frustration avg 3.0-3.5 with volume >50 OR
122- Revenue impact $25K-$75K (60-day) OR $1.5M-$4M (historical)
123
124**P2 (Medium):**
125- Volume 30-100 (60-day) OR 200-700 (historical) OR
126- High frustration (≥3.5) with lower volume OR
127- Specialized use cases affecting specific segments
128
129**P3 (Lower):**
130- Volume <30 (60-day) OR <200 (historical)
131- Administrative/low-frequency issues
132- Lower frustration with low volume
133
134### Step 4: Customer Example Selection
135For each P0 and P1 theme:
1361. Select 5 diverse customer examples:
137 - Mix of PIT issues (strategic feedback with frustration/MRR) and support tickets (tactical issues)
138 - Prioritize high frustration examples (≥4) first
139 - Include variety: different use cases, customer sizes, specific vs. general
1402. For each example, extract:
141 - Issue title/ticket name
142 - Frustration level (if PIT data)
143 - MRR (if available)
144 - Full description/content (first 300 chars)
1453. Add interpretation: "What this means:" explaining the customer impact
146
147### Step 5: CSAT Analysis (if data provided)
1481. Calculate overall metrics:
149 - Average score
150 - Distribution by score (1-5)
151 - Dissatisfaction rate (<4)
1522. Identify top event triggers (what actions prompted survey)
1533. Correlate CSAT triggers with support themes
1544. Extract sample low-score feedback with categories
155
156### Step 6: Trend Analysis (if historical data provided)
1571. Compare key metrics between time periods:
158 - Average frustration change
159 - Volume change by theme (percentage point shifts)
160 - New themes emerging in top 10
1612. Identify "getting worse" vs "improving" patterns
1623. Flag NEW issues (not in historical top 10 but now top 5)
163
164### Step 7: Report Generation
165Use the structure from `resources/REPORT_TEMPLATE.md`:
166
1671. **Executive Summary** (must include):
168 - Total issues analyzed
169 - Top 3 critical areas with one-line description
170 - Key changes vs historical (if applicable)
171 - Overall frustration trend
172 - Total revenue at risk
173
1742. **Detailed Analysis by Priority**:
175 - For each P0, P1, P2 theme:
176 - Metrics table (volume, frustration, MRR, % of total)
177 - Key pain points (bulleted list)
178 - 5 customer examples with "What this means"
179 - "Why P0/P1/P2" explanation
180
1813. **Strategic Recommendations**:
182 - Immediate actions (P0)
183 - High priority (P1)
184 - Cross-cutting initiatives
185 - Impact estimates
186
1874. **Supporting Sections**:
188 - Revenue at risk table
189 - Frustration heatmap
190 - Comparison tables (if trend analysis)
191 - Methodology appendix
192
193---
194
195## Follow-up Analysis Workflow (Deep-Dive Queries)
196
197When user asks specific questions about existing reports (e.g., "Has autosave issue been resolved?", "Show timeline for association complaints"), use this targeted analysis approach:
198
199### Step 1: Understand the Context
2001. Read existing analysis report (if available) to understand:
201 - Source file path from YAML frontmatter
202 - Date range of existing analysis
203 - What theme/issue the user is asking about
2042. Optionally grep or read data.csv to see how issues were categorized
205
206### Step 2: Install Required Dependencies
207```bash
208pip3 install openpyxl pandas --break-system-packages --quiet
209```
210
211**Important:** Use `--break-system-packages` flag on macOS to bypass externally-managed-environment errors.
212
213### Step 3: Load Raw Data with Python
214Use Python via Bash tool with heredoc to load and analyze Excel data:
215
216```python
217python3 << 'EOF'
218import openpyxl
219import pandas as pd
220from datetime import datetime, timedelta
221
222# Load Excel file
223wb = openpyxl.load_workbook('/full/path/to/feedback-data/file.xlsx')
224
225# Process PIT and Roadblocks sheet
226pit_sheet = wb['PIT and Roadblocks']
227pit_data = []
228pit_headers = [cell.value for cell in pit_sheet[1]]
229
230for row in pit_sheet.iter_rows(min_row=2, values_only=True):
231 pit_data.append(dict(zip(pit_headers, row)))
232
233pit_df = pd.DataFrame(pit_data)
234
235# Process Support Data sheet
236support_sheet = wb['Support Data']
237support_data = []
238support_headers = [cell.value for cell in support_sheet[1]]
239
240for row in support_sheet.iter_rows(min_row=2, values_only=True):
241 support_data.append(dict(zip(support_headers, row)))
242
243support_df = pd.DataFrame(support_data)
244
245# Continue with analysis...
246EOF
247```
248
249### Step 4: Filter and Analyze
250```python
251# Filter for specific keyword/theme
252pit_filtered = pit_df[
253 pit_df['Use Case Title'].fillna('').str.contains('keyword', case=False, na=False) |
254 pit_df['Use Case Body'].fillna('').str.contains('keyword', case=False, na=False)
255].copy()
256
257support_filtered = support_df[
258 support_df['Ticket Name'].fillna('').str.contains('keyword', case=False, na=False) |
259 support_df['Content'].fillna('').str.contains('keyword', case=False, na=False)
260].copy()
261
262# Timeline analysis
263support_filtered['Created UTC Date'] = pd.to_datetime(support_filtered['Created UTC Date'], errors='coerce')
264support_filtered['Month'] = support_filtered['Created UTC Date'].dt.to_period('M')
265monthly_counts = support_filtered.groupby('Month').size()
266
267print("Monthly breakdown:")
268for month, count in monthly_counts.items():
269 print(f" {month}: {count} issues")
270
271# Trend analysis
272print(f"\nMost recent: {support_filtered['Created UTC Date'].max()}")
273print(f"Oldest in dataset: {support_filtered['Created UTC Date'].min()}")
274print(f"Total issues: {len(pit_filtered) + len(support_filtered)}")
275
276# Check recent activity (last 30 days)
277recent_cutoff = datetime.now() - timedelta(days=30)
278recent = support_filtered[support_filtered['Created UTC Date'] >= recent_cutoff]
279print(f"Issues in last 30 days: {len(recent)}")
280```
281
282### Step 5: Generate Insights
283Based on the Python output, provide:
2841. **Total volume** of issues matching the query
2852. **Timeline breakdown** (monthly or weekly counts)
2863. **Trend analysis**: % change from peak to current, identify drop-offs
2874. **Status determination**: Resolved / Declining / Active / Increasing
2885. **Specific examples** with dates, frustration scores, MRR values
2896. **Recommendation**: Whether issue needs action or can be marked resolved
290
291### Step 6: Update Existing Report (if applicable)
292If the deep-dive reveals the issue is resolved/declining, update the existing report.md:
293- Add notes to relevant examples marking them as "(RESOLVED)" or "(DECLINING)"
294- Add timeline analysis to report appendix
295- Update Strategic Recommendations section
296- Add update note to YAML frontmatter
297
298### Example: Autosave Timeline Analysis
299**User question:** "Has the autosave issue been resolved?"
300
301**Steps taken:**
3021. Read report.md to get source file: `feedback-data/2025-11-03_data-platform-code-orange.xlsx`
3032. Installed pandas/openpyxl
3043. Loaded raw Excel, filtered for "autosave" mentions in both PIT and Support sheets
3054. Grouped by month to see trend: April 2025 (9 issues) → Oct 2025 (2 issues)
3065. Calculated 89% decline from peak
3076. Determined status: **RESOLVED**
3087. Updated report.md with timeline analysis and marked examples as resolved
309
310---
311
312### Edge Cases and Tie-Breakers
313- **Missing MRR data**: Use volume + frustration only for priority
314- **Ties in volume**: Prioritize higher average frustration
315- **Low sample PIT data**: Weight support ticket volume more heavily
316- **Conflicting signals** (high volume, low frustration): Assign P1 and note in report
317- **New themes**: Flag explicitly as "NEW to top X" in report
318
319### Quality Checks
320Before finalizing report:
321- [ ] Executive summary has specific numbers (not vague)
322- [ ] Each P0/P1 has exactly 5 customer examples
323- [ ] Examples include "What this means" interpretation
324- [ ] Recommendations are actionable with timelines/impact
325- [ ] All percentages sum correctly
326- [ ] MRR totals are accurate
327- [ ] Customer voice quotes are real (not synthesized)
328
329## Examples
330
331### Example Input
332```
333User: "Can you analyze this support data and prioritize the top issues? Focus on the last 60 days."
334
335Files provided:
336- Data Platform data - Code Orange.xlsx (contains sheets: Ideas Forum, CSAT, PIT and Roadblocks, Support Data)
337```
338
339### Example Output
340```markdown
341# Data Platform Support Data - Prioritized Analysis (Last 60 Days)
342
343**Analysis Date:** October 31, 2025
344**Time Period:** September 1, 2025 - October 31, 2025 (60 days)
345**Total Issues Analyzed:** 2,201
346
347## Executive Summary
348
349Analysis of **2,201 customer issues from the last 60 days** reveals:
350
351### Top 3 Critical Areas (P0):
352
3531. **Object Associations** - 468 issues (27.5%), $141K MRR, 3.38 avg frustration
354 - Association labels unavailable in reports (most common complaint)
355
3562. **Property Edit** - 232 issues (13.6%), $96K MRR, 3.06 avg frustration
357 - Cannot edit internal values after creation
358
3593. **Property Values & History** - 223 issues (13.1%), $80K MRR
360 - NEW to top 3 - sync delays and data integrity issues
361
362**Key Changes vs. Historical:**
363- Frustration increased 14% (2.71 → 3.09/5)
364- Associations now 27.5% of issues (up from 24%)
365- Property Values jumped to #3 (was #4)
366
367**Total Revenue at Risk:** $684K MRR
368
369---
370
371## P0 - CRITICAL IMPACT
372
373### 1. Object Associations (468 issues | $141K MRR)
374
375**Metrics:**
376- Volume: 21 PIT + 447 Support
377- Average Frustration: 3.38/5
378- Percentage of Total: 27.5%
379
380**Key Pain Points:**
381- Association labels unavailable in reports and lists
382- Cannot filter or segment by association labels
383- Workflow retrieval requiring custom code
384
385**Customer Examples:**
386
387#### Example 1: Association Label Limits
388**Frustration:** 5/5 | **MRR:** $4,049
389> "Client wants to be able to have up to 900+ nested relationships, but we cap our association labels at 50."
390
391**What this means:** Customers with complex business models (B2B2B, franchises) hit hard limits on relationship types, forcing them to abandon tracking or use workarounds.
392
393[... 4 more examples ...]
394
395**Why P0:** Highest volume (27.5% of all issues), increasing trend, critical for CRM functionality.
396
397---
398
399## Strategic Recommendations
400
401### Immediate Actions (P0)
4021. **Associations Crisis Management**
403 - Action: Enable association labels in reports/lists
404 - Impact: 468 issues, $141K MRR
405 - Timeline: 30 days
406
407[... continued ...]
408```
409
410## Testing Checklist
411
412- [ ] Frontmatter present with name ≤64 chars, description ≤200 chars
413- [ ] Description clearly states when to use ("analyze customer support data")
414- [ ] YAML dependencies listed (python, openpyxl)
415- [ ] At least one complete input/output example
416- [ ] Resources files present and referenced
417- [ ] No hardcoded customer data or secrets
418- [ ] Priority framework is objective and consistent
419- [ ] Example customer quotes are real (not generated)
420
421## Security & Privacy
422
423**Data Handling:**
424- Support data may contain customer PII (names, emails, company names)
425- Do NOT redact customer examples in internal reports (needed for context)
426- Do NOT include customer data in Skill files themselves (only process at runtime)
427- If creating external reports, ask user if customer names should be redacted
428
429**File Storage:**
430- Converted CSV files stored in /tmp (ephemeral)
431- Final reports saved to user-specified location (default: ~/Downloads)
432- Do not commit support data to git repositories
433
434**MRR Data:**
435- Treat MRR values as confidential
436- Include in internal reports but flag if report will be shared externally
437
438## Resources
439
440See `resources/` folder for:
441- **PRIORITIZATION_FRAMEWORK.md**: Detailed criteria for assigning P0-P3
442- **REPORT_TEMPLATE.md**: Complete markdown template with all sections
443- **EXAMPLES.md**: Sample analyses with annotations
444- **ANALYSIS_SCRIPT.py**: Python helper for data processing (optional)