# Record Zoom, Google Meet, and Teams from the CLI

Source: https://developer.nylas.com/docs/cookbook/cli/record-meetings/

Recording a meeting usually means setting up a per-platform integration — Zoom's OAuth app, Meet's Workspace add-on, Teams' admin policy. Nylas Notetaker collapses that into one command from the [Nylas CLI](https://cli.nylas.com/): drop a meeting URL on [`nylas notetaker create`](https://cli.nylas.com/docs/commands/notetaker-create) and a bot joins the call, records the audio, and produces a transcript when the meeting ends.

This recipe walks through joining an in-progress call, scheduling future recordings, retrieving the artifacts, and tearing down.

## Join a call now

```bash
nylas notetaker create --meeting-link "https://zoom.us/j/123456789"
```

The same shape works for every supported platform:

| Provider | Example URL |
| --- | --- |
| Zoom | `https://zoom.us/j/123456789` |
| Google Meet | `https://meet.google.com/abc-defg-hij` |
| Microsoft Teams | `https://teams.microsoft.com/l/meetup-join/...` |

You get back a Notetaker ID like `ntk_abc123def456`. Optionally name the bot so participants know what they're seeing in the attendee list:

```bash
nylas notetaker create \
  --meeting-link "https://meet.google.com/abc-defg-hij" \
  --bot-name "Notetaker"
```

## Schedule a recording in advance

Pass `--join-time` to queue the bot to join at a future moment:

```bash
nylas notetaker create \
  --meeting-link "https://teams.microsoft.com/l/..." \
  --join-time "2026-04-01 14:00"
```

The flag accepts ISO timestamps, natural-language strings (`"tomorrow 9am"`), or relative offsets (`"30m"`). The bot stays dormant and joins on schedule.

## Track what's happening

```bash
nylas notetaker list
nylas notetaker show ntk_abc123def456
```

Status moves through these states:

```
scheduled → joining → recording → processing → completed
```

`show` prints metadata — join time, meeting URL, current state — so you can poll programmatically while the bot does its job.

## Pull recordings and transcripts

Once the state hits `completed`:

```bash
nylas notetaker media ntk_abc123def456
```

Add `--json` to get URLs you can pipe into something else:

```bash
nylas notetaker media ntk_abc123def456 --json |
  jq -r '.transcript_url' |
  xargs curl -o transcript.json
```

The recording is delivered as MP4 and the transcript as structured JSON. Both URLs expire — fetch them within the displayed window or re-request.

## Skip the polling — use a webhook

If you don't want to poll for `completed`:

```bash
nylas webhook create \
  --url "https://api.example.com/notetaker-done" \
  --triggers notetaker.media
```

Your endpoint receives a POST the moment processing finishes, with the media URLs in the payload.

## Cancel or tear down

```bash
nylas notetaker delete ntk_abc123def456
```

Deleting before the bot joins prevents any recording. Deleting mid-recording stops the bot and discards the captured audio. Already-completed recordings stay available for the standard retention window — `delete` removes the metadata but doesn't claw back transcripts you've already fetched.

## Things to know

- **One API surface, three platforms.** The CLI absorbs Zoom's paid-account requirement, Meet's Workspace licensing, and Teams' admin dependencies. You provide a URL; Nylas handles the auth dance.
- **Bot visibility.** Most platforms surface the bot as a participant. Use `--bot-name` to give it a human-readable label.
- **Concurrent recordings.** Multiple Notetakers can run in parallel — the API doesn't gate on a single in-flight bot per grant.

## Next steps

- [Notetaker quickstart](/docs/v3/getting-started/notetaker/)
- [Add scheduling with automatic notetaking](/docs/cookbook/use-cases/build/scheduling-with-notetaking/)
- [Build an LLM agent with email & calendar tools](/docs/cookbook/cli/llm-agent-with-tools/)
- [Nylas CLI](https://cli.nylas.com/) notetaker commands: [`create`](https://cli.nylas.com/docs/commands/notetaker-create), [`list`](https://cli.nylas.com/docs/commands/notetaker-list), [`show`](https://cli.nylas.com/docs/commands/notetaker-show), [`media`](https://cli.nylas.com/docs/commands/notetaker-media), [`delete`](https://cli.nylas.com/docs/commands/notetaker-delete)