# Common Issues

## Connection issues

<details>

<summary>My Slack API token is not being accepted</summary>

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`.

</details>

<details>

<summary>The data flow connects but returns no data</summary>

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.

</details>

## Missing data

<details>

<summary>Bot messages are missing from my export</summary>

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.

</details>

<details>

<summary>Thread replies are not showing up</summary>

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.

</details>

<details>

<summary>I can't see messages from private channels</summary>

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.

</details>

<details>

<summary>File attachments and images are not in my export</summary>

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.

</details>

## Permission errors

<details>

<summary>I get a "missing_scope" error</summary>

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.

</details>

## Data discrepancies

<details>

<summary>Message counts in Coupler.io don't match what I see in Slack</summary>

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.

</details>

<details>

<summary>User list includes deactivated accounts</summary>

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`.

</details>

## Rate limits

<details>

<summary>The data flow is slow or times out on large workspaces</summary>

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.

</details>
