App Connectors: HubSpot

👤 This documentation is intended for Site Administrators and/or Database Administrators.

Connectors are Sisense for Cloud Data Team’s built-in mechanisms for customers to connect to and ingest from popular data sources.

Note: Connectors are supported for customers with Data Engine on your Warehouse or Warehouse infrastructure. Site administrators can contact their Account Manager if interested in enabling Connectors.

<div>
<UL>
<LI><a href="#PreparingaConnector">Preparing to add a Connector</a></LI>
<LI><a href="#AddingaConnector">Adding a Connector</a></LI>
<LI><a href="#SetUpIngestion">Set Up Ingestion</a></LI>
<UL> <LI><a href="#SetupDatabasePermissions">Setup Database Permissions</a></LI>
<LI><a href="#HowToSetUpIngestion">How To Set Up Ingestion</a></LI>
<LI><a href="#ReauthorizeaConnector">Reauthorize a Connector</a></LI>
<LI><a href="#SuspendIngestionforaConnector">Suspend Ingestion for a Connector</a></LI>
</UL>
<LI><a href="#DeleteaConnector">Delete a Connector</a></LI>
<LI><a href="#HubspotFields">Custom HubSpot Field Ingestion</a></LI>
<LI><a href="#HubspotDates">HubSpot Date/Date-Time Values & UNIX Timestamps</a></LI>
<LI><a href="#HubspotTableSchemas">HubSpot Table Schemas</a></LI>
</UL>
</div>

<a name="PreparingaConnector"></a>

Preparing a Connector

To set up HubSpot in Sisense, make sure to have the following:

  • For HubSpot CRM or Marketing products: Administrator permissions in HubSpot. Note: To ingest the email events table, Super Admin permissions in HubSpot are required.
  • For the HubSpot Sales product: Sales Administrator permissions in HubSpot.

More information about HubSpot user roles and permissions can be found in HubSpot’s documentation.

<a name="AddingaConnector"></a>

<a href="#top">Back to top</a>

Adding a Connector

To add a Connector, administrators can first click Settings menu in the bottom left hand corner. Then, click the App Connections option:

In the top right corner, click the green Connect Source button.


From the Data Source Type dropdown, select the 'Hubspot'' option:

Enter the display name for the Connector in the Display Name section of the Connect Source menu. The Display name will become the schema name and cannot be changed later.

Then click 'Add'.

Enter the required credentials to log in to HubSpot. HubSpot supports multiples ways to authenticate:

  • Email address and password can be entered, then click 'Log in'
  • If a Google account is used to log into HubSpot, click 'Sign in with Google', then follow the prompts to log into the Google account.
  • If single sign-on (SSO) is enabled, click 'Log in with SSO', then follow the prompts to log in with the associated email address.

Note: If two-factor authentication is enabled, verify the login (mobile device with SMS or Google Authenticator) to access the account

Once successfully logged in to HubSpot, a screen with the list of associated HubSpot accounts will display. Click the account that should be used to connect to Sisense.

Once an account has been selected, the next screen will display a request for integration permissions. Please click 'Grant access' to continue:

After the authorization process is successfully completed, the page will be directed back to Sisense for Cloud Data Teams.

The process of establishing a new connection will take a few minutes as all of the tables that are associated with that source are being discovered. During this time a spinning icon will appear. Available tables from the connected data source will appear as they become available.


In the event that the connection was unsuccessful, a Connection Failed screen will appear. Please verify that the information entered for the HubSpot connector is correct.

<a name="SetUpIngestion"></a>

<a href="#top">Back to top</a>

Setup Ingestion

<a name="SetUpDatabasePermissions"></a>

Setup Database Permissions

In order to ingest data into Sisense, certain database permissions will need to be updated the first time a connector is added.

Sisense Managed Warehouse:

Sisense will create a new database user and grant the necessary permissions to load data into the warehouse from the connected sources. Sisense will also grant the Read User the necessary schema permissions in order to query the sources' data from within Sisense.

Data Engine on Your Warehouse:

In order to ingest data into the Redshift or Snowflake warehouse using Sisense App Connectors, Sisense requires a database user that can perform write operations on the database. Create permissions are required to create the necessary database objects to load and store the data. Read permissions on system tables are required to validate the existence and structure of existing database objects.

