HubSpot to BigQuery

Sync HubSpot deals, contacts, companies, pipelines, engagements and marketing data into BigQuery, and keep them current with incremental syncs. Weld lands 61 HubSpot tables, including association tables and property history, so pipeline and funnel reports are a SQL query away.

4.8 on G2
HubSpotSource
WeldWeld
Google BigQueryWarehouse

Checked against Weld and vendor docs on

Weld · New sync
HubSpotSourceHubSpotConnected
Tables to sync
  • deal87 cols
  • deal_property_history7 cols
  • contact244 cols
  • owner9 cols
  • user8 cols
  • company134 cols
  • Extract
  • Load
  • Keep in sync
Google BigQueryDestinationGoogle BigQueryReady
hubspot dataset
  • hubspot.dealSynced
  • hubspot.deal_property_historySyncing
  • hubspot.contactSynced
  • hubspot.ownerSynced
  • hubspot.userSynced
  • hubspot.companySynced
HubSpot tables
47
fields, typed
1,306
relationships kept
10
agent context included
MCP

Trusted by data and AI teams

  • Flatpay
  • Holafly
  • eComplete
  • Dishoom
  • Danish Endurance
  • Female Invest
  • Son of a Tailor
  • Onomondo
  • Medik8
  • Pas Normal Studios
Options

Three ways to get HubSpot data into BigQuery

Google has a HubSpot transfer that is free while it is in Preview, and HubSpot has its own BigQuery app in beta for Data Hub Enterprise customers. Both are worth a look. The questions are support, which subscription you are on, and which tables you need.

B

BigQuery Data Transfer Service

Best for
Trying HubSpot data in BigQuery at no cost
Effort
Medium: create a HubSpot private app with about 30 scopes, then a transfer
Freshness
Scheduled or on demand
Good to know
In Preview, so offered as is with limited support, and free while it stays in Preview. Supports custom objects. Authenticates with a private app access token only.
H

HubSpot's BigQuery app

Best for
Companies on HubSpot Data Hub Enterprise
Effort
Low: install from the HubSpot marketplace
Freshness
Export at a frequency you set
Good to know
Built by HubSpot and labelled beta. Exports objects, custom objects, events and associations to BigQuery, and imports BigQuery data into the CRM. Export needs Data Hub Enterprise.

Weld

Best for
Reporting and agents on HubSpot data next to your other sources
Effort
Low: authorise, pick tables, choose a schedule
Freshness
Incremental syncs on your schedule
Good to know
OAuth setup with a Super Admin user, 61 tables with associations and property history, and reverse ETL back into HubSpot.
How it works

How to sync HubSpot to Google BigQuery with Weld.
In the app, with the API or an agent.

Weld · Data warehouse
Google BigQueryData warehouseGoogle BigQueryConnected
Data locationChosen when you connect
CredentialsService account or key, stored encrypted
Schema

What lands in Google BigQuery
Every HubSpot table, keys intact.

CRM objects land with their HubSpot properties as columns prefixed properties_, and relationships land as separate association tables. Most sales reporting starts from these.

Open the schema explorer
  • deal87 columns
    • deal_idPK→ deallong
    • properties_amountdouble
    • properties_amount_in_home_currencydouble
    • properties_closed_lost_reasonstring
    • properties_closed_won_reasonstring

    One row per deal, keyed on deal_id, with every deal property as a properties_ column and an archived flag.

  • deal_property_history7 columns
    • deal_id→ deallong
    • propertystring
    • valuestring
    • timestampdate
    • source_typestring

    Changes to deal properties over time, with the value, timestamp and source. Use it for stage progression and time in stage.

  • pipeline_stages

    Stage labels, order, probability and whether the stage is closed. Maps the stage IDs stored on deals to readable names.

  • deal_company

    Links deals to companies. deal_contact does the same for contacts, and similar tables cover tickets and line items.

  • contact244 columns
    • contact_idPK→ contactlong
    • properties_company_sizestring
    • properties_date_of_birthstring
    • properties_days_to_closedouble
    • properties_degreestring

    One row per contact, keyed on contact_id, with contact properties as properties_ columns.

  • owner9 columns
    • owner_id→ ownerstring
    • user_id→ userint
    • emailstring
    • first_namestring
    • last_namestring

    HubSpot users who own records, with name and email. Join it to owner properties to report per rep.

