Hubspot to Snowflake: How to Move Your Data
Move HubSpot into Snowflake with Airbyte. Server-side versus client-side incremental, the account-wide rate limit, and why search-backed streams miss records.

Moving HubSpot into Snowflake is how the commercial picture stops being three systems that disagree. HubSpot knows about deals and marketing activity, your product knows whether those customers use anything, and your billing system knows whether they paid. Every question worth asking spans at least two of them.
Nearly all the constraints sit on HubSpot's side. One of them decides whether your rate limit budget goes further or not at all, and another explains why records occasionally go missing from streams nobody suspects.
HubSpot to Snowflake at a glance:
Why move data from HubSpot to Snowflake?
Two situations account for most of these pipelines.
The first is joining. Answering whether marketing sourced pipeline actually converts, or which segments are profitable after support cost, needs CRM data next to data HubSpot has never seen. A warehouse is where those meet and where the definitions get settled once.
The second is analysis HubSpot's reporting cannot do: multi-year trends, custom attribution, cohort definitions your team argues about. If you only need standard CRM reports, HubSpot produces them and this pipeline earns you little.
What do you need before you start?
Two credentials items and an agreement with people outside your team:
A Private App or OAuth application. With read scopes on every object you intend to sync. Association streams need read scopes on both objects in the relationship, and custom objects need the custom object read scope. The HubSpot source documentation lists them.
An agreed share of the daily API budget. The burst limit is per app, so a surge from your sync will not immediately throttle anyone else. The daily limit belongs to the HubSpot account and every connected application draws from it, so find out what else talks to HubSpot before choosing a schedule.
A list of the relationships that matter. Associations between objects do not fall out of the object streams on their own, and defining them is a configuration step. Contacts to companies and deals to companies cover most cases.
Snowflake objects and a role. A warehouse, database, schema and a role able to create tables in that schema. The smallest warehouse is ample, since CRM volumes are modest by warehouse standards.
If your organisation restricts inbound traffic by IP, add the Airbyte Cloud IP addresses to the allow list on the Snowflake side before you begin.
How do you build a HubSpot to Snowflake pipeline in Airbyte?
Step 1: Decide your objects and associations
List the objects your analysts need, and separately list the relationships between them that matter. Those relationships are a configuration step rather than something you can add later without thought, and granting the scopes for both sides at the same time saves a return trip.
Step 2: Configure the HubSpot source
Click Sources in the left navigation, then New Source, and select HubSpot, following adding a source. Authenticate, set a start date, and define each association stream by naming a from object and a to object. Then refresh the source schema, which is the step people forget when a stream they configured stubbornly fails to appear.
Step 3: Configure the Snowflake destination
Click Destinations, then New Destination, and select Snowflake, following adding a destination. Supply the account identifier, warehouse, database, schema and role. Put commercial sources in a shared schema so joining CRM to billing and product data is straightforward rather than a cross-schema exercise.
Step 4: Set a lookback window and deduplicate
Click Connections, then New connection, select your streams and a deduplicating incremental sync mode. Set a lookback window if you sync the search-backed streams, which include deals, companies, contacts, tickets, leads and the engagement streams.
Deduplication is what makes that lookback free, since re-reading an overlapping period leaves no duplicate rows behind.
Why is my incremental sync not saving any API calls?
Because incremental means two different things depending on the stream. Server-side incremental asks HubSpot for records changed since the last sync, and the API returns only those. Client-side incremental asks for everything, receives everything, and discards what the connector has already seen.
Both produce correct data in Snowflake. Only the first reduces what you spend against the account's daily budget. Which one a stream uses is a property of that stream rather than a setting you choose, so the value of knowing this is diagnostic: when an incremental sync is unexpectedly slow, this is usually why.
Association streams are the pleasant exception. They sync incrementally, fetching associations only for records modified since the last sync, which makes them cheap against your rate limit and a good reason to model relationships properly rather than deriving them later.
Why would records go missing from the deals stream?
Because several of the most important streams are backed by HubSpot's search endpoint, and that endpoint can omit records due to irregularities in the API. Deals, companies, contacts, tickets, leads and the engagement streams are all in this group, which is to say most of what you came for.
The gap is not large and it is not announced. A deal that should have appeared simply does not, and because CRM data is naturally uneven, nobody notices one missing record among hundreds until a pipeline report disagrees with what the sales team believes.
A lookback window is the remedy, because re-reading a period gives the endpoint another chance to return what it missed. Against a deduplicating destination that costs a marginally longer sync and nothing else, which makes it one of the cheapest insurance policies available on any source in this series.
Frequently asked questions
Why is my incremental HubSpot sync still slow?
Some streams use client-side incremental, where the API returns everything and the connector filters locally. The data is correct but there is no reduction in API usage or transfer time.
Why are records missing from the deals stream?
The search-backed streams can miss records due to irregularities in HubSpot's API. Set a lookback window, which is free against a deduplicating destination.
Does my sync compete with other HubSpot integrations?
For the daily limit, yes. It is shared across every app on the account. The burst limit is per app, so bursts are isolated but daily budget is not.
Why is my association stream missing?
Associations need read scopes on both objects in the relationship. Grant both, then refresh the source schema.
Can I do this without writing code?
Yes. The setup above is entirely UI-driven. You will want Snowflake views resolving owner and pipeline identifiers and defining your pipeline metrics, which is short SQL.
Get your HubSpot data into Snowflake
Agree your share of the account's daily API budget before choosing a schedule, define the association streams you need with scopes on both sides, and set a lookback window on the search-backed streams because missing records are quiet and the fix is nearly free.
Airbyte's connector catalog includes 700+ pre-built connectors, so CRM data can sit beside product and billing sources in one warehouse. For the same source in another warehouse, see HubSpot to BigQuery, and for another CRM in the same warehouse, Salesforce to Snowflake.
Integrate with 700+ apps using Airbyte
Move data from 700+ sources into warehouses, lakes, and beyond. Set up pipelines in minutes with pre-built connectors and the Connector Builder.
