HubSpot
This page contains the setup guide and reference information for the HubSpot source connector.
Prerequisites
- HubSpot Account
- For Airbyte Open Source: Private App with Access Token
Setup guide
Step 1: Set up HubSpot
For Airbyte Cloud:
- OAuth (Recommended). We highly recommend you use OAuth rather than Private App authentication, as it significantly simplifies the setup process.
- Private App: If you are using a Private App, you will need to use your Access Token to set up the connector. Please refer to the official HubSpot documentation to learn how to obtain the access token.
For Airbyte Open Source:
- Private App setup (Recommended): If you are authenticating via a Private App, you will need to use your Access Token to set up the connector. Please refer to the official HubSpot documentation to learn how to obtain the access token.
- OAuth setup: If you are using OAuth to authenticate on Airbyte Open Source, please refer to HubSpot's detailed walkthrough. To set up the connector, you will need to acquire your:
- Client ID
- Client Secret
- Refresh Token
For more details, refer to HubSpot's authentication documentation.
Step 2: Configure the scopes for your streams (Private App only)
These instructions are only relevant if you are using a Private App for authentication. You can ignore this if you are authenticating via OAuth.
To set up a Private App, you must manually configure scopes to ensure Airbyte can sync all available data. Each scope relates to a specific stream or streams. Refer to HubSpot's documentation on scopes for instructions.
Expand to review scopes
| Stream | Required Scope |
|---|---|
campaigns | content |
companies | crm.objects.companies.read, crm.schemas.companies.read |
contact_lists | crm.lists.read |
contacts | crm.objects.contacts.read |
contacts_web_analytics | crm.objects.contacts.read, business-intelligence |
association_streams | Read scopes for the selected source and target objects |
| Custom CRM Objects | crm.objects.custom.read |
custom_object_association_streams | crm.objects.custom.read and the read scope for any selected standard object |
deal_pipelines | crm.objects.contacts.read |
deals | crm.objects.deals.read, crm.schemas.deals.read |
deals_archived | crm.objects.deals.read, crm.schemas.deals.read |
email_events | content |
email_subscriptions | content |
engagements | crm.objects.companies.read, crm.objects.contacts.read, crm.objects.deals.read, tickets, e-commerce |
engagements_emails | sales-email-read |
forms | forms |
form_submissions | forms |
goals | crm.objects.goals.read |
leads | crm.objects.leads.read, crm.schemas.leads.read |
list_memberships | crm.lists.read |
line_items | e-commerce |
owners | crm.objects.owners.read |
products | e-commerce |
contacts_property_history | crm.objects.contacts.read |
companies_property_history | crm.objects.companies.read |
deals_property_history | crm.objects.deals.read |
subscription_changes | content |
tickets | tickets |
users | crm.objects.users.read, settings.users.read |
account_details | oauth |
deal_splits | crm.objects.deals.read |
properties | No additional scopes required |
workflows | automation |
Step 3: Set up the HubSpot connector in Airbyte
For Airbyte Cloud:
- Log into your Airbyte Cloud account.
- Click Sources and then click + New source.
- On the Set up the source page, select HubSpot from the Source type dropdown.
- Enter a name for the HubSpot connector.
- From the Authentication dropdown, select your chosen authentication method:
-
(Recommended) To authenticate using OAuth, select OAuth and click Authenticate your HubSpot account to sign in with HubSpot and authorize your account.
HubSpot Authentication issuesYou may encounter an error during the authentication process in the popup window with the message
An invalid scope name was provided. To resolve this, close the window and retry authentication. -
(Not Recommended) To authenticate using a Private App, select Private App and enter the Access Token for your HubSpot account.
-
- (Optional) For Start date, use the provided datepicker or enter the date in the following format:
yyyy-mm-ddThh:mm:ssZ. Data added on and after this date will be replicated. If this is not set, "2006-06-01T00:00:00Z" (the date HubSpot was created) will be used as a start date.
- (Optional) Set the CRM Search Lookback Window in minutes to re-fetch data for CRM Search streams (e.g. contacts, companies, deals, tickets) for a specified number of minutes before the state from the previous sync. This helps capture missing records in CRM Search streams.
- (Optional) Set the Property History Lookback Window in minutes to re-fetch data for property history streams (
deals_property_history,contacts_property_history,companies_property_history). This helps capture records that may be missed due to cursor drift caused by HubSpot calculated properties. A value of43200(30 days) is a reasonable starting point. - (Optional) Enable Treat dynamic number and boolean properties as strings if your destination rejects records because HubSpot returns values that don't match the declared
numberorbooleantype. See Destination type conversion errors in Troubleshooting for details. - Click Set up source and wait for the tests to complete.
For Airbyte Open Source:
- Navigate to the Airbyte Open Source dashboard.
- From the Airbyte UI, click Sources, then click on + New Source and select HubSpot from the list of available sources.
- Enter a Source name of your choosing.
- From the Authentication dropdown, select your chosen authentication method:
- (Recommended) To authenticate using a Private App, select Private App and enter the Access Token for your HubSpot account.
- (Not Recommended:) To authenticate using OAuth, select OAuth and enter your Client ID, Client Secret, and Refresh Token.
- (Optional) For Start date, use the provided datepicker or enter the date in the following format:
yyyy-mm-ddThh:mm:ssZ. The data added on and after this date will be replicated. If not set, "2006-06-01T00:00:00Z" (HubSpot creation date) will be used as start date. It's recommended to provide a start date relevant to your data to optimize synchronization. - (Optional) Set the CRM Search Lookback Window in minutes to re-fetch data for CRM Search streams (e.g. contacts, companies, deals, tickets) for a specified number of minutes before the state from the previous sync. This helps capture missing records in CRM Search streams.
- (Optional) Set the Property History Lookback Window in minutes to re-fetch data for property history streams (
deals_property_history,contacts_property_history,companies_property_history). This helps capture records that may be missed due to cursor drift caused by HubSpot calculated properties. A value of43200(30 days) is a reasonable starting point. - (Optional) Enable Treat dynamic number and boolean properties as strings if your destination rejects records because HubSpot returns values that don't match the declared
numberorbooleantype. See Destination type conversion errors in Troubleshooting for details. - Click Set up source and wait for the tests to complete.
Experimental streams
Web Analytics streams may be enabled as an experimental feature. Note that these streams use a HubSpot API that is currently in beta, and they may be modified or unstable as the API continues to develop.
Association streams
Use Association Between Objects Streams to sync relationships between two standard HubSpot CRM objects. Add one item for each relationship you want to sync. Each item creates one stream that reads IDs from the source object, calls HubSpot's associations batch read API, and emits one record for each association.
Configure these fields for each association stream:
- From Object: The source object type, such as
tickets,deals, orcontacts. - To Object: The target object type, such as
companiesorcontacts. - Stream Name: Optional. If you leave this empty, Airbyte names the stream
associations_<from_object>_<to_object>.
For example, set From Object to tickets and To Object to companies to create the associations_tickets_companies stream. After you add or edit association stream settings, refresh the source schema so the generated streams appear in the catalog.
Association stream records include:
from_id: The ID of the source object record.to_id: The ID of the target object record.association_type_id: HubSpot's numeric association type identifier.category: The association category, such asHUBSPOT_DEFINEDorUSER_DEFINED.label: The association label. This isnullfor unlabeled associations.
Association streams sync incrementally. Only associations for records modified since the last sync are fetched.
If you authenticate with a Private App, grant read scopes for both selected objects. For example, a tickets-to-companies association stream needs the tickets and crm.objects.companies.read scopes.
Custom object association streams
Use Custom Object Association Streams to sync relationships where at least one side is a custom HubSpot object. Add one item for each relationship you want to sync.
Configure these fields for each custom object association stream:
- From Object: The source object name or identifier.
- To Object: The target object name or identifier.
- Stream Name: Optional. If you leave this empty, Airbyte names the stream
associations_<from_object>_<to_object>.
After you add or edit custom object association stream settings, refresh the source schema so the generated streams appear in the catalog.
For custom objects, use either:
- The custom object's
fullyQualifiedName, such asp_my_custom_object. - The custom object's
objectTypeId, such as2-12345.
You can use standard object names, such as contacts, companies, or deals, for the standard-object side of the relationship.
Custom object association streams emit the same fields as standard association streams: from_id, to_id, association_type_id, category, and label. They also sync incrementally, the same way as standard association streams.
If you authenticate with a Private App, grant crm.objects.custom.read and the read scope for any standard object in the relationship.
Supported sync modes
The HubSpot source connector supports the following sync modes:
- Full Refresh
- Incremental
There are two types of incremental sync:
- Incremental (standard server-side, where API returns only the data updated or generated since the last sync)
- Client-Side Incremental (API returns all available data and connector filters out only new records)
Supported Streams
The HubSpot source connector supports the following streams:
- Campaigns (Client-Side Incremental)
- Companies (Incremental)
- Contact Lists (Incremental)
- Contacts (Incremental)
- Deal Pipelines (Client-Side Incremental)
- Deal Splits (Incremental)
- Deals (including Contact associations) (Incremental)
- Records that have been deleted (archived) and stored in HubSpot's recycle bin will only be kept for 90 days, see response from HubSpot Team
- Deals Archived (including Contact associations) (Incremental)
- Email Events (Incremental)
- Email Subscriptions
- Engagements (Incremental)
- Engagements Calls (Incremental)
- Engagements Emails (Incremental)
- Engagements Meetings (Incremental)
- Engagements Notes (Incremental)
- Engagements Tasks (Incremental)
- Forms (Client-Side Incremental)
- Form Submissions (Client-Side Incremental)
- Goals (Incremental)
- Leads (Incremental)
- List Memberships (Full Refresh)
- Line Items (Incremental)
- Marketing Emails (Incremental)
- Owners (Client-Side Incremental)
- Owners Archived (Client-Side Incremental)
- Users (Full-Refresh)
- Products (Incremental)
- Properties (Full Refresh)
- Contacts Property History (Client-Side Incremental)
- Companies Property History (Client-Side Incremental)
- Deals Property History (Client-Side Incremental)
- Subscription Changes (Incremental)
- Tickets (Incremental)
- Ticket Pipelines (Client-Side Incremental)
- Workflows (Client-Side Incremental)
- ContactsWebAnalytics (Incremental)
- CompaniesWebAnalytics (Incremental)
- DealsWebAnalytics (Incremental)
- TicketsWebAnalytics (Incremental)
- EngagementsCallsWebAnalytics (Incremental)
- EngagementsEmailsWebAnalytics (Incremental)
- EngagementsMeetingsWebAnalytics (Incremental)
- EngagementsNotesWebAnalytics (Incremental)
- EngagementsTasksWebAnalytics (Incremental)
- GoalsWebAnalytics (Incremental)
- LineItemsWebAnalytics (Incremental)
- ProductsWebAnalytics (Incremental)
- Account Details (Full Refresh)
- Association streams for standard objects, such as
associations_tickets_companies(Incremental) - Custom object association streams for custom-to-standard or custom-to-custom associations (Incremental)
Entity-Relationship Diagram (ERD)
Notes on the property_history streams
The property history streams (contacts_property_history, companies_property_history, deals_property_history) use Client-Side Incremental sync with a cursor timestamp to determine which records have changed since the previous sync.
HubSpot calculated properties — formula fields, rollup summaries, and analytics properties such as hs_analytics_* — always have a timestamp that mirrors the time of the latest sync, not the time of the last user-initiated change. This causes the sync cursor to advance past records that have not yet been synced, which can result in missing records.
To mitigate this, configure the Property History Lookback Window in the source settings. A value of 43200 (30 days) is a reasonable starting point. Because these streams use Append + Deduped sync mode, duplicate records from the lookback period are handled automatically.
Notes on the engagements stream
- Objects in the
engagementsstream can have one of the following types:note,email,task,meeting,call. Depending on the type of engagement, different properties are set for that object in theengagements_metadatatable in the destination:
- A
callengagement has a correspondingengagements_metadataobject with non-null values in thetoNumber,fromNumber,status,externalId,durationMilliseconds,externalAccountId,recordingUrl,body, anddispositioncolumns. - An
emailengagement has a correspondingengagements_metadataobject with non-null values in thesubject,html, andtextcolumns. In addition, there will be records in four related tables,engagements_metadata_from,engagements_metadata_to,engagements_metadata_cc,engagements_metadata_bcc. - A
meetingengagement has a correspondingengagements_metadataobject with non-null values in thebody,startTime,endTime, andtitlecolumns. - A
noteengagement has a correspondingengagements_metadataobject with non-null values in thebodycolumn. - A
taskengagement has a correspondingengagements_metadataobject with non-null values in thebody,status, andforObjectTypecolumns.
- The
engagementsstream uses two different APIs based on the length of time since the last sync and the number of records which Airbyte hasn't yet synced.
- EngagementsRecent if the following two criteria are met:
- The last sync was performed within the last 30 days
- Fewer than 10,000 records are being synced
- EngagementsAll if either of these criteria are not met.
Because of this, the engagements stream can be slow to sync if it hasn't synced within the last 30 days and/or is generating large volumes of new data. To accommodate for this limitation, we recommend scheduling more frequent syncs.
Notes on the Forms and Form Submissions stream
This stream only syncs marketing forms.
Notes on the list_memberships stream
The list_memberships stream reads memberships for every list returned by the contact_lists stream by calling HubSpot's GET /crm/v3/lists/{listId}/memberships endpoint. A few behaviors are worth knowing about:
- The stream only supports full refresh. HubSpot's memberships endpoint doesn't expose a cursor suitable for incremental sync.
- Records are keyed by the composite primary key
(recordId, listId).listIdis emitted as a string so records serialize cleanly to Avro destinations. - Some lists returned by
contact_listsreference anobjectTypeIdthat isn't active for your portal (for example, Leads lists withobjectTypeId0-136). HubSpot's memberships endpoint rejects those lists with a 400VALIDATION_ERROR / ListError.INVALID_OBJECT_TYPE_FOR_LIST. The connector skips those lists so they don't fail the sync, and logs an entry for each one. If you need memberships for those object types, enable the corresponding object in HubSpot or sync the object directly from its own stream (for example,leads).
Notes on the Custom CRM Objects
Custom CRM Objects and Custom Web Analytics will appear as streams available for sync, alongside the standard objects listed above.
If you set up your connections before April 15th, 2023 (on Airbyte Cloud) or before 0.8.0 (OSS) then you'll need to do some additional work to sync custom CRM objects.
First you need to give the connector some additional permissions:
-
If you are using OAuth on Airbyte Cloud go to the HubSpot source settings page in the Airbyte UI and re-authenticate via OAuth to allow Airbyte the permissions to access custom objects.
-
If you are using OAuth on OSS or Private App auth go into the HubSpot UI where you created your Private App or OAuth application and add the
crm.objects.custom.readscope to your app's scopes. See HubSpot's scopes documentation.
Then, go to the schema tab of your connection and click refresh source schema to pull in those new streams for syncing.
Limitations & Troubleshooting
Expand to see details about HubSpot connector limitations and troubleshooting.
Rate limiting
The connector is restricted by normal HubSpot rate limits. The burst limit applies per app, and the daily limit is shared across all apps within the same HubSpot account.
| Product tier | Burst (per 10 seconds) | Daily (per account) |
|---|---|---|
| Free & Starter | 100 | 250,000 |
| Professional | 190 | 625,000 |
| Enterprise | 190 | 1,000,000 |
| API Limit Increase add-on | 250 | +1,000,000 per add-on (max 2) |
Custom properties sync slowly
If you use custom properties in HubSpot, syncs take longer. Airbyte doesn't alert you to the presence of custom properties, but you can check if you're using them with HubSpot's UI.
Troubleshooting
-
Enabling streams: Some streams, such as
workflows, require specific scopes before they can be read. If the authenticated user does not have the necessary permissions, the connector logs a warning and skips the stream. -
HubSpot object labels In HubSpot, a label can be applied to a stream that differs from the original API name of the stream. HubSpot's UI shows the label of the stream, whereas Airbyte shows the name of the stream. If you are having issues seeing a particular stream your user should have access to, search for the
nameof the HubSpot object instead. -
Unnesting top level properties: Since version 1.5.0, in order to offer users access to nested fields, we also denest the top-level fields into individual fields in the destination. This is most commonly observed in the
propertiesfield, which is now split into each attribute in the destination.For instance:
{
"id": 1,
"updatedAt": "2020-01-01",
"properties": {
"hs_note_body": "World's best boss",
"hs_created_by": "Michael Scott"
}
}becomes
{
"id": 1,
"updatedAt": "2020-01-01",
"properties": {
"hs_note_body": "World's best boss",
"hs_created_by": "Michael Scott"
},
"properties_hs_note_body": "World's best boss",
"properties_hs_created_by": "Michael Scott"
} -
401 Unauthorized Error (Private App Token)
If you authenticate using a Private App access token and receive a 401 Unauthorized error, the connector fails immediately with a configuration error asking you to update your token. Private App tokens are static and cannot be refreshed, so retrying won't help. To resolve this, generate a new access token in your HubSpot Private App settings and update the connector configuration.
If you authenticate using OAuth, the connector automatically refreshes expired tokens and retries the request. No action is needed unless the error persists, in which case you should re-authenticate the connector.
-
403 Forbidden Error
-
HubSpot has scopes for each API call.
-
Each stream is tied to a scope and will need access to that scope to sync data.
-
Additional permissions:
feedback_submissions: Service Hub Professional accountmarketing_emails: Market Hub Starter accountworkflows: Sales, Service, and Marketing Hub Professional accounts
-
-
Check out common troubleshooting issues for the HubSpot source connector on our Airbyte Forum.
-
Missing records in CRM Search streams (
deals,companies,engagements_calls,engagements_emails,engagements_meetings,engagements_notes,engagements_tasks,contacts,deal_splits,leads,tickets):- If you notice missing records during incremental syncs, it may be due to irregularities in HubSpot's API behavior.
- To mitigate this, configure the CRM Search Lookback Window in the source settings. This re-fetches data for a specified number of minutes before the state from the previous sync, helping to capture missing records.
-
Missing records in property history streams (
deals_property_history,contacts_property_history,companies_property_history):- HubSpot calculated properties (formula fields, rollup summaries, analytics properties) can emit timestamps ahead of user-initiated changes, causing the sync cursor to advance past records that have not yet been synced.
- To mitigate this, configure the Property History Lookback Window in the source settings. A value of
43200(30 days) is recommended. Since these streams use Append + Deduped sync mode, duplicate records from the lookback period are handled automatically.
-
Destination type conversion errors on dynamic
number/booleanproperties (for example,JSON → NUMERIC,JSON → BOOL, or decimal-precision / scale errors on fields likehs_hd_ticket_ids,zendesk_requester_id,hs_task_send_default_reminder, or anycompanies.properties.*field):- HubSpot sometimes declares a property as
numberorbooleanbut returns values that cannot be cast to that type — for example, semicolon-separated IDs ("3092727991;3881228353;15895321999") in anumberfield, multi-value text in abooleanfield, or numbers beyond the declared precision. When that happens the connector emits the raw string, but because the published schema still saysnumber/boolean, strict destinations reject the record. - To resolve this, enable Treat dynamic number and boolean properties as strings (
treat_numbers_and_booleans_as_strings) in the source configuration. When this option is on, the connector declares every HubSpot dynamic property that would otherwise benumberorbooleanasstring, so the affected values land in the destination as strings rather than failing type conversion. - The toggle only affects HubSpot dynamic
properties.*fields. Static schema fields and non-property fields are not changed. - After enabling the toggle you must refresh both the schema and the data, otherwise the new string type will not reach the destination. In the Airbyte UI:
- Open the affected connection.
- Click Refresh source schema and save the updated catalog — the affected columns should now be
string. - Trigger a Refresh data sync (or clear the affected streams and run a new sync) so the destination tables are rewritten with the new column type and previously-rejected records are re-emitted as strings.
- The same steps apply if you later disable the toggle — refresh the schema and the data so the destination column types match the new catalog.
- HubSpot sometimes declares a property as
IP allow list
If you use Airbyte Cloud and your organization restricts access to specific IPs, add the Airbyte Cloud IP addresses to your allow list.
Reference
Config fields reference
Changelog
Expand to review
| Version | Date | Pull Request | Subject |
|---|---|---|---|
| 6.7.0 | 2026-06-11 | 76396 | Add treat_numbers_and_booleans_as_strings config toggle to coerce dynamic number/boolean properties to string |
| 6.6.1 | 2026-06-10 | 79636 | Add configurable property_history_lookback_window (minutes) to property history streams (deals, contacts, companies) to prevent silent record loss caused by cursor drift from HubSpot calculated properties. Clarify existing lookback_window field as CRM Search-specific. |
| 6.6.0 | 2026-06-08 | 71259 | Add association streams for standard and custom objects, including optional OAuth scopes needed to support them |
| 6.5.5 | 2026-04-28 | 76323 | Add failure_type classification to list_memberships error handler response filters |
| 6.5.4 | 2026-04-21 | 76848 | Fix OAuth optional_scopes to align with connector streams |
| 6.5.3 | 2026-04-21 | 76073 | Update CDK to pre-release with deadlock fix |
| 6.5.2 | 2026-04-21 | 76641 | Update dependencies |
| 6.5.1 | 2026-04-20 | 76395 | Emit listId as a string in the list_memberships stream, and skip lists whose objectTypeId is not active for the portal (for example, Leads) instead of failing the sync |
| 6.5.0 | 2026-04-14 | 75281 | Add new list_memberships stream via V3 Lists API |
| 6.4.4 | 2026-04-13 | 76276 | Rename "concurrent workers" to "concurrent threads" in connector spec |
| 6.4.3 | 2026-04-08 | 76149 | Added missing OAuth scopes crm.objects.users.read and settings.users.read for the users stream |
| 6.4.2 | 2026-04-06 | 76096 | Remove registry version overrides pinning to 6.3.1, fix stream count test assertions |
| 6.4.1 | 2026-04-03 | 75574 | Add oauth_connector_input_specification with granular scopes and optional_scopes |
| 6.4.0 | 2026-04-01 | 70920 | Add new stream Users |
| 6.3.5 | 2026-03-31 | 75665 | Update dependencies |
| 6.3.4 | 2026-03-30 | 75595 | Fixed HTTP 429 responses mapped to RETRY instead of RATE_LIMITED, enabling correct rate-limit handling |
| 6.3.3 | 2026-03-26 | 75452 | Fixed HTTP 401 errors retrying indefinitely for Private App Token authentication |
| 6.3.2 | 2026-03-17 | 74526 | Update dependencies |
| 6.3.1 | 2026-03-09 | 74410 | Promoting release candidate 6.3.1-rc.1 to a main version. |
| 6.3.1-rc.1 | 2026-03-03 | 74032 | fix(source-hubspot): use v3 properties API for CRM search streams |
| 6.3.0 | 2026-03-03 | 61703 | Add new stream account_details |
| 6.2.2 | 2026-02-24 | 73909 | Update dependencies |
| 6.2.1 | 2026-02-17 | 73491 | Update dependencies |
| 6.2.0 | 2026-03-03 | 61704 | Add new properties stream |
| 6.1.1 | 2026-02-10 | 70486 | Update dependencies |
| 6.1.0 | 2026-02-06 | 72906 | Promoting release candidate 6.1.0-rc.2 to a main version. |
| 6.1.0-rc.2 | 2026-02-03 | 72799 | Bump the CDK version which fixed a bug where streams without incremental showed a cursor |
| 6.1.0-rc.1 | 2025-12-09 | 69782 | Allow for user defined cursor field key in the configured catalog for incremental streams |
| 6.0.15 | 2025-11-25 | 70053 | Update dependencies |
| 6.0.14 | 2025-11-24 | 69803 | Add missing fields in Marketing Emails stream for Avro/Parquet conversions |
| 6.0.13 | 2025-11-19 | 69749 | Fix retrieving associations for CRMSearch streams |
| 6.0.12 | 2025-11-19 | 69203 | Add lookback window |
| 6.0.11 | 2025-11-18 | 69381 | Update dependencies |
| 6.0.10 | 2025-11-03 | 69145 | Promoting release candidate 6.0.10-rc.1 to a main version. |
| 6.0.10-rc.1 | 2025-10-30 | 68610 | Add APIBudget |
| 6.0.9 | 2025-10-29 | 69077 | Promoting release candidate 6.0.9-rc.1 to a main version. |
| 6.0.9-rc.1 | 2025-10-27 | 68665 | Improve performance following CDK release 7.4.1 |
| 6.0.8 | 2025-10-27 | 68662 | Promoting release candidate 6.0.8-rc.1 to a main version. |
| 6.0.8-rc.1 | 2025-10-22 | 63744 | Switch all CRMSearch streams to use incremental endpoint for server-side filtering, even during full refresh |
| 6.0.7 | 2025-10-21 | 68582 | Promoting release candidate 6.0.7-rc.1 to a main version. |
| 6.0.7-rc.1 | 2025-10-20 | 68159 | Upgrade to latest version of CDK 7.3.7 to get the bug fix for missing custom properties during incremental syncs |
| 6.0.6 | 2025-10-14 | 67911 | Update dependencies |
| 6.0.5 | 2025-10-07 | 67400 | Update dependencies |
| 6.0.4 | 2025-09-30 | 66409 | Update dependencies |
| 6.0.3 | 2025-09-25 | 66700 | Revert to 6.0.1 |
| 6.0.2 | 2025-09-15 | 65947 | Set fallback target type to 'string' for numbers and booleans |
| 6.0.1 | 2025-09-09 | 66100 | Update dependencies |
| 6.0.0 | 2025-09-02 | 65100 | Migrate Marketing Emails stream from deprecated v1 API to v3 API. Breaking change requires stream reset. This change also enables incremental syncs for marketing_emails stream. |
| 5.8.20 | 2025-08-25 | 65513 | Add missing datetime format |
| 5.8.19 | 2025-08-23 | 65327 | Update dependencies |
| 5.8.18 | 2025-08-09 | 64603 | Update dependencies |
| 5.8.17 | 2025-08-03 | 64197 | Update dependencies |
| 5.8.16 | 2025-07-26 | 63898 | Update dependencies |
| 5.8.15 | 2025-07-21 | 63341 | Bump memory on Discover to 1GB |
| 5.8.14 | 2025-07-19 | 63499 | Update dependencies |
| 5.8.13 | 2025-07-12 | 63115 | Update dependencies |
| 5.8.12 | 2025-07-08 | 62866 | Handle non-numeric values in fields with declared numeric type |
| 5.8.11 | 2025-07-07 | 62838 | Promoting release candidate 5.8.11-rc.1 to a main version. |
| 5.8.11-rc.1 | 2025-07-02 | 62481 | For CRMSearch streams, fix retry behavior for the underlying associations HttpRequester to retry 401 errors |
| 5.8.10 | 2025-06-28 | 62179 | Update dependencies |
| 5.8.9 | 2025-06-21 | 61842 | Update dependencies |
| 5.8.8 | 2025-06-14 | 60640 | Update dependencies |
| 5.8.7 | 2025-06-11 | 61543 | Fix pagination for contacts and other CRM Search streams when paginating past 10,000 records streams |
| 5.8.6 | 2025-06-10 | 61502 | Set cursor based pagination for CRM object streams |
| 5.8.5 | 2025-06-02 | 61326 | Additional change for millisecond float timestamps |
| 5.8.4 | 2025-05-30 | 61013 | Fix Typo |
| 5.8.3 | 2025-05-30 | 61007 | Bump memory on Check to 1600mi |
| 5.8.2 | 2025-05-29 | 60962 | Fix bug to allow millisecond timestamps coming in as a float string to be parsed into a datetime. |
| 5.8.1 | 2025-05-28 | 60937 | Retry 401 Unauthorized errors since token might have just expired. |
| 5.8.0 | 2025-05-28 | 60855 | Migrate to manifest-only |
| 5.7.0 | 2025-05-27 | 60919 | Promoting release candidate 5.7.0-rc.2 to a main version. |
| 5.7.0-rc.2 | 2025-05-23 | 60881 | Ignore 403 errors for dynamic streams to prevent sync failures |
| 5.7.0-rc.1 | 2025-05-22 | 60830 | Migrate CustomObjects streams |
| 5.6.0 | 2025-05-21 | 60338 | Migrate CRM search streams: contacts, deal_splits, leads, tickets |
| 5.5.0 | 2025-05-21 | 60812 | Migrate CRM search companies stream |
| 5.4.0 | 2025-05-20 | 59727 | Migrate CRM object streams: goals, product, line_items |
| 5.3.0 | 2025-05-16 | 60249 | Migrate engagements_calls, engagements_emails, engagements_meetings, engagements_notes, engagements_tasks to low code |
| 5.2.0 | 2025-05-15 | 60306 | Promoting release candidate 5.2.0-rc.1 to a main version. |
| 5.2.0-rc.1 | 2025-05-14 | 59127 | Migrate deals to low code |
| 5.1.0 | 2025-05-14 | 60276 | Promoting release candidate 5.1.0-rc.1 to a main version. |
| 5.1.0-rc.1 | 2025-05-13 | 58105 | Migrate deals_archived, forms, form_submissions, owners, owners_archived to low-code |
| 5.0.0 | 2025-05-12 | 59673 | Deprecate contacts_form_submissions, contacts_list_memberships, contacts_merged_audit streams which are not supported in Hubspot's V3 API. Update contact_lists to use V3 API. |
| 4.12.2 | 2025-05-09 | 59755 | Add missing cursor format for workflows stream state migration |
| 4.12.1 | 2025-05-10 | 59810 | Update dependencies |
| 4.12.0 | 2025-05-09 | 58592 | Migrate incremental streams: email_events, engagements, subscription_changes |
| 4.11.0 | 2025-05-07 | 59216 | Migrate workflows to low code |
| 4.10.0 | 2025-05-07 | 59195 | Migrate deal_pipelines to low code |
| 4.9.0 | 2025-05-07 | 58135 | Migrate campaigns to low code |
| 4.8.0 | 2025-05-06 | 59693 | Promoting release candidate 4.8.0-rc.1 to a main version. |
| 4.8.0-rc.1 | 2025-04-30 | 58092 | Migrate companies_property_history, contacts_property_history and deals_property_history to low code |
| 4.7.0 | 2025-04-30 | 59165 | Promoting release candidate 4.7.0-rc.2 to a main version. |
| 4.7.0-rc.2 | 2025-04-28 | 59118 | Add empty string state migration |
| 4.7.0-rc.1 | 2025-04-23 | 58083 | Migrate ticket_pipelines to low code |
| 4.6.4 | 2025-04-22 | 58138 | Use short-hand custom object type name path for custom object streams. |
| 4.6.3 | 2025-04-19 | 58226 | Update dependencies |
| 4.6.2 | 2025-04-18 | 58137 | Promoting release candidate 4.6.2-rc.1 to a main version. |
| 4.6.2-rc.1 | 2025-04-13 | 57534 | Migrate marketing_emails and email_subscriptions to low code |
| 4.6.1 | 2025-04-12 | 57694 | Update dependencies |
| 4.6.0 | 2025-04-11 | 57572 | Promoting release candidate 4.6.0-rc.1 to a main version. |
| 4.6.0-rc.1 | 2025-03-31 | 56919 | Update CDK to v6 |
| 4.5.6 | 2025-03-29 | 56647 | Update dependencies |
| 4.5.5 | 2025-03-26 | 56416 | Disabled blog_comment and all form-types for Forms and FormSubmissions stream |
| 4.5.4 | 2025-03-25 | 55822 | add userIdIncludingInactive to owners and owners_archived streams |
| 4.5.3 | 2025-03-24 | 55245 | Add conversionId to form_submissions schema |
| 4.5.2 | 2024-12-14 | 49141 | Improves Forms stream by adding the formTypes query parameter to support all form types. This enhancement also propagates to the FormSubmission stream. |
| 4.5.1 | 2025-03-22 | 53818 | Update dependencies |
| 4.5.0 | 2025-03-10 | 54177 | Add option to cast fields from stream json schema per list of fields |
| 4.4.9 | 2025-02-01 | 52729 | Update dependencies |
| 4.4.8 | 2025-01-25 | 52295 | Update dependencies |
| 4.4.7 | 2025-01-11 | 51146 | Update dependencies |
| 4.4.6 | 2025-01-04 | 50898 | Update dependencies |
| 4.4.5 | 2024-12-28 | 50669 | Update dependencies |
| 4.4.4 | 2024-12-21 | 50138 | Update dependencies |
| 4.4.3 | 2024-12-14 | 48984 | Update dependencies |
| 4.4.2 | 2024-12-10 | 48480 | Adds individual read scopes to LineItems Stream |
| 4.4.1 | 2024-11-25 | 48662 | Starting with this version, the Docker image is now rootless. Please note that this and future versions will not be compatible with Airbyte versions earlier than 0.64 |
| 4.4.0 | 2024-11-18 | 48548 | Promoting release candidate 4.4.0-rc.1 to a main version. |
| 4.4.0-rc.1 | 2024-11-18 | 48472 | Adds support to maintain use of legacy fields for Contacts, Deals, and DealsArchived streams: hs_lifecyclestage_{stage_id}_date, hs_date_entered_{stage_id}, hs_date_exited_{stage_id}, hs_time_in_{stage_id}. |
| 4.3.0 | 2024-11-15 | 44481 | Add Leads stream |
| 4.2.26 | 2024-11-04 | 48199 | Update dependencies |
| 4.2.25 | 2024-10-29 | 47028 | Update dependencies |
| 4.2.24 | 2024-10-12 | 46827 | Update dependencies |
| 4.2.23 | 2024-10-05 | 46494 | Update dependencies |
| 4.2.22 | 2024-09-28 | 46160 | Update dependencies |
| 4.2.21 | 2024-09-23 | 44899 | Fix incremental search to use primary key as placeholder instead of lastModifiedDate |
| 4.2.20 | 2024-09-21 | 45753 | Update dependencies |
| 4.2.19 | 2024-09-14 | 45018 | Update dependencies |
| 4.2.18 | 2024-08-24 | 43762 | Update dependencies |
| 4.2.17 | 2024-08-21 | 44538 | Fix issue with CRM search streams when they have no associations |
| 4.2.16 | 2024-08-20 | 42919 | Add support for Deal Splits |
| 4.2.15 | 2024-08-08 | 43381 | Fix associations retrieval for Engagements streams (calls, meetings, notes, tasks, emails) in Incremental with existing state |
| 4.2.14 | 2024-07-27 | 42688 | Update dependencies |
| 4.2.13 | 2024-07-20 | 42264 | Update dependencies |
| 4.2.12 | 2024-07-13 | 41766 | Update dependencies |
| 4.2.11 | 2024-07-10 | 41558 | Update dependencies |
| 4.2.10 | 2024-07-09 | 41286 | Update dependencies |
| 4.2.9 | 2024-07-08 | 41045 | Use latest CDK version possible |
| 4.2.8 | 2024-07-06 | 40923 | Update dependencies |
| 4.2.7 | 2024-06-25 | 40441 | Update dependencies |
| 4.2.6 | 2024-06-22 | 40126 | Update dependencies |
| 4.2.5 | 2024-06-17 | 39432 | Remove references to deprecated state method |
| 4.2.4 | 2024-06-10 | 38800 | Retry hubspot _parse_and_handle_errors on JSON decode errors |
| 4.2.3 | 2024-06-06 | 39314 | Added missing schema types for the Workflows stream schema |
| 4.2.2 | 2024-06-04 | 38981 | [autopull] Upgrade base image to v1.2.1 |
| 4.2.1 | 2024-05-30 | 38024 | Retry when attempting to get scopes |
| 4.2.0 | 2024-05-24 | 38049 | Add resumable full refresh support to contacts_form_submissions and contacts_merged_audit streams |
| 4.1.5 | 2024-05-17 | 38243 | Replace AirbyteLogger with logging.Logger |
| 4.1.4 | 2024-05-16 | 38286 | Added default schema normalization for the Tickets stream, to ensure the data types |
| 4.1.3 | 2024-05-13 | 38128 | contacts_list_memberships as semi-incremental stream |
| 4.1.2 | 2024-04-24 | 36642 | Schema descriptions and CDK 0.80.0 |
| 4.1.1 | 2024-04-11 | 35945 | Add integration tests |
| 4.1.0 | 2024-03-27 | 36541 | Added test configuration features, fixed type hints |
| 4.0.0 | 2024-03-10 | 35662 | Update Deals Property History and Companies Property History schemas |
| 3.3.0 | 2024-02-16 | 34597 | Make start date not required, sync all data from default value if it's not provided |
| 3.2.0 | 2024-02-15 | 35328 | Add mailingIlsListsIncluded and mailingIlsListsExcluded fields to Marketing emails stream schema |
| 3.1.1 | 2024-02-12 | 35165 | Manage dependencies with Poetry. |
| 3.1.0 | 2024-02-05 | 34829 | Add Contacts Form Submissions stream |
| 3.0.1 | 2024-01-29 | 34635 | Fix pagination for CompaniesPropertyHistory stream |
| 3.0.0 | 2024-01-25 | 34492 | Update marketing_emails stream schema |
| 2.0.2 | 2023-12-15 | 33844 | Make property_history PK combined to support Incremental/Deduped sync type |
| 2.0.1 | 2023-12-15 | 33527 | Make query string calculated correctly for PropertyHistory streams to avoid 414 HTTP Errors |
| 2.0.0 | 2023-12-08 | 33266 | Add ContactsPropertyHistory, CompaniesPropertyHistory, DealsPropertyHistory streams |
| 1.9.0 | 2023-12-04 | 33042 | Add Web Analytics streams |
| 1.8.0 | 2023-11-23 | 32778 | Extend PropertyHistory stream to support incremental sync |
| 1.7.0 | 2023-11-01 | 32035 | Extend the Forms stream schema |
| 1.6.1 | 2023-10-20 | 31644 | Base image migration: remove Dockerfile and use the python-connector-base image |
| 1.6.0 | 2023-10-19 | 31606 | Add new field aifeatures to the marketing emails stream schema |
| 1.5.1 | 2023-10-04 | 31050 | Add type transformer for Engagements stream |
| 1.5.0 | 2023-09-11 | 30322 | Unnest stream schemas |
| 1.4.1 | 2023-08-22 | 29715 | Fix python package configuration stream |
| 1.4.0 | 2023-08-11 | 29249 | Add OwnersArchived stream |
| 1.3.3 | 2023-08-10 | 29248 | Specify threadId in engagements stream to type string |
| 1.3.2 | 2023-08-10 | 29326 | Add primary keys to streams ContactLists and PropertyHistory |
| 1.3.1 | 2023-08-08 | 29211 | Handle 400 and 403 errors without interruption of the sync |
| 1.3.0 | 2023-08-01 | 28909 | Add handling of source connection errors |
| 1.2.0 | 2023-07-27 | 27091 | Add new stream ContactsMergedAudit |
| 1.1.2 | 2023-07-27 | 28558 | Improve error messages during connector setup |
| 1.1.1 | 2023-07-25 | 28705 | Fix retry handler for token expired error |
| 1.1.0 | 2023-07-18 | 28349 | Add unexpected fields in schemas of streams email_events, email_subscriptions, engagements, campaigns |
| 1.0.1 | 2023-06-23 | 27658 | Use fully qualified name to retrieve custom objects |
| 1.0.0 | 2023-06-08 | 27161 | Fix increment sync for engagements stream, 'Recent' API is used for recent syncs of last recent 30 days and less than 10k records, otherwise full sync if performed by 'All' API |
| 0.9.0 | 2023-06-26 | 27726 | License Update: Elv2 |
| 0.8.4 | 2023-05-17 | 26082 | Fixed bug with wrong parsing of boolean encoded like "false" parsed as True |
| 0.8.3 | 2023-05-31 | 26831 | Remove authSpecification from connector specification in favour of advancedAuth |
| 0.8.2 | 2023-05-16 | 26418 | Add custom availability strategy which catches permission errors from parent streams |
| 0.8.1 | 2023-05-29 | 26719 | Handle issue when state value is literally "" (empty str) |
| 0.8.0 | 2023-04-10 | 16032 | Add new stream Custom Object |
| 0.7.0 | 2023-04-10 | 24450 | Add new stream Goals |
| 0.6.2 | 2023-04-28 | 25667 | Fix bug with Invalid Date like 2000-00-00T00:00:00Z while settip up the connector |
| 0.6.1 | 2023-04-10 | 21423 | Update scope for DealPipelines stream to only crm.objects.contacts.read |
| 0.6.0 | 2023-04-07 | 24980 | Add new stream DealsArchived |
| 0.5.2 | 2023-04-07 | 24915 | Fix field key parsing (replace whitespace with uderscore) |
| 0.5.1 | 2023-04-05 | 22982 | Specified date formatting in specification |
| 0.5.0 | 2023-03-30 | 24711 | Add incremental sync support for campaigns, deal_pipelines, ticket_pipelines, forms, form_submissions, form_submissions, workflows, owners |
| 0.4.0 | 2023-03-31 | 22910 | Add email_subscriptions stream |
| 0.3.4 | 2023-03-28 | 24641 | Convert to int only numeric values |
| 0.3.3 | 2023-03-27 | 24591 | Fix pagination for marketing emails stream |
| 0.3.2 | 2023-02-07 | 22479 | Turn on default HttpAvailabilityStrategy |
| 0.3.1 | 2023-01-27 | 22009 | Set AvailabilityStrategy for streams explicitly to None |
| 0.3.0 | 2022-10-27 | 18546 | Sunsetting API Key authentication. Quotes stream is no longer available |
| 0.2.2 | 2022-10-03 | 16914 | Fix 403 forbidden error validation |
| 0.2.1 | 2022-09-26 | 17120 | Migrate to per-stream state. |
| 0.2.0 | 2022-09-13 | 16632 | Remove Feedback Submissions stream as the one using unstable (beta) API. |
| 0.1.83 | 2022-09-01 | 16214 | Update Tickets, fix missing properties and change how state is updated. |
| 0.1.82 | 2022-08-18 | 15110 | Check if it has a state on search streams before first sync |
| 0.1.81 | 2022-08-05 | 15354 | Fix Deals stream schema |
| 0.1.80 | 2022-08-01 | 15156 | Fix 401 error while retrieving associations using OAuth |
| 0.1.79 | 2022-07-28 | 15144 | Revert v0.1.78 due to permission issues |
| 0.1.78 | 2022-07-28 | 15099 | Fix to fetch associations when using incremental mode |
| 0.1.77 | 2022-07-26 | 15035 | Make PropertyHistory stream read historic data not limited to 30 days |
| 0.1.76 | 2022-07-25 | 14999 | Partially revert changes made in v0.1.75 |
| 0.1.75 | 2022-07-18 | 14744 | Remove override of private CDK method |
| 0.1.74 | 2022-07-25 | 14412 | Add private app authentication |
| 0.1.73 | 2022-07-13 | 14666 | Decrease number of http requests made, disable Incremental mode for PropertyHistory stream |
| 0.1.72 | 2022-06-24 | 14054 | Extended error logging |
| 0.1.71 | 2022-06-24 | 14102 | Removed legacy AirbyteSentry dependency from the code |
| 0.1.70 | 2022-06-16 | 13837 | Fix the missing data in CRM streams issue |
| 0.1.69 | 2022-06-10 | 13691 | Fix the URI Too Long issue |
| 0.1.68 | 2022-06-08 | 13596 | Fix for the property_history which did not emit records |
| 0.1.67 | 2022-06-07 | 13566 | Report which scopes are missing to the user |
| 0.1.66 | 2022-06-05 | 13475 | Scope crm.objects.feedback_submissions.read added for feedback_submissions stream |
| 0.1.65 | 2022-06-03 | 13455 | Discover only returns streams for which required scopes were granted |
| 0.1.64 | 2022-06-03 | 13218 | Transform contact_lists data to comply with schema |
| 0.1.63 | 2022-06-02 | 13320 | Fix connector incremental state handling |
| 0.1.62 | 2022-06-01 | 13383 | Add line items to deals stream |
| 0.1.61 | 2022-05-25 | 13381 | Requests scopes as optional instead of required |
| 0.1.60 | 2022-05-25 | 13159 | Use RFC3339 datetime |
| 0.1.59 | 2022-05-10 | 12711 | Ensure oauth2.0 token has all needed scopes in "check" command |
| 0.1.58 | 2022-05-04 | 12482 | Update input configuration copy |
| 0.1.57 | 2022-05-04 | 12198 | Add deals associations for quotes |
| 0.1.56 | 2022-05-02 | 12515 | Extra logs for troubleshooting 403 errors |
| 0.1.55 | 2022-04-28 | 12424 | Correct schema for ticket_pipeline stream |
| 0.1.54 | 2022-04-28 | 12335 | Mock time slep in unit test s |
| 0.1.53 | 2022-04-20 | 12230 | Change spec json to yaml format |
| 0.1.52 | 2022-03-25 | 11423 | Add tickets associations to engagements streams |
| 0.1.51 | 2022-03-24 | 11321 | Fix updated at field non exists issue |
| 0.1.50 | 2022-03-22 | 11266 | Fix Engagements Stream Pagination |
| 0.1.49 | 2022-03-17 | 11218 | Anchor hyperlink in input configuration |
| 0.1.48 | 2022-03-16 | 11105 | Fix float numbers, upd docs |
| 0.1.47 | 2022-03-15 | 11121 | Add partition keys where appropriate |
| 0.1.46 | 2022-03-14 | 10700 | Handle 10k+ records reading in Hubspot streams |
| 0.1.45 | 2022-03-04 | 10707 | Remove stage history from deals stream to increase efficiency |
| 0.1.44 | 2022-02-24 | 9027 | Add associations companies to deals, ticket and contact stream |
| 0.1.43 | 2022-02-24 | 10576 | Cast timestamp to date/datetime |
| 0.1.42 | 2022-02-22 | 10492 | Add date-time format to datetime fields |
| 0.1.41 | 2022-02-21 | 10177 | Migrate to CDK |
| 0.1.40 | 2022-02-10 | 10142 | Add associations to ticket stream |
| 0.1.39 | 2022-02-10 | 10055 | Bug fix: reading not initialized stream |
| 0.1.38 | 2022-02-03 | 9786 | Add new streams for engagements(calls, emails, meetings, notes and tasks) |
| 0.1.37 | 2022-01-27 | 9555 | Getting form_submission for all forms |
| 0.1.36 | 2022-01-22 | 7784 | Add Property History Stream |
| 0.1.35 | 2021-12-24 | 9081 | Add Feedback Submissions stream and update Ticket Pipelines stream |
| 0.1.34 | 2022-01-20 | 9641 | Add more fields for email_events stream |
| 0.1.33 | 2022-01-14 | 8887 | More efficient support for incremental updates on Companies, Contact, Deals and Engagement streams |
| 0.1.32 | 2022-01-13 | 8011 | Add new stream form_submissions |
| 0.1.31 | 2022-01-11 | 9385 | Remove auto-generated properties from Engagements stream |
| 0.1.30 | 2021-01-10 | 9129 | Created Contacts list memberships streams |
| 0.1.29 | 2021-12-17 | 8699 | Add incremental sync support for companies, contact_lists, contacts, deals, line_items, products, quotes, tickets streams |
| 0.1.28 | 2021-12-15 | 8429 | Update fields and descriptions |
| 0.1.27 | 2021-12-09 | 8658 | Fix config backward compatibility issue by allowing additional properties in the spec |
| 0.1.26 | 2021-11-30 | 8329 | Remove 'skip_dynamic_fields' config param |
| 0.1.25 | 2021-11-23 | 8216 | Add skip dynamic fields for testing only |
| 0.1.24 | 2021-11-09 | 7683 | Fix name issue 'Hubspot' -> 'HubSpot' |
| 0.1.23 | 2021-11-08 | 7730 | Fix OAuth flow schema |
| 0.1.22 | 2021-11-03 | 7562 | Migrate Hubspot source to CDK structure |
| 0.1.21 | 2021-10-27 | 7405 | Change of package import from urllib to urllib.parse |
| 0.1.20 | 2021-10-26 | 7393 | Hotfix for split_properties function, add the length of separator symbol ,(%2C in HTTP format) to the checking of the summary URL length |
| 0.1.19 | 2021-10-26 | 6954 | Fix issue with getting 414 HTTP error for streams |
| 0.1.18 | 2021-10-18 | 5840 | Add new marketing emails (with statistics) stream |
| 0.1.17 | 2021-10-14 | 6995 | Update discover method: disable quotes stream when using OAuth config |
| 0.1.16 | 2021-09-27 | 6465 | Implement OAuth support. Use CDK authenticator instead of connector specific authenticator |
| 0.1.15 | 2021-09-23 | 6374 | Use correct schema for owners stream |
| 0.1.14 | 2021-09-08 | 5693 | Include deal_to_contact association when pulling deal stream and include contact ID in contact stream |
| 0.1.13 | 2021-09-08 | 5834 | Fix array fields without items property in schema |
| 0.1.12 | 2021-09-02 | 5798 | Treat empty string values as None for field with format to fix normalization errors |
| 0.1.11 | 2021-08-26 | 5685 | Remove all date-time format from schemas |
| 0.1.10 | 2021-08-17 | 5463 | Fix fail on reading stream using API Key without required permissions |
| 0.1.9 | 2021-08-11 | 5334 | Fix empty strings inside float datatype |
| 0.1.8 | 2021-08-06 | 5250 | Fix issue with printing exceptions |
| 0.1.7 | 2021-07-27 | 4913 | Update fields schema |