Plugins 〉Zoom


Developer

Crest Data

Sign up to receive occasional product news and updates:



Data Source
commercial

Zoom

  • Overview
  • Installation
  • Change log
  • Related content

Zoom Data Source Plugin for Grafana

Description

The Zoom Data Source Plugin is a Grafana backend datasource plugin that integrates with Zoom's REST API v2 to query meeting metrics, QoS data, user activity, Zoom Room health, and phone device status from Grafana dashboards, Explore, and Alerting.

Zoom is a cloud communications platform that provides video meetings, room systems, user management, and phone services. This plugin provides visibility into Zoom account activity by allowing users to explore meetings, meeting quality, room health, user listings, and phone device status directly within Grafana.

Features

  • Query and visualize meeting details, meeting QoS, participant QoS, Zoom Room health, user activity, and phone device status from Grafana
  • Support for multiple Zoom data categories including Meetings, Zoom Rooms, Users, and Phones
  • Live and historical meeting analysis, including aggregated and time-series QoS views
  • Automatic 30-day chunking for past meeting queries to comply with Zoom API time-window limits
  • Pre-built dashboards for Zoom overview, meeting quality, user details, and Zoom Room monitoring
  • Automatic retry handling for transient API failures, including rate limits and server-side errors
  • Compatibility with Grafana dashboards, Explore, and Alerting workflows

Compatibility

ComponentVersion / Detail
Grafana>= 12.3.0
Zoom APIREST API v2
AuthenticationServer-to-Server OAuth (Account ID, Client ID, Client Secret)
Zoom AccountPro, Business, or Enterprise (Business+ recommended for Heavy/Dashboard APIs)

Visuals

Configuration Editor

Configuration Editor

Query Editor

Query Editor

Installation

Requirements

  • Grafana >= 12.3.0
  • A Zoom Pro, Business, or Enterprise account (Business+ recommended for Heavy/Dashboard APIs)
  • Admin-level access to the Zoom App Marketplace to create a Server-to-Server OAuth app
  • The following OAuth scopes granted to the app:
    • dashboard_meetings:read:admin
    • dashboard_zoomrooms:read:admin
    • user:read:admin
    • room:read:admin
    • phone:read:admin
    • meeting:read:admin

Obtaining Zoom Credentials

  1. Sign in to the Zoom App Marketplace as an account admin.
  2. Click Develop -> Build App.
  3. Select Server-to-Server OAuth and click Create.
  4. Provide an app name such as Grafana Zoom Data Source and click Create.
  5. On the App Credentials tab, copy the following values:
    • Account ID
    • Client ID
    • Client Secret
  6. On the Information tab, fill in the required company and developer contact fields.
  7. On the Scopes tab, add all required scopes listed above.
  8. On the Activation tab, click Activate your app.

Install the Plugin

Install the plugin from the Grafana Plugin Catalog or using the Grafana CLI:

grafana cli plugins install crestdata-zoom-datasource

After installation, restart the Grafana server for the plugin to be loaded.

Configure the Data Source

  1. In Grafana, navigate to Connections > Data Sources > Add data source.
  2. Search for Zoom and select it.
  3. Fill in the required configuration fields:
NameTypeRequiredDescription
Account IDStringYesZoom account identifier from the Server-to-Server OAuth app credentials
Client IDStringYesOAuth Client ID of the Server-to-Server OAuth app
Client SecretSecured StringYesOAuth Client Secret, stored securely by Grafana
API Base URLStringNoZoom REST API base URL; defaults to https://api.zoom.us/v2
OAuth Token URLStringNoZoom OAuth token endpoint; defaults to https://zoom.us/oauth/token
  1. Click Save & Test to validate the credentials and required Zoom API access.

Usage

Query Editor

Once the data source is configured, you can create panels using the query editor with the following parameters:

ParameterTypeOptionsDefaultDescription
EntityDropdownMeetings, Zoom Rooms, Users, PhonesMeetingsTop-level Zoom data category to query
Query TypeDropdownVaries by selected entityDetailsSpecific query mode for the selected entity
Live MeetingsToggleEnabled, DisabledDisabledFetch live meetings and ignore the selected time range where supported
Meeting IDStringNANAOptional for QoS queries; when blank, the plugin iterates all meetings
Participant IDStringNANAOptional filter for participant-level QoS queries
Room IDStringNANARequired for Zoom Rooms > Associated Meetings

Meetings

Query TypeTime RangeRequired FieldsOutput
DetailsYes (or Live toggle)NATable of meetings with host, participants, duration, and quality ratings
Meeting QOSYes (or Live toggle)meetingId (optional)Table with one row per meeting and averaged QoS metrics
Meeting QOS SeriesYes (or Live toggle)meetingId (optional)Time series of QoS metrics per timestamp
Participant QOSYes (or Live toggle)meetingId, participantId (optional)Table with one row per participant
Participant QOS SeriesYes (or Live toggle)meetingId, participantId (optional)Time series of raw per-sample metrics per participant

