Skip to main content
HubSpot is a comprehensive customer relationship management (CRM) and marketing automation platform that helps businesses attract, engage, and delight customers. It provides tools for marketing, sales, customer service, and content management, all integrated into a single platform. For more info on the streams and permissions, check the HubSpot API Documentation.

Configuring HubSpot as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the HubSpot option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

Configure the following settings:
  • Authentication Mode: The authentication mode to use. You can select Sign in with HubSpot (OAuth) or use a HubSpot private app token. If you choose to Sign in with HubSpot, you’ll be prompted to log in with an account that has Super Admin permissions in order to install the Nekt app into the workspace.
  • Start Date: The date of the first record you want to sync with.
  • Enable Leads Stream (Optional): Enable to extract leads data (requires HubSpot Pro, Enterprise, or Enterprise Plus).
  • Associations (Optional): Configure which associations to extract per object type. Each entry specifies a HubSpot entity name (e.g. deals, contacts, companies, tickets, leads, calls, emails, meetings, notes, tasks, postal_mail, communication, or a custom object name) and a comma-separated list of associated entities to retrieve for that object. Custom object IDs (e.g. 2-12345) are also supported in the association list. Enable only if necessary, since it significantly increases the extraction time.
  • Extract Contact Property History (Optional): Enable to track property changes for contacts. Enable only if necessary, since it significantly increases the extraction time.
  • Contact Property History Fields (Optional): If enabled above, specify which properties to track (comma-separated). Default: lifecyclestage, lead_status.
  • Extract Deal Property History (Optional): Enable to track property changes for deals. Enable only if necessary, since it significantly increases the extraction time.
  • Deal Property History Fields (Optional): If enabled above, specify which properties to track (comma-separated). Default: dealstage.
  • Extract Company Property History (Optional): Enable to track property changes for companies. Enable only if necessary, since it significantly increases the extraction time.
  • Company Property History Fields (Optional): If enabled above, specify which properties to track (comma-separated). Default: name.
  • Extract Ticket Property History (Optional): Enable to track property changes for tickets. Enable only if necessary, since it significantly increases the extraction time.
  • Ticket Property History Fields (Optional): If enabled above, specify which properties to track (comma-separated). Default: hs_pipeline_stage, hs_ticket_priority.
  • Property objects (Optional): Comma-separated list of HubSpot object types to fetch property definitions for. Default: calls, communication, company, contacts, deals, email, line_item, meeting, notes, postal_mail, product, task, tickets.
  • Properties as JSON string (Optional): When enabled, the properties column in CRM object streams (contacts, companies, deals, tickets, etc.) is emitted as a JSON string instead of a structured object. Enable this if your HubSpot account has a very large number of custom properties and you are hitting destination limits on nested fields (e.g. BigQuery’s 10,000 field limit). Default: false.
Enabling associations and property history options will increase extraction time. Enable only the object types and properties you actually need.
Click Next.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
  • Sync Type: you can choose between INCREMENTAL and FULL_TABLE. Read more about Sync Types here.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:
  • Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
  • Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
Once you are ready, click Next to finalize the setup.

5. Check your new source

You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.
For you to be able to see it on your Catalog, you need at least one successful source run.

Streams and Fields

Available streams

The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description. Streams marked optional are only discovered when the corresponding setting is enabled.

Fields by stream

Below you’ll find all available data streams from HubSpot and their corresponding fields:
Alongside all the fields listed here, most of the streams have additional/custom fields from HubSpot, specific to each workspace and account type. These fields are dynamically included based on your HubSpot configuration.Additionally, if your HubSpot Private App Token lacks the required scopes to access a specific stream or object (such as Custom Objects), the connector will gracefully skip it during extraction instead of failing the sync. If you are missing expected streams, verify your token permissions in HubSpot.
HubSpot accounts with a very large number of custom properties may exceed destination limits on nested fields. For example, BigQuery enforces a maximum of 10,000 fields per table, and the properties column in CRM object streams (contacts, companies, deals, tickets, etc.) can exceed this limit. If you run into this issue, enable the Properties as JSON string option in your source configuration to emit the properties column as a flat JSON string instead of a structured object.
Archived sales deals and opportunities. Fetches archived deals via the list endpoint.Note: This stream is full-table replication only, as HubSpot’s search API does not return archived records.
Archived task assignments and to-dos. Fetches archived tasks via the list endpoint.Note: This stream is full-table replication only, as HubSpot’s search API does not return archived records.
Account activity audit logs. Tracks user actions such as CRM object creation, property updates, and security activity. Note: Requires a HubSpot Enterprise account and the account-info.security.read scope.
Call activity and engagement data.
Communication activities and engagements (SMS, WhatsApp, LinkedIn messages, etc.).
Company and organization records.
Individual contact records and their properties.
Custom objects defined in your HubSpot account. These are automatically discovered and extracted.Note: Each custom object will appear as a separate stream with its own name based on the object definition in HubSpot. The fields are dynamic and depend on the custom object schema configured in your HubSpot account.
Sales deals and opportunities.
Deal pipeline configurations and stages for sales workflows.
Email communications and messaging data.
Email subscription type definitions (e.g., marketing, legal basis) used for consent and preferences.
This stream is currently disabled and will not appear in the stream selection list.
Form definitions and configurations.
Submitted form data and responses.
Feedback and survey submissions from contacts.
This stream is currently disabled and will not appear in the stream selection list.
Goal targets and tracking for sales and marketing performance.
This stream is currently disabled and will not appear in the stream selection list.
Lead records for sales prospecting.Note: This stream is only available for accounts with HubSpot Pro, Enterprise, or Enterprise Plus. Enable via “Enable Leads Stream” in the source configuration.
Lead pipeline configurations and stages for sales workflows.Note: This stream is only available for accounts with HubSpot Pro, Enterprise, or Enterprise Plus. Enable via “Enable Leads Stream” in the source configuration.Key Fields:
Individual items within deals and quotes.
Marketing email campaigns and their performance statistics.
Scheduled meetings and appointments.
Notes and annotations on records.
Custom properties and field definitions for all HubSpot objects. This stream merges all individual property streams into a single comprehensive properties table. The hubspot_object field indicates which object the property belongs to.
HubSpot user and owner information.
Postal mail activities and engagements for direct mail campaigns.
Product catalog and inventory information.
Sales quotes and proposals.
HubSpot “Services” standard object records (objectTypeId 0-162).Note: This stream must be activated in your HubSpot account and granted via token scope. If the necessary permissions are missing, the stream will be automatically skipped without breaking the extraction.
Task assignments and to-dos.
Customer support tickets and service requests.
Ticket pipeline configurations and stages for customer support workflows.
HubSpot portal user information.
CRM Users object (HubSpot object type “users”). Distinct from the standard Users stream which only exposes basic settings API fields (id, email, roles). This stream reads the CRM Users object and exposes its full property set.
Requires the crm.objects.users.read scope on the HubSpot private app, which is sensitive and must be granted explicitly by a Super Admin. Accounts/tokens without it will skip extracting this stream.
Key Fields:

