Intercom
Renta exports eight Intercom objects to your data warehouse: contacts, companies, conversations, admins, teams, segments, tags, and data attributes.
You can flexibly configure the list of exported fields for each object. The integration automatically processes complex data structures:
- Nested objects (such as geolocation) expand into flat columns.
- Lists (such as tags and participants) are saved as nested records.
- Dates are converted from the Unix timestamp format to a standard datetime format in the UTC timezone.
Authentication
Renta connects to Intercom through OAuth. You sign in to Intercom, review the requested permissions, and authorize the connection. You do not need to copy API keys or tokens manually.
Your credentials are encrypted in transit and at rest, and never stored in Renta's application database. You stay in control and can revoke access from your Intercom account settings at any time.
Connect Intercom source
- Navigate to the Connections > Catalog section in the left sidebar.
- Open the Customer support category and click the Intercom card marked Source.
The category contains two Intercom cards. The one marked Destination is the reverse ETL connector that writes warehouse data back into Intercom.

Click Log in to your Intercom account. Renta redirects you to the Intercom consent page.

- Review the permissions Renta requests. They cover the objects the connector reads: contacts, companies, conversations, teams and teammates, tags, and data attributes.
- Check the Data host region value at the bottom of the screen and select the region where your workspace is hosted.
- Click Authorize access.
You can revoke this access at any time in the list of authorized apps in your Intercom account.

- In the Source name field, specify a name for this data source. It is used exclusively in the Renta interface.
- Click Save.
The Access granted card shows the authorized Intercom account. The Re-authorize button next to it repeats the OAuth flow if you later need to switch the workspace.

The new source appears in the Sources list with the Active status. You can now use it in pipelines.

Create an Intercom pipeline
Once the source is connected, create a pipeline to sync your Intercom data into your destination.
In the left sidebar, click New pipeline. On the Source step, select Intercom under Already connected and click Next step.

Choose the Intercom connection you created earlier and click Next step. The card shows the account that authorized the connection.

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, choose the object, pick its fields, set the table name, and define the schedule.
Intercom objects
Select which Intercom object the pipeline exports. One pipeline loads one object into one table.

| Object | Description |
|---|---|
| Admins | Teammates of the workspace: email, name, away-mode settings, inbox seat, and the teams they belong to. |
| Companies | Company records: name, the external company ID from your systems, plan, industry, size, monthly spend, session and user counts, custom attributes, segments, and tags. |
| Contacts | Users and leads: email, phone, role, owner, activity dates such as signed up and last seen, browser and location, custom attributes, tags, notes, and linked companies. |
| Conversations | Conversations with the message that started them, assignee, state, priority, rating, SLA, tags, participants, and the statistics block with reply, assignment, and close times. |
| Segments | Segments of the workspace: name, person type, and the dates the segment was created and updated. |
| Tags | The tag dictionary of the workspace: identifier and name of every tag. |
| Teams | Teams of the workspace together with the admins that belong to them. |
| Data Attributes | Definitions of the standard and custom attributes of contacts, companies, and conversations: label, data type, list of options, and whether the attribute is writable via API, Messenger, or the UI. |
Fields
Select the Intercom fields to include in the destination table.

| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'admin' for admin objects. |
ID text | id | Unique identifier for the admin in Intercom. This is the Intercom-defined ID. |
Email text | email | Email address of the admin. Used for authentication and notifications. |
Name text | name | Full name of the admin user as displayed in Intercom Inbox. |
Away Mode Enabled bool | away_mode_enabled | Indicates whether the admin is currently in away mode. When true, the admin is marked as unavailable in the Inbox. |
Away Mode Reassign bool | away_mode_reassign | Indicates whether conversations should be automatically reassigned to other admins when away mode is enabled. Only applicable when away_mode_enabled is true. |
Has Inbox Seat bool | has_inbox_seat | Indicates whether the admin has an active Inbox seat. Admins with Inbox seats can receive and respond to conversations. |
Team IDs array_int | team_ids | Array of team identifiers that the admin belongs to. Empty array indicates the admin is not assigned to any teams. |
| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'company' for company objects. |
ID text | id | Unique identifier for the company in Intercom. This is the Intercom-defined ID. |
Company ID text | company_id | External identifier for the company. This is the customer-defined unique identifier. |
Name text | name | Name of the company. |
Created At datetime | created_at | Unix timestamp when the company was created in Intercom. |
Updated At datetime | updated_at | Unix timestamp when the company was last updated in Intercom. |
Remote Created At datetime | remote_created_at | Unix timestamp when the company was created in the external system. Can be null. |
Last Request At datetime | last_request_at | Unix timestamp of the last request made by any user in this company. Can be null. |
Monthly Spend decimal | monthly_spend | Amount of revenue the company generates for you each month. |
Session Count int | session_count | Number of sessions the company has recorded. |
User Count int | user_count | Number of users associated with the company. |
Size int | size | Number of employees in the company. |
Website text | website | Website URL of the company. |
Industry text | industry | Industry the company operates in. |
Plan text | plan | Plan name the company is subscribed to. |
Custom Attributes json | custom_attributes | Custom attributes associated with the company as JSON object. |
Segments structure | segments | Array of segments the company belongs to. |
Tags structure | tags | Array of tags applied to the company. |
| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'contact' for contact objects. |
ID text | id | Unique identifier for the contact in Intercom. This is the Intercom-defined ID. |
External ID text | external_id | External identifier for the contact. This is the customer-defined unique identifier. |
Email text | email | Email address of the contact. |
Phone text | phone | Phone number of the contact. |
Name text | name | Full name of the contact. |
Role text | role | Role of the contact. Can be 'user' or 'lead'. |
Owner ID int | owner_id | ID of the admin or team that owns this contact. |
Has Hard Bounced bool | has_hard_bounced | Indicates whether emails to this contact have hard bounced. |
Marked Email As Spam bool | marked_email_as_spam | Indicates whether the contact marked emails as spam. |
Unsubscribed From Emails bool | unsubscribed_from_emails | Indicates whether the contact has unsubscribed from emails. |
Created At datetime | created_at | Unix timestamp when the contact was created in Intercom. |
Updated At datetime | updated_at | Unix timestamp when the contact was last updated in Intercom. |
Signed Up At datetime | signed_up_at | Unix timestamp when the contact signed up. Can be null. |
Last Seen At datetime | last_seen_at | Unix timestamp when the contact was last seen. Can be null. |
Last Replied At datetime | last_replied_at | Unix timestamp when the contact last replied to a message. Can be null. |
Last Contacted At datetime | last_contacted_at | Unix timestamp when the contact was last contacted. Can be null. |
Last Email Opened At datetime | last_email_opened_at | Unix timestamp when the contact last opened an email. Can be null. |
Last Email Clicked At datetime | last_email_clicked_at | Unix timestamp when the contact last clicked a link in an email. Can be null. |
Custom Attributes json | custom_attributes | Custom attributes associated with the contact as JSON object. |
Browser text | browser | Browser name the contact is using. |
Browser Version text | browser_version | Version of the browser the contact is using. |
Browser Language text | browser_language | Language setting of the contact's browser. |
Operating System text | os | Operating system the contact is using. |
Location City text | location_city | City where the contact is located. Extracted from nested location.city. |
Location Region text | location_region | Region where the contact is located. Extracted from nested location.region. |
Location Country Name text | location_country | Country where the contact is located. Extracted from nested location.country. |
Location Country Code text | location_country_code | Country code where the contact is located. Extracted from nested location.country_code. |
Location Continent Code text | location_continent_code | Continent code where the contact is located. Extracted from nested location.continent_code. |
Tags structure | tags | Array of tags applied to the contact. |
Notes structure | notes | Array of notes for the contact. |
Companies structure | companies | Array of companies the contact is associated with. |
| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'conversation' for conversation objects. |
ID text | id | Unique identifier for the conversation in Intercom. |
Title text | title | Title of the conversation. Can be null. |
Created At datetime | created_at | Unix timestamp when the conversation was created. |
Updated At datetime | updated_at | Unix timestamp when the conversation was last updated. |
Waiting Since datetime | waiting_since | Unix timestamp indicating how long the conversation has been waiting for a response. Can be null. |
Snoozed Until datetime | snoozed_until | Unix timestamp until which the conversation is snoozed. Can be null. |
Source Type Extracted text | source_type | Type of the conversation source. Extracted from source.type. |
Source Body Extracted text | source_body | Body content of the source message. Extracted from source.body. |
Source Subject Extracted text | source_subject | Subject line of the source message. Extracted from source.subject. |
Source Delivered As Extracted text | source_delivered_as | How the source message was delivered. Extracted from source.delivered_as. |
Source Author ID text | source_author_id | ID of the author who initiated the conversation. Extracted from source.author.id. |
Source Author Type text | source_author_type | Type of the author. Extracted from source.author.type. |
Source Author Email text | source_author_email | Email of the author. Extracted from source.author.email. |
Source Author Name text | source_author_name | Name of the author. Extracted from source.author.name. |
Contacts structure | contacts | Array of contacts involved in the conversation. |
Teammates structure | teammates | Array of admins (teammates) involved in the conversation. |
Admin Assignee ID text | admin_assignee_id | ID of the admin assigned to the conversation. Can be null. |
Team Assignee ID text | team_assignee_id | ID of the team assigned to the conversation. Can be null. |
Open bool | open | Indicates whether the conversation is currently open. |
State text | state | Current state of the conversation (e.g., 'open', 'closed', 'snoozed'). |
Read bool | read | Indicates whether the conversation has been read by the admin. |
Priority text | priority | Priority level of the conversation (e.g., 'priority', 'not_priority'). |
SLA Applied json | sla_applied | SLA rule applied to the conversation as JSON object. Can be null. |
Conversation Rating json | conversation_rating | Rating given to the conversation as JSON object. Can be null. |
Tags structure | tags | Array of tags applied to the conversation. |
First Contact Reply Created At datetime | first_contact_reply_created_at | Unix timestamp of the first reply from a contact. Extracted from first_contact_reply.created_at. |
First Contact Reply Type text | first_contact_reply_type | Type of the first contact reply. Extracted from first_contact_reply.type. |
First Contact Reply URL text | first_contact_reply_url | URL of the first contact reply. Extracted from first_contact_reply.url. |
Stats Count Assignments int | stats_count_assignments | Number of times the conversation has been assigned. Extracted from statistics.count_assignments. |
Stats Count Conversation Parts int | stats_count_conversation_parts | Total number of parts (messages, notes) in the conversation. Extracted from statistics.count_conversation_parts. |
Stats Count Reopens int | stats_count_reopens | Number of times the conversation has been reopened. Extracted from statistics.count_reopens. |
Stats First Admin Reply At datetime | stats_first_admin_reply_at | Unix timestamp of the first admin reply. Extracted from statistics.first_admin_reply_at. |
Stats First Assignment At datetime | stats_first_assignment_at | Unix timestamp of the first assignment. Extracted from statistics.first_assignment_at. |
Stats First Close At datetime | stats_first_close_at | Unix timestamp when conversation was first closed. Extracted from statistics.first_close_at. |
Stats First Contact Reply At datetime | stats_first_contact_reply_at | Unix timestamp of the first contact reply. Extracted from statistics.first_contact_reply_at. |
Stats Last Admin Reply At datetime | stats_last_admin_reply_at | Unix timestamp of the last admin reply. Extracted from statistics.last_admin_reply_at. |
Stats Last Assignment At datetime | stats_last_assignment_at | Unix timestamp of the last assignment. Extracted from statistics.last_assignment_at. |
Stats Last Close At datetime | stats_last_close_at | Unix timestamp when conversation was last closed. Extracted from statistics.last_close_at. |
Stats Last Closed By ID text | stats_last_closed_by_id | ID of admin who last closed the conversation. Extracted from statistics.last_closed_by_id. |
Stats Last Contact Reply At datetime | stats_last_contact_reply_at | Unix timestamp of the last contact reply. Extracted from statistics.last_contact_reply_at. |
Stats Median Time To Reply int | stats_median_time_to_reply | Median time in seconds for replies. Extracted from statistics.median_time_to_reply. |
Stats Time To Admin Reply int | stats_time_to_admin_reply | Time in seconds until the first admin reply. Extracted from statistics.time_to_admin_reply. |
Stats Time To Assignment int | stats_time_to_assignment | Time in seconds until the conversation was assigned. Extracted from statistics.time_to_assignment. |
Stats Time To First Close int | stats_time_to_first_close | Time in seconds until first close. Extracted from statistics.time_to_first_close. |
Stats Time To Last Close int | stats_time_to_last_close | Time in seconds until last close. Extracted from statistics.time_to_last_close. |
Conversation Parts json | conversation_parts | Array of conversation parts (messages) as JSON object. |
| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'segment' for segment objects. |
ID text | id | Unique identifier for the segment in Intercom. |
Name text | name | Name of the segment. |
Created At datetime | created_at | Unix timestamp when the segment was created. |
Updated At datetime | updated_at | Unix timestamp when the segment was last updated. |
Person Type text | person_type | Type of people in the segment. Can be 'user' or 'lead'. |
| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'tag' for tag objects. |
ID text | id | Unique identifier for the tag in Intercom. |
Name text | name | Name of the tag. |
| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'team' for team objects. |
ID text | id | Unique identifier for the team in Intercom. |
Name text | name | Name of the team. |
Admin IDs array_int | admin_ids | Array of admin IDs that belong to this team. |
| Name | API name | Description |
|---|---|---|
Type text | type | Object type identifier. Always 'data_attribute' for data attribute objects. |
ID int | id | Unique identifier for the data attribute in Intercom. |
Model text | model | Model the attribute belongs to. Can be 'contact', 'company', or 'conversation'. |
Name text | name | Name of the data attribute. |
Full Name text | full_name | Full name of the data attribute including the model prefix. |
Label text | label | Human-readable label for the data attribute. |
Description text | description | Description of the data attribute. Can be null. |
Data Type text | data_type | Data type of the attribute (e.g., 'string', 'integer', 'float', 'boolean', 'date'). |
Options array_string | options | Array of predefined options for the attribute. Only applicable for certain data types. |
API Writable bool | api_writable | Indicates whether the attribute can be written via API. |
Messenger Writable bool | messenger_writable | Indicates whether the attribute can be written via Messenger. |
UI Writable bool | ui_writable | Indicates whether the attribute can be written via UI. |
Custom bool | custom | Indicates whether this is a custom attribute or a standard Intercom attribute. |
Archived bool | archived | Indicates whether the attribute has been archived. |
Created At datetime | created_at | Unix timestamp when the data attribute was created. |
Updated At datetime | updated_at | Unix timestamp when the data attribute was last updated. |
Admin ID text | admin_id | ID of the admin who created the attribute. Can be null. |
Choose the columns for the destination table, or take all of them with Select all.
Some of these columns come from nested blocks of the Intercom record. In Contacts, the location block splits into Location City, Location Region, Location Country Name, Location Country Code, and Location Continent Code. In Conversations, the source message (the Source fields), the first reply from a contact (the First Contact Reply fields), and the statistics block (the Stats fields) split the same way.
List fields remain nested. Tags, Segments, Contacts, Teammates, and Notes load as nested records with the identifier of each element and, where Intercom returns it, the name.
Custom Attributes loads as a JSON column with every custom attribute of the record, so adding an attribute in Intercom does not change the structure of the table. SLA Applied and Conversation Rating are JSON columns as well.
Date fields such as Created At, Updated At, Last Seen At, and the Stats timestamps arrive as UTC datetimes. Durations such as Stats Time To Admin Reply and Stats Median Time To Reply remain in seconds, as Intercom reports them.
The Conversation Parts column of the Conversations object is always empty. Intercom returns the message-by-message history of a thread only when a single conversation is requested by its ID.
Table name
Name the pipeline and the destination table.

- Integration name.
The name of the pipeline. It is used exclusively in the Renta interface. - Table name.
The destination table name. You can keep the auto-generated name or enter your own.
Date range
Set the period the pipeline covers.

- Date start.
The first date of the period. - Date end.
The last date of the period. Keep Today so that the end of the period advances with every run.
Intercom objects are snapshots of the current records, not statistics broken down by day. Renta loads every record of the selected object on each run, so the dates you set here do not limit the export.
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.
The new pipeline appears in the Pipelines section under the ETL tab, where you can monitor its runs, progress, and the destination table name.

Sync strategy
All Intercom objects synchronize the same way.
| Strategy | Supported report types | Description |
|---|---|---|
| Full reload | Admins, Companies, Contacts, Conversations, Segments, Tags, Teams, Data Attributes | On every run Renta reads the complete list of records from Intercom and replaces the contents of the destination table, so the table mirrors the workspace at the time of the run. If the selected fields include a date, Renta partitions the destination table by the first such field, typically Created At. |
Because every run reloads the whole object, the pipeline has no overwrite period setting. The volume of a run depends on how large your Intercom workspace is, not on how often the pipeline runs.
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.