HubSpot to BigQuery integration for analytics-ready CRM data
The HubSpot to BigQuery integration from Adapters loads contacts, companies, deals, and engagements from the HubSpot CRM API into partitioned BigQuery tables on an incremental schedule, so pipeline, attribution, and funnel models run on a full history instead of a manual export. Field mapping is no-code, so try it against sample records in the live demo.
No credit card required.
Field mapping auto-plugged · tap a port to rewire
Plug a source port into
Transform on this cable
JSON in
JSON out
5 sample records ready
Last updated September 2026
What running HubSpot to BigQuery by hand costs you
- The HubSpot API paginates and enforces per-second and daily limits, so backfilling every contact, company, and deal into BigQuery by hand is slow to script and easy to throttle.
- Deals move stages and properties change after creation, so a naive nightly dump into BigQuery misses the edits that funnel and velocity models depend on.
- Blending HubSpot pipeline with product usage and ad spend for real attribution needs a partitioned warehouse table, not a folder of exported reports.
The field mapping, out of the box
These cables are pre-wired when you pick the pair. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.
Input / HUBSPOT
Output / BIGQUERY
Transforms included
Incremental loads use the hs_lastmodifieddate watermark so stage moves and property edits flow through on the next run; HubSpot object ids become stable keys, amount properties cast to BigQuery NUMERIC, epoch-millisecond timestamps become TIMESTAMP in UTC, tables partition by modified date, and writes MERGE on the object id so pipeline and attribution models read one deduplicated history.
HubSpot to BigQuery in depth
The HubSpot side of this pipeline is governed by rate limits and the BigQuery side by load-job quotas. Neither is generous enough to ignore, and both are easy to design around once you know the numbers. Read from HubSpot and Google Cloud documentation on 20 August 2026.
Batch the reads and keep Search out of the loop
HubSpot private apps get 100 requests per 10 seconds on Free and Starter and 190 on Professional and Enterprise, against daily account totals of 250,000, 625,000 and 1,000,000. Batch endpoints move 100 records per call, which is the difference between a backfill that finishes before breakfast and one that does not finish. The CRM Search API is a separate and stricter ceiling at 5 requests per second, capped at 200 records per page and 10,000 results per query, so resolving IDs one record at a time throttles the whole pipeline. Detail in the HubSpot API rate limits guide.
Load jobs are capped per table per day, and it is lower than you think
BigQuery allows 1,500 load jobs per table per day and 100,000 per project per day. A pipeline that writes a load job every minute for a single contacts table exhausts that in just over 24 hours of operation, and the next job fails with a quota error rather than queueing. Micro-batch to something like every 10 or 15 minutes, or use the Storage Write API for genuinely streaming needs. A single load job can carry up to 15 TB and may run for up to 6 hours, so batching larger and less often is almost always the right trade.
Batch loads are free, which changes the cost model
Batch load jobs run on a shared slot pool at no charge, so the cost of this pipeline sits in storage and in the queries your analysts run, not in ingestion. That is worth knowing before anybody proposes streaming inserts for a CRM sync that nobody queries in real time. Streaming is billed, batch loading is not, and HubSpot data almost never justifies the difference.
File and row ceilings that stop a backfill
CSV and newline-delimited JSON have a maximum row size of 100 MB, and a compressed CSV or ndJSON file is capped at 4 GB against 5 TB uncompressed. HubSpot rich text and notes properties can be large, so a single pathological record can fail a load that ran fine for months. Tables are capped at 10,000 columns, which sounds generous until somebody proposes one column per HubSpot property across a portal with heavy customization.
Partition and cluster on the columns your queries actually filter
Partition the deals table by close date or last modified date and cluster by pipeline and stage. Partitioning is what stops every funnel query scanning the full history, and on a CRM table that grows monotonically the saving compounds every month. Getting this wrong is not a correctness bug, it is a bill, and it shows up as a query cost that rises steadily while the data volume looks flat.
HubSpot properties change shape, so decide the schema policy up front
Custom properties get added, renamed and retyped by people who do not know a warehouse is reading them. Two workable answers: a wide typed table you evolve deliberately, or a narrow table with the record ID, the load timestamp and the raw payload in a JSON column that you unnest in a view. The second absorbs schema drift without a failed load, at the cost of query verbosity. The answer that does not work is a wide table nobody owns, which fails on the first renamed property and gets fixed by whoever is on call.
Use MERGE for upserts, and deduplicate on ingestion timestamp
Append-only loading is simpler and gives you an audit trail, but every downstream model then has to pick the latest row per object ID. Either MERGE into a current-state table on the HubSpot object ID, or keep the append log and build a view that takes the row with the greatest ingestion timestamp per ID. Choose one and apply it to every object. Mixing the two across contacts and deals is how two dashboards end up disagreeing about the same pipeline.
Watch the timestamp semantics
HubSpot returns many timestamps as epoch milliseconds in UTC. BigQuery TIMESTAMP is timezone-aware and DATETIME is not, so casting an epoch into DATETIME strips the zone and any later comparison against a TIMESTAMP column is quietly wrong. Standardize on TIMESTAMP for anything ingested, and convert to a local date only in the presentation layer where the business definition of a day is actually decided.
How it goes live
Three steps, minutes end to end, covered by flat data integration pricing from $49 a month.
STEP 01
Pick the pair
Connect HubSpot and BigQuery with scoped credentials. About a minute each.
STEP 02
Confirm the mapping
The cables above are pre-wired. Adjust any field, preview the transform on sample records, done.
STEP 03
Schedule the sync
Hourly down to every minute, with retries, alerting, and a full log on every run.
Prefer to understand the moving parts first? Our long-form guide to the HubSpot to BigQuery guide covers the field-by-field detail, the failure cases, and what changes at volume.
HubSpot to BigQuery sync: common questions
How do I connect HubSpot to BigQuery?
Authorize HubSpot once, select the objects you need (contacts, companies, deals, engagements), map the properties onto BigQuery columns, and pick a sync interval. Adapters paginates the CRM API within its rate limits, writes into date-partitioned tables and merges on the HubSpot object id, so re-running a load does not duplicate deals.
Is there a HubSpot BigQuery connector?
HubSpot does not ship a native BigQuery connector, so this runs through a third-party tool or your own job against the CRM API. The practical difference between options is custom property support: HubSpot portals accumulate hundreds of custom properties, and a connector that only carries the standard set leaves the interesting columns behind.
How should HubSpot data be partitioned in BigQuery?
Partition on the record modified date and cluster on the object id or pipeline. HubSpot tables are read most often as time slices (deals created this quarter, engagements last month), so a date partition cuts the bytes scanned on almost every query. Without partitioning, a wide contacts table scans in full every time a dashboard refreshes.
Why do HubSpot deal counts differ between BigQuery and the CRM?
Usually deletion and stage movement. HubSpot deals get deleted or merged, and an append-only pipeline keeps the old row forever. Deals also move stages, so a snapshot taken nightly misses intra-day transitions. Merge on the object id, carry the archived flag through, and count from the current state rather than from every row ever loaded.
How does the HubSpot to BigQuery sync work?
The HubSpot to BigQuery integration from Adapters loads contacts, companies, deals, and engagements from the HubSpot CRM API into partitioned BigQuery tables on an incremental schedule, so pipeline, attribution, and funnel models run on a full history instead of a manual export. Field mapping is no-code, so try it against sample records in the live demo.
Is there a prebuilt HubSpot connector for BigQuery?
Yes. This HubSpot to BigQuery connector ships prebuilt: the field mapping is wired the moment you pick the pair, transforms are included, and you can try it against sample records in the live demo. No code or engineering sprint required.
How much does the HubSpot BigQuery integration cost?
Pricing is flat and monthly: Starter at $49, Growth at $149, Scale at $399. Every plan includes this pair, visual field mapping, and per-record logs. There are no per-task or per-row fees, so the bill stays the same as volume grows.
How often can Adapters sync HubSpot to BigQuery?
Hourly on Starter, every 5 minutes on Growth, and down to every minute on Scale. Failed records retry automatically with backoff, and alerting plus a full per-record log come standard on every run.
Do I need to write code to connect HubSpot and BigQuery?
No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Incremental loads use the hs_lastmodifieddate watermark so stage moves and property edits flow through on the next run; HubSpot object ids become stable keys, amount properties cast to BigQuery NUMERIC, epoch-millisecond timestamps become TIMESTAMP in UTC, tables partition by modified date, and writes MERGE on the object id so pipeline and attribution models read one deduplicated history.
More pairs from the API connector library
Browse the full api connector library, or request a pair you do not see.
HubSpot and BigQuery, finally in agreement
Map the pair once and let it sync on schedule. Flat price from $49 a month, no per-task fees.
No credit card required.