Use when extracting product signals from meeting transcripts - systematically identifies asks, problems, quotes, and evidence across time windows with customer attribution
Installs into .claude/skills of the current project.
Are you the author of Meeting Synthesis?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/majiayu000-meeting-synthesis)
---
name: meeting-synthesis
description: Use when extracting product signals from meeting transcripts - systematically identifies asks, problems, quotes, and evidence across time windows with customer attribution
allowed-tools: Read, Grep, Glob
---
# Meeting Synthesis
## Purpose
Extract actionable product signals from meeting transcripts:
- Feature requests and capability asks
- Pain points and friction areas
- Customer quotes and verbatim feedback
- Evidence for epic creation and prioritization
- Pattern detection across multiple customers
## When to Use This Skill
Activate automatically when:
- `product-planning` workflow gathers signals for epics
- `cs-prep` workflow compiles customer context for QBRs
- `strategy-session` workflow needs customer insights
- User explicitly requests meeting synthesis
- Any workflow requires customer evidence extraction
## Signal Types
### 1. Feature Requests ("Asks")
Explicit requests for new capabilities or enhancements.
**Indicators:**
- "We need..."
- "Can you build..."
- "It would be great if..."
- "Our team wants..."
**Extract:**
- What capability is requested?
- Why is it needed? (business impact)
- Who requested it? (customer, role)
- When? (meeting date)
### 2. Pain Points ("Problems")
Friction, blockers, or inefficiencies users experience.
**Indicators:**
- "It's frustrating that..."
- "We struggle with..."
- "The current process is..."
- "Our team spends too much time..."
**Extract:**
- What is the pain point?
- How does it impact workflow/outcomes?
- Frequency/severity?
- Who experiences it?
### 3. Onboarding Friction
Specific difficulties during setup or first value realization.
**Indicators:**
- "Setup was confusing..."
- "Took us X weeks to..."
- "Couldn't figure out how to..."
- "Documentation unclear on..."
**Extract:**
- What step caused friction?
- How long did it take?
- Was it eventually resolved?
- Suggestions for improvement?
### 4. Integration Gaps
Missing connectors or data sync capabilities.
**Indicators:**
- "We use [Tool X] but can't connect..."
- "Data sync with [Platform Y]..."
- "Export to [System Z]..."
**Extract:**
- What integration is needed?
- What data needs to flow?
- Current workaround (if any)?
- Business impact of gap?
### 5. Performance Needs
Speed, scale, or reliability requirements.
**Indicators:**
- "Too slow when..."
- "Times out on..."
- "Can't handle X records..."
- "Need real-time..."
**Extract:**
- What operation is slow?
- Current performance vs. needed?
- Scale requirements?
- Impact on usage?
## Synthesis Process
### 1. Determine Time Window
**Inputs:**
- `days`: Explicit lookback window (e.g., 7, 14, 30)
- `last_run`: Timestamp from state file (e.g., `datasets/product/.meetings-to-backlog-state.json`)
- Default: 3 days if no inputs provided
**Calculate cutoff date:**
```
If days provided:
cutoff_date = current_date - days
Else if last_run exists:
cutoff_date = last_run timestamp
Else:
cutoff_date = current_date - 3 days
```
### 2. Collect Meeting Files
**Scan paths:**
```
datasets/meetings/Customers/**/YYYY/*.md (where date >= cutoff_date)
datasets/meetings/Internal/Product/YYYY/*.md (where date >= cutoff_date)
```
**Use Glob to find files:**
```
Glob pattern: datasets/meetings/Customers/**/2025/*.md
Glob pattern: datasets/meetings/Internal/Product/2025/*.md
```
**Filter by date:**
- Extract date from filename (YYYY-MM-DD prefix)
- Compare to cutoff_date
- Keep only files >= cutoff_date
### 3. Extract Signals from Each Meeting
**For each meeting file:**
**A. Parse frontmatter:**
```yaml
date: "YYYY-MM-DD"
type: "sales|product|customersuccess|..."
customer: "Company Name"
participants: ["Person A", "Person B"]
tags: ["2025Q3", "keyword"]
```
**B. Read sections:**
- `## ⬇️ AI Summary` → High-level signals
- `## ⬇️ Action Items` → Commitments and follow-ups
- `## ⬇️ Full Transcript` → Detailed context and quotes
**C. Identify signal candidates:**
Use pattern matching:
```
Feature requests: grep -i "we need\|can you\|would be great\|want to" transcript
Pain points: grep -i "frustrat\|struggle\|difficult\|problem\|issue" transcript
Onboarding: grep -i "setup\|onboard\|getting started\|first" transcript
Integrations: grep -i "integrat\|connect\|sync\|export" transcript
Performance: grep -i "slow\|timeout\|performance\|scale" transcript
```
**D. Extract verbatim quotes:**
- Capture 1-3 sentence snippets around signal indicators
- Preserve exact wording for evidence
- Include speaker attribution if available
**E. Record metadata:**
For each signal:
```
{
"signal_text": "Verbatim quote or paraphrase",
"signal_type": "ask|problem|friction|integration|performance",
"customer": "Company Name",
"date": "YYYY-MM-DD",
"meeting_type": "sales|product|customersuccess",
"source_file": "/path/to/meeting.md",
"section": "AI Summary|Action Items|Full Transcript"
}
```
### 4. Cluster Signals
**Semantic clustering:**
- Group similar signals across customers
- Identify common themes
- Label clusters with action-style names (Verb + Object + Outcome)
**Examples:**
- "Revamp onboarding to reduce TTFV" (multiple onboarding friction signals)
- "Add Google Sheets export capability" (multiple export/integration requests)
- "Improve dashboard load performance" (multiple performance complaints)
**For each cluster:**
```
{
"cluster_label": "Action-style theme name",
"mention_count": N, # Total signal occurrences
"unique_accounts": N, # Distinct customers
"unique_functions": N, # Customer vs. internal sources
"signals": [array of signal objects],
"recentness_weight": calculated_score # Newer = higher
}
```
### 5. Compute Signal Metrics
**For each cluster:**
**A. Mention count:**
Total occurrences across all meetings.
**B. Unique accounts:**
Distinct customer names in signal sources.
**C. Unique functions:**
Count of different source types:
- External customers
- Internal product team
- Partner/agency feedback
**D. Recentness weight:**
```
For each signal in cluster:
days_ago = current_date - signal.date
recentness_score = max(0, 30 - days_ago) / 30 # Linear decay over 30 days
Average recentness across all signals in cluster
```
**E. Source diversity:**
Mix of meeting types:
- Sales calls
- Product feedback sessions
- Customer success check-ins
- Onboarding calls
Higher diversity = stronger signal.
### 6. Output Synthesized Data
**Return structured object:**
```
{
"time_window": {
"start_date": "YYYY-MM-DD",
"end_date": "YYYY-MM-DD",
"days_scanned": N,
"meetings_processed": N
},
"clusters": [
{
"label": "Cluster name",
"mention_count": N,
"unique_accounts": N,
"unique_functions": N,
"recentness_weight": 0.0-1.0,
"source_diversity": 0.0-1.0,
"signals": [
{
"text": "Quote or paraphrase",
"customer": "Company",
"date": "YYYY-MM-DD",
"meeting_type": "...",
"source_file": "..."
}
]
}
],
"raw_signals": [all unclustered signals for reference]
}
```
## Filtering and Scoping
### Customer Filter
**Input:** `include_customers` (comma-separated list)
**Behavior:**
- If provided: Only process meetings where `customer` field matches list
- If not provided: Process all customers
**Example:**
```
include_customers: "PrettyBoy,CompoundStudio,Joy Organics"
→ Only synthesize signals from these three customers
```
### Function Filter
**Input:** `include_internal_functions` (comma-separated list)
**Behavior:**
- If provided: Only process internal meetings from specified functions
- Functions: Product, CS, Sales, Marketing, Ops
**Example:**
```
include_internal_functions: "Product,CS"
→ Process internal Product and CS meetings, skip Sales/Marketing/Ops
```
### Signal Thresholds
**Input filters:**
- `min_mentions`: Minimum total mentions to qualify (default: 1)
- `min_sources`: Minimum distinct sources (customers/functions) to qualify (default: 1)
**Application:**
After clustering, filter out clusters that don't meet thresholds:
```
Keep cluster if:
cluster.mention_count >= min_mentions AND
cluster.unique_accounts + cluster.unique_functions >= min_sources
```
### Type Exclusions
**Input:** `exclude_types` (comma-separated list)
**Behavior:**
Ignore signals matching certain categories.
**Default exclusions:**
```
exclude_types: "bugs,housekeeping"
```
**Examples:**
- "bugs": Bug reports (should go to issue tracker, not epics)
- "housekeeping": Internal cleanup tasks
- "research": Exploratory ideas (not ready for roadmap)
## Integration with Workflows
### Product Planning Integration
**Invoked by:**
- `product-planning` workflow
**Inputs:**
- Time window (days or last_run)
- Customer filter (optional)
- Function filter (optional)
- Thresholds (min_mentions, min_sources)
**Outputs:**
- Clustered signals ready for epic creation
- Evidence for epic "Why now" sections
- Customer quotes for epic proposals
### CS Prep Integration
**Invoked by:**
- `cs-prep` workflow
**Inputs:**
- Specific customer name
- Time window (typically 30-90 days for QBR prep)
**Outputs:**
- Customer-specific signal history
- Pain points and friction areas
- Feature requests and timeline
- Quotes for QBR discussion
### Strategy Session Integration
**Invoked by:**
- `strategy-session` workflow
**Inputs:**
- Time window (often broader, e.g., 90 days)
- Optional topic filter
**Outputs:**
- Cross-customer patterns
- Market trends from customer feedback
- Evidence for strategic decisions
## Success Criteria
Meeting synthesis complete when:
- All meetings in time window processed
- Signals extracted and categorized
- Clustering applied (semantic grouping)
- Metrics computed (mentions, accounts, recency)
- Output structured for consuming workflows
- Verbatim quotes preserved for evidence
## Common Mistakes
| Mistake | Fix |
|---------|-----|
| Paraphrasing customer quotes | Preserve verbatim text for accuracy |
| Ignoring meeting date filters | Respect cutoff_date strictly |
| Missing signal categorization | Tag each signal as ask/problem/friction/etc. |
| Not recording source file paths | Track every signal back to source meeting |
| Skipping semantic clustering | Group similar signals for pattern detection |
## Related Skills
- **meeting-schema-validation**: Validates meetings before synthesis
- **priority-scoring**: Uses synthesis output for epic prioritization
- **product-planning**: Primary consumer of synthesis output
## Anti-Rationalization Blocks
Common excuses that are **explicitly rejected**:
| Rationalization | Reality |
|----------------|---------|
| "Close enough" on quotes | Preserve exact wording or mark as paraphrase. |
| "Skip old meetings" | Process all meetings in time window. |
| "This signal doesn't fit categories" | Categorize as best match or flag as uncategorized. |
| "Single mention isn't worth tracking" | Track all signals, filter by thresholds later. |