GR

Builds analytics pipelines and reports for Granola usage and meeting insights.

Install

mkdir -p .claude/skills/granola-observability && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/8986" && unzip -o skill.zip -d .claude/skills/granola-observability && rm skill.zip

Installs to .claude/skills/granola-observability

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Monitor Granola adoption, meeting analytics, and build custom dashboards.
73 charsno explicit “when” trigger
Advanced

Key capabilities

  • Monitor meeting volume and adoption
  • Track action item creation rates
  • Build custom analytics pipelines
  • Visualize meeting efficiency metrics
  • Configure health alerts

How it works

Granola provides built-in analytics for Enterprise users and supports custom data pipelines by streaming metadata to external warehouses via Zapier.

Inputs & outputs

You give it
Meeting metadata and usage logs
You get back
Analytics dashboards and performance reports

When to use granola-observability

  • Track team meeting adoption
  • Analyze meeting volume patterns
  • Build a meeting analytics dashboard
  • Measure action item creation rates

About this skill

Granola Observability

Overview

Monitor Granola usage, track meeting patterns, and build analytics dashboards. Granola Enterprise includes a usage analytics dashboard. For deeper insights, build custom pipelines using Zapier to stream meeting metadata to BigQuery, Metabase, or other analytics platforms.

Prerequisites

  • Granola Business or Enterprise plan
  • Admin access for organization-level analytics
  • Optional: BigQuery/Metabase for custom dashboards, Zapier for data pipeline

Instructions

Step 1 — Built-in Analytics (Enterprise)

Access the analytics dashboard at Settings > Analytics (Enterprise plan):

MetricWhat It Shows
Total meetings capturedMeeting volume over time
Active usersUsers who recorded meetings this period
Hours capturedTotal meeting hours transcribed
Notes sharedHow often notes are distributed
Action items createdExtracted action items across org
Adoption rateActive users / total licensed seats

Step 2 — Define Key Metrics

Track these metrics to measure Granola's impact:

CategoryMetricTargetFormula
AdoptionActivation rate>80%Users with 1+ meeting / total seats
AdoptionWeekly active users>70%Users recording this week / total seats
QualityCapture rate>70%Meetings captured / total calendar meetings
QualityShare rate>50%Notes shared / notes created
EfficiencyTime saved>10 min/meetingSurvey: manual notes time - Granola time
EfficiencyAction completion>80%Actions completed / actions created
HealthProcessing success>99%Successful enhancements / total attempts
HealthIntegration uptime>99%Successful syncs / total sync attempts

Step 3 — Build a Custom Analytics Pipeline

Stream meeting metadata from Granola to a data warehouse via Zapier:

# Zapier: Granola → BigQuery pipeline
Trigger: Granola — Note Added to Folder ("All Meetings")

Step 1 — Code by Zapier (extract metadata):
  const data = {
    meeting_id: inputData.title + '_' + inputData.calendar_event_datetime,
    title: inputData.title,
    date: inputData.calendar_event_datetime,
    creator: inputData.creator_email,
    attendee_count: JSON.parse(inputData.attendees || '[]').length,
    has_action_items: inputData.note_content.includes('- [ ]'),
    action_item_count: (inputData.note_content.match(/- \[ \]/g) || []).length,
    has_decisions: inputData.note_content.includes('## Decision') ||
                   inputData.note_content.includes('## Key Decision'),
    word_count: inputData.note_content.split(/\s+/).length,
    is_external: JSON.parse(inputData.attendees || '[]')
      .some(a => !a.email?.endsWith('@company.com')),
    workspace: inputData.folder || 'unknown',
    captured_at: new Date().toISOString(),
  };
  output = [data];

Step 2 — BigQuery: Insert Row
  Dataset: meeting_analytics
  Table: granola_meetings
  Row: {{metadata from step 1}}

BigQuery schema:

CREATE TABLE meeting_analytics.granola_meetings (
  meeting_id STRING NOT NULL,
  title STRING,
  date TIMESTAMP,
  creator STRING,
  attendee_count INT64,
  has_action_items BOOL,
  action_item_count INT64,
  has_decisions BOOL,
  word_count INT64,
  is_external BOOL,
  workspace STRING,
  captured_at TIMESTAMP
);

Step 4 — Analytics Queries

-- Weekly meeting volume by workspace
SELECT
  workspace,
  DATE_TRUNC(date, WEEK) AS week,
  COUNT(*) AS meeting_count,
  SUM(action_item_count) AS total_actions,
  AVG(attendee_count) AS avg_attendees
FROM meeting_analytics.granola_meetings
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 12 WEEK)
GROUP BY workspace, week
ORDER BY week DESC, workspace;

-- Adoption: active users per week
SELECT
  DATE_TRUNC(date, WEEK) AS week,
  COUNT(DISTINCT creator) AS active_users
FROM meeting_analytics.granola_meetings
WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 8 WEEK)
GROUP BY week
ORDER BY week DESC;

