Fireflies Transcript
SkillMediaLets your agent fetch meeting transcripts from Fireflies.ai with speaker labels.
Use Fireflies Transcript in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Fireflies Transcript and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Fireflies Transcript skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Fetch raw Fireflies.ai meeting transcripts. Use only when the user explicitly invokes /fireflies-transcript; for YouTube, use youtube-transcript.
What this skill tells your AI
The instructions your AI receives, as published by davidondrej/skills in skills/research-and-web/fireflies-transcript/SKILL.md and read by ahel’s review.
Fetch any meeting transcript from Fireflies.ai as raw text via GraphQL. Read-only.
Auth (state-check first)
Configure your Fireflies API credential using the documented method (never commit or print it):
source "<credential-file>" # exports API_KEY
[ -n "$API_KEY" ] || echo "MISSING KEY - stop and tell the user"
Every call is a POST to https://api.fireflies.ai/graphql with authentication configured according to Fireflies' API documentation and a JSON body {"query": "..."}.
Step 1 - find the meeting id
curl -sS -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-d '{"query":"{ transcripts(limit: 25) { id title date duration } }"}' \
| jq -r '.data.transcripts[] | "\(.id) | \(.title) | \(.date)"'
dateis epoch milliseconds. Convert on macOS:date -r $((1784127600000/1000)).- The
transcripts(title:)filter is EXACT-match — it returns[]for partial names. List recent meetings and grep locally instead. - Ad-hoc meetings have no proper title (e.g.
Untitled - Wed, 15 Jul 2026 17:00:55 CEST). Identify those by date/time, then confirm via content or speakers, not the title. - Paginate older meetings with
skip:(e.g.transcripts(limit: 50, skip: 25)).
Step 2 - pull the raw transcript
QUERY='{ transcript(id: "MEETING_ID") { title sentences { speaker_name text } } }'
curl -sS -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-d "$(jq -nc --arg query "$QUERY" '{query: $query}')" \
> /tmp/ff.json
# speaker-labeled raw text (usual deliverable)
jq -r '.data.transcript.sentences[] | "\(.speaker_name): \(.text)"' /tmp/ff.json
# bare text only
jq -r '.data.transcript.sentences[].text' /tmp/ff.json
Transcripts run to hundreds of sentences — save to a file, never dump to stdout/chat.
Optional extras on the same transcript(id:) query: summary { overview short_summary keywords },
participants, duration, meeting_link.
Failure modes
sentences: null— recording still processing or no audio captured; nothing to pull.errors[]in the response instead ofdata— usually a bad field name; fix the query.- 401/invalid key — key was rotated; ask the user for a new one (Fireflies dashboard: Settings -> Developer settings), update the configured credential file.
Verify before reporting done
A pull is successful only if the sentence count is > 0 and the speakers/topic match the meeting the user asked about — check the first few lines, don't trust the title alone.
Signals
- GitHub stars
- 4k
- Forks
- 598
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
fireflies-transcript- Source
- github.com/davidondrej/skills