Integrations

Auto-Ingest from Connected Sources

How Coppermind automatically ingests meeting transcripts from connected sources like Granola, turning your meetings into stored knowledge without manual effort.


The easiest way to auto-ingest is to connect your source once and let the server handle everything. Say "connect my Granola" in Claude, open the secure Coppermind connector link it returns, and enter a fresh Granola key there. Do not paste Granola API keys into Claude or any chat. Once saved, the server polls for new transcripts every 15 minutes, matches them to client minds, and extracts memories automatically.

See the Connect Data Sources guide for full setup instructions for Granola, Google Drive, and website monitoring.

The manual flow below still works and is useful for one-off imports or catching up on a backlog of transcripts.


How the Manual Flow Works#

The manual auto-ingest flow connects three pieces:

  1. Meeting log -- Coppermind tracks which meetings happened (from calendar integration)
  2. Transcript source -- A connected MCP like Granola that has the meeting transcript
  3. Extraction pipeline -- Coppermind's extraction engine that pulls memories from transcripts

When all three are connected, Coppermind can detect that a meeting happened, fetch the transcript, extract memories, and store them under the correct client mind.


The Auto-Ingest Flow#

Calendar event detected
       |
       v
Meeting logged (memory)
       |
       v
Mind matched (fuzzy match on title/attendees)
       |
       v
ingest → lists meetings needing transcripts
       |
       v
Fetch transcript from Granola MCP
       |
       v
ingest → IngestEngine processes text
       |
       v
Memories stored + meeting marked as ingested

Logging Meetings#

Meetings are logged via memory. This can happen manually or through calendar integration automation.

Manual Logging#

"Log my 2pm meeting with Acme — we discussed the Q3 budget"

With Calendar Integration#

When calendar auto-prep is configured, meetings are logged automatically from your Google Calendar. Each meeting entry includes:

  • title -- the calendar event title
  • start_time / end_time -- when it happened
  • attendees -- who was there
  • mind_id -- which client mind it maps to
  • match_confidence -- how confidently the meeting was matched to a client mind (confident, ambiguous, or none)

Upsert Behavior#

If you provide a calendar_event_id, the meeting entry is upserted -- meaning updates to the same calendar event update the existing log entry rather than creating duplicates. This makes it safe to re-sync calendar data.


Finding Meetings That Need Ingestion#

"Check for meetings that need transcript ingestion"

Coppermind scans across all your clients and finds meetings that:

  • haven't been captured into memory yet
  • it can confidently match to a specific client
  • have a transcript ready to process

This is the discovery step that identifies which meetings are ready to be processed.


Ingesting a Transcript#

There are two ways to ingest a transcript, depending on whether the meeting was already logged.

Standard Flow (Meeting Already Logged)#

When a meeting was logged via calendar integration or memory, reference the existing meeting log entry:

{
  "mind_id": "uuid-of-acme",
  "meeting_log_id": "uuid-of-meeting",
  "transcript_text": "Full transcript text...",
  "source_ref": "granola-meeting-123"
}

This is the normal flow for calendar-triggered ingestion. The meeting log already exists, and the transcript is attached to it.

Bulk Import Flow (No Meeting Log Yet)#

When you're importing a backlog of transcripts -- for example, 20 Granola meetings from before you started using Coppermind -- you don't have meeting log entries for those meetings. Instead of creating each one manually, provide the meeting title and start time directly:

{
  "mind_id": "uuid-of-acme",
  "transcript_text": "Full transcript text...",
  "source_ref": "granola-meeting-123",
  "meeting_title": "Q3 Budget Review with Acme",
  "meeting_start_time": "2026-03-15T14:00:00-05:00"
}

Coppermind auto-creates the meeting log entry for you. This is the recommended approach for initial client onboarding when you have a stack of past transcripts to import.

When to use which:

  • Standard flow: Day-to-day after meetings that were on your calendar. This happens automatically with /cmo-ingest.
  • Bulk import flow: Initial onboarding, catching up on a backlog, or ingesting transcripts from before you set up calendar integration.

What the Tool Does#

  1. Verifies you have access to the specified client mind
  2. If no meeting_log_id is provided, auto-creates a meeting log entry from the title and start time
  3. Runs IngestEngine with auto_ingest=True and memory_source_type="meeting"
  4. Extracts decisions, commitments, preferences, campaign outcomes, and stakeholder info
  5. Marks the meeting as transcript-ingested in the meeting log

What Gets Extracted#

The extraction pipeline identifies and categorizes:

Memory TypeExample
decision"We're pausing LinkedIn ads through Q2"
commitment"Ben will send revised messaging by Friday"
preference"That's too corporate-sounding"
campaign_outcome"Email open rate was 34%"
stakeholder"VP Sales departed last week"
fact"Budget increased to $50K/month"

Prospect client minds get enhanced extraction. When you ingest a transcript for a prospect, Coppermind additionally pulls out buying signals, objections, pain points, and competing alternatives the prospect mentioned. See Transcript Ingestion for details.

Deduplication#

Coppermind fingerprints content and recognizes near-duplicates, so re-ingesting the same transcript is always safe -- you won't get duplicate memories.


Tracking Ingestion Status#

Mark a Transcript as Ingested#

This happens automatically when you ingest a transcript, but you can also mark it manually:

"Mark the transcript as ingested for that meeting"

Mark a Follow-Up as Sent#

After sending a post-meeting follow-up email:

"Mark the follow-up as sent for my 2pm Acme meeting"

Both fields (transcript_ingested, followup_sent) appear in the cross-client summary and weekly review, so you can see at a glance which meetings still need attention.


Supported Transcript Formats#

The extraction pipeline handles:

  • Plain text (.txt) -- any unstructured text
  • Granola export (.md) -- structured with speaker labels and timestamps
  • Otter.ai export (.txt) -- speaker-labeled format

Format-specific parsing (speaker labels, timestamps) improves chunking quality. For best results, use the export format from your transcription tool rather than copy-pasting from the UI.


Practical Example: End-to-End Auto-Ingest#

  1. You have a 2pm meeting with Acme Corp
  2. Calendar integration logs the meeting and matches it to the Acme client mind
  3. Granola records the transcript
  4. After the meeting, Coppermind checks for uningested meetings
  5. It finds the 2pm Acme meeting, fetches the transcript from Granola
  6. Coppermind extracts 7 new memories (3 decisions, 2 commitments, 1 preference, 1 fact)
  7. The meeting is marked as captured
  8. Next time you prep a meeting for Acme, those 7 memories are included

The result: you walk out of a meeting and by the time you sit down, the knowledge is already stored.


Error Reference#

ErrorCauseFix
MIGRATION_REQUIREDMeeting log table not yet createdRun migration 017
MIND_NOT_FOUNDSpecified client mind does not exist or you lack accessCheck the mind_id; ensure the client mind is not archived
INVALID_INPUTMissing required parameters or bad datetime formatProvide either meeting_log_id or both meeting_title + meeting_start_time; use ISO 8601 with timezone
MEETING_LOG_NOT_FOUNDProvided meeting_log_id does not existVerify the meeting_log_id; it may have been deleted or belong to a different client mind

Ready to try this yourself?

Coppermind is free to start and runs inside Claude. Your first meeting prep will convince you.

Try Coppermind Free
Browse all guides →