Slack Message Scraper
Pricing
Pay per event
Slack Message Scraper
Extract messages from Slack channels using browser tokens. Supports public/private channels, DMs, threads, and reactions. No OAuth app required.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
3
Monthly active users
11 hours
Issues response
7 days ago
Last modified
Categories
Share
Extract messages from Slack channels using browser tokens. Supports public channels, private channels, DMs, group messages, threads, reactions, and file attachments. No OAuth app installation required.
How It Works
This actor uses the Slack Web API with browser tokens (the same approach used by slackdump) to extract messages from any Slack channel you have access to. You provide your browser token and cookie, and the actor handles pagination, rate limiting, and user resolution automatically.
Two actions are available:
- Scrape Messages -- Extract messages from a specific channel, with optional thread replies, user details, and date filtering
- Scrape Channel List -- List all channels accessible to your account (public, private, DMs, group messages)
Authentication Setup
The actor requires two credentials from your Slack browser session:
1. Get your Slack Token (xoxc-...)
- Open Slack in your web browser at
https://app.slack.com - Open DevTools (F12 or Ctrl+Shift+I)
- Go to Application > Local Storage >
https://app.slack.com - Search for a value starting with
xoxc- - Copy the entire value
2. Get your Slack Cookie (xoxd-...)
- In the same DevTools window, go to Application > Cookies >
https://app.slack.com - Find the cookie named
d - Copy its value (starts with
xoxd-)
Finding a Channel ID
- Open the channel in Slack
- Right-click the channel name and select Copy link
- Paste the whole link into
channelId-- the channel ID is read out of it for you. You can also paste just the ID (e.g.,C01ABCDEFfromhttps://workspace.slack.com/archives/C01ABCDEF)
Channel IDs start with C (channel), G (private group) or D (direct message). A channel name
such as #general will not work, and neither will a workspace ID starting with T. Run the actor once
with Scrape Channel List to get the ID of every conversation your account can reach.
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
action | string | Yes | - | Scrape Messages or Scrape Channel List |
token | string | Yes | - | Slack browser token (xoxc-...) |
cookie | string | Yes | - | Slack d cookie (xoxd-...) |
channelId | string | For messages | - | Channel ID (e.g., C01ABCDEF) or the channel link from Copy link |
maxItems | integer | No | 100 | Maximum messages to extract (0 = no limit) |
includeThreadReplies | boolean | No | false | Fetch all replies for threaded messages |
includeUserDetails | boolean | No | true | Resolve user IDs to display names |
oldestTimestamp | string | No | - | Only fetch messages after this date -- YYYY-MM-DD, a full ISO timestamp, or a Slack message ts |
latestTimestamp | string | No | - | Only fetch messages before this date -- same formats as above |
If a value cannot be used -- a channel name where an ID belongs, a date the actor cannot read, a token and cookie swapped between the two fields -- the run says exactly which one and what to do about it, on the run status and in the output. It never comes back as a green run with an empty table.
Output Fields
Each message record includes:
| Field | Type | Description |
|---|---|---|
channel_id | string | Slack channel ID |
channel_name | string | Channel name |
channel_type | string | public_channel, private_channel, im, mpim, or group |
channel_purpose | string | The channel's stated purpose, as set in Slack |
channel_is_archived | boolean | Whether the channel has been archived |
channel_is_member | boolean | Whether your account is a member of the channel |
message_ts | string | Slack message timestamp (unique ID) |
thread_ts | string | Parent message timestamp (if threaded reply) |
text | string | Message text content |
user_id | string | Author's Slack user ID |
user_name | string | Author's display name |
user_real_name | string | Author's real name |
message_type | string | Message type (message, bot_message, etc.) |
subtype | string | Message subtype (channel_join, file_share, etc.) |
reactions | array | Emoji reactions (e.g., "thumbsup:3") |
reply_count | integer | Number of thread replies |
files | array | Attached files (name, size, URL) |
is_edited | boolean | Whether the message was edited |
permalink | string | Direct link that opens this message in Slack |
timestamp_iso | string | ISO 8601 timestamp |
Scrape Channel List returns the same columns, filled in for the channel itself: channel_purpose,
channel_is_archived and channel_is_member describe the channel, permalink opens it, timestamp_iso
is when it was created, and reply_count carries its member count.
Use Cases
- Workspace backup -- Archive channel history before leaving a workspace
- Compliance archival -- Export messages for legal or regulatory retention
- Knowledge base extraction -- Feed Slack conversations into AI training data or documentation
- Migration -- Export messages when moving from Slack to another platform
- Analytics -- Analyze communication patterns, response times, or topic trends
Rate Limiting
The actor respects Slack's published per-method rate limits and paces each one to its own ceiling, so it goes as fast as Slack allows and no faster. Very large channel histories -- especially with thread replies turned on -- still take time, because those limits are Slack's, not ours. Give a whole-workspace export a generous run timeout.
Terms of Service
This tool is intended for users extracting their own workspace data for backup, migration, or archival purposes. Users are responsible for complying with their organization's policies and Slack's Terms of Service. The actor only accesses data that the authenticated user already has permission to view.
Need More Features?
If you need additional data fields, custom output formats, or a scraper for another platform, file an issue or get in touch. We customize scrapers to fit specific requirements.