All 47 tables
  • owner
  • user
  • contact
  • company
  • deal
  • line_item
  • product
  • engagement
  • subscription_change
  • company_property_history
  • contact_property_history
  • deal_property_history
  • line_item_property_history
  • product_property_history
  • subscription
  • owner_team
  • team_user
  • team
  • call
  • ticket
  • marketing_email_v3
  • leads
  • form
  • course
  • email_event
  • property
  • conversation
  • list
  • pipeline_stage
  • engagement_meeting
  • and 17 more
Example query

Deals entering each pipeline stage per month.
In Google BigQuery SQL.

Runs in BigQuery against the tables Weld lands, here in a dataset named hubspot. It reads stage changes from deal property history and turns stage IDs into labels.

Google BigQuery · query
1select2  date_trunc(h.timestamp, month) as month,3  s.label as stage,4  count(distinct h.deal_id) as deals_entered5from hubspot.deal_property_history as h6join hubspot.pipeline_stages as s on s.stage_id = h.value7where h.property = 'dealstage'8group by month, stage9order by month desc, deals_entered desc
Weld MCP server

Ask your agent.
It queries Google BigQuery for you.

Connect Claude, Cursor, ChatGPT or your own agent to Weld over MCP. It reads the HubSpot context, finds the tables it needs and runs the query in Google BigQuery.

Claude CodeOpus 5
>

How many owner rows do we have per owner? Use our HubSpot data in Google BigQuery.

Reading the HubSpot context first, so the query uses the right tables and keys.

●weld·search_available_references
⎿raw.hubspot.owner
raw.hubspot.owner
+ 45 more HubSpot tables
●weld·get_reference_schema
⎿owner · 9 columns
joins owner on owner_id
●weld·run_query
⎿select j.id, count(*) from {{raw.hubspot.owner}} o
join {{raw.hubspot.owner}} j on o.owner_id = j.id
group by 1
submitted
●weld·get_query_status
⎿DONE
●weld·get_query_result
⎿rows returned
✓Answered from HubSpot data in Google BigQuery
>Ask about your HubSpot data
Under the hood

Things to know.
Before you sync HubSpot.

Reverse ETL

ELT vs. reverse ETL: HubSpot and Google BigQuery

ELT (Extract, Load, Transform) moves data from HubSpot into Google BigQuery for analysis. This is the approach shown on this page, and the one to use for dashboards, reports, and data models.

Reverse ETL works the other direction: it pushes enriched data from Google BigQuery back into HubSpot. For example, you could sync computed lead scores or customer segments from your warehouse into HubSpot to personalize outreach.

Weld supports both directions, so you can build a complete data loop between HubSpot and Google BigQuery.

Google BigQuery to HubSpot
Archived records are included
Weld syncs archived HubSpot records too, so tables like deal and company carry an archived column. Filter on it, or totals will include records your team has removed.
Properties become columns
Each HubSpot property lands as its own column prefixed properties_, including custom properties. New properties add columns, so select the columns you need in models rather than relying on select star.
Associations live in their own tables
A deal linked to three contacts has three rows in deal_contact. Join through the association tables, and count distinct IDs to avoid double counting.
Super Admin is required
The HubSpot user who authorises Weld needs Super Admin access. Google's transfer instead needs a private app with a long list of scopes, and HubSpot's own BigQuery export needs Data Hub Enterprise.
FAQ

Common questions.
About HubSpot to Google BigQuery.

Start syncing HubSpot to Google BigQuery.

Set up your HubSpot data pipeline in minutes. No credit card required. Free for 14 days.

HubSpotSource
WeldWeld
Google BigQueryWarehouse