For the complete documentation index, see llms.txt. This page is also available as Markdown.

Slack

Slack is a team messaging platform used for real-time communication, project collaboration, and internal announcements. With Coupler.io, you can pull Slack data — messages, channels, and users — into spreadsheets, databases, or AI tools for analysis and reporting.

Why connect Slack to Coupler.io?

  • Audit and archive messages by exporting channel conversations to Google Sheets, Excel, or BigQuery on a schedule.

  • Track team activity by analyzing message volume, user participation, and channel growth over time.

  • Combine Slack data with other sources using Join or Append transformations — for example, match users to HR data or append messages from multiple channels.

  • Feed Slack data to AI tools like ChatGPT, Claude, or Gemini to summarize conversations, classify messages, or surface insights.

Prerequisites

  • A Slack account with access to the workspace you want to export.

  • A Slack API token (User OAuth Token or Bot Token) with the appropriate scopes: channels:read, channels:history, users:read, and search:read for message search.

  • Admin or member access to the channels you want to pull data from.

Quick start

1

Create a new data flow in Coupler.io. Log in to your Coupler.io account, go to the Data Flows section, and click Add data flow. Choose Slack as your source.

2

Enter your Slack API token. In the source settings, paste your Slack User OAuth Token into the API token field. You can generate this token in your Slack app configuration at api.slack.com under OAuth & Permissions.

3

Select an entity. Choose one of the available entities: Messages, Channels, or Users.

4

Set a search query (Messages only). If you selected Messages, enter a search query to filter which messages to pull. Use Slack search modifiers like in:#channel-name or from:@username to narrow results. This field is required for the Messages entity.

5

Choose your destination. Select where you want the data to go — Google Sheets, Excel, BigQuery, Looker Studio, or an AI destination like ChatGPT or Claude.

6

Run your data flow. Click Run to execute the data flow manually. Review the results in your destination to confirm the data looks correct.

Available entities

Entity
Description

Messages

Exported messages matching a Slack search query (requires a User token)

Channels

List of public channels in your workspace, including metadata

Users

List of workspace members with profile and account details

Slack data overview

Coupler.io pulls three types of data from Slack: messages from channels or searches, channel metadata, and user profiles. Here's what's available in each entity.

Entities

Entity
What it contains

Messages

Text content, timestamps, authors, and reactions for messages matching your search query

Channels

Channel names, IDs, member counts, topics, and creation dates

Users

User profiles including name, email, role, timezone, and status

Messages

Message fields

Field
Description

ts

Timestamp of the message (Unix format)

text

Full text content of the message

user

User ID of the message author

username

Display name of the author

channel

Channel where the message was posted

type

Message type (e.g., message)

permalink

Direct link to the message in Slack

reactions

Emoji reactions attached to the message

reply_count

Number of thread replies

attachments

Metadata about file attachments (not file content)

Channels

Channel fields

Field
Description

id

Unique channel ID

name

Channel name

is_private

Whether the channel is private

num_members

Current member count

topic

Channel topic text

purpose

Channel purpose/description

created

Channel creation timestamp

is_archived

Whether the channel is archived

Users

User fields

Field
Description

id

Unique user ID

name

Slack username (handle)

real_name

Full display name

email

User email address

is_admin

Whether the user is a workspace admin

is_bot

Whether the user is a bot account

tz

User's timezone

title

Job title from profile

status_text

Current status message

deleted

Whether the account has been deactivated

Common field combinations

  • Message activity dashboard: channel, username, ts, text, reply_count, reactions

  • Channel health report: name, num_members, topic, is_archived, created

  • Team directory: real_name, email, title, tz, is_admin, is_bot

  • Bot vs. human breakdown: is_bot, name, deleted from the Users entity

Use cases by role

  • Export messages from project channels to review discussion history or create searchable archives.

  • Track reply counts and reactions to identify high-engagement messages or team blockers.

  • Use the Append transformation to combine messages from multiple channels into a single report.

  • Pull the Users entity to maintain an up-to-date team directory in Google Sheets.

  • Filter out bot accounts using the is_bot field to get accurate headcount numbers.

  • Join Users data with HR system exports to cross-reference Slack handles with employee records.

  • Use message timestamps and channel data to analyze communication volume over time.

  • Send Slack conversation exports to ChatGPT or Claude for AI-powered summarization or sentiment tagging.

  • Aggregate message counts by channel or user to build activity dashboards in Looker Studio or BigQuery.

Platform-specific notes

  • The Messages entity requires a User OAuth token — bot tokens do not support search:read and will not return message data.

  • Slack's search API returns results in relevance order by default; use modifiers like before: and after: with the date picker to define time ranges.

  • Private channel messages are only accessible if the token owner is a member of that channel.

  • Bot-posted messages may not appear in search results depending on how the bot posted them (e.g., using chat.postMessage vs. webhooks).

  • The attachments field contains link and metadata information — Coupler.io does not download or store actual files or images from Slack.

Slack common issues

Connection issues

My Slack API token is not being accepted

