HubSpot is an inbound marketing and sales software that helps companies attract visitors, convert leads, and close customers.
|Data blocking||check||Column level|
|Fivetran data models||check||Get the models: source / transform|
IMPORTANT: The HubSpot connector doesn’t support switching modes because we fetch history data directly from the APIs. We maintain two separate tables, one for live mode and one for history mode. For example, on the connector’s Schema tab, you will have two tables,
COMPANY_PROPERTY_HISTORY. You can sync the history table only if you have included the live table in your syncs.
Follow our step-by-step HubSpot setup guide to connect HubSpot with your destination using Fivetran connectors.
During a sync if we find more than 9,900 updated records for the following endpoints, we re-import the associated source tables in full to capture all the changes:
If we find 990 updated records for the
LINE_ITEMS table, we re-import the table in full to capture all the changes.
NOTE: The HubSpot API returns a maximum of 10,000 most recently updated records. We maintain a buffer of 100 to ensure data integrity and prevent API errors. When we detect that the number of updated records exceeds 9,900, we consider that the number is more than 10,000 and re-import the table in full. For the
LINE_ITEMStable, the API returns a maximum of 1000 records. When we detect that the number of records exceeds 990, we re-import the table in full.
Sync strategy for ENGAGEMENT tables
We do incremental syncs of the
ENGAGEMENT_* tables according to the sync frequency you set in your Fivetran dashboard. We also perform a full re-sync of these tables once every three days because we noticed incomplete data when we performed incremental syncs alone. If a full re-sync of these tables is still pending when we attempt the next incremental sync, we skip that incremental sync.
Sync strategy for EMAIL EVENT tables
In every sync, we re-fetch data that is twenty-five hours behind the data synced in the current incremental sync for the
EMAIL_EVENT_* tables you have selected. We do this to capture events we may have missed because of HubSpot’s event processing delays.
We fetch data for only the event types whose corresponding table is selected. To sync the
EMAIL_EVENT table, select the corresponding
EMAIL_EVENT_<TYPE> table in the Schema tab.
Sync strategy for PROPERTY_HISTORY tables
Enabling history mode increases your monthly active rows (MAR) consumption because every change is recorded as a new row that counts towards MAR. We do incremental syncs of the history tables. We may also sometimes do a full re-sync of these tables according to the connector sync strategy.
CONTACT_PROPERTY_HISTORYtable contains different versions of each record, and syncing the table may contribute to higher MAR usage because of its size.
We use different strategies to capture deletes because the HubSpot API doesn’t offer a mechanism to capture deletes:
Infer deletes for the following tables:
We compare the tables against their previous version and capture deletes using the
Use webhooks to capture deletes for the
NOTE: If you created the connector using our REST API, we don’t capture deletes for the
DEALtables, because these connectors are not authorized using the Fivetran Hubspot application.
We do not capture deletes for tables that do not support the Capture deletes feature, though they still contain the
_fivetran_deleted columns. Deleted records are marked as
false in the
In HubSpot, you can merge two records into one record. For example, when you merge two contacts, the primary contact record remains after the merge and the secondary contact is merged into the primary record. For more information, see HubSpot’s documentation.
We capture merges for the
To capture merges of the
CONTACTtable, we use a separate table,
NOTE: You can also use our dbt Core-compatible data model to delete your merged contacts. Delete merged contacts using
hubspot_contact_merge_audit_enabled: TRUE. The data model enables you to audit your merge contacts and removes any merged record from the
To capture merges of the
DEALtable, we add an
is_mergedcolumn in your destination table. We mark the deals that have been merged into another deal and no longer exist, as
is_merged = TRUE.
NOTE: In your destination table, you may observe the missing
To capture merges of the
COMPANYtable, we mark the company records as
is_deleted = TRUE.
Deal stage calculationslink
The HubSpot API returns only the
date_entered value of the
dealstage properties data. We sync this data to the
Fivetran populates the
date_entered value in the
_fivetran_start column and sets the
date_exited value in the
_fivetran_end column. The
date_exited value for a deal stage is the
date_entered value of the next deal stage in chronological order.
You can calculate the
time_in value as the difference between the
_fivetran_end column values in the
For example, in the
deal_id10 in deal stage 145:
time_in_145= 1 hour (
deal_id10 in deal stage 173:
time_in_173= MAX_TIMESTAMP_VALUE - 14:00 (
HubSpot Tickets API limitationslink
HubSpot’s Tickets API endpoint returns a list of changes to the ticket objects. HubSpot limits the returned changes to the last 24 hours. To ensure data integrity, Fivetran triggers a re-sync of the
TICKET table if the cursor is older than 24 hours.
Marketing Hub schemalink
This schema is applicable for the HubSpot Marketing Hub product.
CRM and Sales Hub schemalink
This schema is applicable for the HubSpot CRM and Sales Hub products.
Service Hub schemalink
This schema is applicable for the HubSpot Service Hub product.
HubSpot Developer Preview APIlink
We maintain the following tables using the HubSpot developer preview API, so there are sometimes structural changes in these tables. Fivetran automatically handles structural changes, which might lead to some schema breaking changes. If that happens, we need to re-sync the affected tables. You can read more in the HubSpot Developer Preview API documentation.
We sync the properties you define for the custom objects into the
We create an association table in your destination to capture the associations between different custom objects and associations between a custom object and the following tables:
Negative timestamps from HubSpotlink
We automatically convert negative timestamps received from HubSpot to EPOCH, for example, 1st January 1970 00:00:00 UTC.