Please grant the following privileges to the database user that will be used for the App Connectors function:

Snowflake:

<body>
<blockquote>
<br>GRANT CREATE ON WAREHOUSE warehouse_name TO sisense_ingest;
<br>GRANT CREATE ON DATABASE database_name TO sisense_ingest;
</blockquote>
</body>

Redshift:

<body>
<blockquote>
<br>GRANT CREATE ON DATABASE database_name TO sisense_ingest;
<br>GRANT SELECT ON ALL TABLES IN SCHEMA information_schema TO sisense_ingest;
<br>GRANT SELECT ON ALL TABLES IN SCHEMA pg_catalog TO sisense_ingest;
</blockquote>
</body>

The above permissions can be added to the existing Warehouse Admin created for Data Engine, but Sisense recommends providing an additional user to perform the App Connectors function. This will ensure that one service account is not responsible for too many actions.

To query the data imported into the warehouse using the Connectors feature, it is also necessary to grant query permissions on the newly-created schema and its tables to the read user. The name of the schema will be the Display Name of the connected Source. After the first replication job has been completed, run the following commands to grant permissions to query the schema from within Sisense:

Snowflake:

<body>
<blockquote>
<br>GRANT USAGE ON SCHEMA database_name.schema_name TO ROLE sisense_read;
</blockquote>
</body>

Redshift:

<body>
<blockquote>
<br>GRANT USAGE ON SCHEMA schema_name TO sisense_read;
<br>GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO sisense_read;
</blockquote>
</body>

Note: The following IPs will need to be whitelisted for access to the destination database server:

  • 52.23.137.21/32
  • 52.204.223.208/32
  • 52.204.228.32/32
  • 52.204.230.227/32

<a name="HowToSetUpIngestion"></a>

<a href="#top">Back to top</a>

How to Setup Ingestion

Tables listed for the connector are available for ingestion into the warehouse. To select a table for ingestion, click on the box to the left of the table’s name.

Once a table has been selected, a list of columns that are available for ingestion will appear “Columns Selected for Ingestion”. To select specific columns for ingestion, click on the box to the left of the column’s name.

Once the desired tables and columns have been selected, click 'Save' in the bottom right. To select an Update Interval, use the dropdown menu under Update Interval. Select the desired frequency for which the data should be replicated into the warehouse.

Use the Anchor Time dropdown menu to select an Anchor Time. This is the time that the ingestion job will start. Be sure to allow enough time for loading the data when setting this time. If an ingestion job is not complete before the next scheduled interval, the interval will be skipped.

The Fetch Records Newer Than field indicates the date from which the ingestion of the data into the warehouse should begin.  Select the fetch records date by clicking into the Fetch Records Newer Than box.  

Note: The fetch records date will default to one year in the past if a date is not manually selected. To select an Update Interval, use the dropdown menu under Update Interval. Select the desired frequency for which the data should be ingested into the warehouse. 

‍Note: The selected Update Interval and Fetch Records Newer Than date will apply for all tables and columns within a Connector that have been selected for ingestion and ingestion. Tables and columns within a given Connector cannot have differing Update Intervals and/or Fetch Records Newer Than dates.

Save the Update Interval and Fetch Records Newer Than data by clicking 'Save' in the lower right corner of the section. It will take a few minutes for the data to be ingested into the warehouse. After a few minutes, navigate to the Database Connections tab from the Settings menu.

Select the appropriate warehouse from the dropdown menu and click on the refresh icon next to the schema for the warehouse.

Once the schema has been refreshed, the source name that was entered when the Connector was set up will appear in the schema browser and data will now be queryable.

<a name="ReauthorizeaConnector"></a>
<a href="#top">Back to top</a>

Reauthorize a Connector

In the event that changes have been made to the HubSpot account associated with the HubSpot Connector, the Connector will need to reauthorized.  To reauthorize an account, click Reauthorize in the Ingestion page with the appropriate Connector selected from the dropdown menu.


Similar to when setting up a new Connector, a second screen will open with a prompt to select the appropriate HubSpot account that is associated with the connector. Please select the appropriate HubSpot account.

Click 'Grant Access' once prompted to allow Sisense to access the HubSpot account.

