Zoom Phone has become a mainstay for enterprise voice, but extracting its data for Microsoft Power BI requires a technical understanding of Zoom's REST API architecture and JSON data structures.
Unlike traditional on-premises systems that use SQL exports, Zoom Phone is cloud-native. To build a reliable dashboard, you must navigate API rate limits, OAuth2 authentication, and the transformation of nested JSON records into a usable data model.
Looking for more details on building Power ? Read our guide, Using Power BI for Unified Communications (UC): How to Build it and When to Buy It.
The connection lifecycle involves moving data from the Zoom Cloud into the Power BI service. Because Zoom data is highly dynamic, most organizations use an **Import** model, where data is refreshed via API calls or staged in a middle-tier database like SQL Server to preserve historical records.
To pull data into Power BI, you must create a Server-to-Server OAuth App in the Zoom App Marketplace. This is the modern replacement for legacy JWT tokens.
Log in to the Zoom App Marketplace.
Navigate to Develop > Build App and select Server-to-Server OAuth.
In the Scopes section, add phone:read:admin and dashboard_phone:read:admin.
Collect your Account ID, Client ID, and Client Secret for the Power BI Web Connector.
The most valuable data for Power BI resides in the Zoom Phone Dashboard API endpoints. These provide call logs, MOS (Mean Opinion Score) values, and queue metrics.
Primary API Endpoint: https://api.zoom.us/v2/phone/metrics/call_logs
Key Challenge: Rate Limiting. Zoom enforces "Rate Limits" (typically Tier 1 or Tier 2) on API requests. If your Power BI report attempts to pull millions of rows in a single refresh, Zoom may throttle the connection. Implementation of a "paged" request strategy in Power Query is essential.
To ensure your reports are fast and interactive, flatten the Zoom JSON response into a Star Schema.
| Zoom Object Property | Data Type | Analytics Use Case |
|---|---|---|
callee_number / caller_number |
String | Filtering inbound vs. internal calls. |
mos (Mean Opinion Score) |
Decimal | Tracking voice quality and packet loss. |
call_type |
Integer | Decoding (e.g., PSTN, Extension, Emergency). |
result |
String | Analyzing Connected vs. Missed vs. Cancelled calls. |
The raw data from Zoom arrives as a "List" of "Records." In Power BI, you must:
DateTimeZone.ToLocal.Table.ExpandRecordColumn to extract the nested caller and callee details.Average Call Quality (MOS):
Avg Quality = AVERAGE(Zoom_Calls[mos])
Missed Call Rate (%):
Missed Rate = DIVIDE(COUNTROWS(FILTER(Zoom_Calls, [result]="Missed")), COUNTROWS(Zoom_Calls))
Don't waste weeks writing pagination logic and managing OAuth tokens. MetroLink UC Connector Tool automates the Zoom Phone API connection, delivering a clean, relational SQL feed directly to Power BI.
No native "Zoom Connector" exists in the standard Power BI library. You must use the Web Connector to call Zoom’s REST APIs or use a specialized data bridge like MetroLink.
How do I handle Zoom API pagination?Zoom returns a next_page_token if there is more data. In Power BI, you must create a recursive M function to loop through these tokens until all records are retrieved.
Yes. By targeting the /phone/metrics/ endpoints, you can pull Jitter, Latency, and MOS scores into Power BI to visualize network performance by location or device type.
Zoom's API generally provides a rolling window of data (e.g., 6 months). For long-term year-over-year analysis, organizations use Expo XT UC Analytics for Zoom to warehouse and archive historical records.