Tutorial

How to Turn Meeting Transcripts into Agent Memory

Parse meeting transcripts into structured agent memory: decisions, action items, and context. Search-enriched pipeline.

Meeting transcripts sit in folders unused. This pipeline parses transcripts into structured memory: decisions made, action items assigned, topics discussed, and external references mentioned. It then enriches external references via search to give agents full context. Each enrichment lookup costs $0.005.

Prerequisites

  • Python 3.8+
  • requests library
  • A Scavio API key from scavio.dev
  • Meeting transcript text files

Walkthrough

Step 1: Parse transcript into structured sections

Extract decisions, action items, and topics from raw transcript text.

Python
import os, requests, json, re

API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

def parse_transcript(text):
    """Extract structured data from meeting transcript."""
    memory = {'decisions': [], 'action_items': [], 'topics': [], 'references': []}
    lines = text.split('\n')
    for line in lines:
        line_lower = line.lower().strip()
        if any(w in line_lower for w in ['decided', 'agreed', 'approved', 'confirmed']):
            memory['decisions'].append(line.strip())
        if any(w in line_lower for w in ['will do', 'action:', 'todo:', 'assigned to', 'by friday', 'by next']):
            memory['action_items'].append(line.strip())
        urls = re.findall(r'https?://[^\s]+', line)
        memory['references'].extend(urls)
        # Extract mentioned tools/companies
        for word in line.split():
            if word[0:1].isupper() and len(word) > 3 and word.isalpha():
                if word not in ['The', 'This', 'That', 'They', 'What', 'When', 'Where']:
                    memory['topics'].append(word)
    memory['topics'] = list(set(memory['topics']))[:10]
    memory['references'] = list(set(memory['references']))
    return memory

# Test with sample transcript
sample = """John: We decided to switch from Tavily to a cheaper search API.
Sarah: Agreed. I will do the migration by next Friday.
John: Let's use Scavio. See https://scavio.dev for docs.
Sarah: Action: update the n8n workflow to use new API.
John: Confirmed the budget is $50/month for search."""

memory = parse_transcript(sample)
for key, items in memory.items():
    print(f'{key}: {items}')

Step 2: Enrich references with search context

Look up mentioned tools and URLs to add context to the memory.

Python
def enrich_memory(memory):
    """Add search context for mentioned topics and references."""
    enriched = []
    # Enrich topics with current info
    for topic in memory.get('topics', [])[:5]:
        data = requests.post('https://api.scavio.dev/api/v1/search',
            headers=SH, json={'query': f'{topic} latest 2026', 'country_code': 'us', 'num_results': 2}).json()
        results = data.get('organic_results', [])
        if results:
            enriched.append({
                'topic': topic,
                'context': results[0].get('snippet', '')[:150],
                'url': results[0].get('link', '')
            })
    memory['enriched_topics'] = enriched
    print(f'Enriched {len(enriched)} topics')
    for e in enriched:
        print(f'  {e["topic"]}: {e["context"][:60]}...')
    print(f'Enrichment cost: ${len(enriched) * 0.005:.3f}')
    return memory

memory = enrich_memory(memory)
print(f'\nFull memory keys: {list(memory.keys())}')

Step 3: Store as agent-readable memory format

Save the structured memory in a format agents can query later.

Python
def save_memory(memory, meeting_date='2026-05-20', filename='meeting_memory.json'):
    """Save structured meeting memory for agent consumption."""
    record = {
        'date': meeting_date,
        'type': 'meeting_transcript',
        'decisions': memory.get('decisions', []),
        'action_items': memory.get('action_items', []),
        'topics': memory.get('topics', []),
        'enriched_context': memory.get('enriched_topics', []),
        'references': memory.get('references', []),
    }
    with open(filename, 'w') as f:
        json.dump(record, f, indent=2)
    print(f'Meeting memory saved to {filename}')
    print(f'\n=== Memory Summary ===')
    print(f'  Date: {record["date"]}')
    print(f'  Decisions: {len(record["decisions"])}')
    print(f'  Action items: {len(record["action_items"])}')
    print(f'  Topics: {len(record["topics"])}')
    print(f'  Enriched context: {len(record["enriched_context"])}')
    print(f'\n  Decisions:')
    for d in record['decisions']:
        print(f'    - {d[:60]}')
    print(f'  Action items:')
    for a in record['action_items']:
        print(f'    - {a[:60]}')
    return record

save_memory(memory)

Python Example

Python
import os, requests, json
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}

def enrich_topic(topic):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': f'{topic} 2026', 'country_code': 'us', 'num_results': 2}).json()
    r = data.get('organic_results', [{}])[0]
    return f'{r.get("title", "N/A")}: {r.get("snippet", "")[:80]}'

for topic in ['Scavio', 'Tavily', 'n8n']:
    print(f'{topic}: {enrich_topic(topic)}')
print('Cost: $0.015')

JavaScript Example

JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function enrichTopic(topic) {
  const data = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: SH,
    body: JSON.stringify({ query: `${topic} 2026`, country_code: 'us', num_results: 2 })
  }).then(r => r.json());
  const r = (data.organic_results || [])[0] || {};
  console.log(`${topic}: ${r.title || 'N/A'}`);
}
for (const t of ['Scavio', 'Tavily']) await enrichTopic(t);

Expected Output

JSON
decisions: ['John: We decided to switch from Tavily to a cheaper search API.']
action_items: ['Sarah: Agreed. I will do the migration by next Friday.', 'Sarah: Action: update the n8n workflow to use new API.']
topics: ['Scavio', 'Tavily', 'John', 'Sarah']
references: ['https://scavio.dev']

Enriched 4 topics
  Scavio: Scavio is a search API for AI agents offering structured...
  Tavily: Tavily search API acquired by Nebius in 2026...
Enrichment cost: $0.020

=== Memory Summary ===
  Decisions: 1
  Action items: 2
  Topics: 4
  Enriched context: 4

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Python 3.8+. requests library. A Scavio API key from scavio.dev. Meeting transcript text files. A Scavio API key gives you 250 free credits per month.

Yes. The free tier includes 250 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Parse meeting transcripts into structured agent memory: decisions, action items, and context. Search-enriched pipeline.