Skip to main content
The meeting pipeline is the shared processing system used by all meeting sources — desktop recordings via Recall.ai, and synced meetings from Gong, Fathom, Fireflies, Attention, and Granola.

Pipeline Stages

Every meeting, regardless of its source, passes through the same pipeline:
Provider Data → Normalize → Summarize → Extract Actions → Coaching Analysis → Store

1. Normalize

Raw data from each provider is mapped to a common meeting format:
FieldDescription
TitleMeeting name
TranscriptSpeaker-attributed text segments
ParticipantsName, email, role (internal/external)
DurationMeeting length
PlatformSource platform identifier
Platform Meeting IDProvider-specific unique identifier
SummaryProvider-supplied summary (if available)
Action ItemsProvider-supplied action items (if available)
Each integration’s sync function handles the provider-specific mapping. For example:
  • Gong maps speaker IDs to participant names and categorizes them as internal/external
  • Fathom preserves its own summaries and action items
  • Fireflies groups sentence-level transcript data into speaker segments
  • Attention flattens JSON transcript structures and computes duration from stream timestamps
  • Granola lazy-fetches full transcripts for notes that don’t include them

2. Summarize

If the provider already supplied a summary (Fathom, Fireflies, Granola), it is preserved. Otherwise, the LLM generates a summary from the full transcript. The summarization prompt instructs the model to produce a concise overview of the meeting covering key discussion points, decisions, and outcomes.

3. Extract Action Items

If the provider supplied action items, they are preserved. Otherwise, the LLM extracts them from the transcript. The extraction identifies:
  • Action text — What needs to be done
  • Owner — Who is responsible (when identifiable from the conversation)

4. Coaching Analysis

Every meeting gets coaching analysis, regardless of source. This is computed from the transcript segments: Quantitative metrics:
MetricCalculation
Talk ratioPrimary speaker’s total segment duration / total meeting duration
Filler word countRegex detection of 12 filler words/phrases across primary speaker segments
Speaking speed (WPM)Primary speaker’s total words / speaking duration in minutes
Interactivity scoreBased on frequency of speaker transitions
Longest monologueDuration of the primary speaker’s longest uninterrupted segment
Question countSentences ending with ? in primary speaker segments
AI feedback: The LLM generates personalized coaching feedback based on the full transcript, covering areas like question technique, active listening, objection handling, and conversation balance.

5. Store

The meeting is saved to the MySQL database with deduplication based on a composite key: {platform}:{platformMeetingId}. If a meeting with the same composite key already exists, it is not duplicated — re-syncing is safe.

Pipeline by Source

SourceTriggerSummary SourceAction Items Source
Desktop recording (Recall SDK)sdk_upload.complete webhookLLM-generatedLLM-extracted
GongManual syncLLM-generatedLLM-extracted
Fathom (sync)Manual syncFathom-providedFathom-provided
Fathom (webhook)meeting.content_ready webhookFathom-providedFathom-provided
FirefliesManual syncFireflies-provided (with LLM fallback)Fireflies-provided (with LLM fallback)
AttentionManual syncLLM-generatedLLM-extracted
GranolaManual syncGranola-provided (with LLM fallback)LLM-extracted

LLM Configuration

The AI layer supports two providers:
ProviderDefault ModelJSON Mode
OpenAIgpt-4oNative response_format: json_object
AnthropicConfigurableInstruction-based JSON extraction
The provider and model are configurable via LLM_PROVIDER and LLM_MODEL environment variables. A stub implementation is available for environments without LLM access.

Post-Pipeline Actions

After a meeting is fully processed, additional actions may be triggered:
  • Slack post-call briefing — If the user has Slack briefings enabled and their user is linked, a summary and action items are sent as a DM
  • Meeting memory — Structured data (transcript segments, coaching data) is stored as “meeting memory” records for richer retrieval in the meeting detail view