HubSpot
Ingests HubSpot CRM contacts, companies, deals, meetings, notes, tasks, emails, and the associations between them. Each CRM object becomes a node and association becomes an edge.
variant=info text="CRM / business apps" variant=success text="OAuth" variant=success text="Maps owners"
What gets ingested
| Element | Mapped to |
|---|---|
| Contact | _Contact |
| Company | _Company |
| Deal | _Deal |
| Meeting | _Meeting |
| Task | _Task |
| Note | _Note |
| Email engagement | _EmailEvent |
| File / attachment | _FileEntry + _Blob |
| CRM associations (Contact-Company, Deal-Contact, …) | Edges between the above |
Authentication
- Type: OAuth 2.0 against HubSpot. The connector stores
access_token+refresh_token; refresh is automatic.
Access control mapping
| Source | Carried into the graph? |
|---|---|
HubSpot user (OwnerUID) |
Yes — each record's owner is a _Contact node; the workspace creates a user access group around the connecting hub. |
| Per-record HubSpot ACLs | Workspaces with Sync scope disabled get a broader read; pinning down per-team permissions is a future-work item. |
Sync cadence
- Default cron: every 15 minutes.
- Incremental sync:
LatestFetchedUpdateswatermark per object type. Associations are cached in memory during the run for efficient batch linking.
Notable
- The connector lives in two source files —
HubSpotTask.cs(orchestration) andHubSpotTask.Ingestion.cs(per-object emit) — kept separate because the ingestion file is large and updated more often.