‍Note: If the account that is being reauthorized is a previously added account, then a screen that says “You’ve previously linked Sisense Data Connector to HubSpot” may appear.

Once permissions are allowed, a screen will appear directing with information on how to navigate back to Sisense for Cloud Data Teams. Either select closing to redirect back to the Connectors page, or wait as the window will automatically close in 5 seconds and redirect to the Connectors page.


<a name="SuspendIngestionforaConnector"></a>

<a href="#top">Back to top</a>

Suspend Ingestion for a Connector

In the event that ingestion for a Connector should be suspended, please select the Connector from the dropdown menu within the Ingestion page and toggle on Suspend Ingest from the Update Interval menu. Lastly, please click 'Save' within this menu to save the changes made.

Note: It may be necessary to scroll within the menu to see this option.

<a name="DeleteaConnector"></a>

<a href="#top">Back to top</a>

Delete a Connector

To delete a Connector, navigate to the App Connections page from the Settings menu and select the name of the Connector to be deleted from the dropdown menu.

Click 'Delete' in the bottom left:

In the Delete Source window, follow the instructions provided by typing the name of the Connector to be deleted in the field provided.

Once the name of the Connector has been entered, the Delete button will become available. Click the 'Delete' button to delete the Connector.

Note: This action cannot be undone.

<a href="#top">Back to top</a>
<a name="HubspotFields"></a>

Custom HubSpot Field Ingestion

Custom object properties, or fields, are supported by Sisense for Cloud Data Teams’ HubSpot integration. Sisense will query the properties list for each object and, if custom fields are available through HubSpot’s API, ingest them accordingly.

The data types of these fields will be the same as the data type in HubSpot. For example: A custom field containing date data will be a date field  after ingestion.

This is applicable to any object that supports custom fields in HubSpot.

<a href="#top">Back to top</a>
<a name="HubspotDates"></a>

HubSpot Date/Date-Time Values & UNIX Timestamps

HubSpot uses UNIX-formatted timestamps in milliseconds to store date and datetime data. Sisense doesn’t perform any transformation during the ingestion process, meaning these values will NOT be converted to timestamps before they’re loaded into the destination.

To account for this, consider creating a snippet to perform the conversion or building materialized views on top of the raw data.

<a href="#top">Back to top</a>
<a name="HubspotTableSchemas"></a>

HubSpot Table Schemas

Primary keys are noted in bold within the table schemas.

<details>
<summary><b><big><a href="https://developers.hubspot.com/docs/methods/email/get_campaign_data"> Campaigns <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr>
<th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>id</b></td>
<td>Integer</td>
<td>The ID of hte campaign.</td>
</tr>
<tr>
<td>appId</td>
<td>Integer</td>
<td>The Application ID for the given email.</td>
</tr>
<tr>
<td>appName</td>
<td>String</td>
<td>The Application Name for the given email.</td>
</tr>
<tr>
<td>contentId</td>
<td>Integer</td>
<td>The ID associated with the content.</td>
</tr>
<tr>
<td>counters</td>
<td>Object</td>
<td>Event count summaries for the given email.</td>
</tr>
<tr>
<td>name</td>
<td>String</td>
<td>The name of the email.</td>
</tr>
<tr>
<td>numIncluded</td>
<td>Integer</td>
<td>The number of included emails.</td>
</tr>
<tr>
<td>numQueued</td>
<td>Integer</td>
<td>The number of queued emails.</td>
</tr>
<tr>
<td>subType</td>
<td>String</td>
<td>The subtype of the email. For example: VariantB.</td>
</tr>
<tr>
<td>subject</td>
<td>String</td>
<td>The subject of the email.</td>
</tr>
<tr>
<td>type</td>
<td>String</td>
<td>The type of the email. For example: AB.</td>
</tr>
</table>
</body>
</details>

The campaigns table contains info about the campaigns in the connected HubSpot account.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/companies/get_company"> Companies <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>companyid</b></td>
<td>Integer</td>
<td>The ID of the company.</td>
</tr>
<tr>
<td>portalid</td>
<td>Integer</td>
<td>The ID of the portal the company is associated with.</td>
</tr>
<tr>
<td>isDeleted</td>
<td>Boolean</td>
<td>If true, the company has been deleted.</td>
</tr>
<tr>
<td>properties</td>
<td>Object</td>
<td>Details about the company.</td>
</tr>
</table>
</body>
</details>

