DocsIntegrations

HubSpot

HubSpot connects CRM records to Mobius.

A HubSpot integration connects a HubSpot portal to Mobius with HubSpot OAuth. It lets assistants search and update CRM records, and lets Mobius record HubSpot webhook events.

Use HubSpot when an assistant needs current CRM context, should create or update records, or should respond to a CRM change. Mobius identifies a connection by its HubSpot portal and matches inbound webhook events to that portal.

Capability map

CapabilityValue
Provider IDhubspot
Auth kindoauth2_user
Connect flowHubSpot OAuth user grant
ActionsYes
EventsYes
Webhook deliveryYes, through HubSpot app webhook subscriptions
Event samplesNo
Live statusNo

Connect HubSpot

SurfaceSupport
AppOpen Build > Integrations, choose HubSpot, then continue through HubSpot OAuth and pick the portal to authorize.
CLIThe mobius CLI does not connect HubSpot integrations yet. Use the app or API.
APICall POST /v1/integrations/providers/hubspot/connect with an empty JSON body, then redirect the user to the returned HubSpot OAuth URL.

The connect call returns a redirect_url. Send the user there to grant access, and HubSpot redirects back to Mobius to finish the connection. The default grant requests read and write scopes for contacts, companies, and deals:

oauth
crm.objects.contacts.read
crm.objects.contacts.write
crm.objects.companies.read
crm.objects.companies.write
crm.objects.deals.read
crm.objects.deals.write

If the OAuth button is unavailable, HubSpot is not enabled for your Mobius organization. Ask your organization administrator or Mobius support to check it.

HubSpot is a team-managed workspace connection. An organization administrator connects or reconnects the portal. The OAuth grant controls which HubSpot records and operations the connection can reach.

After connecting, open the account and use Assistant access to grant that exact portal to the assistants that need it. Choose the whole team or named people as its Mobius result audience. A routine that uses HubSpot saves this exact connection rather than relying on a chat preference.

Actions

hubspot.search
hubspot.get
hubspot.create
hubspot.update
hubspot.contact.upsert

Each CRM action takes an object_type of contacts, companies, or deals. Use hubspot.search for free-text or filtered discovery, then the get, create, and update actions once the assistant has stable record IDs.

Search by query and return selected properties:

{
  "object_type": "contacts",
  "query": "ada@example.com",
  "properties": ["email", "firstname", "lastname", "company"],
  "limit": 10
}

Resolve a record by a unique property instead of its ID with id_property:

{
  "object_type": "contacts",
  "record_id": "ada@example.com",
  "id_property": "email",
  "properties": ["email", "lifecyclestage"]
}

Use hubspot.contact.upsert when an assistant should create a contact or update the existing one keyed on email. It uses email as the identifier, so set the rest of the contact under properties and leave email out of that object:

{
  "email": "ada@example.com",
  "properties": {
    "firstname": "Ada",
    "lastname": "Lovelace",
    "company": "Acme"
  }
}

hubspot.create, hubspot.update, and hubspot.contact.upsert change upstream records without an automatic Mobius confirmation. The exact portal connection and assistant grant are rechecked before dispatch. Prefer upsert and stable id_property lookups when a retry must find the same record. HubSpot caps most CRM object requests at 100 records per call.

Events

HubSpot webhook callbacks become provider events with the hubspot. prefix. Mobius emits seven event suffixes for each of the three CRM objects:

hubspot.contact.created
hubspot.contact.deleted
hubspot.contact.property_changed
hubspot.contact.merged
hubspot.contact.restored
hubspot.contact.privacy_deleted
hubspot.contact.association_changed
 
hubspot.company.created
hubspot.company.deleted
hubspot.company.property_changed
hubspot.company.merged
hubspot.company.restored
hubspot.company.privacy_deleted
hubspot.company.association_changed
 
hubspot.deal.created
hubspot.deal.deleted
hubspot.deal.property_changed
hubspot.deal.merged
hubspot.deal.restored
hubspot.deal.privacy_deleted
hubspot.deal.association_changed

Mobius maps HubSpot subscription types to these names: contact.creation becomes hubspot.contact.created, deal.propertyChange becomes hubspot.deal.property_changed, and so on. Each event payload includes the HubSpot object ID, portal ID, subscription type, occurrence time, the changed property name and value for property_changed events, and the original HubSpot event under raw.

Use a property_changed event to watch a specific field update, and read property_name to tell one from another. Match a trailing wildcard such as hubspot.contact.* only when every contact change is worth recording.

HubSpot webhook subscriptions are managed once for Mobius, not separately for each connected portal. After you connect a portal, its supported events should appear as source events. If actions work but events never arrive, send the portal ID and integration status to your organization administrator or Mobius support.

Mobius verifies each callback, matches it to the connected portal, and deduplicates redelivered HubSpot events, so a redelivery is recorded once.

Next