Hey everyone! I’m so excited to share a little weekend project I just wrapped up that’s already making my marketing ops life easier. As many of you know, I’m a huge fan of Fireflies.ai for capturing meeting transcripts—it’s been a game-changer for our daily standups with the sales and marketing teams. But I found myself wanting a quicker, more visible way to track key outcomes and action items without having to dig through the full transcript every time.
So, I built a simple Slack bot that automatically parses our daily standup transcripts from Fireflies and posts a formatted summary into our designated #standup-metrics channel. It pulls out things like:
- **Key decisions made** (e.g., "Pause campaign X," "Move forward with integration Y")
- **Blockers flagged** by team members
- **Action items** with owners (using simple pattern matching for "I will," "assigned to," etc.)
- **Sentiment tone** (just basic positive/neutral/negative from keywords—nothing too fancy!)
The bot runs on a schedule every morning, fetches the transcript from Fireflies via their API (for the previous day's standup), processes the text, and then uses Slack's webhook to post. It’s built in Python and hosted on a simple AWS Lambda. Here’s the core snippet for the parsing logic—it’s pretty straightforward but effective for our structured standup format:
```python
# (Example snippet - I'd share the full repo link if anyone's interested!)
def extract_highlights(transcript):
highlights = {
'decisions': [],
'blockers': [],
'actions': [],
'tone': 'neutral'
}
# Simple line-by-line checks for keywords
for line in transcript.split('\n'):
line_lower = line.lower()
if 'decided' in line_lower or 'agree' in line_lower:
highlights['decisions'].append(line.strip())
if 'block' in line_lower or 'stuck' in line_lower:
highlights['blockers'].append(line.strip())
if 'i will' in line_lower or 'assigned to' in line_lower:
highlights['actions'].append(line.strip())
# Basic tone check (very simple version)
positive_words = ['great', 'progress', 'yes', 'done']
negative_words = ['concern', 'issue', 'waiting', 'can’t']
# ... scoring logic here
return highlights
```
This has been awesome for keeping the entire revenue team (marketing + sales ops) aligned without extra manual work. I’m curious—has anyone else built custom integrations or automations on top of Fireflies data? I’d love to swap notes on how you’re piping meeting insights into your CRMs (we use HubSpot) or analytics dashboards. Maybe there are better ways to handle the natural language processing part for action items!
> "sentiment tone (just basic positive/neutral/negative from keywords -- nothing too fancy!)"
That's the part that'd make me nervous. Keyword-based sentiment in meeting transcripts is basically random noise. Misses sarcasm, misses context, and your precision will tank once you have more than 5 people talking. What's your false positive rate? I'd be curious to see a confusion matrix on a sample of 100 flagged items.
Also, pattern matching on "I will" for action items works until someone says "I will not" or "I will look into it" (which is not an action). Ever measured recall/accuracy on that? Not trying to tear it down, just wondering if you've validated it against a manual review.
Agree completely on the "I will" pattern. Ran a similar extraction for sprint planning last year.
I logged matched phrases for a month. Over 30% were non-actions like "I will not be able to" or "I will think about it." Precision was 68%.
If you keep the keyword approach, you need a denylist filter at minimum. We added regex to require a following noun within three words. Improved precision to 82%, but recall dropped.
Metrics don't lie.