The companies table contains info about the companies the connected HubSpot contacts belong to.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/lists/get_lists"> Contact_Lists <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>istId</b></td>
<td>Integer</td>
<td>The unique ID of the list.</td>
</tr>
<tr>
<td>updatedAt</td>
<td>Date-Time</td>
<td>The time that the list was last updated.</td>
</tr>
<tr>
<td>internalListId</td>
<td>Integer</td>
<td>The list’s internal list ID. This field has been deprecated by HubSpot - use listId in its place.</td>
</tr>
<tr>
<td>parentId</td>
<td>Integer</td>
<td>The ID of the folder that the list belongs to.</td>
</tr>
<tr>
<td>metaData</td>
<td>Object</td>
<td>Metadata about the contact list.</td>
</tr>
<tr>
<td>dynamic</td>
<td>Boolean</td>
<td>Indicates if the contact list is a dynamic list</td>
</tr>
<tr>
<td>name</td>
<td>String</td>
<td>The name of the contact list.</td>
</tr>
<tr>
<td>filters</td>
<td>Array</td>
<td>A list of filters used to define list membership. For example: adding only contacts who have submitted a particular form.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the portal the contact list belongs to.</td>
</tr>
<tr>
<td>createdAt</td>
<td>Date-Time</td>
<td>The time that the list was created.</td>
</tr>
<tr>
<td>readOnly</td>
<td>Boolean</td>
<td>Indicates if the contact list is read-only.</td>
</tr>
<tr>
<td>archived</td>
<td>Boolean</td>
<td>Indicates if the contact list has been archived.</td>
</tr>
<tr>
<td>deleteable</td>
<td>Boolean</td>
<td>Indicates if the list can be deleted. If false If false, the list is a system list and cannot be deleted.</td>
</tr>
<tr>
<td>listType</td>
<td>String</td>
<td>The type of list. For example: static or dynamic.</td>
</tr>
</table>
</body>
</details>

The contact_lists table contains info about the contacts lists in the connected HubSpot account. Contact lists are used to segment contacts into groups, and there are two types: dynamic (smart lists) and static.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/contacts/get_contacts"> Contacts <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>canonical-vid</b></td>
<td>Integer</td>
<td>The canonical ID of the contact./td>
</tr>
<tr>
<td>vid</td>
<td>Integer</td>
<td>The internal ID of the contact.</td>
</tr>
<tr>
<td>merged-vids</td>
<td>Array</td>
<td>A list of vids that have been merged into this contact record.</td>
</tr>
<tr>
<td>portal-id</td>
<td>Integer</td>
<td>The ID of the portal the contact is associated with.</td>
</tr>
<tr>
<td>is-contact</td>
<td>Boolean</td>
<td>Indicates if the contact is a valid contact.</td>
</tr>
<tr>
<td>profile-token</td>
<td>String</td>
<td>A unique token that can be used to view the contact without logging into HubSpot.</td>
</tr>
<tr>
<td>profile-url</td>
<td>String</td>
<td>A unique token that can be used to view the contact without logging into HubSpot. Anyone with this URL can view (not edit) the contact’s record.</td>
</tr>
<tr>
<td>identity-profiles</td>
<td>Array</td>
<td>A list of the identities of the contact.</td>
</tr>
<tr>
<td>list-memberships</td>
<td>Array</td>
<td>A list of the contact’s memberships in contact lists.</td>
</tr>
<tr>
<td>form-submissions</td>
<td>Array</td>
<td>A list of form submissions for the contact.</td>
</tr>
<tr>
<td>merge-audits</td>
<td>Array</td>
<td>Details about any merges that have happened for the record.</td>
</tr>
</table>
</body>
</details>

If properties have been set for the contact, additional fields beginning with properties__ will be included in the table. Note: Contacts will only have an entry for a property if that property has been set for the contact’s record.

HubSpot always types the value of properties fields as STRING despite the property type. Refer to HubSpot’s documentation for more info.

