CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/airbyte-airbyte-source-hubspot

HubSpot source connector for Airbyte that syncs CRM data including contacts, companies, deals, and marketing activities with support for OAuth and Private App authentication

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

crm-streams.mddocs/

CRM Streams

Core customer relationship management data streams including contacts, companies, deals, and tickets with full incremental synchronization support and property associations.

Capabilities

Contacts Stream

Contact records with properties, associations, and incremental sync support.

contacts:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id: 
        type: string
        description: "Unique contact identifier"
      createdAt:
        type: string
        format: date-time
        description: "Contact creation timestamp"
      updatedAt:
        type: string
        format: date-time  
        description: "Last update timestamp"
      archived:
        type: boolean
        description: "Whether contact is archived"
      properties:
        type: object
        description: "Dynamic contact properties"
        additionalProperties: true
      # Flattened association fields
      companies:
        type: array
        items:
          type: string
        description: "Associated company IDs"
      deals:
        type: array
        items:
          type: string
        description: "Associated deal IDs"

Usage Example:

streams:
  - name: contacts
    sync_mode: incremental
    cursor_field: ["updatedAt"]
    destination_sync_mode: append_dedup

Companies Stream

Company records with properties, associations, and incremental sync support.

companies:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique company identifier"
      createdAt:
        type: string
        format: date-time
        description: "Company creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      archived:
        type: boolean
        description: "Whether company is archived"
      properties:
        type: object
        description: "Dynamic company properties"
        additionalProperties: true
      # Flattened association fields
      contacts:
        type: array
        items:
          type: string
        description: "Associated contact IDs"
      deals:
        type: array
        items:
          type: string
        description: "Associated deal IDs"

Deals Stream

Deal records with properties, associations, and incremental sync support.

deals:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique deal identifier"
      createdAt:
        type: string
        format: date-time
        description: "Deal creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      archived:
        type: boolean
        description: "Whether deal is archived"
      properties:
        type: object
        description: "Dynamic deal properties"
        additionalProperties: true
      # Flattened association fields
      contacts:
        type: array
        items:
          type: string
        description: "Associated contact IDs"
      companies:
        type: array
        items:
          type: string
        description: "Associated company IDs"
      line_items:
        type: array
        items:
          type: string
        description: "Associated line item IDs"

Deals Archived Stream

Archived deal records for comprehensive deal lifecycle tracking.

deals_archived:
  primary_key: ["id"]
  cursor_field: "archivedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique deal identifier"
      createdAt:
        type: string
        format: date-time
        description: "Deal creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      archivedAt:
        type: string
        format: date-time
        description: "Archive timestamp"
      archived:
        type: boolean
        const: true
        description: "Always true for archived deals"
      properties:
        type: object
        description: "Dynamic deal properties at time of archival"
        additionalProperties: true

Tickets Stream

Support ticket records with properties and incremental sync support.

tickets:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique ticket identifier"
      createdAt:
        type: string
        format: date-time
        description: "Ticket creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      archived:
        type: boolean
        description: "Whether ticket is archived"
      properties:
        type: object
        description: "Dynamic ticket properties"
        additionalProperties: true
      # Flattened association fields
      contacts:
        type: array
        items:
          type: string
        description: "Associated contact IDs"
      companies:
        type: array
        items:
          type: string
        description: "Associated company IDs"

Deal Splits Stream

Deal commission split records for revenue tracking.

deal_splits:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique deal split identifier"
      dealId:
        type: string
        description: "Associated deal ID"
      ownerId:
        type: string
        description: "Owner receiving split"
      percentage:
        type: number
        description: "Split percentage (0-100)"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"

Leads Stream

Lead records for tracking potential customers.

leads:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique lead identifier"
      createdAt:
        type: string
        format: date-time
        description: "Lead creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      properties:
        type: object
        description: "Dynamic lead properties"
        additionalProperties: true

Line Items Stream

E-commerce line item records associated with deals.

line_items:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique line item identifier"
      createdAt:
        type: string
        format: date-time
        description: "Line item creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      properties:
        type: object
        description: "Dynamic line item properties"
        additionalProperties: true
      # Flattened association fields
      deals:
        type: array
        items:
          type: string
        description: "Associated deal IDs"

Products Stream

Product catalog records for e-commerce functionality.

products:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique product identifier"
      createdAt:
        type: string
        format: date-time
        description: "Product creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      archived:
        type: boolean
        description: "Whether product is archived"
      properties:
        type: object
        description: "Dynamic product properties"
        additionalProperties: true

