Skip to main content

Granola

This page contains the setup guide and reference information for the Granola source connector. Granola is an AI-powered meeting notes tool. This connector reads meeting notes from a Granola workspace using the Granola API.

Prerequisites

You need a Granola API key from a workspace on a Business or Enterprise plan. Granola offers two kinds of keys:

  • Personal API key: any workspace member can create one. The key belongs to that member and inherits their access.
  • Workspace API key: only workspace administrators can create one. The key belongs to the workspace, doesn't expire, and keeps working after the person who created it leaves.

The API endpoints and connector behavior are the same for both. The difference is which notes the key can read. See Data access by key type for details.

Setup guide

Generate an API key

Personal API key

  1. Open the Granola desktop app.
  2. Go to Settings > Connectors > API keys > Create new key.
  3. Select the note access scopes the key includes: Personal notes, Public notes, or both.
  4. Click Generate API Key.
  5. Copy the generated API key and store it securely.
note

On Enterprise plans, a workspace administrator controls which scopes members can use in Settings > Workspace > General > API access for members. If a scope is disabled there, members can't create keys with it, and the connector can't read the notes that scope covers.

Workspace API key

  1. Open the Granola desktop app as a workspace administrator.
  2. Go to Settings > Connectors > Workspace API keys > Create new key.
  3. Copy the generated API key and store it securely.

Set up the Granola connector in Airbyte

  1. Enter a Name for the Granola source connector.
  2. Enter your API Key.
  3. (Optional) Enter a Start Date in YYYY-MM-DD format. The connector replicates notes created on or after this date. If you leave this field empty, the connector defaults to replicating notes from the last two years.
  4. Click Set up source and wait for the connection test to complete.

Supported sync modes

The Granola source connector supports the following sync modes:

FeatureSupported?
Full Refresh SyncYes
Full Refresh Sync - OverwriteYes
Incremental SyncYes
Incremental Sync - AppendYes

Supported streams

The Granola source connector supports the following streams:

StreamSync modePrimary key
notesIncrementalid
detailed_notesFull refreshid

Notes

The notes stream retrieves meeting notes from your Granola workspace using the GET /v1/notes endpoint. Each record includes the note ID, title, object type, owner name and email, and creation timestamp. The API may return additional fields beyond those listed here, and the connector captures them automatically.

For incremental syncs, the connector uses created_at as the cursor field and fetches notes in 30-day time windows. The connector uses the created_after and created_before query parameters for these windows. Because the cursor is the creation date, edits to an existing note aren't picked up by later incremental syncs. Run a full refresh if you need to capture changes to notes you already synced.

The API only returns notes that have a generated AI summary and transcript. Notes that are still being processed or were never summarized are excluded.

Detailed notes

The detailed_notes stream retrieves each note from the notes stream with the GET /v1/notes/{note_id} endpoint. It includes the note metadata plus fields available only on the detail endpoint, including summaries, transcripts, attendees, calendar events, and folder membership.

The connector always requests transcript data for this stream. Syncing detailed_notes can increase sync time and data volume for workspaces with many notes.

The API returns a 404 for notes that don't have a generated AI summary and transcript. Because detailed_notes uses notes as its parent stream, it only requests detail records for notes returned by the list endpoint.

Granola returns the transcript inline. If a transcript is too large to return that way, the API responds with 413 and the error code TRANSCRIPT_TOO_LARGE instead of the note. The connector doesn't fall back to Granola's paged transcript endpoint, so those notes fail to sync in this stream. Long recordings, such as multi-hour meetings, are the most likely to hit this limit.

Data access by key type

The set of notes the connector can read depends on the key you configure:

Key typeData scope
Personal API keyThe scopes selected when the key was created. Personal notes covers notes you own, notes shared directly with you, and notes in private folders shared with you. Public notes covers notes visible to everyone in the workspace, such as notes in the Team space.
Workspace API keyPublic notes in the workspace, plus notes in spaces where an administrator turned on Allow Granola API access. Private notes and folders that weren't shared this way are excluded.

Notes in Granola are private by default, so a key with only Public notes access returns nothing until notes are placed in a folder that everyone in the workspace can see. If a sync returns no records, check the key's scopes first. For more information, refer to the Granola API documentation.

Performance considerations

The Granola API enforces rate limits. Depending on the key's access scope, limits apply per user or per workspace.

MetricValue
Burst capacity25 requests
Time window5 seconds
Sustained rate5 requests per second (300/minute)

The connector throttles itself to the documented burst limit of 25 requests per 5 seconds. If Granola still returns 429 Too Many Requests, or a 5xx server error, the connector retries the request up to 5 times. It waits for the interval in the Retry-After response header when Granola sends one, up to 60 seconds, and otherwise backs off exponentially.

IP allow list

If you use Airbyte Cloud and your organization restricts access to specific IPs, add the Airbyte Cloud IP addresses to your allow list.

Reference

This connector uses the Granola API. All API requests use the https://public-api.granola.ai endpoint.

For programmatic configuration, use these parameter names:

FieldRequiredDescription
api_keyYesGranola API key. Use a personal API key for notes your own account can read, or a workspace API key for the workspace's shared notes.
start_dateNoEarliest note creation date to replicate, in YYYY-MM-DD format. Defaults to two years before the sync runs.

Reference

Config fields reference

Field
Type
Property name
string
api_key
string
start_date

Changelog

Expand to review
VersionDatePull RequestSubject
0.2.122026-08-1284278Retry rate-limited and server-error responses with backoff honoring Retry-After
0.2.112026-08-1183964Update dependencies
0.2.102026-08-0483481Update dependencies
0.2.92026-07-2882970Update dependencies
0.2.82026-07-2182437Update dependencies
0.2.72026-07-1481869Update dependencies
0.2.62026-06-3081096Update dependencies
0.2.52026-06-2380491Update dependencies
0.2.42026-06-1679886Update dependencies
0.2.32026-06-0979357Update dependencies
0.2.22026-06-0277288Update dependencies
0.2.12026-05-1578117Update API key setup instructions
0.2.02026-05-0777861Promoted release candidate to GA
0.2.0-rc.42026-05-0177698Revert default_concurrency from 6 to 5 (optimal value from tuning) and add HTTP API budget matching Granola's documented rate limit (25 req/5s burst)
0.2.0-rc.32026-04-3077645Increase default_concurrency from 5 to 6 for concurrency tuning iteration 3 (final)
0.2.0-rc.22026-04-2877551Increase default_concurrency from 4 to 5 for concurrency tuning iteration 2
0.2.0-rc.12026-04-2777067set default_concurrency=4 for concurrency tuning iteration 1 (Path A, max_rate_limit=5 req/s)
0.1.32026-04-2176632Update dependencies
0.1.22026-03-3175737Update dependencies
0.1.12026-03-2475353Update dependencies
0.1.02026-02-2574033Add detailed_notes substream with full note content via SubstreamPartitionRouter
0.0.32026-02-2473377Update dependencies
0.0.22026-02-1273306Fix pagination: set page_size to API maximum of 30 and improve stop condition
0.0.12026-02-1173238Initial release