jonathanchan / slack-autoarchive

If there has been no activity in a channel for awhile, you can automatically archive it using a cronjob.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Autoarchive Unused Slack Channels


  • python3
  • Install requirements.txt ( pip install -r requirements.txt )
  • An OAuth token from a Slack app on your workspace that has the following permission scopes:

Bot Token Scopes

  • channels:read
  • channels:manage
  • channels:history
  • channels:join
  • chat:write
  • groups:read

User Token Scopes

  • channels:history

Example Usages

BOT_SLACK_TOKEN must be exposed as environment variables before running your script. By default, the script will do a DRY_RUN. To perform a non-dry run, specify DRY_RUN=false as an environment variable as well. See sample usages below.

# Run the script in dry run archive mode...This will output a list of channels that will be archived.

# Run the script in active archive mode...THIS WILL ARCHIVE CHANNELS!

As an alternative to passing in environment variables through the command line, add a .env file to your project root:


However, it may be best to always pass the DRY_RUN variable through the command line to avoid accidental archives.

NOTE: On the first run with DRY_RUN=false it will only add the bot to every channel - only on a subsequent run will channels be archived.

How can I exempt my channel from being archived?

You can add the string 'noarchive' to your channel purpose or topic. (There is also a whitelist file or env variable if you prefer.)

What Channels Will Be Archived

A channel will be archived by this script is it doesn't meet any of the following criteria:

  • Has non-bot messages in the past 60 days.
  • Is whitelisted. A channel is considered to be whitelisted if the channel name contains keywords in the WHITELIST_KEYWORDS environment variable. Multiple keywords can be provided, separated by comma.

What Happens When A Channel Is Archived By This Script

  • *Don't panic! It can be unarchived by following these instructions However all previous members would be kicked out of the channel and not be automatically invited back.
  • You can always whitelist a channel if it indeed needs to be kept despite meeting the auto-archive criteria.

I don't trust the DRY_RUN option to not mess up my Slack org or cause confusion amongst my users.

Create a new Slack org to test this script against. Use the script to quickly create channels in your new Slack org. Edit to change the number of channels to create.

Known Issues

  • Since slack doesn't have a batch API, we have to hit the api a couple times for each channel. This makes the performance of this script slow. If you have thousands of channels (which some people do), get some coffee and be patient.

  • Channels that aren't archivable, such as #general, are reported as being archived. This can be ignored.


  • First build the docker image (in the root of the project)

docker build --tag autoarchive .

  • run the container (dryrun is set to true by default)

docker run autoarchive

  • if your ready to archive run

docker run -e DRY_RUN=false autoarchive


If there has been no activity in a channel for awhile, you can automatically archive it using a cronjob.

License:Apache License 2.0


Language:Python 99.0%Language:Dockerfile 1.0%