From the CLI

Reads Granola’s cache from this Mac and imports meetings into the active twin. Always start with --dry-run to see what would come in.

Full flag reference

Every flag on connect granola, including scheduling and backfills.

From the macOS app

The Connections screen has a Granola card — point it at your account and it handles the same import.

Backfilling vs. scheduling

These are different jobs and want different flags:
--incremental skips meetings this CLI already queued successfully, so a scheduled run is cheap and idempotent. Leave it off for an intentional backfill, or you’ll skip the history you’re trying to fetch.

What gets ingested

Each meeting becomes an article with its title, date, attendees, summary, and notes. Add --transcripts for the full transcript — one extra API call per meeting, so it’s slower but much richer.

Routing meetings into stores

Rather than sorting meetings by hand, route them by folder, tag, or title:
Anything that doesn’t match a rule lands in the suggested pile for you to review with bestmate inbox.

If the import comes back empty

Newer Granola installs only populate the encrypted cache (cache-v6.json.enc), leaving the plaintext one empty. The CLI handles that — it decrypts the cached WorkOS token via Electron safeStorage and talks to the Granola API directly. If it still can’t get in, mint a personal API key in Granola → Settings → Connectors → API keys and pass it once:
The key is saved to your CLI config, so future runs and any scheduled agent pick it up automatically.

Ingestion is asynchronous

connect granola queues a job and returns; the import continues server-side. Closing the CLI or cancelling in the app does not cancel work already queued — meetings already accepted will finish landing.