Double-check that you're using a User OAuth Token (starts with xoxp-), not a Bot Token (xoxb-). Bot tokens lack the search:read scope required for the Messages entity. Generate a new user token at api.slack.com under OAuth & Permissions and make sure the following scopes are added: channels:read, channels:history, users:read, and search:read.

The data flow connects but returns no data

For the Messages entity, this usually means your search query returned no results. Test the same query directly in Slack's search bar to verify it returns messages. Also confirm your token has access to the channels referenced in the query.

Missing data

Bot messages are missing from my export

Slack's search API does not reliably index messages posted by bots, especially those sent via incoming webhooks or the postMessage API without a linked user identity. This is a Slack platform limitation. If you need bot messages, consider exporting the full channel history using a bot token with channels:history scope — though this requires a different approach than the search-based Messages entity.

Thread replies are not showing up

Thread replies are separate messages in Slack's data model and may not surface in a general channel search. Try a more targeted search query using the in:#channel modifier combined with keywords from the thread. Full thread export is not natively supported by Slack's search API.

I can't see messages from private channels

Private channel messages are only accessible if the user whose token you're using is a member of that channel. Ask a channel member to generate the token, or have a workspace admin add the token owner to the channel.

File attachments and images are not in my export

Coupler.io exports attachment metadata — the file name, type, and Slack-hosted URL — but does not download or transfer the actual files or images. This is by design and reflects how Slack's API exposes attachment data.

Permission errors

I get a "missing_scope" error

This means your token is missing one or more required OAuth scopes. Go to your Slack app settings at api.slack.com, navigate to OAuth & Permissions, and add the missing scope. Then reinstall the app to your workspace to generate a new token with the updated permissions.

Data discrepancies

Message counts in Coupler.io don't match what I see in Slack

Slack's search API has a result limit and returns messages in relevance order, not strict chronological order. Very large result sets may be paginated or capped. To reduce discrepancies, narrow your search query with specific date ranges using before: and after: modifiers and break large exports into smaller time windows.

User list includes deactivated accounts

The Users entity includes all workspace members, including deactivated ones. You can identify deactivated accounts using the deleted field — filter your destination sheet to show only rows where deleted is false.

Rate limits

The data flow is slow or times out on large workspaces

Slack applies rate limits on its search and users APIs (typically Tier 2: ~20 requests/minute). For large workspaces or broad search queries, exports may take longer. Narrow your search query to a specific channel and date range to reduce the volume of requests and speed up the export.

Slack FAQ

Which Slack token type should I use — User or Bot?

Use a User OAuth Token (starts with xoxp-). The Messages entity relies on Slack's search API, which requires the search:read scope — and that scope is only available to user tokens, not bot tokens. For Channels and Users, a bot token with the right scopes would technically work, but using a user token keeps things consistent across all three entities.

Can I export messages from private channels?

Yes, but only if the user whose token you're using is a member of that private channel. If your token belongs to someone outside the channel, Slack won't return those messages. Ask a channel member to generate the token or have an admin add the token owner to the channel first.

Why are bot-posted messages missing from my export?

Slack's search API doesn't reliably index messages posted by bots, particularly those sent via webhooks or automated integrations. This is a Slack platform limitation, not a Coupler.io issue. Currently, there's no workaround within the search-based Messages entity — bot messages may simply not appear in search results.

Can I export files and images shared in Slack?

Coupler.io exports attachment metadata — the file name, type, and Slack-hosted URL — but does not download or transfer the actual files or images. If you need the files themselves, you'd need to access them directly via the URLs provided in the export using Slack's file download API.

How do I export thread replies?

Thread replies are separate messages in Slack's data model and may not surface in standard channel search results. Try using a targeted search query with keywords from the thread combined with the in:#channel modifier. Full thread-level export is not directly supported by Slack's search API at this time.

Can I count messages per day or per channel automatically?

Yes — export your messages to Google Sheets or BigQuery, then use the Aggregate transformation in Coupler.io to group by channel or date and count message rows. You can also use Looker Studio or a pivot table in Sheets to visualize message volume over time.

Can I combine messages from multiple Slack workspaces?

Yes. Create a separate data source for each workspace (each with its own API token), then use the Append transformation in your data flow to merge them into a single output. Add a workspace label to each source so you can distinguish records in your destination.

Can I transfer Slack messages to another chat tool like Google Chat?

Coupler.io exports Slack data to destinations like Google Sheets, BigQuery, or AI tools — it doesn't write data back into chat platforms. If you need to migrate messages to Google Chat or another tool, you'd need a dedicated migration service for that purpose.

How do I filter out deactivated users from the Users export?

The Users entity includes deactivated accounts with a deleted field set to true. In your destination (e.g., Google Sheets), filter the deleted column to show only false values. You can also use the Aggregate transformation to separate active and inactive users before sending data to your destination.

For details on what fields are available in each entity, see the Data Overview article. If your export is returning unexpected results or missing data, check Common Issues for solutions.

Last updated

Was this helpful?