When Meeting ID is blank for a QoS query, the plugin iterates all meetings in the selected panel time range and concatenates the results.

Zoom Rooms

Query TypeTime RangeRequired FieldsOutput
DetailsNoNATable of all Zoom Rooms with health, status, and components
Associated MeetingsYesroomId (required)Table of past meetings for the room; any in-progress live meeting is included automatically

Users / Phones

Both expose Details:

  • Users returns a table listing users, including license type, department, and activity fields
  • Phones returns a table listing account-wide phone device status with site and assignee mapping

Time Range Handling

Past meeting queries are split into 30-day chunks to stay within Zoom's API time-window limits. The plugin merges paginated responses transparently, so no manual action is required from the user.

ScenarioBehaviour
Live toggle enabledFetches live meetings; date range is ignored
Past meetings, range <= 30 daysSingle date-range request
Past meetings, range > 30 daysSplit into 30-day chunks, results merged
Users / Phones detailsAccount-wide listings; time range ignored

Error Handling and Retry Strategy

Retries are performed automatically for transient failures:

  • HTTP 429 (rate limited) while honoring the Retry-After header
  • HTTP 5xx responses with exponential backoff
  • Network or connection-level errors with exponential backoff
  • One-time token refresh on applicable 401 Unauthorized query failures

Max retry attempts: 3. Non-retryable errors such as most HTTP 4xx responses are returned immediately.

Common issues:

SymptomLikely CauseFix
Health check failed on Save & TestAccount ID, Client ID, or Client Secret is missing or incorrectFill in all three fields and verify the values in the Zoom app
token request returned 401Wrong Client ID / Secret or inactive appRe-check credentials and ensure the app is activated
403 with insufficient scopesOAuth app is missing required scopesAdd the missing scopes in the Zoom app and retry
rate limited (429)Heavy-class quota is shared across the Zoom accountStagger dashboard refreshes; the plugin will honor Retry-After

Pre-built Dashboards

The plugin ships with four pre-built dashboards for quick visualization and monitoring of Zoom environments.

SettingValue
Default time rangeLast 24 hours
Auto-refreshEnabled
Datasource selectionZoom

1. Zoom Overview — Provides a high-level summary of Zoom activity, including:

  • Meeting counts and activity overview
  • Quality ratings
  • Active room status

2. Zoom Meeting Quality — Displays per-meeting and per-participant QoS insights, including:

  • Aggregated meeting QoS metrics
  • Participant-level QoS metrics
  • Time-series quality analysis

3. Zoom User Details — Displays user-level account insights, including:

  • Active, inactive, pending, and all user listings
  • License type details
  • Department and activity information

4. Zoom Rooms — Provides visibility into Zoom Room environments, including:

  • Room health and status
  • Room component details
  • Associated meeting activity

Limitations

API Limitation: Zoom dashboard APIs impose time-window restrictions on historical meeting queries, and account-wide listing endpoints such as Users and Phones do not use the Grafana time range. In addition, Heavy-class Zoom API quotas are shared across the entire Zoom account.

Design Adaptation To accommodate these constraints, the plugin splits eligible historical meeting queries into 30-day chunks, merges the results automatically, exposes a live query mode where supported, and treats account-wide listing endpoints as time-range-independent queries.

Support

For issues, questions, or feature requests, please open an issue in this repository.

Roadmap

See the open issues for a list of proposed features and known issues.

Contributing

Contributions are welcome! To get started with development:

cd crestdata-zoom-datasource

Frontend

npm install npm run dev # development mode with watch npm run build # production build

Backend

mage -v # build backend binaries

Tests

npm run test # frontend tests (Jest) npm run test:ci # CI mode go test ./… # backend tests

Linting

npm run lint npm run lint:fix

Local Grafana instance (Docker)

npm run server

E2E tests (Playwright)

npm run e2e

Before submitting a pull request:

  1. Run the linter and ensure all tests pass.
  2. Validate the plugin using the Grafana Plugin Validator.
  3. Ensure any changes to plugin.json are intentional — a Grafana server restart is required after such changes.

Authors and Acknowledgment

Developed by Crest Data.

License

This plugin is distributed under EULA LICENSE.

References

Install on Grafana Cloud

Plugins can be installed directly from within your Grafana instance or automated using the Cloud API or Terraform.

Learn more about plugin installation

For more information, visit the docs on plugin installation.

Changelog

1.0.4

  • sign the plugin.

1.0.3

  • Added frontend validation for the Associated Meetings query type: Room ID is required by filterQuery.

1.0.2

  • Updated Base URL and Token URL

1.0.1

  • Updated README.

1.0.0

  • Initial release of the Zoom datasource plugin
  • Server-to-Server OAuth authentication with cached token refresh and forced-refresh on 401
  • Supported query types:
    • Meetings: Details, Meeting QOS, Meeting QOS Series, Participant QOS, Participant QOS Series
    • Rooms: Details, Associated Meetings
    • Users: Details
    • Phones: Details