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.
Checked against Weld and vendor docs on
- deal87 cols
- deal_property_history7 cols
- contact244 cols
- owner9 cols
- user8 cols
- company134 cols
- Extract
- Load
- Keep in sync
- 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
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.
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.
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 to sync HubSpot to Google BigQuery with Weld.
In the app, with the API or an agent.
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.
- 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.
- 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
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.
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 descAsk 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.
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.
Things to know.
Before you sync HubSpot.
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.
Keep reading.
Guides, docs and schema.
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.