<details>
<summary><b><big>Contacts By Company</big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>contact-id</b></td>
<td>Integer</td>
<td>The ID of the contact.</td>
</tr>
<tr>
<td>company-id</td>
<td>Integer</td>
<td>The ID of the company the contact is a part of.</td>
</tr>
</table>
</body>
</details>

The contacts_by_company table contains contact and company ID pairs, allowing to join contacts to relevant company data.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/deals/get-all-deals"> Deals <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>dealId</b></td>
<td>Integer</td>
<td>The ID of the deal.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the portal the deal is associated with.</td>
</tr>
<tr>
<td>associations</td>
<td>Object</td>
<td>IDs of the Vids, Companies and Deals associated with the deal.</td>
</tr>
<tr>
<td>properties</td>
<td>Object</td>
<td>Details about the properties set for the deal.</td>
</tr>
</table>
</body>
</details>

The deals table contains info about the deals in a HubSpot portal.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/email/get_events">Email_Events <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><b>id</b></td>
<td>String</td>
<td>The ID of the event.</td>
</tr>
<tr>
<td>appId</td>
<td>Integer</td>
<td>The ID of the HubSpot application that sent the email message.</td>
</tr>
<tr>
<td>appName</td>
<td>String</td>
<td>IDs of the Vids, Companies and Deals associated with the deal.</td>
</tr>
<tr>
<td>browser</td>
<td>Object</td>
<td>Details about the browser that serviced the event.</td>
</tr>
<tr>
<td>created</td>
<td>Date-Time</td>
<td>The time the event was created.</td>
</tr>
<tr>
<td>devieType</td>
<td>String</td>
<td>The type of device used to service the event.</td>
</tr>
<tr>
<td>duration</td>
<td>Integer</td>
<td>The approximate number of milliseconds the user had opened the email message.</td>
</tr>
<tr>
<td>emailCampaignId</td>
<td>Integer</td>
<td>The ID of the email campaign that the email message is a part of.</td>
</tr>
<tr>
<td>emailCampaignGroupId</td>
<td>Integerd</td>
<td>The ID of the email campaign group associated with the email message.</td>
</tr>
<tr>
<td>filteredEvent</td>
<td>Boolean</td>
<td>Indicates if the event was filtered</td>
</tr>
<tr>
<td>from</td>
<td>String</td>
<td>The from field of the email message.</td>
</tr>
<tr>
<td>hmid</td>
<td>String</td>
<td>An auto-generated ID that corresponds to the header X-HubSpot-MID in the email message.</td>
</tr>
<tr>
<td>ipAddress</td>
<td>String</td>
<td>The IP address where the event originated.</td>
</tr>
<tr>
<td>linkId</td>
<td>Integer</td>
<td>The ID of the link the recipient clicked in the email message.</td>
</tr>
<tr>
<td>location</td>
<td>Object</td>
<td>Details about where the event occurred, including the city, state, and country.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the HubSpot portal that sent the email message.</td>
</tr>
<tr>
<td>recipient</td>
<td>String</td>
<td>The email address of the recipient of the email message.</td>
</tr>
<tr>
<td>response</td>
<td>String</td>
<td>The full response from the recipient’s email server.</td>
</tr>
<tr>
<td>sentBy</td>
<td>Object</td>
<td>Details about the email message’s SENT event.</td>
</tr>
<tr>
<td>smtpId</td>
<td>String</td>
<td>The ID that HubSpot attaches to the email message.</td>
</tr>
<tr>
<td>subject</td>
<td>String</td>
<td>The subject line of the email message.</td>
</tr>
<tr>
<td>Type</td>
<td>String</td>
<td>The type of event. Click the link for more details about email event types.</td>
</tr>
<tr>
<td>url</td>
<td>String</td>
<td>The URL in the email message that the recipient clicked.</td>
</tr>
<tr>
<td>userAgent</td>
<td>String</td>
<td>The user agent responsible for the event.</td>
</tr>
</table>
</body>
</details>

