- Knowledge Base
- Data
- Data Management
- Access your HubSpot data from Microsoft Azure Synapse Analytics
BetaAccess your HubSpot data from Microsoft Azure Synapse Analytics
Last updated: October 26, 2026
Available with any of the following subscriptions, except where noted:
-
Data Hub Enterprise
Use Data Out for Azure Synapse to export selected HubSpot CRM data to tables in an Azure Synapse dedicated SQL pool that you own. HubSpot refreshes each output table from a full export of the selected data. After the sync, you can query the tables with SQL or with your preferred BI and analytics tools to combine HubSpot data with other business data.
Please note: if you're a Super Admin, opt your account into the Data Studio beta to use this feature.
HubSpot Credits required for certain features syncing data directly from a single warehouse source in Data Studio to the HubSpot CRM doesn't consume HubSpot Credits. If you prepare the data in Data Studio before syncing (for example, by creating calculated fields or joining it with other data sources), those actions consume HubSpot Credits.
Understand limitations & considerations
Before you begin working with this feature, make sure to fully understand what steps should be taken ahead of time, as well as the limitations of the feature and potential consequences of using it.
- HubSpot updates tables separately. If you query across multiple tables while a sync is running, some tables may update before others.
- Data Out doesn't provide historical snapshot retention. After a successful refresh, the destination table contains the latest snapshot.
- Each object, event type, or association pair can be included in one recurring Azure Synapse sync per HubSpot account. This limit is independent of other Data Out providers.
- Object-specific tables, such as
OBJECTS_CONTACTS, aren't supported yet. - If two table names collide after HubSpot normalizes them, the affected export fails. For more information, review the table and column name rules.
Understand the data you can export
You can sync the following data from HubSpot to Azure Synapse Analytics:
- Objects and records: selected standard and custom objects and their records, such as contacts, companies, deals, tickets, and products.
- Properties: selected property values and property history on records.
- Associations: selected relationships between records, including association definitions.
- Events: selected standard HubSpot events and custom behavioral events, including selected event properties.
Data for different objects is combined in the object tables. When you read an object table, use OBJECTTYPEID to filter to a specific object. For example, contacts use 0-1. Custom objects are assigned an ID when they're created and are identified as 2-{unique_id}, such as 2-12345.
Understand the export format
During setup, you choose:
- The destination Azure Synapse dedicated SQL endpoint and database.
- The data sources to sync: objects, events, associations, or a combination of these sources.
- The sync schedule.
HubSpot creates a temporary Parquet export in HubSpot-managed storage and writes the results to tables in your Azure Synapse dedicated SQL pool. You don't need to provide or manage a staging bucket.
Find your data in Azure Synapse
HubSpot creates output tables in a HubSpot-managed schema for your destination. HubSpot exports object data to the three object tables described in this article. HubSpot also creates one table per selected event type and, when available, one pair-specific table per selected association pair.
<database>.hubspot_data_out_<destination-id>.<table-name>
You can find the exact schema name on the configuration page of your sync. For example:
your_database.hubspot_data_out_456.OBJECT_WITH_OBJECT_PROPERTIESyour_database.hubspot_data_out_456.EVENTS_VISITED_PAGEyour_database.hubspot_data_out_456.ASSOCIATIONS_CONTACTS_TO_COMPANIES
Table and column names
HubSpot normalizes exported table and column names to uppercase letters, numbers, and underscores:
- Spaces and hyphens become underscores.
- Other non-alphanumeric characters are removed.
- Names longer than 128 characters are shortened.
- Colliding column names receive a suffix.
- Colliding table names fail the affected export.
Use square brackets when you query identifiers, especially if you construct queries dynamically. Identifier case sensitivity depends on your Synapse database collation. For example:
SELECT *
FROM [your_database].[hubspot_data_out_456].[OBJECT_WITH_OBJECT_PROPERTIES]
WHERE [OBJECTTYPEID] = '0-1';
Column types
Column types follow the exported data and map to Azure Synapse types as follows:
| Exported type | Azure Synapse |
|---|---|
| String | NVARCHAR(MAX) |
| Number (32-bit) | INT |
| Number (64-bit) | BIGINT |
| Timestamp | DATETIME2 |
| Boolean | BIT |
| Decimal | DECIMAL(precision, scale) |
| Float | REAL |
| Double | FLOAT |
| Date | DATE |
| Time | TIME |
Please note: the PROPERTIES column in OBJECT_WITH_OBJECT_PROPERTIES is exported as a JSON-formatted string. It's stored as NVARCHAR(MAX), not as a JSON column type. For query examples, see the FAQs.
Review object tables
If you select object data, HubSpot exports the following tables.
OBJECT_PROPERTIES
This table contains one row per property value. To read a specific object, filter by OBJECTTYPEID.
| Column name | Type | Description |
|---|---|---|
OBJECTTYPEID |
String | The ID of the object. For example, contacts use 0-1. |
OBJECTID |
Number | The ID of the record. |
NAME |
String | The property name. |
VALUE |
String | The property value. |
UPDATEDAT |
Timestamp | The date and time when the property value was last updated in HubSpot. |
INGESTEDAT |
Timestamp | The date and time when the data was last ingested into the export source. |
OBJECT_WITH_OBJECT_PROPERTIES
This table contains one row per record, with the selected property values grouped into a single PROPERTIES column. To read a specific object, filter by OBJECTTYPEID.
| Column name | Type | Description |
|---|---|---|
OBJECTTYPEID |
String | The ID of the object. For example, contacts use 0-1. |
OBJECTID |
Number | The ID of the record. |
PROPERTIES |
Text (JSON) | The selected property values for the record, as a JSON-formatted string. |
UPDATEDAT |
Timestamp | The date and time when the selected properties of the record were last updated in HubSpot. |
INGESTEDAT |
Timestamp | The date and time when the data was last ingested into the export source. |
OBJECT_PROPERTIES_HISTORY
This table contains property change history. Unlike OBJECT_PROPERTIES, which holds only the current value, this table has one row for each historical value of a property. To see the full timeline for a single record and property, order by UPDATEDAT.
| Column name | Type | Description |
|---|---|---|
OBJECTTYPEID |
String | The ID of the object. |
OBJECTID |
Number | The ID of the record. |
NAME |
String | The property name. |
VALUE |
String | The property value at that point in time. |
UPDATEDAT |
Timestamp | The date and time when the value was set in HubSpot. |
INGESTEDAT |
Timestamp | The date and time when the data was last ingested into the export source. |
Review association tables
If you select association data, HubSpot exports association records and association definitions.
ASSOCIATIONS
This table contains one row per selected association between two records.
| Column name | Type | Description |
|---|---|---|
COMBINEDASSOCIATIONTYPEID |
String | The unique identifier for the association definition. |
ASSOCIATIONCATEGORY |
String | The origin of the association type. Values can include HUBSPOT_DEFINED, USER_DEFINED, or INTEGRATOR_DEFINED. |
ASSOCIATIONTYPEID |
Number | The identifier for the association definition within its category. |
FROMOBJECTID |
Number | The ID of the source record. |
TOOBJECTID |
Number | The ID of the destination record. |
INGESTEDAT |
Timestamp | The date and time when the data was last ingested into the export source. |
ASSOCIATION_DEFINITIONS
This table contains one row per selected association definition.
| Column name | Type | Description |
|---|---|---|
COMBINEDASSOCIATIONTYPEID |
String | The unique identifier for the association definition. |
CATEGORY |
String | The origin of the association type. Values can include HUBSPOT_DEFINED, USER_DEFINED, or INTEGRATOR_DEFINED. |
ID |
Number | The identifier for the association definition within its category. |
FROMOBJECTTYPEID |
String | The ID of the source object. |
TOOBJECTTYPEID |
String | The ID of the destination object. |
NAME |
String | The name of the association definition. |
LABEL |
String | The label of the association definition. |
INGESTEDAT |
Timestamp | The date and time when the data was last ingested into the export source. |
ISMAINASSOCIATIONDEFINITION |
Boolean | Whether HubSpot displays this association definition as the primary association on associated records. |
ASSOCIATIONS_<FROM_OBJECT>_TO_<TO_OBJECT>
For selected association pairs, HubSpot can also export pair-specific association tables, such as ASSOCIATIONS_CONTACTS_TO_COMPANIES. These tables include association records together with association definition metadata.
| Column name | Type | Description |
|---|---|---|
COMBINEDASSOCIATIONTYPEID |
String | The unique identifier for the association definition. |
ASSOCIATIONCATEGORY |
String | The origin of the association type. Values can include HUBSPOT_DEFINED, USER_DEFINED, or INTEGRATOR_DEFINED. |
ASSOCIATIONTYPEID |
Number | The identifier for the association definition within its category. |
[FROMOBJECT]_OBJECTID |
Number | The ID of the source record. For example, CONTACT_OBJECTID. |
[TOOBJECT]_OBJECTID |
Number | The ID of the destination record. For example, COMPANY_OBJECTID. |
INGESTEDAT |
Timestamp | The date and time when the data was last ingested into the export source. |
TOOBJECTTYPEID |
String | The ID of the destination object. |
FROMOBJECTTYPEID |
String | The ID of the source object. |
NAME |
String | The name of the association definition. |
LABEL |
String | The label of the association definition. |
ISMAINASSOCIATIONDEFINITION |
Boolean | Whether HubSpot displays this association definition as the primary association on associated records. |
Review event tables
If you select event data, HubSpot exports one table per event type. Table names use the format EVENTS_<EVENT_NAME>, such as EVENTS_VISITED_PAGE.
Each event table contains standard event columns and one column for each selected event property.
| Column name | Type | Description |
|---|---|---|
EVENTTYPEID |
String | The event type ID. |
ID |
String | The unique event ID. |
OBJECTTYPEID |
String | The ID of the object associated with the event. |
OBJECTID |
Number | The ID of the record associated with the event. |
INGESTEDAT |
Timestamp | The date and time when the event was ingested into the export source. |
OCCURREDATDATEINT |
Number | The event date as an integer in YYYYMMDD format. |
OCCURREDAT |
Timestamp | The date and time when the event occurred. |
PROPERTY_<PROPERTY_NAME> |
String | A selected event property. For example, a property named page_title is exported as PROPERTY_PAGE_TITLE. |
Manage the sync schedule
You configure the sync schedule during setup in HubSpot. You can also manually trigger a re-sync from HubSpot. Each sync run produces a full snapshot of the selected data. To control data volume, choose which objects, events, associations, and properties to include.
Please note: during the beta, available sync frequencies may be limited. Additional frequency options may be added in future releases.
Monitor syncs and handle errors
You can monitor Azure Synapse syncs in HubSpot. A sync can have one of the following states:
| State | Meaning |
|---|---|
| Syncing | A sync run is currently in progress. |
| Synced | The last sync completed successfully. |
| Failed | The last sync run encountered an error. |
| Archived | The sync configuration was archived or removed. |
When a sync fails:
- HubSpot shows a Failed status with details about which tables succeeded or failed.
- If a table can't be updated, the previous successful data usually remains available.
- For recurring syncs, the next scheduled sync automatically reattempts a full sync.
- You can manually trigger a re-sync at any time in HubSpot.
FAQs
How do I query the data?
Query the tables in your destination schema with SQL. For example, read all contact records:
SELECT *
FROM [your_database].[hubspot_data_out_456].[OBJECT_WITH_OBJECT_PROPERTIES]
WHERE [OBJECTTYPEID] = '0-1';
Read a specific property from the PROPERTIES JSON string:
SELECT
[OBJECTID],
JSON_VALUE([PROPERTIES], '$.email') AS [email]
FROM [your_database].[hubspot_data_out_456].[OBJECT_WITH_OBJECT_PROPERTIES]
WHERE [OBJECTTYPEID] = '0-1';
Can I export one data type in multiple syncs?
Each object, event type, or association pair can be included in one recurring Azure Synapse sync per HubSpot account. This limit is independent of other Data Out providers.
For example, if contacts are already exported to a recurring Azure Synapse destination, you can't add contacts to another recurring Azure Synapse sync until you archive the first sync. You can still export contacts to another supported Data Out provider at the same time.
Are object-specific tables supported?
No. Object-specific tables, such as OBJECTS_CONTACTS, aren't supported yet. Use OBJECT_WITH_OBJECT_PROPERTIES and filter by OBJECTTYPEID to get records for a specific object.
Does HubSpot keep previous snapshots?
No. Data Out doesn't provide historical snapshot retention. After a successful refresh, the destination table contains the latest snapshot. If a table can't be updated, the previous successful data usually remains available.