fireflies-core-workflow-a
Retrieves meeting data from Fireflies.ai using GraphQL to extract transcripts, summaries, and action items programmatically.
Install
mkdir -p .claude/skills/fireflies-core-workflow-a && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6341" && unzip -o skill.zip -d .claude/skills/fireflies-core-workflow-a && rm skill.zipInstalls to .claude/skills/fireflies-core-workflow-a
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Retrieve and process Fireflies.ai meeting transcripts with speaker diarizationKey capabilities
- →Build a GraphQL client for Fireflies.ai API
- →List meeting transcripts with filters
- →Fetch full transcripts including speaker diarization and sentences
- →Process meeting intelligence to extract action items and sentiment
- →Export transcripts to text format
How it works
The skill uses a GraphQL client to query the Fireflies.ai API for meeting transcripts. It then processes the retrieved data to extract speaker-diarized sentences, summaries, action items, and other meeting intelligence.
Inputs & outputs
When to use fireflies-core-workflow-a
- →Fetch meeting transcripts via GraphQL
- →Extract action items from meetings
- →Build meeting intelligence pipelines
- →Process speaker-diarized transcript data
About this skill
Fireflies.ai Core Workflow A -- Transcript Retrieval & Processing
Overview
Primary workflow for Fireflies.ai: fetch meeting transcripts via GraphQL, process speaker-diarized sentences, extract action items and summaries, and route meeting intelligence downstream.
Prerequisites
- Completed
fireflies-install-authsetup FIREFLIES_API_KEYset with Business+ plan for full access- At least one completed meeting in Fireflies
Instructions
Step 1: Build the GraphQL Client
// lib/fireflies.ts
const FIREFLIES_API = "https://api.fireflies.ai/graphql";
export async function firefliesQuery<T = any>(
query: string,
variables?: Record<string, any>
): Promise<T> {
const res = await fetch(FIREFLIES_API, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.FIREFLIES_API_KEY}`,
},
body: JSON.stringify({ query, variables }),
});
const json = await res.json();
if (json.errors) {
const err = json.errors[0];
throw new Error(`Fireflies API error: ${err.message} (${err.code || "unknown"})`);
}
return json.data;
}
Step 2: List Transcripts with Filters
const LIST_TRANSCRIPTS = `
query ListTranscripts(
$limit: Int,
$mine: Boolean,
$fromDate: DateTime,
$toDate: DateTime,
$organizers: [String],
$participants: [String]
) {
transcripts(
limit: $limit
mine: $mine
fromDate: $fromDate
toDate: $toDate
organizers: $organizers
participants: $participants
) {
id title date duration
organizer_email participants
summary { overview action_items keywords }
}
}
`;
// Fetch this week's meetings for a specific organizer
const data = await firefliesQuery(LIST_TRANSCRIPTS, {
limit: 20,
fromDate: "2026-03-15T00:00:00Z",
organizers: ["[email protected]"],
});
Step 3: Fetch Full Transcript with Sentences
const GET_TRANSCRIPT = `
query GetTranscript($id: String!) {
transcript(id: $id) {
id title date duration
organizer_email
speakers { id name }
sentences {
index
speaker_name
speaker_id
text
raw_text
start_time
end_time
ai_filters {
task
question
sentiment
pricing
metric
date_and_time
}
}
summary {
overview
short_summary
bullet_gist
action_items
keywords
outline
topics_discussed
}
meeting_attendees { displayName email }
meeting_attendance { name join_time leave_time }
analytics {
sentiments { positive_pct negative_pct neutral_pct }
speakers {
name duration word_count
words_per_minute questions
longest_monologue filler_words
}
}
}
}
`;
const { transcript } = await firefliesQuery(GET_TRANSCRIPT, { id: "abc123" });
Step 4: Process Meeting Intelligence
interface MeetingIntelligence {
id: string;
title: string;
attendees: string[];
actionItems: string[];
keyTopics: string[];
speakerBreakdown: { name: string; minutes: number; wordCount: number }[];
sentiment: { positive: number; negative: number; neutral: number };
questions: string[];
}
function processMeeting(transcript: any): MeetingIntelligence {
// Extract questions from AI filters
const questions = transcript.sentences
.filter((s: any) => s.ai_filters?.question)
.map((s: any) => `${s.speaker_name}: ${s.text}`);
return {
id: transcript.id,
title: transcript.title,
attendees: transcript.meeting_attendees?.map((a: any) => a.email) || [],
actionItems: transcript.summary?.action_items || [],
keyTopics: transcript.summary?.keywords || [],
speakerBreakdown: (transcript.analytics?.speakers || []).map((s: any) => ({
name: s.name,
minutes: Math.round(s.duration / 60),
wordCount: s.word_count,
})),
sentiment: {
positive: transcript.analytics?.sentiments?.positive_pct || 0,
negative: transcript.analytics?.sentiments?.negative_pct || 0,
neutral: transcript.analytics?.sentiments?.neutral_pct || 0,
},
questions,
};
}
Step 5: Export Transcript as Text
function transcriptToText(transcript: any): string {
const lines: string[] = [
`# ${transcript.title}`,
`Date: ${transcript.date} | Duration: ${transcript.duration}min`,
`Speakers: ${transcript.speakers.map((s: any) => s.name).join(", ")}`,
"",
"## Summary",
transcript.summary?.overview || "(no summary)",
"",
"## Action Items",
...(transcript.summary?.action_items || []).map((a: string) => `- ${a}`),
"",
"## Transcript",
];
for (const s of transcript.sentences) {
const timestamp = formatTimestamp(s.start_time);
lines.push(`[${timestamp}] ${s.speaker_name}: ${s.text}`);
}
return lines.join("\n");
}
function formatTimestamp(seconds: number): string {
const m = Math.floor(seconds / 60);
const s = Math.floor(seconds % 60);
return `${String(m).padStart(2, "0")}:${String(s).padStart(2, "0")}`;
}
Error Handling
| Error | Cause | Solution |
|---|---|---|
auth_failed | Invalid API key | Regenerate in Fireflies dashboard |
Empty sentences array | Transcript still processing | Check meeting_info.summary_status |
null summary | Short meeting (<1 min) | Summary requires minimum content |
| Rate limit 429 | Over 60 req/min (Business) | Implement backoff per fireflies-rate-limits |
Missing analytics | Free/Pro plan | Analytics requires Business+ plan |
Output
- Full transcript with speaker-diarized sentences and timestamps
- AI-generated summary, action items, and keywords
- Speaker analytics with talk time, word count, and sentiment
- Meeting intelligence object ready for downstream processing
Resources
Next Steps
For search, analytics, and AskFred, see fireflies-core-workflow-b.
When not to use it
- →When the API key is invalid
- →When the transcript is still processing
- →When the meeting is too short to generate a summary
Prerequisites
Limitations
- →Analytics data requires a Business+ plan
- →Rate limits apply to API requests
- →Empty sentences array indicates the transcript is still processing
How it compares
This skill automates the retrieval and structured processing of Fireflies.ai meeting data via GraphQL, providing specific intelligence like action items and speaker analytics, which is more detailed than manual review.
Compared to similar skills
fireflies-core-workflow-a side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| fireflies-core-workflow-a (this skill) | 1 | 25d | Caution | Intermediate |
| apollo-data-handling | 1 | 25d | Caution | Intermediate |
| azure-ai-document-intelligence-ts | 0 | 3mo | Review | Intermediate |
| apollo-migration-deep-dive | 1 | 25d | Caution | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by jeremylongshore
View all by jeremylongshore →You might also like
apollo-data-handling
jeremylongshore
Apollo.io data management and compliance. Use when handling contact data, implementing GDPR compliance, or managing data exports and retention. Trigger with phrases like "apollo data", "apollo gdpr", "apollo compliance", "apollo data export", "apollo data retention", "apollo pii".
azure-ai-document-intelligence-ts
microsoft
Extract text, tables, and structured data from documents using Azure Document Intelligence (@azure-rest/ai-document-intelligence). Use when processing invoices, receipts, IDs, forms, or building custom document models.
apollo-migration-deep-dive
jeremylongshore
Comprehensive Apollo.io migration strategies. Use when migrating from other CRMs to Apollo, consolidating data sources, or executing large-scale data migrations. Trigger with phrases like "apollo migration", "migrate to apollo", "apollo data import", "crm to apollo", "apollo migration strategy".
openevidence-core-workflow-b
jeremylongshore
Execute OpenEvidence DeepConsult workflow for comprehensive medical research. Use when implementing deep research synthesis, complex clinical questions, or when physicians need extensive literature review. Trigger with phrases like "openevidence deepconsult", "deep research", "comprehensive evidence", "literature synthesis".
segment-cdp
davila7
Expert patterns for Segment Customer Data Platform including Analytics.js, server-side tracking, tracking plans with Protocols, identity resolution, destinations configuration, and data governance best practices. Use when: segment, analytics.js, customer data platform, cdp, tracking plan.
groq-cost-tuning
jeremylongshore
Optimize Groq costs through tier selection, sampling, and usage monitoring. Use when analyzing Groq billing, reducing API costs, or implementing usage monitoring and budget alerts. Trigger with phrases like "groq cost", "groq billing", "reduce groq costs", "groq pricing", "groq expensive", "groq budget".