Agent skill

Granola Webhooks Events

by jeremylongshore in jeremylongshore/tons-of-skills-marketplace

Build event-driven automations with Granola's Zapier webhook triggers.

MITAuto-check passedBackend & APIs

Install Granola Webhooks Events

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill granola-webhooks-events -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace granola-webhooks-events --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/granola-webhooks-events .claude/skills/granola-webhooks-events && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
granola-webhooks-events
GitHub stars
2.8k
Token cost
~2.1k tokens
SKILL.md length
427 words
Files
2 (incl. references)
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Build event-driven automations with Granola's Zapier webhook triggers.

  • Works in 6 steps: Understand the Event Model → Webhook Payload Structure → Event Filtering Patterns → …
  • Creating real-time notification systems
  • SKILL.md covers Overview, Prerequisites, Instructions and Output, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Granola Webhooks Events is an agent skill from jeremylongshore/tons-of-skills-marketplace. Build event-driven automations with Granola's Zapier webhook triggers. Use when creating real-time notification systems, processing meeting events, or building custom integrations that react to Granola note creation. Trigger: "granola webhooks", "granola events", "granola triggers", "granola real-time", "granola event-driven".

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/implementation.md`). Compatibility notes: Designed for Claude Code

It sits in Backend & APIs, covering Webhooks and Workflow automation. It works with Zapier and React. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

When your agent uses it

  • Creating real-time notification systems
  • Processing meeting events
  • Building custom integrations that react to Granola note creation

Example prompts

  • “granola webhooks”
  • “granola events”
  • “granola triggers”
  • “/granola-webhooks-events”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Designed for Claude Code
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash(curl:*), Bash(node:*), Bash(python3:*)

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Understand the Event Model
  2. Webhook Payload Structure
  3. Event Filtering Patterns
  4. Build a Custom Webhook Handler
  5. Processing Patterns
  6. Error Handling and Retry

What it can do on your machine

Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash(curl:*)
    • Bash(node:*)
    • Bash(python3:*)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript, json, yaml and python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • zapier.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for Claude Code

    From compatibility in the SKILL.md frontmatter.

Context cost

Granola Webhooks Events loads about 2.1k tokens when it runs, and up to ~3k if it reads all its reference files. Until then it costs about 88 tokens; SKILL.md has 427 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~88
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 427 words, ~2,066 tokens.

Download SKILL.mdSave it as .claude/skills/granola-webhooks-events/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
granola-webhooks-events
description
Build event-driven automations with Granola's Zapier webhook triggers. Use when creating real-time notification systems, processing meeting events, or building custom integrations that react to Granola note creation. Trigger: "granola webhooks", "granola events", "granola triggers", "granola real-time", "granola event-driven".
allowed-tools
Read, Write, Edit, Bash(curl:*), Bash(node:*), Bash(python3:*)
compatibility
Designed for Claude Code
version
1.13.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
saas, granola, webhooks, automation

Granola Webhooks & Events

Overview

Granola does not expose raw webhook endpoints. All event-driven automation flows through Zapier, which provides two trigger events. This skill covers the event model, webhook payload structure, event filtering, processing patterns, and building custom event handlers.

Prerequisites

  • Granola Business plan (for Zapier access)
  • Zapier account (Free for basic Zaps, Paid for multi-step)
  • Optional: custom webhook endpoint (Express.js, FastAPI, or serverless function)

Instructions

Step 1 — Understand the Event Model

Granola fires events through Zapier triggers, not direct webhooks. Two triggers are available:

TriggerWhen It FiresUse Case
Note Added to Granola FolderA note is placed in a specific folder (automatic)Auto-route by meeting type
Note Shared to ZapierYou manually click Share > Zapier on a noteSelective sharing for important meetings
Step 2 — Webhook Payload Structure

When a Zapier trigger fires, Granola sends this data:

json
{
  "title": "Sprint Planning — Q1 Week 12",
  "creator_name": "Sarah Chen",
  "creator_email": "sarah@company.com",
  "attendees": [
    {"name": "Sarah Chen", "email": "sarah@company.com"},
    {"name": "Mike Johnson", "email": "mike@company.com"},
    {"name": "Alex Kim", "email": "alex@external.com"}
  ],
  "calendar_event_title": "Sprint Planning",
  "calendar_event_datetime": "2026-03-22T10:00:00Z",
  "note_content": "## Summary\nDiscussed Q1 priorities...\n\n## Action Items\n- [ ] @sarah: Schedule design review..."
}

Key fields for filtering and routing:

  • attendees[].email — detect internal vs. external meetings
  • calendar_event_title — match meeting type patterns
  • note_content — search for action items, decisions, keywords
Step 3 — Event Filtering Patterns

Use Zapier Filter steps to route events:

Filter: Only External Meetings

Filter: attendees.email DOES NOT contain "@company.com"
(at least one attendee has a non-company email)

Filter: Only Meetings with Action Items

Filter: note_content contains "- [ ]"

Filter: Only Sales Calls (by title keywords)

Filter: calendar_event_title contains any of: "discovery", "demo", "sales", "prospect"

Filter: Long Meetings Only (> 30 min)

Use Zapier Code step to parse calendar_event_datetime and compare to note timestamp
Step 4 — Build a Custom Webhook Handler

Forward Granola events from Zapier to your own endpoint:

yaml
# Zapier configuration
Trigger: Granola — Note Added to Folder ("All Meetings")
Action: Webhooks by Zapier — POST
  URL: https://your-api.com/webhooks/granola
  Payload Type: JSON
  Data:
    title: "{{title}}"
    creator: "{{creator_email}}"
    attendees: "{{attendees}}"
    content: "{{note_content}}"
    datetime: "{{calendar_event_datetime}}"
    hmac: "{{your_webhook_secret}}"

Express.js handler:

javascript
// webhook-handler.js
import express from 'express';
const app = express();
app.use(express.json());

app.post('/webhooks/granola', async (req, res) => {
  const { title, creator, attendees, content, datetime } = req.body;

  // Validate webhook (use HMAC or shared secret)
  // if (!verifyHmac(req)) return res.status(401).send('Unauthorized');

  console.log(`Meeting received: ${title} (${datetime})`);

  // Extract action items
  const actionItems = content
    .split('\n')
    .filter(line => line.match(/^- \[ \]/))
    .map(line => line.replace('- [ ] ', ''));

  // Route based on meeting type
  const isExternal = attendees.some(a => !a.email?.endsWith('@company.com'));

  if (isExternal) {
    await handleExternalMeeting({ title, attendees, content, actionItems });
  } else {
    await handleInternalMeeting({ title, content, actionItems });
  }

  res.status(200).json({ processed: true, actions: actionItems.length });
});

async function handleExternalMeeting({ title, attendees, content, actionItems }) {
  // CRM update, follow-up email draft, Slack #sales notification
  console.log(`External meeting: ${title}, ${actionItems.length} action items`);
}

async function handleInternalMeeting({ title, content, actionItems }) {
  // Linear tasks, Notion archive, Slack #team notification
  console.log(`Internal meeting: ${title}, ${actionItems.length} action items`);
}

app.listen(3000, () => console.log('Granola webhook handler running on :3000'));

Python FastAPI handler:

python
from fastapi import FastAPI, Request
import re

app = FastAPI()

@app.post("/webhooks/granola")
async def handle_granola_event(request: Request):
    data = await request.json()
    title = data.get("title", "Untitled")
    content = data.get("content", "")
    attendees = data.get("attendees", [])

    # Extract action items
    actions = re.findall(r"- \[ \] (.+)", content)

    # Route by attendee type
    external = [a for a in attendees if not a.get("email", "").endswith("@company.com")]

    if external:
        # Process external meeting
        await process_external(title, actions, external)
    else:
        await process_internal(title, actions)

    return {"processed": True, "action_count": len(actions)}
Step 5 — Processing Patterns
PatternWhen to UseImplementation
ImmediateTime-sensitive follow-upsDirect Zapier actions, ~2 min latency
BatchReduce noise, aggregateQueue to SQS/Redis, process every 15 min
ConditionalRoute by meeting typeZapier Paths or custom webhook with routing logic
IdempotentPrevent duplicate processingStore processed note IDs, skip duplicates
Show full SKILL.md (155 more words)Show less
Step 6 — Error Handling and Retry

Zapier handles retries automatically for failed actions. For custom webhooks:

javascript
// Implement idempotency
const processedNotes = new Set(); // Use Redis/DB in production

app.post('/webhooks/granola', async (req, res) => {
  const noteId = `${req.body.title}-${req.body.datetime}`;

  if (processedNotes.has(noteId)) {
    return res.status(200).json({ status: 'already_processed' });
  }

  processedNotes.add(noteId);
  // ... process the event
});

Output

  • Zapier triggers configured for target folders
  • Event filtering routing meetings by type
  • Custom webhook handler processing events
  • Idempotency preventing duplicate processing

Error Handling

ErrorCauseFix
Trigger not firingWrong folder name in ZapierVerify folder name matches exactly (case-sensitive)
Empty note_contentNote still processing when trigger firesAdd 2-minute Delay step before processing actions
Duplicate eventsZapier retry on timeoutImplement idempotency with note ID deduplication
Webhook timeoutHandler takes > 30sReturn 200 immediately, process async
Missing attendeesCalendar event has no attendee listNo fix — attendees come from calendar event data

Examples

For a synthetic meeting.completed event, record event=evt-opaque-9; origin=approved; signature=pass; idempotency=once; destination=staging-actions; retention=none; rollback=consumer-disabled. Do not retain the meeting title, attendees, notes, or payload.

Resources

Next Steps

Proceed to granola-performance-tuning for transcription quality optimization.

© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/.curated/granola-webhooks-events of jeremylongshore/tons-of-skills-marketplace.

  • SKILL.md
  • references/implementation.md

Open the folder on GitHubat commit cfae287

Compare with similar skills

Granola Webhooks Events next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Granola Webhooks Events compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Granola Webhooks Events this skilljeremylongshore/tons-of-skills-marketplace2.8k—~2.1kAutomated safety check: PassMIT
Makeericrisco/rsc-harness180—~3.1kAutomated safety check: NotesMIT
Automation Flowsericrisco/rsc-harness180—~2.9kAutomated safety check: PassMIT
Linear Autopilotsundial-org/awesome-openclaw-skills663—~1.5kAutomated safety check: PassNone
Stripe Appsfossasia/eventyay1.7k1 repos~3.6kAutomated safety check: PassApache-2.0
Integration Generatordafthunk-com/dafthunk136—~2.3kAutomated safety check: PassMIT

Similar skills

  • Make

    ericrisco/rsc-harness

    A skill your agent uses when operating Make.com (formerly Integromat) programmatically — driving its REST API v2 or the Make MCP server from code or an agent to create, read, update, activate, run…

    180 GitHub stars~3.1k tokensUpdated yesterday
    Backend & APIsAuto-check: notes
  • Automation Flows

    ericrisco/rsc-harness

    A skill your agent uses when building or fixing a no-code automation on n8n, Make, or Zapier — trigger to multi-app steps with data mapping, dedup, retries and an error path — or picking the…

    180 GitHub stars~2.9k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Linear Autopilot

    sundial-org/awesome-openclaw-skills

    Automate Linear task processing with Discord notifications and git sync.

    663 GitHub stars~1.5k tokensUpdated 7 mo ago
    Productivity & AutomationAuto-check passed
  • Stripe Apps

    fossasia/eventyay

    A skill your agent uses when building, modifying, or reviewing a Stripe App — or when the user describes something that implies one (e.g.

    1.7k GitHub starsUsed in 1 repo~3.6k tokens
    Backend & APIsAuto-check passed
  • Integration Generator

    dafthunk-com/dafthunk

    Generate new OAuth integration providers for Dafthunk with backend providers, type definitions, frontend configurations, and integration nodes

    136 GitHub stars~2.3k tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed
  • Official

    Guides designing and building an official Apify integration for a company's product: workflow-automation apps, AI agent plugins, AI framework packages or direct API clients.

    2.4k GitHub stars~3.4k tokensUpdated 2 days ago
    Backend & APIsAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Granola Webhooks Events

What does Granola Webhooks Events do?

Build event-driven automations with Granola's Zapier webhook triggers. Granola Webhooks Events is an agent skill from jeremylongshore/tons-of-skills-marketplace. Build event-driven automations with Granola's Zapier webhook triggers.

When should I use Granola Webhooks Events?

Granola Webhooks Events fits situations like: creating real-time notification systems; processing meeting events; building custom integrations that react to Granola note creation.

How do I install Granola Webhooks Events in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill granola-webhooks-events -a claude-code`. Or copy the skill folder (skills/.curated/granola-webhooks-events in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/granola-webhooks-events in your project. Claude Code loads it when a task matches its description.

How do I install Granola Webhooks Events in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill granola-webhooks-events -a codex`. Or copy the skill folder (skills/.curated/granola-webhooks-events in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/granola-webhooks-events in your project. Codex loads it when a task matches its description.

Can I use Granola Webhooks Events in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill granola-webhooks-events -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/granola-webhooks-events, .gemini/skills/granola-webhooks-events, .github/skills/granola-webhooks-events and .opencode/skills/granola-webhooks-events in your project.

What does Granola Webhooks Events need to run?

SKILL.md names no scripts, command-line tools or credentials: Granola Webhooks Events is instructions for the agent only. Our summary lists: Python 3. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(curl:*), Bash(node:*), Bash(python3:*). Compatibility (from SKILL.md): Designed for Claude Code.

Does Granola Webhooks Events access the network?

SKILL.md names 1 domain. As links in the text: zapier.com. This is read from the text; nothing was executed.

Is Granola Webhooks Events safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Granola Webhooks Events use?

Granola Webhooks Events is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Granola Webhooks Events use?

About 2.1k tokens (SKILL.md is roughly 8.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 972 tokens, read only when the agent opens those files.

What are the alternatives to Granola Webhooks Events?

Skills that share tags, products or a category with Granola Webhooks Events: Make (ericrisco/rsc-harness, 180 stars), Automation Flows (ericrisco/rsc-harness, 180 stars), Linear Autopilot (sundial-org/awesome-openclaw-skills, 663 stars) and Stripe Apps (fossasia/eventyay, 1.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Granola Webhooks Events?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.