-- Meeting efficiency score (has action items + decisions + < 8 attendees)
SELECT
  title,
  date,
  CASE
    WHEN has_action_items AND has_decisions AND attendee_count <= 8 THEN 'Efficient'
    WHEN has_action_items OR has_decisions THEN 'Partially Efficient'
    ELSE 'Low Efficiency'
  END AS efficiency_rating
FROM meeting_analytics.granola_meetings
ORDER BY date DESC
LIMIT 50;

-- External vs internal meeting ratio
SELECT
  DATE_TRUNC(date, MONTH) AS month,
  COUNTIF(is_external) AS external_meetings,
  COUNTIF(NOT is_external) AS internal_meetings,
  ROUND(COUNTIF(is_external) * 100.0 / COUNT(*), 1) AS external_pct
FROM meeting_analytics.granola_meetings
GROUP BY month
ORDER BY month DESC;

Step 5 — Automated Reporting

Weekly Slack digest (via Zapier Schedule):

Trigger: Schedule by Zapier — Every Friday at 5 PM

Step 1 — BigQuery: Run Query
  Query: "SELECT COUNT(*) as meetings, SUM(action_item_count) as actions,
          COUNT(DISTINCT creator) as active_users
          FROM meeting_analytics.granola_meetings
          WHERE date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)"

Step 2 — Slack: Send Message to #leadership
  Message: |
    :bar_chart: *Weekly Granola Report*

    *This Week:*
    - Meetings captured: {{meetings}}
    - Action items created: {{actions}}
    - Active users: {{active_users}}

    [View full dashboard →]

Step 6 — Health Monitoring and Alerts

Set up alerts for operational issues:

AlertConditionChannel
Low adoptionActive users <50% of seats (weekly)Slack #it-alerts
Processing failures>5% enhancement failures (daily)PagerDuty
Integration outageSlack/Notion/CRM sync failures >3 (hourly)Slack #it-alerts
Zero meetings capturedNo meetings for any workspace (daily)Email to workspace admin

Status monitoring:

# Check Granola service status
curl -s https://status.granola.ai/api/v2/status.json | python3 -c "
import json, sys
data = json.load(sys.stdin)
status = data.get('status', {}).get('description', 'Unknown')
print(f'Granola Status: {status}')
"

Output

  • Built-in analytics reviewed and baselines established
  • Custom analytics pipeline streaming to data warehouse
  • Dashboard visualizing adoption, efficiency, and meeting patterns
  • Automated weekly/monthly reports delivered to stakeholders
  • Health monitoring alerts configured for operational issues

Error Handling

ErrorCauseFix
Missing data in pipelineZapier trigger failedCheck Zap history, reconnect if needed
Duplicate entries in BigQueryZapier retry on timeoutAdd deduplication (MERGE or INSERT IGNORE)
Dashboard shows stale dataPipeline pausedMonitor Zapier health, restart paused Zaps
Low adoption alert false positiveNew seats just addedAdjust alert threshold, use percentage not absolute

Resources

Next Steps

Proceed to granola-incident-runbook for incident response procedures.

When not to use it

  • Real-time meeting monitoring
  • Individual performance tracking

Prerequisites

Granola Business or Enterprise planAdmin access

Limitations

  • Requires Zapier for custom pipelines
  • Analytics data depends on meeting capture success

How it compares

This method enables custom data modeling in external tools like BigQuery instead of relying solely on built-in UI dashboards.

Compared to similar skills

granola-observability side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
granola-observability (this skill)027dReviewAdvanced
model-usage52moReviewBeginner
analytics-tracking76moNo flagsIntermediate
splunk-analysis55moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

model-usage

openclaw

Use CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.

548

analytics-tracking

davila7

When the user wants to set up, improve, or audit analytics tracking and measurement. Also use when the user mentions "set up tracking," "GA4," "Google Analytics," "conversion tracking," "event tracking," "UTM parameters," "tag manager," "GTM," "analytics implementation," or "tracking plan." For A/B test measurement, see ab-test-setup.

736

splunk-analysis

incidentfox

Splunk log analysis using SPL (Search Processing Language). Use when investigating issues via Splunk logs, saved searches, or alerts.

536

tracking-crypto-derivatives

jeremylongshore

Track cryptocurrency futures, options, and perpetual swaps with funding rates, open interest, liquidations, and comprehensive derivatives market analysis. Use when monitoring derivatives markets, analyzing funding rates, tracking open interest, finding liquidation levels, or researching options flow. Trigger with phrases like "funding rate", "open interest", "perpetual swap", "futures basis", "liquidation levels", "options flow", "put call ratio", "derivatives analysis", or "BTC perps".

437

weights-and-biases

davila7

Track ML experiments with automatic logging, visualize training in real-time, optimize hyperparameters with sweeps, and manage model registry with W&B - collaborative MLOps platform

325

perf-analyzer

ComposioHQ

Use when synthesizing perf findings into evidence-backed recommendations and decisions.

324

Search skills

Search the agent skills registry