{"id":19778693,"url":"https://github.com/envoy/tap-slack","last_synced_at":"2025-10-28T01:16:33.588Z","repository":{"id":39881336,"uuid":"186046224","full_name":"envoy/tap-slack","owner":"envoy","description":"Singer.io tap for extracting data from the Slack Web API","archived":false,"fork":false,"pushed_at":"2023-07-20T14:57:43.000Z","size":97,"stargazers_count":1,"open_issues_count":4,"forks_count":25,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-30T21:38:55.995Z","etag":null,"topics":["etl","singer","singer-io","singer-tap","slack","slack-api"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/envoy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.mg","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-10T19:50:50.000Z","updated_at":"2023-03-07T11:21:03.000Z","dependencies_parsed_at":"2024-11-12T05:30:45.884Z","dependency_job_id":"f266802c-b585-4cb2-b262-c17679349ade","html_url":"https://github.com/envoy/tap-slack","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/envoy/tap-slack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoy%2Ftap-slack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoy%2Ftap-slack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoy%2Ftap-slack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoy%2Ftap-slack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/envoy","download_url":"https://codeload.github.com/envoy/tap-slack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoy%2Ftap-slack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271073387,"owners_count":24694538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["etl","singer","singer-io","singer-tap","slack","slack-api"],"created_at":"2024-11-12T05:30:37.789Z","updated_at":"2025-10-28T01:16:33.495Z","avatar_url":"https://github.com/envoy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![slack icon](etc/slack_icon.png) tap-slack\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![Python 3.7](https://upload.wikimedia.org/wikipedia/commons/f/fc/Blue_Python_3.7_Shield_Badge.svg)](https://www.python.org/downloads/release/python-370/)\n\nSinger.io tap for extracting data from the Slack Web API\n\n## Installation\n\nIt is highly recommended installing `tap-slack` in it's own isolated virtual environment. For example:\n\n```bash\npython3 -m venv ~/.venvs/tap-slack\nsource ~/.venvs/tap-slack/bin/activate\npip3 install tap-slack\ndeactivate\n```\n\n## Setup\n\nThe tap requires a [Slack API token](https://github.com/slackapi/python-slackclient/blob/master/documentation_v2/auth.md#tokens--authentication) to interact with your Slack workspace. You can obtain a token for a single workspace by creating a new [Slack App](https://api.slack.com/apps?new_app=1) in your workspace and assigning it the relevant [scopes](https://api.slack.com/docs/oauth-scopes). As of right now, the minimum required scopes for this App are:\n - `channels:read`\n - `channels:history`\n - `users:read`\n\n## Usage\n\nIt is recommended to follow Singer [best practices](https://github.com/singer-io/getting-started/blob/master/docs/RUNNING_AND_DEVELOPING.md#running-and-developing-singer-taps-and-targets) when running taps either [on their own](https://github.com/singer-io/getting-started/blob/master/docs/RUNNING_AND_DEVELOPING.md#running-a-singer-tap) or [with a Singer target](https://github.com/singer-io/getting-started/blob/master/docs/RUNNING_AND_DEVELOPING.md#running-a-singer-tap-with-a-singer-target).\n\nIn practice, it will look something like the following:\n\n```bash\n~/.venvs/tap-slack/bin/tap-slack --config slack.config.json --catalog catalog.json | ~/.venvs/target-stitch/bin/target-stitch --config stitch.config.json\n```\n\n## Replication\n\nThe Slack Conversations API does not natively store last updated timestamp information about a Conversation. In addition, Conversation records are mutable. Thus, `tap-slack` requires a `FULL_TABLE` replication strategy to ensure the most up-to-date data in replicated when replicating the following Streams:\n - `Conversations`\n - `ConversationMembersStream`\n - `ConversationHistoryStream`\n\nThe `Users` stream _does_ store information about when a User record was last updated, so `tap-slack` uses that timestamp as a bookmark value and prefers using an `INCREMENTAL` replication strategy.\n\n## Table Schemas\n\n### Conversations\n\n - Table Name: `conversations`\n - Description:\n - Primary Key Column: `id`\n - Replication Strategy: `FULL_TABLE`\n - API Documentation: [Link](https://api.slack.com/methods/conversations.list)\n\n### Conversation Members\n\n - Table Name: `conversation_members`\n - Description:\n - Primary Key Column: N/A\n - Replication Strategy: `FULL_TABLE`\n - API Documentation: [Link](https://api.slack.com/methods/conversations.members)\n\n### Conversation History\n\n - Table Name: `conversation_history`\n - Description:\n - Primary Key Column: N/A\n - Replication Strategy: `FULL_TABLE`\n - API Documentation: [Link](https://api.slack.com/methods/conversations.history)\n\n### Users\n\n - Table Name: `users`\n - Description:\n - Primary Key Column: `id`\n - Replication Strategy: `INCREMENTAL`\n - API Documentation: [Link](https://api.slack.com/methods/users.list)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenvoy%2Ftap-slack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenvoy%2Ftap-slack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenvoy%2Ftap-slack/lists"}