Exporting Data to Cloud Storage
Last updated Nov 4th, 2026
Overview
You can export contact, organization, activity, segment, custom object, website visit, and audit data from Common Room into your data warehouse. Exports can be delivered to Amazon S3 (using Common Room-managed credentials or an IAM role in your account that Common Room assumes), Google Cloud Storage, or Azure Blob Storage. Once you've set up the S3 bucket using the instructions here, our team will work with you to finalize the data contract and set up the export. Each export is configured individually: you choose the entity, the attributes to include, the column names, the file format, and the schedule.
Column names are chosen for each export when it's configured. The snake_case field names in the tables below are the conventional column names. Attributes listed under "Additional attributes" are shown by their Common Room attribute name; we'll agree the column name for each with you.
Sample data contract
Activity Data
Folder name format: data-export/Activity/YYYY/MM/DD/
Schedule: set per export (for example, all new activities from the past day, exported daily). Activity contents are not included unless you add the content attribute to your export.
Upon request: We can also trigger a one-time export of all activities. One-off exports are written to the same folder as recurring exports: data-export/Activity/YYYY/MM/DD/
| Field name | Data type | Description |
|---|---|---|
activity_timestamp | datetime | Timestamp of the activity |
service_name | string | Signal associated with the activity |
activity_type | string | Type of activity (e.g. slack_post_added) |
emails | string | null | Comma separated list of emails for activity contact |
primary_email | string | null | Primary email for activity contact |
profiles | string | null | Comma separated list of social profiles for activity contact |
full_name | string | null | Full name for activity contact |
first_activity_date | datetime | null | First activity date for activity contact |
contact_token | string | Contact identifier associated with activity |
Additional activity attributes
| Attribute | Description |
|---|---|
activityOrigin | Whether the activity was initiated by the contact (member) or by someone else (non-member) |
eventType | Event type of the activity |
subSourceName | Sub-source of the activity within its signal |
content | Content (body) of the activity |
communityMemberId | Common Room member ID of the activity's contact |
crContactId | Common Room contact ID of the activity's contact |
firstSeenDate | Date the activity's contact was first seen in Common Room |
organizationDomain | Domain of the contact's organization |
providerAccountToken | Contact identifier associated with the activity (exported as contact_token above) |
Hashed emails | emails and primary_email can be exported SHA-hashed instead of in plain text |
Contact Data
Folder name format: data-export/CommunityMember/YYYY/MM/DD/
Schedule: set per export (for example, a full export of all contacts every week).
Incremental exports: To receive only new contacts (for example, contacts from the past day, every day), we set up an additional recurring export with a filter. Incremental exports use the same data-export/ prefix as full exports; there is no separate incr folder.
| Field name | Data type | Description |
|---|---|---|
full_name | string | null | Full name of contact |
primary_email | string | null | Primary email of contact |
profiles | string | null | Comma separated list of social profiles for contact |
emails | string | null | Comma separated list of emails for contact |
first_activity_date | datetime | null | Date of contact's first activity in Common Room |
first_activity_source | string | null | Signal where contact was first active |
last_activity_date | datetime | null | Date of contact's last activity in Common Room |
last_activity_source | string | null | Signal where contact was last active |
location | string | null | Location of contact (City, State, Country) |
organization_name | string | null | Name of contact's organization |
organization_domain | string | null | Domain of contact's organization |
job_title | string | null | Job title of contact |
tags | string | null | Comma separated list of tags for contact |
segment_names | string | null | Comma separated list of segments contact is a part of |
contact_tokens | string | Comma separated list of tokens representing the Contact |
<custom_fields> | Dependent on custom field type | Upon request, the export can include custom fields set on the Contact (please specify a list of which fields to include) |
Additional contact attributes
| Group | Attributes | Notes |
|---|---|---|
Identity | communityMemberId, crContactId, currentProfileLink, providerAccountTokens, organizationIdentifiers | Common Room IDs, a link to the contact's profile, and identifiers for the contact and their organization |
Profile | about, linkedInUrls, followersCountList, resolvedLocationCountry, resolvedLocationWorldRegion | Bio, LinkedIn URLs, follower counts, and normalized country and world region |
Job | employment, employmentHistoryJson, jobRole, jobSeniority, organizationChangeDate, lastOrganization, lastOrganizationWebsite, lastTitle | employmentHistoryJson is a JSON array of {company, domain, title, startDate, endDate, isCurrent} |
Phone | phoneNumbers, primaryPhoneNumber, premiumPhoneNumbers | |
Engagement | firstSeenDate, firstSeenSource, lastSeenDate, impactPointsAllTime, activitySentimentAllTime, mostRecentSpark | All-time engagement totals and the contact's most recent Spark |
Website visits | firstSeenWebVisitDate, firstSeenWebVisitUrl, lastSeenWebVisitDate, lastSeenWebVisitUrl, webVisitTotalCount | |
Rep activity | lastUserActionActorEmail, lastUserActionDate, lastUserActionName | The most recent action a Common Room user took on the contact |
Hashed | emails, primaryEmail | Can be exported SHA-hashed instead of in plain text |
Per-period stats | activityCount, activitySentiment, impactPoints | Calculated over a fixed interval or a relative window (for example, the last 30 days), optionally per signal |
Other sources | Lead scores, custom field trends, RoomieAI research answers, Salesforce IDs, static values, custom objects | Lead score value, key factors (as text or JSON), and trend and delta over N days; custom field trend and delta; RoomieAI research answers; Salesforce Contact, Lead, Account, and recommended Account IDs; static values; associated custom objects |
Organization Data
Folder name format: data-export/Group/YYYY/MM/DD/
Schedule: set per export (for example, a full export of all organizations every week).
Incremental exports: To receive only new organizations, we set up an additional recurring export with a filter. Incremental exports use the same data-export/ prefix as full exports; there is no separate incr folder.
| Field name | Data type | Description |
|---|---|---|
organization_name | string | Name of organization |
organization_domain | string | Domain of organization |
location | string | null | Location of organization (City, State, Country) |
contact_count | int | null | Total number of Common Room contacts associated with organization |
employee_count | int | null | Estimated employee count of organization |
approx_capital_raised | float | null | Estimated capital raised by organization |
approx_revenue_min | float | null | Estimated minimum revenue for organization |
approx_revenue_max | float | null | Estimated maximum revenue for organization |
first_activity_date | datetime | null | First date the organization was active in Common Room |
last_activity_date | datetime | null | Last date the organization was active in Common Room |
first_activity_source | string | null | First signal the organization was active in Common Room |
last_activity_source | string | null | Last signal the organization was active in Common Room |
tags | string | null | Comma separated list of tags for an organization |
segment_names | string | null | Comma separated list of segments that organization is a part of |
<custom fields> | Dependent on custom field type | Upon request, the export can include custom fields set on the Organization (please specify a list of which fields to include) |
Additional organization attributes
| Group | Attributes | Notes |
|---|---|---|
Identity | id, normalizedDomain, organizationIdentifier, description | |
Firmographics | naicsIndustry, subIndustry, techStack, technologies, resolvedLocationCountry, resolvedLocationWorldRegion | |
Engagement | firstSeenDate, firstSeenSource, lastSeenDate, lastSeenSource, firstSeenWebVisitDate, lastSeenWebVisitDate, impactPointsAllTime, activitySentimentAllTime | |
Related accounts | accountType, accountId, accountName, providerId | For linked Salesforce accounts |
Other sources | Per-period stats, lead scores and key factors, trend and delta columns, RoomieAI research answers | Same options as the contact export |
Attribute names: contact_count, employee_count, approx_capital_raised, approx_revenue_min, and approx_revenue_max correspond to the Common Room attributes memberCount, employeeCount, capitalRaised, revenueRangeMin, and revenueRangeMax.
Other export types
In addition to activities, contacts, and organizations, you can export the following. Each is written to its own folder under data-export/ using the same YYYY/MM/DD layout.
| Export | What it exports | Attributes available |
|---|---|---|
Contact segment (memberSegment) | Contacts in one segment, plus each contact's segment status | All contact attributes, plus status |
Organization segment (groupSegment) | Organizations in one segment, plus each organization's segment status | All organization attributes, plus status |
Segment assignees (segmentAssignees) | Segment task assignments per rep | fullName, primaryEmail, loginIdentifierEmail, persona, segmentName, and the counts assignedCount, completedCount, disqualifiedCount, inProgressCount |
Workspaces (workspaces) | Customer workspaces | name, plus organization attributes and custom fields |
Custom objects (objects) | Custom objects, such as Salesforce Accounts and Opportunities | id, name, record_key, custom fields, lead scores, and attributes of the associated contact or organization (through associated_object) |
User actions (userActions) | Actions your team took in Common Room | timestamp, actionName, actorIdentityId, actorName, actorEmail, actorRole, actorPersona, segmentId, segmentName, plus contact attributes of the record acted on |
Workflow actions (workflowActions) | Log of automation runs | timestamp, actionName, actionType, status, errorDetails, workflowId, segmentId, segmentName, actionTargetName, actionTargetId, isManuallyTriggered |
Website visits (websiteVisits) | Individual website visit events | visitTime, url, contactId, organizationId |
Details
- Each export can be delivered as CSV or JSONL. CSV is the default; let us know if you'd prefer JSONL.
- If you choose to receive data as a CSV instead of a JSONL format, null values will be transmitted as empty strings.
- When an export finishes, we will write a marker to the same directory with file name _completion_marker so that you know the data is ready to consume.
- Files are written to data-export/<Entity>/YYYY/MM/DD/. The data-export prefix can be customized for your account, and a staging suffix is available.
- Each export runs on its own schedule (any daily, weekly, or custom cadence). There are no fixed default schedules; we'll agree one with you when the export is set up.
- Common Room custom fields map to the following data types, each of which can be nullable.
- Yes/No - boolean
- Date - datetime
- Number - int
- Single-select - string
- Multi-select - string
- Text - string
- URL - string
- For customer-provided data (e.g. data that is coming in via your CRM, Census, etc.), we will preserve the formatting of the original data signal so please ensure that you have the proper handling on your end when mapping the data.
FAQ
Why does the data model not expose a unique ID for contacts or organizations?
- Our contacts and organizations data are dynamic in nature across our various data sources and enrichment providers due to our algorithm constantly looking for ways to improve the data quality, such as merging and unmerging contacts. The ability to merge and un-merge contacts requires us to preserve their historical state.
- In order to help avoid data consistency issues, we only expose the latest snapshot of data and do not expose unique identifiers to external systems.
- Common Room IDs (such as crContactId or the organization id) can be added to an export on request. Because contacts and organizations can be merged and unmerged, these IDs may change over time, so we recommend treating them as a convenience rather than a permanent primary key.
What are some options for joining across the data sets?
- Recommended: Use the contact_token field on activities to match to a token in the contact_tokens field of a contact.
- Generate a primary key on your end that combines a few of our export fields (e.g. full name, email, profiles) to create an id with the understanding that conflicts would need to be handled
- Export out a subset of data that has a stable set of identifiers (e.g. using our hasEmails filter) and use that as your primary key
- Work with the Common Room team to pass in a known identifier from your system into Common Room that can then be included in exports to help with matching
