Analyze weekly Fireflies sales calls with GPT-4o-mini, Google Sheets and Slack
### Description
Connect your Fireflies account once and activate the workflow โ every Monday at 9AM it runs automatically without any input from you. It pulls all sales call transcripts from the past 7 days, analyzes each one with GPT-4o-mini, and extracts six intelligence fields: pricing mentions, objections, buying signals, competitor mentions, a key takeaway, and a recommended next action. Every call is logged as one row in Google Sheets and a full weekly digest is posted to your Slack channel. Built for sales managers and revenue teams who want structured call intelligence delivered without manual review.
---
## What This Workflow Does
- **Fetches last 7 days of calls automatically** โ Pulls up to 50 recent transcripts from Fireflies and filters to only those recorded in the past week
- **Analyzes every call individually** โ GPT-4o-mini reads each transcript and extracts six structured fields per call, not a generic summary
- **Detects objections and buying signals** โ Surfaces exactly what concerns were raised and what positive signals suggest the deal is moving forward
- **Flags competitor mentions** โ Identifies any competitor names or alternative products that came up across all calls this week
- **Logs each call to Google Sheets** โ Appends one 13-column row per call so your team has a permanent, searchable record of every sales conversation
- **Delivers a weekly Slack digest** โ Aggregates all calls into one report covering totals, top objections, top buying signals, and a call-by-call overview
- **Exits cleanly when no calls exist** โ If no transcripts are found for the week, the workflow stops silently without errors or empty Slack messages
---
## Setup Requirements
### Tools Needed
- n8n instance (self-hosted or cloud)
- Fireflies.ai account with API access
- OpenAI account with GPT-4o-mini API access
- Google Sheets (one sheet with a tab named **Sales Call Analysis**)
- Slack workspace with OAuth2 app configured
### Credentials Required
- Fireflies API key (pasted directly into **2. Set โ Config Values** โ no n8n credential needed)
- OpenAI API key
- Google Sheets OAuth2
- Slack OAuth2
**Estimated Setup Time: 15โ20 minutes**
---
## Step-by-Step Setup
1. **Import the workflow** โ Open n8n โ Workflows โ Import from JSON โ paste the workflow JSON โ click Import
2. **Get your Fireflies API key** โ Log in to fireflies.ai โ go to Settings โ Integrations โ copy your API key
3. **Fill in Config Values** โ Open node **2. Set โ Config Values** โ replace all placeholders:
| Field | What to enter |
|---|---|
| `YOUR_FIREFLIES_API_KEY` | Your Fireflies API key from step 2 |
| `YOUR_GOOGLE_SHEET_ID` | The ID from your Google Sheet URL (the string between `/d/` and `/edit`) |
| `Sales Call Analysis` | Leave as-is, or change to match your sheet tab name exactly |
| `#sales-team` | Your Slack channel name including the `#` |
| `YOUR COMPANY NAME` | Your company name (used in the AI prompt and Slack report) |
| `salesKeywords` | Comma-separated keywords to identify sales calls (default: `sales,client,demo,proposal,pricing,onboarding,deal,contract`) |
4. **Connect OpenAI** โ Open node **10. OpenAI โ GPT-4o-mini Model** โ click the credential dropdown โ add your OpenAI API key โ test the connection
5. **Create your Google Sheet** โ Open Google Sheets โ create a new sheet โ add a tab named exactly **Sales Call Analysis** โ add these 13 column headers in row 1: `Call Date`, `Meeting Title`, `Duration (min)`, `Participants`, `Overall Sentiment`, `Pricing Mentions`, `Objections`, `Buying Signals`, `Competitor Mentions`, `Key Takeaway`, `Recommended Action`, `Transcript URL`, `Logged At`
6. **Connect Google Sheets** โ Open node **13. Google Sheets โ Log Call Analysis** โ click the credential dropdown โ add Google Sheets OAuth2 โ sign in with your Google account โ authorize access
7. **Connect Slack** โ Open node **15. Slack โ Send Weekly Report** โ click the credential dropdown โ connect your Slack workspace via OAuth2 โ invite the n8n bot to your sales channel in Slack (`/invite @n8n`)
8. **Activate the workflow** โ Toggle the workflow to Active โ it will run automatically every Monday at 9AM
> โ ๏ธ **Test before Monday** โ To test immediately without waiting for Monday, open node **1. Schedule โ Every Monday 9AM**, click "Execute step", then run the full workflow manually from there.
---
## How It Works (Step by Step)
**Step 1 โ Schedule: Every Monday 9AM**
This step fires the workflow automatically every Monday morning at 9AM. No manual trigger is needed. Once the workflow is active, this runs on its own every week.
**Step 2 โ Set: Config Values**
Your Fireflies API key, Google Sheet ID, sheet tab name, Slack channel, company name, sales keywords, and the 7-day date window are all stored here. The week start and end dates are calculated automatically based on today's date so you never need to update them manually.
**Step 3 โ HTTP: Fetch Recent Transcripts**
A request is sent to the Fireflies API using your API key. It retrieves the 50 most recent transcripts from your account, including each call's ID, title, date, duration, and participants. This is a lightweight fetch โ full transcript content comes later.
**Step 4 โ Code: Filter Last 7 Days**
The 50 transcripts are filtered down to only those recorded in the past 7 days. Each transcript that passes the filter becomes its own separate item so the next steps process each call individually. If no transcripts exist at all, a fallback result is passed forward.
**Step 5 โ IF: Any Transcripts Found?**
This is the gate check. If transcripts were found (YES path), each one moves forward to full analysis. If no transcripts were found this week (NO path), the workflow routes to **6. Set โ No Calls This Week** and stops cleanly โ no errors, no empty reports.
**Step 6 โ Set: No Calls This Week**
This step handles the empty-week case. It sets a simple message confirming no calls were recorded and the workflow ends here for that run.
**Step 7 โ HTTP: Fetch Full Transcript**
For each call that passed the filter, a second Fireflies API request is made to retrieve the complete transcript details: all sentences with speaker labels, AI-detected pricing sentences, questions, tasks, keyword summary, overview, and sentiment percentages.
**Step 8 โ Code: Extract Transcript Data**
The full transcript is processed here. Sentences are assembled into readable text (limited to 4,000 characters for GPT efficiency). Fireflies AI-flagged pricing sentences and question sentences are extracted separately. Sentiment percentages are converted into a single label: Positive, Mostly Positive, Mixed, or Negative. All data is packaged cleanly for the AI step.
**Step 9 โ AI Agent: Analyze Sales Call**
GPT-4o-mini receives the call details, sentiment data, Fireflies-detected pricing sentences, keywords, overview, and the transcript excerpt. It returns exactly six fields: pricing mentions, objections, buying signals, competitor mentions, a key takeaway under 25 words, and a recommended action for the sales rep to take within 48 hours.
**Step 10 โ OpenAI: GPT-4o-mini Model**
This is the language model powering the analysis step. It runs at temperature 0.3 for consistent, factual extraction and is capped at 800 tokens per call to keep costs predictable across the full week's batch.
**Step 11 โ Parser: Structured Call Analysis**
This step enforces the exact six-field schema GPT-4o-mini must return. It validates that all required fields are present and correctly typed before the results move forward, preventing malformed output from reaching your sheet.
**Step 12 โ Code: Combine Analysis Results**
The AI output is merged with the original transcript metadata (date, title, duration, participants, sentiment, transcript URL). A log timestamp is also added. This creates the complete data row that goes to both Google Sheets and the Slack aggregation step.
**Step 13 โ Google Sheets: Log Call Analysis**
One row is appended to your Sales Call Analysis tab for every call analyzed. All 13 columns are populated: date, title, duration, participants, sentiment, pricing, objections, buying signals, competitors, key takeaway, recommended action, transcript URL, and logged-at timestamp.
**Step 14 โ Code: Build Weekly Slack Summary**
All analyzed calls are aggregated into a single weekly digest. The code counts total calls, positive calls, calls with objections, calls with buying signals, and compiles unique competitor mentions. The top 3 objections and top 3 buying signals are pulled from across all calls. A call-by-call overview line is added for every transcript.
**Step 15 โ Slack: Send Weekly Report**
The complete weekly digest is posted to your Slack channel. The message includes the week date range, summary totals, top objections, top buying signals, competitor mentions, and a one-line overview of every call. A footer confirms the full analysis is logged in Google Sheets.
---
## Key Features
โ
**Fully automated weekly cadence** โ Runs every Monday at 9AM with zero manual input after setup
โ
**Per-call AI intelligence** โ Each call gets its own six-field analysis, not a rolled-up average
โ
**Fireflies AI signals as input** โ Pricing sentences and questions detected by Fireflies are fed directly into GPT for more accurate extraction
โ
**Structured output enforced** โ A schema parser validates every AI response before it reaches your sheet โ no broken rows
โ
**Sentiment scoring per call** โ Each call is rated Positive, Mostly Positive, Mixed, or Negative based on Fireflies sentiment percentages
โ
**Competitor tracking built in** โ Competitor mentions are collected across all calls and deduplicated into one list in the Slack report
โ
**48-hour action item per call** โ Every call ends with one concrete action the sales rep should take โ not a vague suggestion
โ
**Clean empty-week handling** โ No transcripts this week means a clean stop, not an error or blank Slack message
---
## Customisation Options
**Change the schedule day or time** โ In node **1. Schedule โ Every Monday 9AM**, edit the cron expression `0 9 * * 1` to run on a different day or time. For example, `0 8 * * 5` runs every Friday at 8AM for an end-of-week review instead.
**Increase the transcript fetch limit** โ In node **3. HTTP โ Fetch Recent Transcripts**, change `limit: 50` in the GraphQL query body to `100` if your team records more than 50 calls per week to ensure no calls are missed.
**Expand the date window beyond 7 days** โ In node **2. Set โ Config Values**, change `{days: 7}` in both the `weekStart` and `sevenDaysAgoMs` fields to `{days: 14}` for a bi-weekly analysis window.
**Add a Slack alert for high-objection calls** โ After node **12. Code โ Combine Analysis Results**, add an IF check: if the `objections` field does not contain "No objections", post an immediate Slack alert to a `#deal-risk` channel so the sales manager can follow up same day.
**Add a Gmail summary to the sales manager** โ After node **15. Slack โ Send Weekly Report**, add a Gmail node to also email the full weekly digest to your sales manager's inbox as a backup record outside of Slack.
**Filter to specific call types using keywords** โ In node **2. Set โ Config Values**, edit the `salesKeywords` field to narrow analysis to specific call types โ for example, change to `demo,discovery,closing` to analyze only those pipeline stages.
---
## Troubleshooting
**Fireflies returning no transcripts or an auth error:**
- Confirm `YOUR_FIREFLIES_API_KEY` in node **2. Set โ Config Values** is replaced with your actual key โ not the placeholder text
- Get your key from fireflies.ai โ Settings โ Integrations โ API Key
- Make sure your Fireflies plan includes API access โ some free plans do not
**Workflow not triggering on Monday:**
- Confirm the workflow is toggled to Active โ it will not run on a schedule if inactive
- Check that the cron expression in node **1. Schedule โ Every Monday 9AM** is `0 9 * * 1` โ any edit to this field can break the schedule
- To test immediately, click on node 1 and use the manual Execute option
**Google Sheets not logging rows:**
- Confirm the Google Sheets OAuth2 credential in node **13. Google Sheets โ Log Call Analysis** is connected and not expired
- Check that `YOUR_GOOGLE_SHEET_ID` in node **2. Set โ Config Values** matches the ID in your sheet URL exactly
- Confirm the tab is named **Sales Call Analysis** exactly โ capitalization and spacing must match `sheetName` in Config Values
**AI returning incomplete or missing fields:**
- The schema parser in node **11. Parser โ Structured Call Analysis** enforces all six fields โ if output is missing fields, check the execution log of node **9. AI Agent โ Analyze Sales Call** for the raw GPT response
- Confirm the OpenAI credential in node **10. OpenAI โ GPT-4o-mini Model** is connected and your account has available credits
- If transcripts are very short, GPT may have little content to extract โ the fallback text ("No objections detected", etc.) will be used automatically
**Slack report not arriving:**
- Confirm the Slack OAuth2 credential in node **15. Slack โ Send Weekly Report** is connected and authorized
- Check that the channel name in node **2. Set โ Config Values** includes the `#` prefix and matches your actual Slack channel name exactly
- Type `/invite @n8n` in your Slack channel to ensure the bot has posting permission
---
## Support
Need help setting this up or want a custom version built for your team or agency?
๐ง Email: [[email protected]]([email protected])
๐ Website: [https://isawow.com/](https://isawow.com/)