LoadersHubSpot

HubSpot Loader

The HubSpot loader pulls CRM, marketing, and sales data from your HubSpot account into your data warehouse. It supports both OAuth 2.0 and private app API keys, and uses HubSpot’s incremental search endpoints for efficient data extraction.

Prerequisites

  • A HubSpot account (Free, Starter, Professional, or Enterprise)
  • A HubSpot user with Super Admin permissions (for OAuth) or a private app with appropriate scopes
  • A connected Warehouse (target warehouse) with write permissions on the target schema

Authentication

The HubSpot loader supports two authentication methods.

OAuth 2.0

  1. In SignalSmith, click Add Loader and select HubSpot
  2. Choose OAuth 2.0 as the authentication method
  3. Click Connect with HubSpot
  4. Log in to your HubSpot account and select the portal to connect
  5. Review the requested permissions and click Grant Access
  6. You’ll be redirected back to SignalSmith with the connection established

SignalSmith automatically refreshes the OAuth token. If the connection is revoked from HubSpot’s Connected Apps settings, you’ll need to re-authenticate.

API Key (Private App)

For environments where OAuth isn’t practical, you can use a HubSpot private app access token:

  1. In HubSpot, go to Settings > Account Setup > Integrations > Private Apps
  2. Click Create a Private App
  3. Name the app (e.g., “SignalSmith Loader”)
  4. Under Scopes, enable the scopes listed below for each object you want to sync
  5. Click Create App and copy the access token
  6. In SignalSmith, paste the access token into the API Key field

Required scopes by object:

ObjectRequired Scope
Contactscrm.objects.contacts.read
Companiescrm.objects.companies.read
Dealscrm.objects.deals.read
Custom Objectscrm.objects.custom.read
Ownerscrm.objects.owners.read
Pipelinescrm.objects.pipelines.read
Listscrm.lists.read
Formsforms
Email Eventscontent

Available Objects

ObjectAPI NameDescriptionDefault Sync Mode
ContactscontactsPeople in your CRM — leads, customers, subscribersIncremental
CompaniescompaniesOrganizations associated with contacts and dealsIncremental
DealsdealsSales opportunities with pipeline stages and amountsIncremental
TicketsticketsSupport tickets from HubSpot Service HubIncremental
ProductsproductsProduct catalog itemsIncremental
Line Itemsline_itemsProducts associated with dealsIncremental
OwnersownersHubSpot users who own recordsFull Refresh
PipelinespipelinesDeal and ticket pipeline definitionsFull Refresh
ListslistsStatic and dynamic contact listsFull Refresh
FormsformsForm definitions and submission dataIncremental
Email Eventsemail_eventsEmail sends, opens, clicks, and bouncesIncremental
Custom Objectscustom_objectsAny custom object defined in your HubSpot portalIncremental

Custom Objects

HubSpot custom objects (available on Enterprise plans) are automatically discovered. They appear in the object list with their configured label and API name. Custom properties are included in the extracted schema.

Associations

HubSpot uses associations to link objects (e.g., contact-to-company, deal-to-contact). SignalSmith extracts association data into separate junction tables (e.g., contact_to_company) so you can join objects in your models.

Configuration

SettingDescriptionDefault
Auth MethodOAuth 2.0 or API KeyOAuth 2.0
Portal IDYour HubSpot portal/account ID (auto-detected for OAuth)Auto-detected
ObjectsList of objects to sync— (you choose during setup)
Include AssociationsWhether to extract association tablestrue
Sync ModeFull Refresh or Incremental (per object)Incremental
Cursor FieldField used for incremental syncupdatedAt
Primary KeyField(s) that uniquely identify a recordid
Target SchemaWarehouse schema for HubSpot tables— (required)
Table PrefixOptional prefix for table nameshs_
ScheduleSync frequencyHourly

Scheduling Notes

  • Rate limits: HubSpot enforces API rate limits based on your subscription tier. Free and Starter plans allow 100 requests per 10 seconds; Professional and Enterprise allow 150. SignalSmith respects these limits automatically with backoff and retry.
  • Property history: HubSpot’s API can return property change history for contacts and companies. Enable this option if you need historical values — note that it significantly increases data volume.
  • Archived records: By default, SignalSmith does not sync archived (deleted) records. Enable “Include Archived” if you need these for analytics.
  • Custom object limits: HubSpot Enterprise allows up to 10 custom object definitions. Each custom object is discovered and treated like a standard object.

Schema Mapping

HubSpot property types are mapped to warehouse-compatible types:

HubSpot TypeWarehouse TypeNotes
stringVARCHAR
numberDOUBLEHubSpot stores all numbers as doubles
boolBOOLEAN
dateDATE
datetimeTIMESTAMPUTC normalized
enumerationVARCHARPicklist values as semicolon-separated strings
jsonVARCHAR / JSONDepends on warehouse support
phone_numberVARCHAR

Troubleshooting

IssueSolution
”401 Unauthorized”Your OAuth token or API key is invalid. Re-authenticate or regenerate the private app token
”403 Forbidden” on specific objectsThe authenticated user or private app lacks the required scope. Add the necessary scope in HubSpot settings
”429 Too Many Requests”SignalSmith handles rate limiting automatically with exponential backoff. If this persists, reduce sync frequency
Custom objects not appearingCustom objects require a HubSpot Enterprise subscription. Verify your plan level
Missing properties on contactsHubSpot API returns only properties that are set. Null/empty properties are not included in API responses
Association tables are emptyVerify that associations exist in HubSpot. Some association types require Enterprise-tier features
”CONTACT_EXISTS” errorsThis indicates duplicate contacts in HubSpot. The loader handles deduplication by primary key in the warehouse

Next Steps