HubSpot
Extract your HubSpot CRM data and load it directly into your data warehouse with Renta. Centralize contacts, companies, deals, tickets, engagements, and owners for sales funnel reporting, attribution, and advanced analytics — without writing a single line of code.
Authentication
Renta uses OAuth to authenticate with HubSpot. This ensures secure access without sharing your password directly. You will be redirected to HubSpot to grant Renta limited access to your account.
Your credentials are encrypted in transit and at rest, and kept in a dedicated secrets store isolated from your data. Renta refreshes access automatically, so the connection keeps running without re-authentication. You stay in control and can revoke access from HubSpot at any time.
Connect HubSpot source
- Navigate to the Connections > Sources section in the left sidebar.
- Click + Add source in the top-right corner.

Open the CRM category and click the HubSpot card to open the connection form.

Click Log in to your HubSpot account. You will be redirected to HubSpot to authorize the connection.

On the HubSpot authorization screen, select the account you want to connect and click Choose Account. After you approve access, you are redirected back to Renta.

Finish the setup:
- Source name.
Specify a name for this data source. This is used exclusively in the Renta interface. - Access granted.
Verify that the account is connected successfully.
Click Save to finish. Your new source will now appear in the sources list.

Create a HubSpot pipeline
Once the source is connected, create a pipeline to sync HubSpot data into your destination.
In the left sidebar, click New pipeline.

On the Source step, select HubSpot under Already connected and click Next step.

Choose the HubSpot connection you created earlier and click Next step.

On the Destination step, select your destination (for example, Google BigQuery) and click Next step.

Choose the destination connection you want to load data into and click Next step.

Pipeline configuration
On the final step, configure how Renta extracts and loads your HubSpot data.
Integration type
Choose how you want to configure your data pipeline.

