HubSpot
Connect HubSpot CRM to show the deal pipeline by stage, deals won in the last 30 days, and the contact count. Connect once for the company (Global) or per brand. The pipeline refreshes every 15 minutes. Only counts and totals are kept, never contact names or emails.
What it lights up #
- Customer Success · sales pipeline
- Brand page · HubSpot card
- Scorecard · pipeline value, won in 30 days
Get an access token in HubSpot #
HubSpot is retiring the creation of new private apps (accounts created on or after 28 September 2026 can't create them, and existing accounts lose the option on 26 October 2026). Use a service key for a new setup. A private app you already have keeps working.
Option A: a service key (recommended) #
- As a super admin, or a user with Developer tools access, open Development → Keys → Service keys (some HubSpot pages show this as Settings → Integrations → Service Keys) and choose Create service key.
- Add two read scopes:
crm.objects.deals.readandcrm.objects.contacts.read. Nothing needs write access. - Create it and copy the key. HubSpot suggests rotating service keys about every 6 months.
Option B: an existing private app #
- As a super admin, open Development → Legacy apps and open your private app (new ones are made with Create legacy app → Private while HubSpot still allows it).
- On the Scopes tab make sure it has
crm.objects.deals.readandcrm.objects.contacts.read. - Open the Auth tab, choose Show token and copy the access token. It usually starts with
pat-and a region, such aspat-na1-.
Connect it in VX Terminal #
- Open Settings → Connections, find HubSpot under Customers and press Connect on the row (or Add for a brand).
- Paste the token into Access token. Paste only the token, without the word Bearer.
- Press Test, then Save.
How Test works #
Test reads the HubSpot account ID and currency, the deal pipelines and the contact count, for example "Connected to HubSpot account 1234567 (STANDARD, USD, na1) · 2 deal pipelines · 4,812 contacts". Nothing is changed.
Common errors #
| Message | Fix |
|---|---|
| "Access token is too short to be a HubSpot access token" | Copy the whole token. |
| "Access token should be just the token, without the word Bearer" | Remove Bearer from the start. |
| "Access token contains spaces; paste only the token" | Paste the token alone. |
| "HubSpot rejected the access token. It may have been rotated or the app deleted; paste the current token." | Copy the current token or key and save it again. |
| "The token works but can't read deal pipelines. Give the app the crm.objects.deals.read scope, then paste the token again." | Add the scope in HubSpot. |
| "The token works but can't read contacts. Give the app the crm.objects.contacts.read scope, then paste the token again." | Add the scope in HubSpot. |
| "HubSpot is rate-limiting this account; the next refresh will try again." | Nothing to do; it retries. |