ZombieLicenseHunter connects to a Slack workspace through OAuth 2.0, using a Slack app that you create, to sync workspace members and their license types (owner, admin, full member, guest). The connection is authorized once in the browser by a workspace admin.
Prerequisites
- A Slack workspace where you can install apps (workspace admin, or app installation permitted for members)
- A Slack app created at api.slack.com/apps
- The public URL of your ZombieLicenseHunter instance, for the redirect URL
Setup Instructions
Step 1: Create a Slack app
- Go to api.slack.com/apps and click Create New App → From scratch. Name it (e.g.,
ZombieLicenseHunter) and pick the workspace to develop it in. - Under OAuth & Permissions → Scopes → Bot Token Scopes, add these three scopes. They are exactly what ZombieLicenseHunter requests during authorization:
users:readusers:read.emailteam:read
- Under OAuth & Permissions → Redirect URLs, add and save:
https://<your-zombielicensehunter-host>/integrations/slack/callback - Under Basic Information → App Credentials, note the Client ID and Client Secret.
Step 2: Connect in ZombieLicenseHunter
- In ZombieLicenseHunter, go to Integrations → Add Integration and select Slack. Leave Category as Application.
- Enter the Client ID and Client Secret from Step 1.
- Click Save Integration. You are redirected to Slack's consent screen for the three scopes.
- Choose the workspace and click Allow. Slack redirects you back, the authorization code is exchanged for a token, the integration becomes active, and the first sync is queued.
What Gets Synced
Users are fetched 200 at a time. Users without an email address are skipped.
| Field | Notes |
|---|---|
| Required; users without email are excluded | |
| Active status | Active unless the account is deleted, a bot, or a guest |
| License type | Primary Owner, Owner, Admin, Full Member, Multi-Channel Guest, Single-Channel Guest |
Last sign-in is not collected. Slack exposes it only through the team.accessLogs API, which requires the admin user scope on a Business+ or Enterprise Grid plan. ZombieLicenseHunter does not request that scope; the sync records the field as unavailable and continues.
Troubleshooting
Slack shows "redirect_uri did not match any configured URIs"
Confirm the redirect URL saved under the app's OAuth & Permissions exactly matches https://<your-zombielicensehunter-host>/integrations/slack/callback, including the scheme and with no trailing slash.
Consent screen asks for scopes you did not add The three scopes above are added by ZombieLicenseHunter to the authorization request; you do not need to add anything beyond them in the app. If Slack refuses the request, add the three under Bot Token Scopes and retry.
Users missing email addresses Slack users who have not set an email in their profile, and accounts on workspaces that hide emails from apps, are skipped during sync. This is expected behavior.
Sync warns that access logs are unavailable Expected on every plan: see What Gets Synced. The rest of the sync is unaffected.