| Type | Description |
|---|---|
| Custom report | Manually configure your dataset. Recommended for advanced users who need full control over the report type and fields. |
| Pre-built templates | Use predefined data models to set up your integration with minimal configuration. |
The HubSpot — all objects template creates one integration per report type, with every available field selected — a quick way to replicate your full CRM in a single step.
Report types
Select the HubSpot object you want to export. Each report type maps to one destination table.
| Report type | HubSpot object | Description |
|---|---|---|
| Contacts | contacts | People in your CRM, with lifecycle stage, owner, and contact details. |
| Companies | companies | Company records, with industry, revenue, owner, and domain. |
| Deals | deals | Sales deals, with amount, stage, pipeline, and close date. |
| Tickets | tickets | Support tickets, with pipeline, stage, priority, and category. |
| Calls | calls | Call engagements, with direction, duration, outcome, and owner. |
| Meetings | meetings | Meeting engagements, with title, start and end time, and outcome. |
| Notes | notes | Note engagements logged against CRM records. |
| Tasks | tasks | Task engagements, with subject, status, priority, and type. |
| Owners | owners | HubSpot users — used to join with the hubspot_owner_id field on other objects. |
| Deal pipelines | deal_pipelines | Deal pipeline and stage definitions, including the nested stages array. |
Parameters
Select the specific fields to include in your destination table. Your dataset schema is defined by the parameters you choose here — unselected fields will not appear in the output.
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the contact record in HubSpot. |
Email text | email | Primary email address of the contact. |
First Name text | firstname | First name of the contact. |
Last Name text | lastname | Last name of the contact. |
Phone text | phone | Primary phone number of the contact. |
Mobile Phone text | mobilephone | Mobile phone number of the contact. |
Company text | company | Company name the contact is associated with. |
Job Title text | jobtitle | Job title of the contact. |
Lifecycle Stage text | lifecyclestage | Lifecycle stage of the contact (e.g. lead, customer). |
Lead Status text | hs_lead_status | Current lead status of the contact. |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the contact. |
Associated Company ID text | associatedcompanyid | ID of the primary company associated with the contact. |
City text | city | City of the contact. |
State text | state | State or region of the contact. |
Country text | country | Country of the contact. |
ZIP text | zip | Postal code of the contact. |
Website text | website | Website URL associated with the contact. |
Analytics Source text | hs_analytics_source | Original source of the contact (HubSpot analytics). |
Archived bool | archived | Whether the contact record is archived. |
Created Date datetime | createdate | Timestamp when the contact was created. |
Last Modified Date · Required datetime | lastmodifieddate | Timestamp when the contact was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the company record in HubSpot. |
Name text | name | Name of the company. |
Domain text | domain | Company website domain. |
Industry text | industry | Industry classification of the company. |
Type text | type | Type of the company (e.g. prospect, partner). |
Phone text | phone | Primary phone number of the company. |
City text | city | City of the company. |
State text | state | State or region of the company. |
Country text | country | Country of the company. |
ZIP text | zip | Postal code of the company. |
Website text | website | Website URL of the company. |
Number Of Employees text | numberofemployees | Number of employees (returned by the API as a numeric string). |
Annual Revenue text | annualrevenue | Annual revenue (returned by the API as a numeric string). |
Lifecycle Stage text | lifecyclestage | Lifecycle stage of the company (e.g. lead, customer). |
Lead Status text | hs_lead_status | Current lead status of the company. |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the company. |
Description text | description | Free-text description of the company. |
Archived bool | archived | Whether the company record is archived. |
Created Date datetime | createdate | Timestamp when the company was created. |
Last Modified Date · Required datetime | hs_lastmodifieddate | Timestamp when the company was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from hs_lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from hs_lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the deal record in HubSpot. |
Deal Name text | dealname | Name of the deal. |
Amount text | amount | Deal amount (returned by the API as a numeric string). |
Amount In Home Currency text | amount_in_home_currency | Deal amount converted to the portal home currency (numeric string). |
Deal Stage text | dealstage | Internal ID of the pipeline stage the deal is in. |
Pipeline text | pipeline | Internal ID of the pipeline the deal belongs to. |
Deal Type text | dealtype | Type of the deal (e.g. newbusiness, existingbusiness). |
Close Date datetime | closedate | Expected or actual close date of the deal. |
Description text | description | Free-text description of the deal. |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the deal. |
Stage Probability text | hs_deal_stage_probability | Win probability of the current stage (numeric string between 0 and 1). |
Is Closed text | hs_is_closed | Whether the deal is in a closed stage ('true'/'false' string). |
Is Closed Won text | hs_is_closed_won | Whether the deal is closed-won ('true'/'false' string). |
Archived bool | archived | Whether the deal record is archived. |
Created Date datetime | createdate | Timestamp when the deal was created. |
Last Modified Date · Required datetime | hs_lastmodifieddate | Timestamp when the deal was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from hs_lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from hs_lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the ticket record in HubSpot. |
Subject text | subject | Subject line of the ticket. |
Content text | content | Body / description of the ticket. |
Pipeline text | hs_pipeline | Internal ID of the pipeline the ticket belongs to. |
Pipeline Stage text | hs_pipeline_stage | Internal ID of the pipeline stage the ticket is in. |
Priority text | hs_ticket_priority | Priority of the ticket (e.g. LOW, MEDIUM, HIGH). |
Category text | hs_ticket_category | Category of the ticket. |
Source Type text | source_type | Channel the ticket was created from (e.g. EMAIL, CHAT). |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the ticket. |
Closed Date datetime | closed_date | Timestamp when the ticket was closed. |
Archived bool | archived | Whether the ticket record is archived. |
Created Date datetime | createdate | Timestamp when the ticket was created. |
Last Modified Date · Required datetime | hs_lastmodifieddate | Timestamp when the ticket was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from hs_lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from hs_lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the call engagement in HubSpot. |
Title text | hs_call_title | Title of the call. |
Body text | hs_call_body | Notes / description logged for the call. |
Direction text | hs_call_direction | Direction of the call (INBOUND / OUTBOUND). |
Disposition text | hs_call_disposition | Outcome ID of the call (internal GUID). |
Duration text | hs_call_duration | Duration of the call in milliseconds (numeric string). |
From Number text | hs_call_from_number | Phone number the call was made from. |
To Number text | hs_call_to_number | Phone number the call was made to. |
Status text | hs_call_status | Status of the call (e.g. COMPLETED, QUEUED). |
Activity Date datetime | hs_timestamp | Timestamp when the call happened (activity date). |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the call. |
Archived bool | archived | Whether the call engagement is archived. |
Created Date datetime | hs_createdate | Timestamp when the call record was created. |
Last Modified Date · Required datetime | hs_lastmodifieddate | Timestamp when the call record was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from hs_lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from hs_createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from hs_createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from hs_lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the meeting engagement in HubSpot. |
Title text | hs_meeting_title | Title of the meeting. |
Body text | hs_meeting_body | Description / agenda logged for the meeting. |
Location text | hs_meeting_location | Location of the meeting (address or link). |
Start Time datetime | hs_meeting_start_time | Timestamp when the meeting starts. |
End Time datetime | hs_meeting_end_time | Timestamp when the meeting ends. |
Outcome text | hs_meeting_outcome | Outcome of the meeting (e.g. SCHEDULED, COMPLETED). |
Activity Date datetime | hs_timestamp | Timestamp when the meeting activity happened. |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the meeting. |
Archived bool | archived | Whether the meeting engagement is archived. |
Created Date datetime | hs_createdate | Timestamp when the meeting record was created. |
Last Modified Date · Required datetime | hs_lastmodifieddate | Timestamp when the meeting record was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from hs_lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from hs_createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from hs_createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from hs_lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the note engagement in HubSpot. |
Body text | hs_note_body | Text content of the note. |
Activity Date datetime | hs_timestamp | Timestamp when the note activity happened. |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the note. |
Archived bool | archived | Whether the note engagement is archived. |
Created Date datetime | hs_createdate | Timestamp when the note record was created. |
Last Modified Date · Required datetime | hs_lastmodifieddate | Timestamp when the note record was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from hs_lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from hs_createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from hs_createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from hs_lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the task engagement in HubSpot. |
Subject text | hs_task_subject | Title of the task. |
Body text | hs_task_body | Notes / description of the task. |
Status text | hs_task_status | Status of the task (e.g. NOT_STARTED, COMPLETED). |
Priority text | hs_task_priority | Priority of the task (e.g. LOW, MEDIUM, HIGH). |
Task Type text | hs_task_type | Type of the task (e.g. TODO, CALL, EMAIL). |
Activity Date datetime | hs_timestamp | Due date / activity timestamp of the task. |
Owner ID text | hubspot_owner_id | ID of the HubSpot owner assigned to the task. |
Archived bool | archived | Whether the task engagement is archived. |
Created Date datetime | hs_createdate | Timestamp when the task record was created. |
Last Modified Date · Required datetime | hs_lastmodifieddate | Timestamp when the task record was last modified. |
Custom fields values structure | custom_fields_values | Array of portal-defined custom properties with their values. Custom property names are discovered at run time via the HubSpot Properties API. |
Updated Date date | updated_date | Day-granularity last-modified date derived from hs_lastmodifieddate. |
Created Date date | created_date | Day-granularity creation date derived from hs_createdate. Auto-included as the table partition column. |
Created Datetime datetime | created_datetime | Full-precision creation timestamp (UTC) derived from hs_createdate. |
Updated Datetime datetime | updated_datetime | Full-precision last-modified timestamp (UTC) derived from hs_lastmodifieddate. |
| Name | API name | Description |
|---|---|---|
ID · Required text | id | Unique identifier of the owner in HubSpot. |
Email text | email | Email address of the owner. |
Type text | type | Owner type (e.g. PERSON, QUEUE). |
First Name text | first_name | First name of the owner. |
Last Name text | last_name | Last name of the owner. |
User ID int | user_id | HubSpot user ID behind the owner (active users only). |
User ID Including Inactive int | user_id_including_inactive | HubSpot user ID behind the owner, including deactivated users. |
Archived bool | archived | Whether the owner is archived. |
Created At datetime | created_at | Timestamp when the owner was created. |
Updated At · Required datetime | updated_at | Timestamp when the owner was last updated. |
Updated Date date | updated_date | Day-granularity partition key derived from updated_at. Auto-included so destination tables can partition by day. |
| Name | API name | Description |
|---|---|---|
ID text | id | Unique identifier of the deal pipeline. |
Label text | label | Display name of the pipeline. |
Display Order int | display_order | Order in which the pipeline is displayed. |
Archived bool | archived | Whether the pipeline is archived. |
Created At datetime | created_at | Timestamp when the pipeline was created. |
Updated At datetime | updated_at | Timestamp when the pipeline was last updated. |
Stages structure | stages | List of stages in the pipeline. |
The record id and the last-modified field are always included, even if you do not select them, because Renta needs them for incremental loading. Custom properties are added automatically — see Custom properties.
Date range
Specify the historical period for which you want to retrieve data from HubSpot.
Renta filters records by their modification date, so a sync covers everything created or updated within the selected window. Leave the end date as Today to keep syncing the latest changes.
Schedule
Choose how often the pipeline runs.

