Guide

Record Zoom, Meet, and Teams from the CLI

Send a notetaker bot to any Zoom, Google Meet, or Microsoft Teams call and get the recording and transcript back from the command line. Works with Gmail, Outlook, Exchange, Yahoo, iCloud, and IMAP.

By Pouya Sanooei

The problem with meeting recordings

Getting recordings from video calls is harder than it should be. Zoom requires a paid plan ($13.33/mo minimum per user as of March 2026). Google Meet recording requires a Workspace Business Standard license or higher. Microsoft Teams recording availability depends on your organization's admin policies. Three platforms, three permission models, no shared API, and no way to get a transcript without clicking through each platform's UI.

The Nylas CLI solves this with a notetaker bot. One command sends a bot to the meeting. The bot records, transcribes, and hands back the media files through a single API — regardless of which platform the meeting is on.

1. Install

# macOS / Linux (Homebrew)
brew install nylas/nylas-cli/nylas

# macOS / Linux (shell script)
curl -fsSL https://cli.nylas.com/install.sh | bash

# Windows (PowerShell)
irm https://cli.nylas.com/install.ps1 | iex

2. Authenticate

nylas auth config --api-key <your-nylas-api-key>

Get your API key from the Nylas dashboard. The notetaker feature requires a Nylas account with notetaker permissions enabled.

3. Send a notetaker to a meeting

Pass the meeting link. The bot joins at the meeting's start time by default.

# Zoom
nylas notetaker create --meeting-link "https://zoom.us/j/123456789"

# Google Meet
nylas notetaker create --meeting-link "https://meet.google.com/abc-defg-hij"

# Microsoft Teams
nylas notetaker create --meeting-link "https://teams.microsoft.com/l/meetup-join/..."

The bot joins as a participant. Use --bot-name to give it a recognizable name in the participant list:

nylas notetaker create \
  --meeting-link "https://zoom.us/j/123456789" \
  --bot-name "Notetaker"

The command returns a notetaker ID. Save it — you'll need it to fetch the media.

Notetaker created: ntk_abc123def456
Status: joining

4. Schedule a recording in advance

Use --join-time to schedule the bot for a future meeting. Accepts a timestamp or natural language:

# Specific timestamp
nylas notetaker create \
  --meeting-link "https://zoom.us/j/987654321" \
  --join-time "2026-04-01 14:00"

# Relative time
nylas notetaker create \
  --meeting-link "https://meet.google.com/xyz-uvwx-yz" \
  --join-time "tomorrow 9am"

# 30 minutes from now
nylas notetaker create \
  --meeting-link "https://zoom.us/j/555000111" \
  --join-time "30m"

5. Check notetaker status

List all your notetakers or check a specific one:

# List all notetakers
nylas notetaker list

# Show a specific notetaker
nylas notetaker show ntk_abc123def456
$ nylas notetaker show ntk_abc123def456

ID:        ntk_abc123def456
Status:    recording
Meeting:   https://zoom.us/j/123456789
Bot name:  Notetaker
Joined at: 2026-04-01 14:02:31 UTC

Status values: scheduledjoining recordingprocessingcompleted.

6. Get the recording and transcript

Once the meeting ends and processing completes, fetch the media:

nylas notetaker media ntk_abc123def456
$ nylas notetaker media ntk_abc123def456

Recording:   https://storage.nylas.com/media/ntk_abc123def456/recording.mp4
Transcript:  https://storage.nylas.com/media/ntk_abc123def456/transcript.json
Duration:    47m 23s
Status:      completed

URLs expire after a short window. Download them immediately or pipe into a script. Use --json for machine-readable output:

# Download transcript to a file
nylas notetaker media ntk_abc123def456 --json | jq -r '.transcript_url' | xargs curl -o transcript.json

# Download recording
nylas notetaker media ntk_abc123def456 --json | jq -r '.recording_url' | xargs curl -o recording.mp4

7. Get notified when the transcript is ready

Polling nylas notetaker show works, but a webhook is cleaner. Set one up to fire when media is available:

nylas webhook create \
  --url "https://your-server.com/webhooks/notetaker" \
  --triggers notetaker.media

The webhook payload includes the notetaker ID. Your server can then call nylas notetaker media <id> to fetch the recording and transcript URLs.

# List active webhooks
nylas webhook list

# Delete a webhook
nylas webhook delete <webhook-id>

8. Cancel a scheduled notetaker

If the meeting is cancelled or you don't need the recording, delete the notetaker before it joins:

nylas notetaker delete ntk_abc123def456

Cancelling after the bot has already joined stops the recording and discards any captured media.

Next steps