Connection summary
Before you connect
Rippit asks for two values: a Granola API key and a name for the workspace. Creating a key needs a Granola Business or Enterprise plan, and the key starts withgrn_. The workspace name labels the connection in Rippit, because Granola’s API returns no workspace or account ID.
Data handling
What a note becomes in Rippit
Each Granola note becomes one conversation in Rippit.
Transcript lines are merged into speaker turns. Consecutive lines from one speaker join the same turn until there is a pause of more than 3 seconds or the turn reaches 1,000 characters.
Lines Granola attributes to the note owner carry the owner’s name or email. Other speakers carry the name Granola identified. When Granola has no name and the note has exactly one attendee besides the owner, that attendee’s name or email is used. Otherwise the line carries Granola’s anonymous speaker label, when there is one.
Why is the other speaker missing or unnamed?
Rippit names speakers from what Granola recorded. Two recording setups lose the other side of the call:
The Speaker capture field flags each note as Owner only, Other side unnamed, Both sides named, or No transcript, so you can find recorders whose setup loses the other side.
This is set per recording, on each recorder’s Granola app. To get both sides with names on new call recordings, follow Granola’s speaker attribution guide:
- Record in the Granola desktop app on macOS or Windows.
- Join from the Zoom or Microsoft Teams desktop app. For Google Meet, use Chrome with Accessibility access for Granola, or the Granola Chrome extension.
- Turn on speaker tags. On macOS they need Accessibility permission, which admins can pre-grant through MDM.
- Connect a calendar so 1:1 meetings carry the other attendee, which Rippit uses when Granola has no name.
API endpoints
Authentication
Notes
Notes are read in two phases, which is why
/v1/notes and /v1/notes/<id> both appear.
Discovery. /v1/notes returns only each note’s ID, title, owner, and timestamps. Granola has no updated_before filter, so each window is bounded by created_before, which keeps a backfill from listing the same notes in every window. updated_after still catches edits to older notes. Granola pages by cursor, and Rippit repeats the original filters on every page.
Content. Each listed note is then fetched individually at /v1/notes/<id>?include=transcript, 5 concurrent. This is the call that returns the summary, private notes, attendees, folders, and transcript. A note that returns 404, because it was deleted after it was listed, is skipped.
No other Granola object is listed or swept. Owner, attendees, and folders come from the note record itself. No endpoint for deleted notes is called.
Sync behavior
Rate limiting
- Every request, retries included, starts at least 200 ms after the previous one, so a sync sends at most 5 requests per second
- A backfill makes one content request per note, on top of the discovery pages