HubSpot to BigQuery: How to Sync Your Data

Sync HubSpot into BigQuery with Airbyte. Server-side versus client-side incremental, the account-wide daily rate limit, and configuring association streams.

Summarize with AI:

Syncing HubSpot to BigQuery is straightforward to set up and easy to make expensive, because HubSpot's connector has two different kinds of incremental sync and only one of them saves you any API calls.

Server-side incremental means the API returns only records changed since your last sync. Client-side incremental means the API returns everything and the connector throws away what it has already seen. Both give you correct data in BigQuery. Only the first reduces what you spend against HubSpot's limits. Which one a stream uses is a property of the stream, not a setting you choose, so the useful move is knowing that the distinction exists before you wonder why an incremental sync is still slow.

CapabilitySupportedWhat it means for this pipeline
Incremental modesTwo kindsClient-side filtering still pulls the full dataset from the API
Daily rate limitAccount-wideShared across every app connected to the same HubSpot account
Custom propertiesSupportedThey make syncs measurably longer, so prune unused ones
Association streamsConfigurableDefine from and to objects to generate a dedicated stream
Archived records90 daysHubSpot's recycle bin retention caps what can be recovered

The daily limit is not yours alone

HubSpot's burst limit applies per app, but the daily limit is shared across every app connected to the account. Your Airbyte sync, your marketing automation tool, the internal script somebody wrote two years ago and the enrichment vendor your sales team bought are all drawing from the same daily budget.

This turns a technical setting into an organisational one. Before scheduling hourly syncs of every object, find out what else is talking to HubSpot. Custom properties matter here too: the more of them you have, the longer syncs take, because each one is more data per record across every request. If your HubSpot instance has accumulated properties nobody uses, cleaning them up is a genuine performance improvement rather than tidiness.

Associations need to be asked for

The relationships between HubSpot objects are usually the point of the warehouse. Which deals belong to which company, which tickets belong to which contact. The connector lets you define association streams explicitly: pick a from object and a to object, optionally name the stream, and it reads IDs from the source object and emits one record per association. Leave the name empty and you get a predictable generated name based on the two objects.

Two operational details. These streams sync incrementally, fetching associations only for records modified since the last sync, which keeps them cheap. And after adding or editing association settings you must refresh the source schema before the generated streams appear in the catalogue. Private App authentication needs read scopes on both objects in the relationship, and custom objects need the custom object read scope plus another schema refresh.

When records go missing

A known behaviour worth knowing in advance: incremental syncs on the search-backed streams, which include deals, companies, contacts, tickets, leads and the engagement streams, can miss records because of irregularities in HubSpot's API. The connector offers a lookback window to compensate, re-fetching a configurable number of minutes before the previous sync state.

If your BigQuery counts do not match what HubSpot's own reports say, this is the first thing to try. Use an append and deduped sync mode so that re-reading the overlap does not create duplicate rows. Separately, note that HubSpot keeps archived records in its recycle bin for 90 days, which sets a hard floor on how far back deletions can be reconstructed. On the BigQuery side, supply a project, a dataset, a service account with dataset-level write access, and Cloud Storage staging for anything beyond small volumes.

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. You get correct data but no reduction in API usage or transfer time.

Records are missing from BigQuery. What should I change?

Configure a lookback window in the source settings. It re-fetches a window of data before the previous sync state to catch records HubSpot's search API returned inconsistently.

Why can I not see my custom objects?

Grant the custom object read scope on your Private App or OAuth application, then refresh the source schema so the new streams appear in the catalogue.

Does my Airbyte sync compete with other HubSpot integrations?

Yes for the daily limit, which is shared across all apps on the account. The burst limit is per app, so bursts are isolated but daily budget is not.

Get your HubSpot data into BigQuery

Find out what else is using your HubSpot daily budget before you pick a schedule, define the association streams you need rather than hoping relationships fall out of the object streams, set a lookback window on the search-backed streams, and prune custom properties nobody queries. The connector is capable and the constraints are almost all on HubSpot's side.

For the other major CRM and its very different rate limit behaviour, see Salesforce to PostgreSQL. For Microsoft's equivalent stack, which uses genuine change tracking, see Microsoft Dataverse to BigQuery.

Start syncing now →

Integrate with 600+ apps using Airbyte

Move data from 600+ sources into warehouses, lakes, and beyond. Set up pipelines in minutes with pre-built connectors and the Connector Builder.