The email_events table contains info about email events and how recipients interact with content.
Note: For Email events and HubSpot permissions: Replicating this table requires Super Admin permissions in HubSpot. The Super Admin role is different than the Admin role, additional information can be found in HubSpot’s documentation.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/engagements/get-all-engagements"> Engagements <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Integer</td>
<td>The ID for engagement.</td>
</tr>
<tr>
<td>lastUpdated</td>
<td>Date-Time</td>
<td>The time the engagement was last updated.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the portal the engagement belongs to.</td>
</tr>
<tr>
<td>active</td>
<td>Boolean</td>
<td>Indicates if the engagement is active.</td>
</tr>
<tr>
<td>createdAt</td>
<td>Date-Time</td>
<td>The time the engagement was created.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the portal the engagement belongs to.</td>
</tr>
<tr>
<td>ownerid</td>
<td>Integer</td>
<td>The ID of the owner associated with the engagement.</td>
</tr>
<tr>
<td>type</td>
<td>String</td>
<td>The type of engagement.</td>
</tr>
<tr>
<td>timestamp</td>
<td>Date-Time</td>
<td>The time the engagement should appear in the timeline.</td>
</tr>
<tr>
<td>associations</td>
<td>Array</td>
<td>IDs of the objects associated with the engagement.</td>
</tr>
<tr>
<td>attachments</td>
<td>Array</td>
<td>For NOTE engagements only. IDs of the files from the file manager that should display in the attachments list when viewing the engagement in HubSpot.</td>
</tr>
<tr>
<td>metadata</td>
<td>Object</td>
<td>Metadata about the engagement.</td>
</tr>
</table>
</body>
</details>

The engagements table contains info about all the engagements in a HubSpot portal.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/forms/v2/get_forms"> Forms <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>guid</td>
<td>String</td>
<td>The GUID of the form.</td>
</tr>
<tr>
<td>updatedAt</td>
<td>Date-Time</td>
<td>The time the form was last updated.</td>
</tr>
<tr>
<td>deletedAt</td>
<td>Integer</td>
<td>If the form was deleted, the time that the deletion took place.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the portal the form belongs to.</td>
</tr>
<tr>
<td>name</td>
<td>String</td>
<td>The name of the form.</td>
</tr>
<tr>
<td>action</td>
<td>String</td>
<td>Deprecated by HubSpot.</td>
</tr>
<tr>
<td>method</td>
<td>String</td>
<td>The API method used to send the form submission.</td>
</tr>
<tr>
<td>cssClass</td>
<td>String</td>
<td>The CSS class associated with the form.</td>
</tr>
<tr>
<td>redirect</td>
<td>String</td>
<td>The URL that the visitor will be redirected to after filling out the form.</td>
</tr>
<tr>
<td>submitText</td>
<td>String</td>
<td>The text that displays to the end-user to submit the form.</td>
</tr>
<tr>
<td>followUpId</td>
<td>String</td>
<td>Deprecated by HubSpot.</td>
</tr>
<tr>
<td>notifyRecipients</td>
<td>String</td>
<td>A list of email addresses that should receive submission notifications.</td>
</tr>
<tr>
<td>leadNurturingCampaignId</td>
<td>Integer</td>
<td>The ID of the lead nurturing campaign the form is associated with.</td>
</tr>
<tr>
<td>formFieldGroups</td>
<td>Array</td>
<td>Details about the fields in the form.</td>
</tr>
<tr>
<td>createdAt</td>
<td>Date-Time</td>
<td>The time the form was created.</td>
</tr>
<tr>
<td>performableHtml</td>
<td>String</td>
<td>Deprecated by HubSpot.</td>
</tr>
<tr>
<td>migratedFrom</td>
<td>String</td>
<td>Deprecated by HubSpot.</td>
</tr>
<tr>
<td>ignoreCurrentValues</td>
<td>Boolean</td>
<td>Indicates if the form will pre-populate fields with known values for known contacts.</td>
</tr>
<tr>
<td>deletable</td>
<td>Boolean</td>
<td>Indicates if the form can be deleted.</td>
</tr>
<tr>
<td>inlineMessage</td>
<td>String</td>
<td>The ‘thank you’ message that displays on the page after the form is submitted.</td>
</tr>
<tr>
<td>tmsId</td>
<td>String</td>
<td>Deprecated by HubSpot.</td>
</tr>
<tr>
<td>captchaEnabled</td>
<td>Boolean</td>
<td>Indicates if a Captcha is enabled on the form.</td>
</tr>
<tr>
<td>campaignGuid</td>
<td>String</td>
<td>The GUID of the campaign the form is associated with.</td>
</tr>
<tr>
<td>cloneable</td>
<td>Boolean</td>
<td>Indicates if the form can be cloned.</td>
</tr>
<tr>
<td>editable</td>
<td>Boolean</td>
<td>Indicates if the form can be edited.</td>
</tr>
<tr>
<td>formType</td>
<td>String</td>
<td>The type of form.</td>
</tr>
<tr>
<td>metaData</td>
<td>String</td>
<td>Metadata about the form</td>
</tr>
</table>
</body>
</details>

