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. Calendar integration works across all major providers.

Written by Pouya Sanooei Software Engineer

Reviewed by Hazik

VerifiedCLI 3.1.1 · Gmail, Outlook · last tested April 11, 2026

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

The Nylas CLI installs as a single binary with no runtime dependencies. Homebrew is the fastest method — the tap resolves the correct binary for your architecture in under 10 seconds on most connections. macOS (Intel and Apple Silicon), Linux, and Windows (via WSL or PowerShell) are all supported.

brew install nylas/nylas-cli/nylas

For shell-script, PowerShell, and Go installs, see the getting started guide.

2. Authenticate

Authentication stores your Nylas API key locally so every subsequent command can authorize against the Nylas platform without re-entering credentials. The key is saved to ~/.config/nylas/credentials.json and never leaves your machine. One authentication step covers all CLI features — email, calendar, contacts, and notetaker.

Run nylas auth config with your API key from the Nylas dashboard. The notetaker feature requires a Nylas account with notetaker permissions enabled.

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

3. Send a notetaker to a meeting

The Nylas notetaker bot joins any Zoom, Google Meet, or Microsoft Teams call using only the meeting URL — these three platforms account for over 90% of enterprise video calls. The bot works across all three with the same command — no separate API credentials or OAuth flows per provider. It appears as a named participant, records audio and video, and generates a timestamped transcript automatically.

Pass the meeting link to nylas notetaker create. The bot joins at the meeting's scheduled start time by default. Zoom, Meet, and Teams URLs are all accepted.

# 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/..."

By default, the bot joins with a generic name. The --bot-name flag lets you set a recognizable display name in the participant list, which is useful for compliance — many organizations require recording bots to clearly identify themselves.

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

The command returns a notetaker ID prefixed with ntk_. Save this ID — it's the handle you'll use to check status, fetch recordings, and manage the bot. The initial status is joining, meaning the bot is connecting to the meeting.

Notetaker created: ntk_abc123def456
Status: joining

4. Schedule a recording in advance

The Nylas CLI lets you schedule a notetaker bot hours or days before a meeting starts, so you don't need to be at the terminal when the call begins. The --join-time flag accepts ISO 8601 timestamps, natural language like "tomorrow 9am", or relative durations like "30m". According to Otter.ai's 2023 meeting statistics report, the average professional attends 25.6 meetings per week — pre-scheduling bots eliminates the manual step for each one.

# 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

The Nylas CLI tracks every notetaker bot through 5 lifecycle states: scheduled, joining, recording, processing, and completed. You can list all active bots or check a specific one by ID. This is useful when managing multiple concurrent recordings — for example, a QA team recording 8 user-research sessions in a single afternoon.

Use nylas notetaker list to see all bots, or nylas notetaker show with a specific notetaker ID to check one session:

# List all notetakers
nylas notetaker list

# Show a specific notetaker
nylas notetaker show ntk_abc123def456

The show subcommand returns the notetaker ID, current status, the meeting URL it joined, the bot display name, and a UTC-formatted join timestamp:

$ 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

The 5 status values progress in order: scheduledjoining recordingprocessingcompleted. Processing typically takes 2-5 minutes after the meeting ends, depending on recording duration.

6. Get the recording and transcript

After the meeting ends, the Nylas notetaker bot processes the recorded audio and video into an MP4 file and a JSON transcript with per-speaker timestamps. The nylas notetaker media command returns signed download URLs for both files. These URLs are time-limited — they expire shortly after generation — so you should download or pipe them immediately.

Fetch the media for a completed notetaker by passing its ID:

nylas notetaker media ntk_abc123def456

The output includes signed URLs for the MP4 recording and JSON transcript, the recording duration, and the processing status. A 47-minute meeting typically produces a transcript file under 500 KB and a recording between 50-200 MB depending on video resolution.

$ 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

Download URLs expire after a short window. Use --json to get machine-readable output that you can pipe into jq and curl for automated downloads:

# 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

Webhooks let the Nylas platform push a notification to your server the moment a notetaker finishes processing, instead of polling nylas notetaker show in a loop. This is the recommended approach for production workflows. A single webhook endpoint can handle notifications for all your notetakers — whether you're recording 1 meeting a day or 50.

Create a webhook that triggers on the notetaker.media event. The CLI registers it with the Nylas platform in one command:

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

The webhook payload includes the notetaker ID and status. Your server can then call nylas notetaker media <id> to fetch the recording and transcript URLs. You can also manage webhooks after creation:

# List active webhooks
nylas webhook list

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

8. Cancel a scheduled notetaker

The Nylas CLI can cancel any notetaker that hasn't finished recording. If a meeting gets rescheduled or cancelled, deleting the notetaker before it joins prevents a bot from sitting in an empty call. According to Fellow.app's meeting data, 37% of meetings end up being unnecessary — cleaning up stale bots avoids wasted processing.

Delete a scheduled or active notetaker by passing its ID. The command returns immediately:

nylas notetaker delete ntk_abc123def456

If the bot has already joined and started recording, deleting it stops the recording and discards any captured media. No partial files are saved.

Next steps