HubSpot is a CRM and marketing platform. ZombieLicenseHunter connects to HubSpot via OAuth 2.0 to sync portal user accounts — the people who have access to your HubSpot portal — so you can identify inactive or zombie licenses.
Prerequisites
- A HubSpot account with Super Admin access
- Access to the HubSpot Developer Portal to create an OAuth app
- The public URL of your ZombieLicenseHunter instance, for the redirect URI
Setup Instructions
Step 1: Create a HubSpot OAuth App
- Log in to the HubSpot Developer Portal.
- Navigate to Apps and click Create app.
- Give the app a name (e.g.,
ZombieLicenseHunter). - Under Auth, locate the Redirect URLs section and add:
https://<your-zombielicensehunter-host>/integrations/hubspot/callback - Note the Client ID and Client Secret — you will need these in Step 3.
Step 2: Configure Scopes
- In your app's Auth settings, scroll to Scopes.
- Add the scope
settings.users.read. Theoauthscope is included by default. - Save your changes.
These two scopes, oauth and settings.users.read, are what ZombieLicenseHunter requests when it sends you to HubSpot for consent.
Step 3: Connect in ZombieLicenseHunter
- In ZombieLicenseHunter, go to Integrations → Add Integration and select HubSpot. Leave Category as Application.
- Enter your Client ID and Client Secret from Step 1.
- Click Save Integration. You are redirected to the HubSpot consent screen.
- Authenticate with a Super Admin account, choose the portal to connect, and grant consent.
- After approval, you are redirected back and a background sync begins automatically.
Note: The account used to authorize the connection must be a Super Admin of the HubSpot portal. Non-admin accounts do not have permission to read portal user settings.
What Gets Synced
ZombieLicenseHunter syncs portal user accounts from the HubSpot Settings API v3 (/settings/v3/users/). This includes:
| Field | Description |
|---|---|
| User ID | Internal HubSpot user identifier |
| User's email address | |
| Active status | Whether the user is active or archived |
| License type | Role assigned (Super Admin or Full) |
Not synced: CRM data (contacts, deals, companies), last-login timestamps, or any marketing/sales data. Only portal user accounts are synced.
Troubleshooting
Connection fails at consent screen
Ensure the redirect URL registered in your HubSpot app exactly matches https://<your-zombielicensehunter-host>/integrations/hubspot/callback, including the protocol and with no trailing slash.
"Insufficient permissions" error during sync The HubSpot account that authorized the connection must be a Super Admin. Re-connect using a Super Admin account.
Missing settings.users.read scope
If the scope was not added before connecting, HubSpot refuses the consent request. Add the scope in the HubSpot Developer Portal, then disconnect and reconnect the integration.
Users not appearing after sync Archived users are included in the sync. If a user is missing entirely, verify they exist in Settings > Users & Teams in your HubSpot portal.