Owners Stream

User/owner records for assignment tracking and reporting.

owners:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique owner identifier"
      userId:
        type: string
        description: "User ID"
      email:
        type: string
        format: email
        description: "Owner email address"
      firstName:
        type: string
        description: "Owner first name"
      lastName:
        type: string
        description: "Owner last name"
      active:
        type: boolean
        description: "Whether owner is active"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"

Owners Archived Stream

Archived owner records for historical assignment tracking.

owners_archived:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique owner identifier"
      userId:
        type: string
        description: "User ID"
      email:
        type: string
        format: email
        description: "Owner email address"
      firstName:
        type: string
        description: "Owner first name"
      lastName:
        type: string
        description: "Owner last name"
      active:
        type: boolean
        const: false
        description: "Always false for archived owners"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"

Goals Stream

Goal tracking records for performance monitoring and targets.

goals:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique goal identifier"
      name:
        type: string
        description: "Goal name"
      createdAt:
        type: string
        format: date-time
        description: "Goal creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      properties:
        type: object
        description: "Dynamic goal properties"
        additionalProperties: true

Pipeline Configuration Streams

Pipeline configuration for deals and tickets.

deal_pipelines:
  primary_key: ["id"]
  sync_mode: full_refresh
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique pipeline identifier"
      label:
        type: string
        description: "Pipeline display name"
      stages:
        type: array
        items:
          type: object
          properties:
            id:
              type: string
              description: "Stage identifier"
            label:
              type: string
              description: "Stage display name"
            displayOrder:
              type: integer
              description: "Stage sort order"

ticket_pipelines:
  primary_key: ["id"]
  sync_mode: full_refresh
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique pipeline identifier"
      label:
        type: string
        description: "Pipeline display name"
      stages:
        type: array
        items:
          type: object
          properties:
            id:
              type: string
              description: "Stage identifier"
            label:
              type: string
              description: "Stage display name"
            displayOrder:
              type: integer
              description: "Stage sort order"

Leads Stream

Lead records for tracking potential prospects and managing lead qualification processes.

leads:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique lead identifier"
      createdAt:
        type: string
        format: date-time
        description: "Lead creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      archived:
        type: boolean
        description: "Whether lead is archived"
      properties:
        type: object
        description: "Dynamic lead properties"
        additionalProperties: true

Contact Lists Stream

Contact list records for managing contact segmentation and marketing campaigns.

contact_lists:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique contact list identifier"
      name:
        type: string
        description: "Contact list name"
      size:
        type: integer
        description: "Number of contacts in list"
      createdAt:
        type: string
        format: date-time
        description: "List creation timestamp"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"
      listType:
        type: string
        description: "Type of contact list (STATIC, DYNAMIC)"

Deal Splits Stream

Deal commission split records for revenue tracking and sales team compensation.

deal_splits:
  primary_key: ["id"]
  cursor_field: "updatedAt"
  sync_mode: incremental
  schema:
    type: object
    properties:
      id:
        type: string
        description: "Unique deal split identifier"
      dealId:
        type: string
        description: "Associated deal identifier"
      ownerId:
        type: string
        description: "Owner responsible for this split"
      percentage:
        type: number
        description: "Percentage of deal value (0-100)"
      amount:
        type: number
        description: "Split amount in deal currency"
      updatedAt:
        type: string
        format: date-time
        description: "Last update timestamp"

Property Mapping

All CRM streams support dynamic property mapping where HubSpot properties are accessible in two formats:

  1. Nested format: Under properties object
  2. Flattened format: As top-level fields prefixed with properties_

Example:

{
  "id": "12345",
  "properties": {
    "firstname": "John",
    "lastname": "Doe",
    "email": "john@example.com"
  },
  "properties_firstname": "John",
  "properties_lastname": "Doe", 
  "properties_email": "john@example.com"
}

Association Enrichment

CRM streams automatically include associated object IDs as flattened array fields:

  • contacts: companies, deals
  • companies: contacts, deals
  • deals: contacts, companies, line_items
  • tickets: contacts, companies

These associations are populated by querying HubSpot's CRM v4 associations API.

Install with Tessl CLI

npx tessl i tessl/airbyte-airbyte-source-hubspot@6.0.1

docs

additional-streams.md

authentication.md

crm-streams.md

custom-objects.md

engagements.md

index.md

marketing.md

property-history.md

tile.json