| Schedule type | Description |
|---|---|
| Manual | The pipeline runs only when triggered manually through the interface or via API. |
| Daily | The pipeline runs once a day at the specified update time. |
| Interval | The pipeline runs at specified time intervals. |
| Cron Expression | The pipeline runs on a schedule defined by a cron expression. |
For Daily schedules, set the Update time — the exact time each run starts — then click Create pipeline.

Renta also supports API triggers and integration with external orchestrators such as Apache Airflow, Dagster, and Prefect. See the full scheduling documentation for details.
Sync strategy
The table below describes how Renta synchronizes each HubSpot report type.
| Strategy | Supported report types | Description |
|---|---|---|
| Incremental (merge) | Contacts, Companies, Deals, Tickets, Calls, Meetings, Notes, Tasks, Owners | Renta fetches only records modified since the last run, filtering by the object's last-modified date (hs_lastmodifieddate, or lastmodifieddate for contacts and updated_at for owners). Records are upserted into the destination by their unique id, and tables are partitioned by the day of record creation. |
| Full reload | Deal pipelines | Pipeline and stage definitions have no modification-date field, so Renta reloads the entire dataset on every run. The table is small, so the performance impact is negligible. |
Incremental upsert requires a merge-capable destination such as Google BigQuery or ClickHouse. On other destinations, Renta falls back to a full overwrite of the selected date range.
Custom properties
HubSpot lets administrators add custom properties to contacts, companies, deals, tickets, and engagements. Renta captures all custom properties automatically — no manual schema configuration is required.
Custom property values are stored in the custom_fields_values column as a structured array. Each entry in the array contains:
| Subfield | Description |
|---|---|
| field_name | The internal HubSpot property name, such as lead_source_detail. |
| field_label | The human-readable label configured in HubSpot, such as "Lead source detail". |
| field_type | The property data type as defined in HubSpot: string, number, enumeration, datetime, etc. |
| field_value | The property value for this record, stored as a text string. |
To query custom properties in BigQuery, unnest the array and filter by property name:
SELECT
id,
dealname,
cf.field_label AS custom_label,
cf.field_value AS custom_value
FROM `project.dataset.deals` d,
UNNEST(custom_fields_values) AS cf
WHERE cf.field_name = 'lead_source_detail';Ready to get started?
Build your data pipeline today or get a personalized demo. Start free!
Need help?
Get expert support to ensure your project succeeds. We're here to help!
Feature requests?
Help shape our product! Share your ideas for new features and integrations.