Zoom is a video conferencing and collaboration platform. ZombieLicenseHunter connects via Server-to-Server OAuth to sync user accounts, license types, feature add-ons and last-login times — enabling detection of inactive or over-provisioned Zoom licenses.
Prerequisites
- Zoom account with Owner or Admin role
- Access to the Zoom Marketplace to create and activate apps
Setup Instructions
Step 1: Create Server-to-Server OAuth App
- Go to marketplace.zoom.us and sign in.
- Click Develop → Build App.
- Select Server-to-Server OAuth as the app type.
- Give the app a name (e.g., "ZombieLicenseHunter") and click Create.
- Copy the Account ID, Client ID, and Client Secret from the app credentials page — you will need these in Step 4.
Step 2: Configure Scopes
On the Scopes tab of your app, add the following scope:
| Scope | Purpose |
|---|---|
user:read:admin |
List the account's users and read each user's settings (license type, feature add-ons, last login) |
This is the only scope the sync uses. With Server-to-Server OAuth the scopes live on the Zoom app; ZombieLicenseHunter does not request scopes itself.
Step 3: Activate the App
- Navigate to the Activation tab of your app.
- Click Activate your app.
Activation requires Zoom account Owner or Admin privileges. The app cannot issue tokens until it is activated.
Step 4: Connect in ZombieLicenseHunter
- In ZombieLicenseHunter, go to Integrations → Add Integration and select Zoom. Leave Category as Application.
- Enter the credentials copied in Step 1:
- Account ID
- Client ID
- Client Secret
- Click Save Integration. ZombieLicenseHunter validates the credentials by requesting a token from Zoom, then encrypts and stores them.
- An initial background sync begins immediately.
What Gets Synced
Only active users are fetched (pending and deactivated users are not).
| Field | Description |
|---|---|
| User identity | Zoom user ID, email address |
| License type | Basic, Licensed, or On-Prem |
| Feature add-ons | Zoom Phone, Webinar and Large Meeting entitlements, read from each user's settings |
| Last login | The user's last login time as reported by Zoom |
| Account creation date | When the user was added to the account |
Tokens are short-lived (1 hour) and re-exchanged automatically on each sync cycle. There is no refresh token — a new token is obtained via HTTP Basic auth on every run.
Troubleshooting
"Invalid credentials" on save Verify that the Account ID, Client ID, and Client Secret were copied exactly from the Zoom Marketplace app. Trailing whitespace is a common cause of failure.
Token exchange fails after initial setup Confirm the app has been activated (Step 3). Inactive apps return a 401 even with correct credentials.
Users not appearing after sync
Ensure the user:read:admin scope is granted and the app is activated. If scopes were added after activation, deactivate and reactivate the app for changes to take effect.
Feature add-ons are empty for every user
Reading add-ons needs the same user:read:admin scope; if it is present, the per-user settings requests may have been rate limited. They are retried on the next sync.