Data Model

The following diagram illustrates the relationships between the core data streams in HubSpot. The arrows indicate the common links between different CRM entities.

Common data transformations

Many streams from HubSpot send all the relevant data in a single column, called properties. For you to remove them from this single array and transform each one in a new and individual column, use the following template:

Common data transformations

Many streams from HubSpot send all the relevant data in a single column, called properties. For you to remove them from this single array and transform each one in a new and individual column, use the following template:

Use Cases for Data Analysis

HubSpot data can be leveraged for comprehensive business intelligence and analytics. Here are some common use cases with SQL transformations:

1. Sales Performance Analytics

Objective: Track sales team performance, deal velocity, and revenue forecasting.

SQL query

Sales Performance Dashboard

2. Customer Journey Analysis

Objective: Understand customer lifecycle stages and conversion rates.
These use cases demonstrate how HubSpot data can be transformed into actionable business intelligence, enabling data-driven decision making across sales, marketing, and customer service operations.

Implementation Notes

  • Stream Permissions: During the discovery phase, the connector verifies access to dynamic streams (such as custom objects). If the provided Private App Token lacks the necessary scopes for an object, the connector will gracefully skip that stream rather than failing the entire sync. If you notice missing streams, check your token’s scopes in HubSpot.
  • API Limits & Performance: Extracting associations and property history involves an additional API call per record. The connector uses connection pooling to keep this efficient, but enabling associations for multiple object types simultaneously will still significantly increase sync duration. Enable these features only when necessary.
  • Unified Associations Config: Associations are configured through a single associations array. Each entry targets one object type (e.g. deals, contacts) and lists the associated entities to retrieve as a comma-separated string (e.g. contacts, companies, tickets). Custom object IDs such as 2-12345 are supported in the association list.
  • Custom Object Association Keys: To ensure compatibility with downstream systems, custom object association keys are sanitized. Keys that are custom object type IDs (e.g., 2-12345) or fully qualified names containing portal IDs are normalized to a stable format prefixed with custom_ (e.g., custom_2_12345). Standard association names (like contacts or companies) remain unchanged.
  • Stream Discovery and Permissions: If the authenticated HubSpot account lacks the necessary scopes or subscription tier to access certain objects (e.g., Services, Leads), the connector will gracefully skip those streams during discovery and log a warning, rather than failing the entire setup.
  • API Limits & Large Property Lists: HubSpot imposes a hard limit of 3,000 characters on /search API request bodies. For heavily customized objects (such as Contacts with hundreds of custom properties), the list of properties can exceed this limit. The connector dynamically evaluates the request size: if the limit would be exceeded, it falls back to a lean search strategy — first requesting only the replication keys via /search, then calling the /batch/read endpoint to hydrate the full property values in chunks of 100 records. This increases the number of API calls but guarantees all custom properties are extracted without failing due to HubSpot’s character constraints.
  • Audit Logs limit: The HubSpot API enforces a strict hard limit of 365 days for retrieving historical audit logs. To prevent extraction failures, if your source configuration has a Start Date older than 365 days, the connector will automatically adjust it to 364 days ago to safely fetch the maximum history allowed. Additionally, if the API rejects a payload for requesting data out of this limit bounds, the connector will skip the stream without failing the entire pipeline.
  • Search API and object_coordinates properties: HubSpot’s CRM Search API (which is used for Incremental syncs) does not support querying properties of type object_coordinates (such as hs_origin_object_coordinates). Due to this restriction, properties of this type are excluded from the extraction payload to prevent API errors during Incremental syncs. To extract these properties, you must perform an Additional Full Sync or set your Sync Type to Full table.

Skills for agents

Download HubSpot skills file

HubSpot connector documentation as plain markdown, for use in AI agent contexts.