HubSpot Source
Connect HubSpot CRM as a source to extract data from your marketing, sales, and service operations. Supaflow supports incremental sync for CRM objects (contacts, companies, deals, tickets) and full refresh for marketing and engagement data.
For an overview of capabilities and use cases, see the HubSpot connector page. To run pipelines natively inside Snowflake, see Snowflake Native ETL.
Prerequisites
Before you begin, ensure you have:
- A HubSpot account with Admin access (required for OAuth authorization)
- A configured destination in Supaflow (e.g., Snowflake or S3 Data Lake)
Supported Objects
Supaflow discovers objects automatically from your HubSpot account. The following categories of objects are supported:
CRM Objects
| Object | Sync Mode | Cursor Field | Description |
|---|---|---|---|
| Contacts | Incremental | updatedAt | People in your CRM -- leads, customers, subscribers |
| Companies | Incremental | updatedAt | Organizations associated with contacts |
| Deals | Incremental | updatedAt | Revenue opportunities in your sales pipeline |
| Tickets | Incremental | updatedAt | Support requests from your service hub |
| Products | Incremental | updatedAt | Items in your product catalog |
| Line Items | Incremental | updatedAt | Individual items within deals |
| Quotes | Incremental | updatedAt | Sales quotes linked to deals |
| Custom Objects | Incremental | updatedAt | Any custom objects defined in your HubSpot account |
Marketing Objects
| Object | Sync Mode | Description |
|---|---|---|
| Email Events | Full Refresh | Opens, clicks, bounces, unsubscribes for marketing emails |
| Marketing Emails | Full Refresh | Email campaign definitions and metadata |
| Forms | Full Refresh | Form definitions used for lead capture |
| Form Submissions | Full Refresh | Individual form submission records |
Engagement Objects
| Object | Sync Mode | Description |
|---|---|---|
| Calls | Full Refresh | Logged phone calls |
| Emails | Full Refresh | Logged email interactions |
| Meetings | Full Refresh | Scheduled meetings |
| Notes | Full Refresh | Notes attached to CRM records |
| Tasks | Full Refresh | Tasks assigned to team members |
Lookup Tables
| Object | Sync Mode | Description |
|---|---|---|
| Owners | Full Refresh | HubSpot users who own records |
| Pipelines | Full Refresh | Deal and ticket pipeline definitions |
| Pipeline Stages | Full Refresh | Stages within each pipeline |
| Contact Lists | Full Refresh | Static and dynamic list definitions |
| Properties | Full Refresh | Property definitions for each object type |
Sync Modes
Incremental sync is available for CRM objects. Supaflow uses HubSpot's Search API to query for records modified since the last sync. Only changed records are fetched, which reduces API usage and sync duration.
Full refresh is used for objects where the HubSpot API does not support filtered queries (marketing events, engagement objects, lookup tables). All records are fetched on each sync.
The sync mode is configured automatically per object based on API capabilities. You do not need to configure it manually.
Authentication
Supaflow uses OAuth 2.0 to connect to HubSpot. The OAuth flow requests the following scopes:
crm.objects.contacts.read-- Read contactscrm.objects.companies.read-- Read companiescrm.objects.deals.read-- Read dealscrm.objects.custom.read-- Read custom objectscrm.schemas.custom.read-- Read custom object schemastickets-- Read ticketscontent-- Read marketing contentforms-- Read forms and form submissionse-commerce-- Read products and line itemscrm.objects.owners.read-- Read owner information
If you add new scopes after the initial connection (e.g., HubSpot adds a new object type), you may need to reconnect the source to grant the additional permissions.
Configuration
Step 1: Authorize Connection
Click Authorize to connect to your HubSpot account using OAuth. You will be redirected to your HubSpot account.
Step 2: Select Account
- Log in to your HubSpot account, if not already logged in
- In the Choose an Account list, select the account you want to sync
- Click Connect
Step 3: Complete Setup
- You will be redirected back to your datasource form in Supaflow
- Click Test & Save to verify your connection and save the source
Step 4: Select Objects
After the connection is saved, Supaflow discovers your HubSpot schema automatically. In the pipeline wizard:
- Select the objects you want to sync
- For each object, review the fields and deselect any you don't need
- Supaflow will configure the sync mode automatically based on the object type
Rate Limiting
HubSpot enforces API rate limits that vary by plan:
| HubSpot Plan | Rate Limit |
|---|---|
| Free / Starter | 100 requests per 10 seconds |
| Professional | 150 requests per 10 seconds |
| Enterprise | 200 requests per 10 seconds |
Supaflow respects these limits automatically. If a rate limit is hit, the connector backs off and retries. For large accounts with many objects, consider:
- Scheduling syncs during off-peak hours to avoid competing with other integrations
- Syncing fewer objects per pipeline if you are close to your API limit
- Upgrading your HubSpot plan for higher limits
Daily API call limits also apply (varies by plan). Check HubSpot Settings > Account > Usage & Limits for your current usage.
Schema Evolution
When you add new fields or custom objects in HubSpot, Supaflow detects the changes automatically on the next sync:
- New fields are added to the destination table
- New custom objects appear in the schema selection and can be enabled
- Removed fields are not dropped from the destination (data is preserved)
- Type changes (e.g., a text field changed to a number) are handled based on your schema evolution settings
Troubleshooting
OAuth authorization failed
Problem: Cannot complete OAuth flow, redirect fails, or "Access denied" error.
Solutions:
- Verify you have Admin permissions in HubSpot
- Clear browser cookies and cache, or try in incognito/private mode
- Disable popup blockers for this site
- Try a different browser (Chrome, Firefox, or Edge)
Objects not appearing
Problem: Some HubSpot objects don't appear in schema discovery.
Solutions:
- Verify your HubSpot user has access to the objects
- For custom objects, ensure they are published in HubSpot
- Check that OAuth scopes include the necessary permissions -- reconnect if scopes were added after the initial connection
- Force a schema refresh in Supaflow
Data not syncing
Problem: Data appears in HubSpot but not in the destination.
Solutions:
- Verify the objects are selected in the pipeline schema
- Review pipeline execution logs for errors or warnings
- For incremental objects, check that the cursor position is correct in the pipeline details
- Ensure the HubSpot user has read access to the relevant properties
Rate limit errors
Problem: "Rate limit exceeded" error or sync stops mid-process.
Solutions:
- Check your current API usage in HubSpot Settings > Account > Usage & Limits
- Schedule syncs during off-peak hours
- Reduce the number of objects synced simultaneously
- Consider upgrading your HubSpot plan for higher limits
Support
Need help? Contact us at support@supa-flow.io