The forms table contains info about the connected HubSpot website forms.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/owners/get_owners"> Owners <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ownerid</td>
<td>Integer</td>
<td>The ID of the owner.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the portal the owner is associated with.</td>
</tr>
<tr>
<td>updatedAt</td>
<td>Date-Time</td>
<td>The time that the owner was last updated in HubSpot.</td>
</tr>
<tr>
<td>type</td>
<td>String</td>
<td>The type of owner.</td>
</tr>
<tr>
<td>firstName</td>
<td>String</td>
<td>The first name of the of owner.</td>
</tr>
<tr>
<td>lastName</td>
<td>String</td>
<td>The last name of the of owner.</td>
</tr>
<tr>
<td>email</td>
<td>String</td>
<td>The email address associated with the owner.</td>
</tr>
<tr>
<td>createdAt</td>
<td>Date-Time</td>
<td>The time that the owner was created in HubSpot.</td>
</tr>
<tr>
<td>signiture</td>
<td>String</td>
<td>The owner's signature.</td>
</tr>
<tr>
<td>hasContactsAccess</td>
<td>Boolean</td>
<td>Indicates if the owner has access to the contacts in the HubSpot portal.</td>
</tr>
<tr>
<td>remoteList</td>
<td>Array</td>
<td>Details about the remote list associated with the owner.</td>
</tr>
</table>
</body>
</details>

The owners table contains info about the owners that exist in the connected HubSpot portal. Owners are created and updated in HubSpot when new users are added or when owners are synced from Salesforce to HubSpot.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/email/get_subscriptions_timeline"> Subscription_Changes <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>recipient</td>
<td>String</td>
<td>The contact associated with the subscription change event.</td>
</tr>
<tr>
<td>portalId</td>
<td>Integer</td>
<td>The ID of the portal associated with the subscription change event.</td>
</tr>
<tr>
<td>timestamp</td>
<td>Date-Time</td>
<td>The time that the subscription change event occurred.</td>
</tr>
<tr>
<td>changes</td>
<td>Array</td>
<td>Details about the subscription change event.</td>
</tr>
</table>
</body>
</details>

The subscription_changes table contains info about changes made subscriptions.

<details>
<summary><b><big>
<a href="https://developers.hubspot.com/docs/methods/workflows/v3/get_workflows"> Workflows <a/> </big></b></summary>
<body>
<table style="border-collapse:collapse;">
<tr><th style="width:200px;text-align:left">Column</th>
<th style="width:200px;text-align:left">Data-Type</th>
<th style="width:200px;text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Integer</td>
<td>The ID of the workflow.</td>
</tr>
<tr>
<td>updatedAt</td>
<td>Date-Time</td>
<td>The time that the workflow was last updated.</td>
</tr>
<tr>
<td>name</td>
<td>String</td>
<td>The name of the workflow.</td>
</tr>
<tr>
<td>type</td>
<td>String</td>
<td>The type of workflow. For example: DRIP_DELAY</td>
</tr>
<tr>
<td>enabled</td>
<td>Boolean</td>
<td>Indicates if the workflow is enabled in your HubSpot portal.</td>
</tr>
<tr>
<td>inserted-at</td>
<td>Date-Time</td>
<td>The time that the workflow was inserted.</td>
</tr>
<tr>
<td>personaTagIds</td>
<td>Array</td>
<td>Info about the personas tied to the workflow.</td>
</tr>
<tr>
<td>contactListIds</td>
<td>Object</td>
<td>Summary info for the contact lists associated with the workflow.</td>
</tr>
</table>
</body>
</details>

The workflows table contains info about the workflows in your HubSpot portal.

<a href="#top">Back to top</a>

Our support team is ready to help