- Knowledge Base
- Data
- Data Management
- Export HubSpot data to Microsoft Fabric
BetaExport HubSpot data to Microsoft Fabric
Last updated: October 26, 2026
Available with any of the following subscriptions, except where noted:
-
Data Hub Enterprise
-
HubSpot Credits required for certain features
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.
Use Data Out to export selected HubSpot CRM data to native tables in a Microsoft Fabric Warehouse that you own. You can sync object, association, and event data to tables in your warehouse, then query that data with SQL or use it with your business intelligence and analytics tools.
Each sync creates a full snapshot of the selected data. When a sync succeeds, it replaces the previous snapshot in the destination tables.
Before you get started
Understand requirements
To export data to Microsoft Fabric, you'll need:
- A Microsoft Fabric workspace with a Fabric Warehouse
- A Microsoft Entra ID service principal added to the Fabric workspace with the Contributor role
- The service principal's tenant ID, client ID, and client secret
- Your Fabric Warehouse SQL connection string (server address, without the port number) and warehouse name
The Microsoft Entra ID service principal must have permission to create and manage HubSpot-owned objects in the destination Fabric Warehouse. During connection validation and syncs, HubSpot creates schemas and tables, inserts data, renames staging tables, and removes temporary objects. Grant the service principal the Contributor role on the Fabric workspace to allow HubSpot to:
- Create schemas
- Create tables
- Insert rows
- Rename or alter HubSpot-owned tables
- Drop HubSpot-owned tables and schemas
Your Fabric Warehouse SQL endpoint must be reachable by HubSpot on TCP port 1433. HubSpot uses TLS for all connections and validates the server certificate.
If your Fabric workspace restricts network access, add HubSpot's egress IP addresses for your account region to the allowlist.
| Region | IP range |
|---|---|
| NA1 | 54.174.62.128/26 |
| EU1 | 143.244.87.0/25 |
| AP1 | 216.157.42.32/27 |
| NA2 | 216.157.40.32/27 |
| NA3 | 216.157.41.32/27 |
Understand limitations and considerations
- Microsoft Fabric Data Out supports Fabric Warehouses only. Lakehouses aren't supported.
- Each sync run creates a full snapshot of the selected data. A successful sync replaces the previous snapshot in the destination tables. HubSpot doesn't retain previous snapshots. If a table fails during a sync, its previous data remains available until the next successful sync.
- Each object type, event type, or association pair can be included in one recurring Microsoft Fabric sync per account.
- Each sync replaces the destination table. Table-level grants or settings added in your Fabric Warehouse aren't preserved between syncs.
- Reconnecting with a different service principal requires adding that service principal to the Fabric workspace with the Contributor role before the connection test or sync can succeed.
Connect HubSpot to Microsoft Fabric
It's recommended to have your HubSpot account and Microsoft Fabric consoles open in separate tabs.
- In your HubSpot account, click More, then navigate to Data Management > Data Studio. If More doesn't appear in your account, navigate to Data Management > Data Studio directly.
- In the top right, click Connect external data source.
- In the Add a data source panel, search for or browse to Microsoft Fabric.
- Click Install, then click Next.
- Enter your service principal's Tenant ID, Client ID, and Client secret.
- Enter the following destination details:
- SQL connection string: the server address for your Fabric Warehouse, without the port number.
- Warehouse name: the name of the Fabric Warehouse to export to.
- Click Test connection. If the connection test is successful, click Next.
Please note: in your Fabric workspace, confirm that the HubSpot service principal has the Contributor role before running the connection test. No SQL scripts are required to configure access.
Configure the sync
- Select the data sources to export:
- Objects
- Associations
- Events
- Select the objects, properties, associations, or events to include.
- Choose how often to run the sync and when to start it.
- Click Start sync.
The available sync frequencies may vary during the beta. Options can include once, every 6 hours, every 12 hours, daily, weekly, or monthly.
Access your exported data
HubSpot creates a HubSpot-managed schema for each destination. Tables use the following format:
<database>.hubspot_data_out_<destination-id>.<table-name>
For example:
your_database.hubspot_data_out_456.OBJECT_WITH_OBJECT_PROPERTIES your_database.hubspot_data_out_456.EVENTS_VISITED_PAGE your_database.hubspot_data_out_456.ASSOCIATIONS_CONTACTS_TO_COMPANIES
You can find the exact schema name on the sync configuration page.
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.
Column types
| Exported type | Fabric type |
|---|---|
| String | VARCHAR(MAX) |
| Number (32-bit) | INT |
| Number (64-bit) | BIGINT |
| Timestamp | DATETIME2(6) |
| Boolean | BIT |
| Decimal | DECIMAL(precision, scale) |
| Float | REAL |
| Double | FLOAT |
| Date | DATE |
| Time | TIME(6) |
The PROPERTIES column in OBJECT_WITH_OBJECT_PROPERTIES is stored as a JSON-formatted string in VARCHAR(MAX), not as a native JSON column type. See the query examples in the FAQs below.
Object tables
If you select object data, HubSpot exports the following tables.
OBJECT_PROPERTIES
This table contains one row for each object property value.
| Column | Type | Description |
|---|---|---|
OBJECTTYPEID |
String | The ID of the object type. 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 for each object record. Selected property values are grouped in the PROPERTIES column.
| Column | Type | Description |
|---|---|---|
OBJECTTYPEID |
String | The ID of the object type. For example, contacts use 0-1. |
OBJECTID |
Number | The ID of the record. |
PROPERTIES |
Text (JSON) | The selected property values for the record, stored as a JSON-formatted string. |
UPDATEDAT |
Timestamp | The date and time when the record's selected properties were last updated in HubSpot. |
INGESTEDAT |
Timestamp | The date and time when the data was last ingested into the export source. |
Object data for different object types is combined in this table. Filter by OBJECTTYPEID to read records for a specific object type:
- Contacts: 0-1
- Custom objects: 2-{unique_id}, such as 2-12345
OBJECT_PROPERTIES_HISTORY
This table contains property change history. It includes one row for each historical value of a property.
| Column | Type | Description |
|---|---|---|
OBJECTTYPEID |
String | The ID of the object type. |
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. |
To view the full history for a specific record and property, order the results by UPDATEDAT.
Association tables
If you select association data, HubSpot exports association records and association definitions.
ASSOCIATIONS
This table contains one row for each selected association between two records.
| Column | 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 for each selected association definition.
| Column | 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 type. |
TOOBJECTTYPEID |
String | The ID of the destination object type. |
NAME |
String | The association definition's name. |
LABEL |
String | The association definition's label. |
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. |
Pair-specific association tables
For selected association pairs, HubSpot can also export tables with the following format:
ASSOCIATIONS_<FROM_OBJECT_TYPE>_TO_<TO_OBJECT_TYPE>
For example: ASSOCIATIONS_CONTACTS_TO_COMPANIES
These tables contain association records and association definition metadata.
| Column | 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. |
[FROMOBJECTTYPE]_OBJECTID |
Number | The ID of the source record. For example, CONTACT_OBJECTID. |
[TOOBJECTTYPE]_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 type. |
FROMOBJECTTYPEID |
String | The ID of the source object type. |
NAME |
String | The association definition's name. |
LABEL |
String | The association definition's label. |
ISMAINASSOCIATIONDEFINITION |
Boolean | Whether HubSpot displays this association definition as the primary association on associated records. |
Event tables
If you select event data, HubSpot exports one table for each event type. Event table names use the following format:
EVENTS_<EVENT_NAME>
For example: EVENTS_VISITED_PAGE
Each event table contains standard event columns and one column for each selected event property.
| Column | Type | Description |
|---|---|---|
EVENTTYPEID |
String | The event type ID. |
ID |
String | The unique event ID. |
OBJECTTYPEID |
String | The ID of the object type 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. |
Monitor your sync
- In your HubSpot account, click More, then navigate to Data Management > Data Studio. If More doesn't appear in your account, navigate to Data Management > Data Studio directly.
- On the left, click App Syncs.
- Search for or select the Microsoft Fabric sync.
From the sync details page, you can view the sync status, last sync time, errors, sync activity, and sync history. You can also pause, archive, or manually run the sync.
Sync statuses
| Status | Description |
|---|---|
| Syncing | A sync run is currently in progress. |
| Synced | The last sync run completed successfully. |
| Failed | The last sync run encountered an error. |
| Archived | The sync configuration was archived or removed. |
Resolve sync failures
When a sync fails:
- The HubSpot UI shows a Failed status and table-level details indicating which tables succeeded or failed.
- A table is updated only after HubSpot finishes loading all of its data. If a table fails, its previous data remains in place until the next successful sync.
- The next scheduled sync automatically attempts the full sync again.
- You can manually run a sync from the sync details page.
FAQs
How do I query the exported data?
Query the tables in the destination schema with SQL.
-- 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 type, event type, or association pair can be included in one recurring Microsoft Fabric sync per HubSpot account. This is independent of other Data Out providers.
For example, if contacts are already exported to a recurring Fabric destination, you can't add contacts to another recurring Fabric configuration until you archive the first configuration. You can still export contacts to another supported Data Out provider at the same time.
Are object-specific tables supported?
Object-specific tables, such as OBJECTS_CONTACTS, aren't currently supported. Use OBJECT_WITH_OBJECT_PROPERTIES and filter by OBJECTTYPEID to retrieve records for a specific object type.
Is Sensitive Data supported?
Sensitive Data isn't currently supported for Data Out. Sensitive properties may be excluded from exports.
Does HubSpot keep previous snapshots?
No. Each successful sync replaces the destination table with the latest snapshot. HubSpot doesn't retain previous snapshots. If a table fails during a sync, its previous data remains in place until that table is successfully updated.
Does HubSpot use a staging bucket that I manage?
No. HubSpot creates a temporary Parquet export in HubSpot-managed storage and writes the results to your Fabric Warehouse. You don't need to provide or manage a staging bucket.
What happens if I reconnect with a different service principal?
If you reconnect using a different service principal, you must add that service principal to the Fabric workspace with the Contributor role before the connection test or sync can succeed.