Slack connector: sync messages, channels, and files from your workspace to your data warehouse
Erathos connector syncs messages, channels, files, and logs from Slack to your data warehouse. BigQuery, Redshift, and more, no manual work.

Erathos is launching the managed connector for Slack. Forty endpoints available, ten supported destinations, zero pipeline code to write or maintain.
Slack exposes a Web API authenticated with a Bot User OAuth Token, which, in theory, lets you build your own extraction. In practice, that means writing and maintaining a custom ETL pipeline to handle cursor based pagination, rate limits per method tier, and payloads that vary by message type, something most data teams discover too late does not scale. Erathos's connector solves this integration as a managed service, with no code for your team to write or maintain.
Every data team supporting an operation that runs inside Slack hits the same wall: the conversations, decisions, and files that drive day to day work stay locked inside the workspace, the rest of the analytics stack lives in the warehouse, and joining the two turns into an engineering project nobody planned for. What starts as a Python script running on a VM's cron job turns, three months later, into a pipeline nobody understands, that fails silently, and that no engineer wants to inherit.
The problem with hand built Slack pipelines
Slack's Web API is authenticated with a Bot User OAuth Token with granular scopes, and read methods return data paginated by cursor. The pattern is simple enough to convince any engineer to build their own integration in an afternoon. The real cost shows up later, and it is predictable.
Pagination that varies from method to method. conversations.history, conversations.replies, files.list, and every search method iterate with their own cursor and limit, each with different defaults across endpoints. A bug in the iteration logic does not throw an exception: the pipeline simply stops fetching older pages and keeps running successfully.
Rate limits per method tier. Slack's Web API applies request limits per method, organized into tiers. In a normal incremental extraction you stay under the limit. During a historical backfill, the pipeline starts receiving 429s with a Retry-After header. If your retry logic does not respect that header with backoff, you lose entire windows of data without knowing it.
A missing scope does not throw an error, it produces missing data. The bot token needs the correct scopes for each endpoint: without channels:history, public channel history never arrives, without groups:history, neither does private channel history. auth.test keeps passing, the pipeline keeps showing green, and the warehouse ends up with an incomplete base that nobody catches.
A living history. Messages get edited and deleted after they are posted, and thread replies come through a separate endpoint. Since a message's ts does not change when it is edited, an incremental sync keyed on ts never revisits edits: capturing that requires a reprocessing strategy that most homegrown pipelines do not have.
Schema evolution with no warning. Message payloads vary by subtype, blocks and attachments change shape depending on the app that generated them, and the workspace's custom profile fields land as extra columns in the users table. The dbt model that used to run clean starts failing in production, or worse: it keeps running with a coalesce on a field that no longer exists. The inconsistency lands on the dashboard before it ever reaches your monitoring.
Observability that does not exist. A 200 OK on the HTTP call does not mean the data arrived complete. Without a record count per endpoint per run, without comparison against the previous window, without a volume drop alert, you are flying blind. The pipeline that ran successfully may have only brought in half the messages because a private channel fell outside the token's scope.
The worst case scenario is not the pipeline that breaks and sends an alert. It is the pipeline that runs successfully and delivers wrong data, and the response time metric that lands on the team's dashboard is already calculated on an incomplete base.
What becomes possible once Slack data lands in the warehouse
Before getting into the connector itself, it is worth documenting what you actually gain once the workspace's conversations, files, and users leave the SaaS and land modeled alongside the rest of your stack.
Internal engagement by channel, team, and time. With messages, users, and users_conversations in the warehouse, you measure message volume per channel per day, participation concentration by person, peak hours, and adoption by department by cross referencing profile email against your HR headcount base. Slack's native reports deliver pre aggregated numbers; any dimension the business wants requires the raw data in the warehouse.
First response time for internal support. With messages and thread_replies joined on thread_ts, you calculate first response time per thread in support channels, the distribution by resolver, and internal IT support SLAs. This calculation requires record level granularity and a join between messages and thread replies in the same database, something no native Slack dashboard offers.
Customer conversations cross referenced with the CRM. Slack Connect brings partners and customers inside the workspace. With conversations flagged as external, conversation_connect_invites, and team_external_teams, you identify which external workspaces the company talks to. Cross referencing the profile email in users with your CRM's account base, you can answer which accounts drive the most interaction, which shared channels went quiet, and whether conversation frequency picked up ahead of a renewal. This is only possible with Slack and the CRM in the same warehouse, joined on a business field.
Audit trail for access and integrations. team_access_logs logs IP, user agent, country, and access times per user, and team_integration_logs logs every change to integrations and apps. Syncing daily, the warehouse builds a continuous historical trail that one off API queries cannot deliver, a foundation for security reviews, compliance, and incident investigation, including cross referencing integration logs against schema changes in your own pipeline.
A map of the knowledge flowing through the workspace. files, file_comments, bookmarks, and pins show what gets shared, commented on, and pinned. search_messages, search_files, and search_all let you build a searchable index of everything that has been said and attached. In the warehouse, this archive cross references with project and product data to reveal which materials underpin the team's decisions and which channels concentrate critical knowledge.
What the connector includes
The Slack connector delivers forty endpoints ready to be materialized in your destination warehouse:
Endpoint | What it contains |
|---|---|
conversations | Public and private channels, group chats, DMs, and multi person conversations, with topic, purpose, and member count |
conversation_members | Members participating in each conversation |
messages | Messages posted in each conversation, with author, text, reactions, attachments, and permalink |
thread_replies | Replies within threads, with the same schema as messages |
bookmarks | Items saved as bookmarks in channels, with title, link, and author |
pins | Messages and files pinned in channels |
conversation_connect_invites | Slack Connect invites sent to external workspaces, with expiration and destination channel |
conversation_connect_invite_requests | Connection requests received through Slack Connect and their approval status |
users | Workspace users with profile, timezone, and admin and bot flags; custom profile fields land as extra columns |
users_get_presence | Each user's presence: online, away, last activity, and connection count |
users_conversations | Conversations each user participates in |
users_profile_fields | Definitions of the workspace's custom profile fields, with label, type, and possible values |
files | Files uploaded in the workspace, with type, size, author, shared channels, and URLs |
file_comments | Comments on files, with author and reactions |
files_remote | Remote files shared from external services, with the source app |
usergroups | Workspace user groups, with handle, description, and member count |
usergroup_members | Members of each user group |
team_info | Workspace information: name, domain, URL, and enterprise verification |
auth_teams | Workspaces the installed app has access to |
team_preferences | Workspace configuration preferences, such as channel permissions and integrations |
team_billable_info | Billable user flag by user_id |
team_access_logs | User access logs: IP, user agent, country, region, and times |
team_integration_logs | Changes to integrations and apps: service, change type, scope, and channel |
team_external_teams | External workspaces connected to yours through Slack Connect |
apps_activities | App activities in the workspace, with user, entity, and event type |
apps_event_authorizations | App event authorizations by workspace, enterprise, and user |
apps_datastore_query | Records queried from the Slack platform's app datastore |
emoji | Custom workspace emoji, with name and URL |
reactions | Emoji reactions applied to messages, files, and comments |
stars | Starred items: messages, files, comments, and channels |
reminders | Reminders created by users, with recurrence and time |
scheduled_messages | Messages scheduled for future delivery, with channel, text, and time |
search_messages | Message search results in the workspace, with score and channel |
search_files | File search results in the workspace, with score and metadata |
search_all | Combined search results for messages and files |
assistant_search_context | Assistant search context: messages, files, channels, and users per query |
list_items | Items from Lists, Slack's task manager, with custom fields |
workflows_featured | Featured workflows in the workspace and the channels they appear in |
functions_workflows_steps | Steps executed by platform workflows and functions, with inputs and outputs |
dnd_team_info | Do not disturb (DND) status per user, with the active window |
Six endpoints support incremental sync: messages and thread_replies with a cursor on ts, files and files_remote with a cursor on created, scheduled_messages with a cursor on post_at, and apps_activities with a cursor on created. The rest run as a full refresh, which makes sense for configuration tables that rarely change. Entity relationships are preserved at the destination: conversations are the parent of members, messages, and threads, bookmarks, and pins; users are the parent of presence, logs, and groups; files are the parent of comments.
How to authenticate
The connector's authentication requires a single field:
Token: Slack's Bot User OAuth Token, which starts with xoxb-, used to authenticate every call to the Web API.
Where to find it: at api.slack.com/apps, create an app or select an existing one, add the bot token scopes required by the endpoints you want to sync under OAuth & Permissions (channels:read, channels:history, groups:read, groups:history, im:read, im:history, mpim:read, mpim:history, users:read, files:read, emoji:read, pins:read, reactions:read, bookmarks:read, reminders:read, dnd:read, search:read, team:read, usergroups:read, among others), click Install to Workspace (or Reinstall to Workspace), and copy the token shown under Tokens for your workspace.
Erathos validates the credentials against Slack's auth.test endpoint before saving the connection. The full process, with the scope list per endpoint, is documented in the Slack connector guide.
Why outsource ingestion to Erathos
The premise behind the connector is straightforward: the engineering work of maintaining ingestion should not be your data team's responsibility. Cursor based pagination, rate limits per tier, scope validation, retry with backoff, schema evolution, failure alerts, volume drop alerts, backfills. All of that is the responsibility of whoever operates the ingestion platform. Once the connector is set up, the platform delivers:
End to end visibility into every run. Extraction time per endpoint, record counts per window, which windows were processed, where retries happened. When a metric shifts on the dashboard and some team opens a ticket with the data team, you have the full trail to find the root cause.
Alerts configured out of the box. Execution failures, volume drops per endpoint, and window delays are detected and routed through the alerting integrations your team already uses, such as Slack and email. You do not write that code.
Reprocessing as a supported operation. When you need to reprocess a window, for example to capture messages edited after a model logic change, or to fix a period affected by a token scope change, that is a platform operation, not an improvised DELETE plus INSERT sequence in the warehouse.
Correct pagination, rate limit management, schema evolution, and backfills are the platform's responsibility. The data team focuses on the model, not the plumbing.
Available pipelines
The Slack connector is available with the following destinations:
Slack to Azure SQL Server
Slack to Azure Synapse
Slack to BigQuery
Slack to ClickHouse
Slack to Databricks
Slack to PostgreSQL
Slack to Redshift
Slack to S3 Iceberg
Slack to Snowflake
Slack to Supabase
Get started now
Create your Erathos account and connect Slack to your warehouse in minutes. With your Slack app's Bot User OAuth Token, your first data lands at the destination with zero pipeline code to write, maintain, or monitor.
Conversation and collaboration data generated every day should not stay locked inside a SaaS, disconnected from the rest of your analytics model. Or worse: stuck in a homegrown pipeline that will keep costing your team's attention every month, forever.
See the full connector documentation.