HubSpot to BigQuery: How to Sync Your Data

Move HubSpot into BigQuery with Airbyte. Server-side versus client-side incremental, the account-wide rate limit, association streams and lookback windows.

Summarize with AI:

Moving HubSpot into BigQuery 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, and every question worth asking spans at least two of them.

This guide covers the managed path with Airbyte. Nearly all the constraints here are on HubSpot's side, and one of them is a distinction in how the connector syncs incrementally that determines whether your rate limit budget goes further or not at all.

HubSpot to BigQuery at a glance:

CapabilitySupportedWhat it means for this pipeline
Incremental modesTwo kindsClient-side filtering still pulls the full dataset from the API
Daily rate limitAccount-wideShared with every other app connected to the account
Association streamsConfigurableDefine from and to objects to generate a dedicated stream
Search-backed streamsNeed a lookbackThey can miss records due to API irregularities
Dataset locationImmutableMatch it to the datasets you intend to join against

Why move data from HubSpot to BigQuery?

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 the only place that join happens.

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, and two agreements 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.

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 pruned set of custom properties. The more properties an object carries, the more data comes back on every record on every request. HubSpot instances accumulate properties the way garages accumulate paint tins, and removing ones nobody queries is a genuine performance improvement.

A BigQuery service account and dataset. With the BigQuery User and BigQuery Data Editor roles. Set the dataset location to match your product and billing datasets, since it cannot be changed after creation and joining is the point.

If your organisation restricts inbound traffic by IP, add the Airbyte Cloud IP addresses to the allow list before you begin.

How do you build a HubSpot to BigQuery 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 do not fall out of the object streams on their own, and defining them is a configuration step rather than something you can add later without thought. Contacts to companies and deals to companies cover most cases.

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 BigQuery destination

Click Destinations, then New Destination, and select BigQuery, following adding a destination. Supply the project, dataset and service account key. Batched standard inserts is the default and is adequate for most accounts, since CRM data is modest by warehouse standards.

Step 4: Create the connection and set a lookback window

Click Connections, then New connection, select your streams and a deduplicating incremental sync mode. Set a lookback window if you are syncing the search-backed streams, which include deals, companies, contacts, tickets, leads and the engagement streams, because those can miss records due to irregularities in HubSpot's API.

Deduplication is what makes that lookback free. Widening it against a streaming destination republishes records consumers must handle, and against a warehouse the overlap simply collapses on the way in.

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 BigQuery. 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.

How should you model HubSpot data in BigQuery?

Start with the joins that turn identifiers into meaning. Deals reference owners, stages and pipelines by ID, and a view resolving those into names is the first thing to build. It is the difference between a dataset analysts use and one they ask you about.

Then the association tables, which are what let you answer questions across objects. A deal joined to its company and that company joined to your billing records is the chain most of this dataset's value depends on, and building it once saves every analyst rediscovering it.

Finally, define your pipeline metrics in one place. Win rate, average cycle time and stage conversion are derived measures rather than fields, and two teams computing them slightly differently causes more disagreement than any pipeline fault.

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.

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.

How do I get deal and company relationships into BigQuery?

Define an association stream with the from and to objects, grant read scopes on both, then refresh the source schema so the generated stream appears in the catalogue.

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.

Can I do this without writing code?

Yes. The setup above is entirely UI-driven. You will want BigQuery views resolving identifiers and defining your pipeline metrics, which is short SQL.

Get your HubSpot data into BigQuery

Agree your share of the account's daily API budget before choosing a schedule, define the association streams you need rather than hoping relationships appear, prune custom properties nobody queries, and set a lookback window on the search-backed streams.

Airbyte's connector catalog includes 600+ pre-built connectors, so CRM data can sit beside product and billing sources in one warehouse. For the same source in a columnar engine, see HubSpot to ClickHouse, and for payment data alongside it, Stripe to BigQuery.

Start syncing now →

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.