HubSpot → Data Warehouse
Connection methods and marketing analytics tables
Sortment internal reference - onboarding playbook
This document is a definitive reference for every supported method of connecting HubSpot marketing data into a data warehouse, and for every table available in each method. It is structured for merchant onboarding - specifically to determine which tables Sortment can expect to find when it is granted read access to a merchant's data warehouse schema, and how to build accurate email campaign analytics from those tables.
Merchants may be running several data warehouses, including Snowflake, Amazon Redshift, Google BigQuery, AWS Athena, or Databricks. This document covers all common pipeline methods. Where a method or SQL syntax is specific to one warehouse platform, it is explicitly noted.
Each method section includes: (a) a description of how the pipeline works and what it requires, (b) a complete table reference for marketing-relevant tables, and (c) gotchas and caveats that affect query accuracy. The final sections cover the sent → opened → clicked → converted funnel pattern and a decision matrix for matching each merchant to the right method.
1. Connection methods at a glance
HubSpot data can reach a data warehouse through six distinct paths. The method determines what schema the data lands in, how fresh it is, and critically, what tables are available for marketing analytics.
Native Data Share (Snowflake only)
HubSpot (built-in)
Ops Hub Professional+
15 min (Live) / Daily
Shared DB (read-only)
Fivetran ETL
Fivetran
Any HubSpot tier
Configurable (15 min+)
Merchant's own schema
Airbyte ETL
Airbyte (open-source or Cloud)
Any HubSpot tier
Configurable
Merchant's own schema
Stitch (Qlik) ETL
Qlik/Stitch
Any HubSpot tier
Configurable
Merchant's own schema
Estuary Flow
Estuary
Any HubSpot tier
Near real-time
Merchant's own schema
Windsor.ai / Supermetrics
Windsor / Supermetrics
Any HubSpot tier
Daily typical
Merchant's own schema
The most common pattern in merchant stacks encountered during Sortment onboarding is Fivetran (managed ETL) followed by HubSpot's Native Data Share (Snowflake accounts only). Airbyte and Stitch are less common but follow the same logical data model and work with any warehouse destination.
2. Method A: HubSpot Native Snowflake Data Share
How it works
HubSpot acts as the Snowflake data provider. No data is physically copied - Snowflake's Secure Data Sharing grants the merchant's Snowflake account read-only access to a shared database that HubSpot maintains. The merchant sees the data in their Snowflake instance without any ETL infrastructure.
Requires: Operations Hub Professional or Enterprise
Latency: V2_LIVE schema refreshes every 15 minutes; V2_DAILY refreshes once per day
Schema naming:
HUB_{portalId}_DB.V2_LIVE.{TABLE_NAME}or.V2_DAILY.{TABLE_NAME}Read-only: the merchant cannot write back to this database
V2_LIVE and V2_DAILY contain the same tables. V2_LIVE is preferred for near-real-time queries. V2_DAILY is preferred for large batch analytics to avoid query cost on a rapidly updating dataset. Some views (association_definitions, owners, pipelines, pipeline_stages) are only updated daily even in V2_LIVE.
2.1 Email event tables
Email event data is sharded: each event type is its own table. You query them separately and join on OBJECTID (contact ID) and PROPERTY_HS_EMAIL_CAMPAIGN_ID.
EVENTS_SENT_EMAIL_V2
Send event per contact
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_DELIVERED_EMAIL_V2
Confirmed delivery
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_OPENED_EMAIL_V2
Email open
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_CLICKED_LINK_IN_EMAIL_V2
Link click
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID, PROPERTY_HS_CLICK_ORIGINAL_URL
EVENTS_BOUNCED_EMAIL_V2
Hard or soft bounce
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID, PROPERTY_HS_BOUNCE_REASON
EVENTS_UNSUBSCRIBED_FROM_EMAIL_V2
Unsubscribe
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_MARKED_EMAIL_AS_SPAM_V2
Spam report
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_FORWARDED_EMAIL_V2
Email forward
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_SCHEDULED_EMAIL_V2
Scheduled for send
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_DEFERRED_EMAIL_V2
Send deferred (temp. failure)
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
EVENTS_DROPPED_EMAIL_V2
Dropped before send
OBJECTID, OCCURREDAT, PROPERTY_HS_EMAIL_CAMPAIGN_ID
2.2 Object tables
Object tables hold current-state records for each HubSpot object. Properties are flattened as columns (PROPERTY_*).
OBJECTS_CONTACTS
All CRM contacts
OBJECTID, PROPERTY_EMAIL, PROPERTY_FIRSTNAME, PROPERTY_LASTNAME, PROPERTY_HS_LEAD_STATUS
OBJECTS_CAMPAIGNS
Marketing campaign records
OBJECTID, PROPERTY_HS_NAME, PROPERTY_HS_GOAL, PROPERTY_HS_BUDGET_ITEMS_SUM_AMOUNT
OBJECTS_MARKETING_EMAILS
Email asset metadata
OBJECTID, PROPERTY_HS_NAME, PROPERTY_HS_SUBJECT, PROPERTY_HS_SEND_DATE, PROPERTY_HS_CAMPAIGN_ID
OBJECTS_DEALS
Deal pipeline records (conversion signal)
OBJECTID, PROPERTY_DEALNAME, PROPERTY_AMOUNT, PROPERTY_DEALSTAGE, PROPERTY_CLOSEDATE
OBJECTS_FORMS
Form submissions (alt. conversion signal)
OBJECTID, PROPERTY_HS_FORM_ID, PROPERTY_HS_NAME, PROPERTY_HS_CREATED_AT
OBJECTS_COMPANIES
Company / account records
OBJECTID, PROPERTY_NAME, PROPERTY_DOMAIN, PROPERTY_INDUSTRY, PROPERTY_NUMBEROFEMPLOYEES
OBJECTS_LISTS
HubSpot contact/company lists
OBJECTID, PROPERTY_HS_LIST_ID, PROPERTY_HS_NAME, PROPERTY_HS_LIST_TYPE
OBJECTS_WORKFLOWS
Automation workflows
OBJECTID, PROPERTY_HS_NAME, PROPERTY_HS_STATUS
2.3 Association tables
Association tables are the join layer between objects. You need these to connect email events (which carry a contact ID) to deals or companies.
ASSOCIATIONS_CONTACTS_TO_DEALS
Contact → Deal (join for conversion attribution)
ASSOCIATIONS_CONTACTS_TO_COMPANIES
Contact → Company (account-level analytics)
ASSOCIATIONS_CAMPAIGNS_TO_FORMS
Campaign → Form (form conversion attribution)
ASSOCIATIONS_CONTACTS_TO_FORMS
Contact → Form submission
ASSOCIATIONS_MARKETING_EMAILS_TO_CAMPAIGNS
Email asset → Campaign (links the email content to the campaign)
3. Method B: Fivetran ETL Connector
How it works
Fivetran is a managed ETL service that extracts data from HubSpot's APIs and loads it into the merchant's own data warehouse. This is the most feature-complete ETL connector for HubSpot marketing analytics. Fivetran handles schema changes automatically, rate limiting, incremental syncs, and retries. It supports all major warehouse destinations including Snowflake, Redshift, BigQuery, and Databricks.
Requires: any HubSpot tier; Fivetran subscription; data warehouse destination
All tables land in a schema the merchant names (typically
hubspotorhubspot_fivetran)Schema changes in HubSpot propagate automatically without full resyncs
Email event child tables must be individually enabled in the connector Schema tab
3.1 Email and campaign tables
Fivetran shards email events into separate child tables - one table per event type. Each child table must be explicitly enabled in the Fivetran connector settings, or it will be empty.
EMAIL_CAMPAIGN
Incremental
Campaign-level metadata: name, app_id, counters (sent, opens, clicks) at time of sync
EMAIL_EVENT
Incremental
Parent event table. Must have child tables selected in Schema tab or it won't populate.
EMAIL_EVENT_SENT
Incremental
One row per send. Columns: id, email_campaign_id, email_address, recipient, sent_by, created
EMAIL_EVENT_DELIVERED
Incremental
Delivery confirmation events
EMAIL_EVENT_OPEN
Incremental
Open events. Includes user_agent for device/client analysis
EMAIL_EVENT_CLICK
Incremental
Click events. Includes url (clicked URL) and user_agent
EMAIL_EVENT_BOUNCE
Incremental
Bounce events. Includes bounce_type (HARD/SOFT), status, and reason
EMAIL_EVENT_DEFERRED
Incremental
Temporary delivery deferral events
EMAIL_EVENT_DROPPED
Incremental
Dropped before send (e.g. unsubscribed list). Includes reason field
EMAIL_EVENT_UNSUBSCRIBE
Incremental
Unsubscribe events. Includes portal_id, email_campaign_id
EMAIL_EVENT_SPAM_REPORT
Incremental
Spam complaint events
EMAIL_EVENT_FORWARD
Incremental
Email forward events
EMAIL_EVENT_PRINT
Incremental
Print events (rare, browser print action)
3.2 CRM and supporting tables
CONTACT
Incremental
All contact properties. Companion: CONTACT_PROPERTY_HISTORY for historical values
COMPANY
Incremental
Company records + COMPANY_PROPERTY_HISTORY
DEAL
Incremental
Deal records. Child tables: DEAL_PROPERTY_HISTORY, DEAL_STAGE. Join to EMAIL events on contact for conversion
FORM
Full
Form definitions (not submissions - use FORM_SUBMISSION)
FORM_SUBMISSION
Incremental
Each form fill. Joinable to contacts for conversion tracking
OWNER
Full
HubSpot user/owner records
ENGAGEMENT
Incremental
Parent engagement table. Child tables per type: NOTE, EMAIL, TASK, MEETING, CALL
CONTACT_COMPANY
Full
Association: contact ↔ company
CONTACT_LIST
Full
HubSpot list definitions
CONTACT_LIST_MEMBER
Full
Which contacts are in which lists
DEAL_PIPELINE
Full
Pipeline definitions and stages for deal tracking
LINE_ITEM_DEAL
Incremental
Association between line items and deals (e-commerce)
TICKET / TICKET_PIPELINE
Incremental
Support tickets and their pipeline stages
WORKFLOW
Full
Automation workflow definitions
SUBSCRIPTION_CHANGE
Incremental
Email subscription changes per contact (opt-in/opt-out history)
3.3 Optional: Fivetran dbt package (dbt_hubspot)
If the merchant runs the Fivetran dbt_hubspot package on top of the raw tables, they will have a set of pre-built analytics models. These are significantly easier to query for funnel analysis and are the preferred layer when available.
hubspot__email_campaigns
One row per campaign. Pre-aggregated sent, delivered, open, click, bounce, unsubscribe, spam counts. The go-to table for funnel reporting.
hubspot__email_sends
One row per sent email enriched with whether that specific send was opened, clicked, or bounced.
hubspot__email_events
All email events joined with campaign and contact context, ready for analysis without manual joins.
hubspot__contacts
SCD Type 2 contact model - tracks property changes over time, not just current state.
hubspot__companies
SCD Type 2 company model with engagement activity joined in.
hubspot__deals
Deal model joined to contact engagement - use this to attribute closed deals back to campaigns.
hubspot__engagements
All CRM engagement activities (calls, meetings, notes, tasks) normalized and company/contact-joined.
The dbt package is not auto-installed - a merchant must explicitly configure and run it. Ask during onboarding whether their data team runs dbt on top of Fivetran. If yes, the hubspot__email_campaigns model is the best single table for aggregate campaign funnel analytics.
4. Method C: Airbyte ETL Connector
How it works
Airbyte is an open-source (and cloud-hosted) ELT platform. Its HubSpot connector maps each API resource to a stream, which becomes a table in the destination data warehouse. Unlike Fivetran, Airbyte consolidates all email event types into a single email_events table with a type field - there are no separate child tables per event type. Airbyte supports all major warehouse destinations.
Requires: any HubSpot tier; Airbyte OSS or Cloud; data warehouse destination
Authentication: HubSpot Private App token or OAuth
Sync frequency: configurable, from minutes to daily
Email events: all types in one table (
typecolumn = SENT, OPEN, CLICK, BOUNCE, etc.)
campaigns
Campaign metadata from the HubSpot Email Campaigns API
marketing_emails
Email asset records including subject line, send date, and campaign association
email_events
All email events in a single table (type field distinguishes SENT, OPEN, CLICK, BOUNCE, etc.) - unlike Fivetran's separate child tables
contacts
Contact records with all properties
contacts_list_memberships
Which lists each contact belongs to
companies
Company records
deals
Deal pipeline records for conversion tracking
deal_pipelines
Pipeline and stage definitions
engagements_calls
Call engagement records
engagements_emails
1:1 CRM email engagements (not marketing emails)
engagements_meetings
Meeting engagements
engagements_notes
Notes attached to CRM records
engagements_tasks
Task records
forms
Form definitions
owners
HubSpot user/owner records
tickets
Support tickets
workflows
Automation workflows
email_subscriptions
Subscription type definitions and contact opt-in status
goals
HubSpot Goals objects
line_items
E-commerce line items associated with deals
products
Product catalogue records
quotes
Sales quote records
Airbyte's email_events table uses a different query pattern than Fivetran. Instead of joining multiple child tables, you filter on the type column: WHERE type = 'OPEN'. Confirm this structure before writing any SQL against an Airbyte-sourced schema.
5. Method D: Stitch (Qlik) ETL Connector
How it works
Stitch (now part of Qlik) is a managed ETL tool with a HubSpot connector. Its table structure is similar to Airbyte - a unified email_events table - but with fewer streams than Fivetran. An important limitation: replicating the email_events table requires Super Admin permissions in HubSpot. If the merchant's integration was set up with a lower-permission user, email events will be absent.
Requires: any HubSpot tier; Stitch subscription; data warehouse destination
Super Admin required in HubSpot for
email_eventsreplicationSmaller stream library than Fivetran - some engagement sub-types are absent
campaigns
Campaign metadata. Primary key: id
email_events
All email events. Requires Super Admin permissions in HubSpot to replicate. Primary key: id
contacts
Contact records with all custom properties flattened. Primary key: canonical_vid
companies
Company records. Primary key: company_id
deals
Deal records. Primary key: deal_id
forms
Form definitions. Primary key: guid
keywords
Portal keywords (SEO tool data). Primary key: keyword_guid
owners
HubSpot owner/user records. Primary key: owner_id
subscription_changes
Email subscription opt-in/opt-out change history
workflows
Automation workflow definitions
Stitch replicates email_events as a unified table with a type field - the same pattern as Airbyte. Query pattern: filter on type rather than joining separate tables.
6. Method E and F: Estuary, Windsor, and others
Estuary Flow
Estuary is a newer real-time ELT platform with a HubSpot connector. It uses a streaming-first architecture, meaning data can land in the data warehouse with sub-minute latency. Table structure follows the same logical model as Fivetran/Airbyte but varies by configuration. Less common in merchant stacks as of mid-2026 but growing.
Key tables:
contacts,companies,deals,email_events(unified),marketing_emails,campaignsLatency: near real-time (minutes, not hours)
Well-suited for merchants who need very fresh campaign data
Windsor.ai / Supermetrics
These are reporting-layer tools, not full ELT pipelines. They typically sync aggregated campaign metrics rather than raw event-level data. As a result, they are useful for high-level reporting but insufficient for contact-level funnel analysis. You cannot trace an individual contact's journey from send to conversion.
Typical tables:
hubspot_campaigns(aggregated metrics),hubspot_ads,hubspot_email_performanceNot suitable for contact-level attribution or funnel analysis
If a merchant uses only Windsor or Supermetrics, raw event tables will not be present
7. Building the Sent → Opened → Clicked → Converted funnel
Regardless of which pipeline method the merchant uses, the funnel logic follows the same pattern. What varies is the table names and how events are stored (sharded vs. unified).
Sent
EVENTS_SENT_EMAIL_V2 / EMAIL_EVENT_SENT / email_events
Count distinct OBJECTID or email_address per campaign. The denominator for all other rates.
Delivered
EVENTS_DELIVERED_EMAIL_V2 / EMAIL_EVENT_DELIVERED
Delivery rate = Delivered / Sent. Bounced = Sent - Delivered.
Opened
EVENTS_OPENED_EMAIL_V2 / EMAIL_EVENT_OPEN
Open rate = unique openers / Delivered. Count distinct contact per campaign for unique opens.
Clicked
EVENTS_CLICKED_LINK_IN_EMAIL_V2 / EMAIL_EVENT_CLICK
CTOR = unique clickers / unique openers. Also available: which URLs were clicked.
Converted
OBJECTS_DEALS + ASSOCIATIONS_CONTACTS_TO_DEALS (or FORM_SUBMISSION)
No native email-to-deal event exists. Define conversion as: deal created within N days of a click on the campaign, joined via contact ID.
Sample SQL - Fivetran (sharded event tables)
Sample SQL - Airbyte/Stitch (unified email_events table)
Sample SQL - Native Data Share (sharded, V2_DAILY schema - Snowflake only)
8. Critical gotchas and onboarding checks
These are the most common failure points encountered when querying HubSpot data in a data warehouse across any pipeline method.
Campaign ID mismatch (Native Data Share)
The OBJECTID in OBJECTS_CAMPAIGNS is different from PROPERTY_HS_EMAIL_CAMPAIGN_ID in event tables. HubSpot uses a separate internal content/asset ID. Always verify the join key before writing funnel queries.
Fivetran child tables must be enabled
EMAIL_EVENT only populates if the EMAIL_EVENT_* child tables are explicitly selected in the Fivetran connector's Schema tab. A connector set up without them will have an empty EMAIL_EVENT table and missing email data.
Fivetran 25-hour lookback
Fivetran re-fetches EMAIL_EVENT_* data 25 hours behind the current sync to catch HubSpot's delayed event processing. Expect some duplication in raw tables - use created as the dedup key.
Conversion is not a native event
HubSpot does not emit a 'converted' email event. Conversion must be self-defined: typically a deal created/updated, a form submission, or a purchase event within a time window after a click, joined on contact ID.
Native Data Share requires Ops Hub Pro+ and Snowflake
The HubSpot Native Data Share is only available to merchants on Operations Hub Professional or Enterprise and using Snowflake as their data warehouse. All other warehouse platforms require a third-party ETL connector.
Stitch requires Super Admin for email_events
Stitch specifically requires Super Admin permissions in HubSpot to replicate the email_events table. If the merchant's integration token was set up with a lesser role, email events will be missing.
Airbyte unified vs Fivetran sharded events
Airbyte consolidates all email event types into a single email_events table with a type column. Fivetran splits them into EMAIL_EVENT_SENT, EMAIL_EVENT_OPEN, etc. This changes the query pattern - know which pipeline you're on before writing SQL.
Metadata query syntax varies by warehouse
The discovery query SHOW TABLES IN SCHEMA hubspot; works in Snowflake. Use INFORMATION_SCHEMA.TABLES for BigQuery and Redshift (SELECT table_name FROM information_schema.tables WHERE table_schema = 'hubspot'). Athena uses Glue catalog; Databricks uses SHOW TABLES IN hubspot.
9. Onboarding decision matrix
At Sortment's end, this is how we determine what connection method applies and what to request access to.
HubSpot Ops Hub Pro+ and Snowflake as their data warehouse
Request access to their Native Data Share (V2_LIVE or V2_DAILY schema). Zero ETL infrastructure required, freshest data. (Snowflake-only feature.)
Fivetran already running to their data warehouse
Confirm EMAIL_EVENT_* child tables are enabled. Ask for read access to the hubspot schema. If dbt_hubspot is running, prefer the mart models (hubspot__email_campaigns etc.).
Airbyte running to their data warehouse
Request read access to their Airbyte destination schema. Key tables: email_events (unified), campaigns, marketing_emails, contacts, deals.
Stitch running to their data warehouse
Request read access. Verify Super Admin was used for HubSpot auth (required for email_events). Key tables: email_events, campaigns, contacts, deals.
No ETL / no warehouse connection yet
Recommend Fivetran (most feature-complete for HubSpot marketing analytics) - it supports all major warehouse destinations. If they are on Snowflake with Ops Hub Pro+, the HubSpot Native Data Share is the fastest path with no ETL to manage. Fivetran dbt package gives you the cleanest analytics layer out of the box.
Appendix: References
Last updated