Vexter + HubSpot Integration
Setup, configuration, and troubleshooting guide for the official Vexter integration with HubSpot CRM.
1. Overview
Vexter is an AI-powered sales automation platform built for the Norwegian market. The HubSpot integration is bi-directional:
- HubSpot → Vexter: imports companies, contacts, deals, and list memberships. Real-time updates via webhooks.
- Vexter → HubSpot: writes every campaign email, reply, meeting, and AI classification back to the contact's timeline. Creates follow-up tasks on inbound replies so reps get HubSpot's native notifications.
The integration is built on HubSpot's public OAuth 2.0 API (version 2026-03) and uses HubSpot's standard Engagements, Properties, Lists, and Webhooks APIs.
2. Installation
- Open the Vexter listing on the HubSpot Marketplace and click Install.
- You will be redirected to the Vexter sign-in page. Sign in with your Vexter account, or sign up if you don't have one yet.
- Once signed in, open Settings → CRM Integration → HubSpot from the sidebar and click the Connect button on the HubSpot card.
- Vexter opens HubSpot's OAuth consent dialog. Review the requested scopes (listed in section 3 below) and click Authorize.
- HubSpot redirects you back to Vexter, where an initial sync runs in the background. Your HubSpot companies and contacts will start appearing on the CRM Integration → HubSpot page within a few minutes.
You can also start the connection from inside Vexter without going through the marketplace — just open CRM Integration → HubSpot and click Connect. The OAuth consent dialog and scopes are identical either way.
3. OAuth scopes and why we need them
Vexter only requests the scopes required to deliver the features below. We never request marketing-only scopes (e.g. content) or social scopes.
| Scope | What we use it for |
|---|---|
oauth | Required by HubSpot for every OAuth app — establishes the access/refresh token lifecycle. |
crm.objects.contacts.read / .write | Import your HubSpot contacts as Vexter leads; push email engagements, reply intent, and follow-up tasks back to the contact timeline. |
crm.objects.companies.read / .write | Sync companies both ways; associate Vexter activity with the right HubSpot company. |
crm.objects.deals.read | Detect contacts who already have an open deal in HubSpot so Vexter can pause outbound campaigns to them (avoids stepping on active sales conversations). |
crm.schemas.contacts.read / .write | Provision Vexter-namespaced custom properties (vexter_reply_intent, vexter_suppression_reason, vexter_auto_reply) and read lifecycle stage for send-suppression. |
crm.schemas.companies.read | Read company property metadata (industry, lifecycle, custom field definitions) so Vexter's filter sheet can list every HubSpot company field as a filter option when building campaign audiences. |
crm.objects.owners.read | Map Vexter users to HubSpot owners so pushed records are attributed to the right rep, and so notifications fire on the contact's actual owner. |
crm.lists.read / .write | Read your HubSpot lists to use as Vexter campaign audiences, and (with write) push a curated Vexter prospect list back to HubSpot as a static company list so your existing HubSpot workflows can use it as a trigger source. |
4. Configuration
All sync behavior is controlled from CRM Integration → HubSpot → Sync Settings in Vexter. Every toggle is OFF by default so a fresh connection is read-only until you opt in.
- Auto-sync companies / contacts — pulls updates from HubSpot on a schedule (default: hourly).
- Block sends with active deal — suppresses campaign emails to contacts whose company has an open deal in HubSpot.
- Block sends to lifecycle stages — choose which lifecycle stages (e.g. Customer, Evangelist) cause Vexter to skip outreach. Defaults to
customerandevangelist. - Push sent emails — writes every Vexter-sent campaign email to the matched contact's HubSpot timeline as an outbound email engagement.
- Push received replies — writes every reply received in Vexter to the matched contact's timeline as an inbound email engagement.
- Push contact properties — saves Vexter's reply-intent classifier and auto-reply detection as custom properties on the matched contact.
- Notify owner with a HubSpot Task — when an inbound reply is pushed, also create a follow-up Task assigned to the contact's mapped owner. Triggers HubSpot's native notification (dashboard + email).
- Owner mapping — map each Vexter user to a HubSpot owner so pushed records land under the right rep.
5. Sync behavior
| Direction | What | When |
|---|---|---|
| HubSpot → Vexter | Contact / company create, update, delete, lifecycle change, deal create / close | Real-time via HubSpot webhooks; daily reconciliation as a safety net for missed events |
| Vexter → HubSpot | Outbound campaign emails, inbound replies, meeting bookings, follow-up tasks, contact properties | Real-time at the moment the event occurs in Vexter |
6. Disconnecting
From Vexter:
- Open CRM Integration → HubSpot.
- Click Disconnect.
- Vexter immediately revokes the OAuth refresh token with HubSpot (POST
/oauth/2026-03/token/revoke) and stops all syncs.
From HubSpot:
- Open HubSpot Settings → Account Setup → Integrations → Connected Apps.
- Find Vexter and click Uninstall.
- HubSpot delivers the
app.uninstalledwebhook to Vexter, which then cleans up local state and stops all background tasks for the affected portal.
Either side's disconnect is sufficient on its own — you don't need to do both. Re-installing later restores the same Vexter connection record (with all its historical activity logs) when the portal's hub_id matches.
7. Data handling and security
- OAuth access and refresh tokens are encrypted at rest (envelope encryption with per-row data keys).
- Vexter is hosted in the EU (Frankfurt) and is GDPR compliant. See our Privacy Policy for full details on data processing.
- We never share your HubSpot data with third parties. AI features run through OpenAI (sub-processor) for content generation only — no contact-level data is used for model training.
- You can revoke access at any time via the disconnect steps above. On disconnect, Vexter stops processing your HubSpot data immediately.
8. Troubleshooting
"No active HubSpot connection found"
Your team's HubSpot connection was disconnected (or never completed). Open CRM Integration → HubSpot and click Connect.
Campaign emails are being suppressed unexpectedly
Vexter ships with a safety default that blocks sends to contacts whose lifecycle stage is Customer or Evangelist, and to anyone with an open deal in HubSpot. Open Sync Settings and review the Block sends section. Remove stages that shouldn't trigger suppression for your team.
HubSpot doesn't notify reps when a lead replies
Email engagements on a HubSpot timeline don't trigger HubSpot notifications by themselves. Enable Notify owner with a HubSpot Task in Sync Settings — Vexter will then create a follow-up Task on every inbound reply, assigned to the contact's owner. HubSpot's native task notifications take over from there.
A property fails to provision with HTTP 409
This is expected when the property already exists on your portal — Vexter's provisioning task is idempotent. After the first successful run, the task short-circuits on subsequent reconnects so you won't see this in HubSpot's API monitor again.
Reply intent property shows the wrong classification
Vexter's reply classifier is AI-driven and not 100% accurate. You can override the value directly in HubSpot at any time — Vexter only writes on new replies, never on edits.
9. Support
For integration-specific questions, email hei@vexter.no. We respond within one business day (Norway / CET).
For general Vexter help, visit vexter.no/kontakt-oss.