How the Slack Marketplace actually works

A teardown of the mechanics: who builds apps, who maintains them, who carries the liability, what an app can actually reach, which guardrails exist — and Slack's own stated reasoning for each design choice. Every claim is cited; interpretation is labelled as such.

The thesis in one line. Slack's marketplace is built on a single asymmetry: a third-party app can do almost nothing until a human explicitly grants it a token, and it can initiate contact with almost no one afterwards. Every surface Slack ships — ephemeral messages, App Home, trigger_id-gated modals, suggested prompts — is a substitute for the one thing apps are not allowed to do: reach out first. The commercial and legal layers follow the same shape: Slack reviews, hosts the listing and takes no cut, while the developer keeps the data, the support burden, and the liability.
01

What the Marketplace is — and is not

A reviewed public catalogue of ~2,700 listings, sitting on top of a far larger population of ~1.7M apps used weekly. The catalogue is the small, governed tip of the platform; most Slack apps are customer-built and never listed.

2,694
app listings in Slack's own en-US marketplace sitemap
measured 2026-09-04 [35]
1.7M+
apps used on the platform weekly
Slack partners page [29]
1M+
developers building Slack apps
Slack [30]
52
Slack apps used by the average enterprise customer
Slack [30]
690%
YoY growth in AI-enabled app creation
Slack partners page [29]
200k+
paid customers reachable via the Marketplace
Slack partners page [29]
INTERPRETATION The gap between 2,694 listings and 1.7M weekly-used apps is the most important number on this page. Whatever the Marketplace is, it is not where most Slack app activity happens — it is a curated discovery and trust layer bolted onto a much larger self-serve platform. A marketplace designed only around the catalogue would be designing for a rounding error of the traffic.
NAMING & DATING CAVEAT The “App Directory” was renamed “Slack Marketplace”, but the rename is incomplete in the machinery: the app_requested event still carries app_directory_url and is_app_directory_approved, security correspondence still comes from appdirectory-security@slack-corp.com, and legacy CSS/analytics identifiers persist.[18] Separately, Slack's developer docs moved from api.slack.com to docs.slack.dev (old URLs 301/302 redirect) and almost none of them carry a “last updated” date. Only the Developer Policy (2024-12-10)[5] and the API ToS (2025-10-10)[6] are hard-dated. Treat every undated page as a live document.
02

Actor & ownership map

Four actors, three trust boundaries. Slack owns the storefront and the review; the developer owns the code, the servers, the data and the liability; the customer owns the decision; the end user owns the consent.

TRUST BOUNDARY — Slack / Salesforce Marketplace Review Team 2-phase review · security review · delisting rights Slack platform + Marketplace listing • hosts the storefront, categories, ratings, placement • issues + revokes OAuth tokens, enforces scopes • rate-limits, audit logs, admin policy engine NO billing · NO certification · NO warranty of 3rd-party apps Slack also ships first-party apps into its own Marketplace (Google Calendar, Meet, Gmail, Outlook) ≈1.5% of sampled listings show Developer: Slack TRUST BOUNDARY — Third-party dev App code + infrastructure their servers · their uptime · HTTPS required Developer carries • maintenance + support (2 business days) • billing, pricing, payments — entirely self-run • privacy policy, retention, deletion in 14 days • breach notification to users AND Slack indemnifies Slack · app supplied “as is” Live app config is LOCKED after publish — any scope/feature change needs re-review. Staging app required to iterate. TRUST BOUNDARY — Customer workspace / Enterprise Grid org End user (installer / authoriser) grants scopes at the OAuth screen — the consent moment any member can install unless approval is on Workspace Owner / app manager approval gate · allowlist · restrict · revoke Workspace content messages · files · profiles · channel lists customer is the data controller submits for review approves → dev publishes discovery OAuth scope grant → token may gate the install data egress Legend Slack-operated Developer-operated Customer-side Liability / control point Data Consent / auth flow Trust boundary

Fig 1. Who builds, hosts, maintains and carries liability. Note the shape: Slack's boundary contains the storefront and the token authority but never the app's data; the developer's boundary contains the code and every liability; the customer's boundary contains both the consent and the content that leaves it.

ActorBuildsHosts / runsMaintainsCarries liability
Slack / Salesforce the platform, APIs, and a small set of first-party listings ~1.5% the storefront, token authority, rate limiter, admin policy engine the platform; explicitly not third-party apps [8] disclaims it for third-party apps — no certification, no warranty [7][8]
Third-party developer the overwhelming majority of listings all app code + infrastructure, on their own servers, HTTPS/TLS 1.2+ [1] everything — support in 2 business days, adopt new security features, keep listing current [2] the developer — indemnifies Slack, notifies users + Slack on breach [5]
Customer (admin) internal apps for their own workspace only nothing on Slack's side; their own internal apps their app policy — allowlists, approvals, revocations [18] the decision to admit the app, and the data it releases CONTROLLER
End user nothing nothing their own authorisation, revocable individually [21] grants the scopes; is the party the whole consent design protects
03

Who builds what — and the three states of an app

Slack does not model internal, unlisted and listed apps as different product types. It is one app object moving through three distribution states, which is why the same dashboard serves a five-person hack and a listed ISV product.

StateReachOAuth neededReviewedDocs term
Internal / customer-builtone workspaceno — single install tokenno“Undistributed app”
Unlisted distributedany workspace with the linkyesno“Unlisted distributed app”
Marketplace-listedpublic catalogueyestwo-phase“Listed distributed app”

Source: Slack distribution docs [1]

Slack builds more of the catalogue than people assume — but very little of it

Slack publishes first-party apps into its own Marketplace under Developer: Slack. Verified examples include Google Calendar, Google Meet, Slack for Gmail and Slack for Outlook[30] — that is, the Google Workspace and Microsoft 365 integrations are built and maintained by Slack, not by Google or Microsoft. A systematic sample of 332 listings found 5 with Developer: Slack, ≈1.5%, implying roughly 40 first-party listings.[35]

MEASUREMENT, NOT A PUBLISHED FIGURE The ~1.5% first-party share is our own every-Nth sample of Slack's marketplace sitemap, not a Slack statistic. It is an order-of-magnitude estimate: the sample is systematic rather than random, and some listings do not expose the Developer field.

The capability classes Slack keeps for itself

Product surface, not apps

  • Slackbot — now positioned as “your AI teammate”, and itself an MCP client that third-party apps connect into [33]
  • Workflow Builder — no-code automation, paid plans only [27]
  • Agentforce, Enterprise Search, Slack AI, Slack Atlas — product features, never listings, never reviewed [29]

Connector steps — Slack-only by construction

  • Slack-built Workflow Builder steps for Google Sheets, Dropbox, Excel, GitHub Enterprise Server
  • Slack states they “cannot be developed outside of Slack” [49]
  • No third-party equivalent exists — see the Workflow Builder dead end below

Where the asymmetry favours customers

  • Internal apps get conversations.history at 50+/min, up to 1,000 objects
  • Commercially-distributed non-Marketplace apps get 1/min, max 15 objects [10]
  • Marketplace apps are unaffected — listing buys back your rate limit

Distribution surfaces and their gates

Activating public distribution requires OAuth 2.0 implemented and TLS on every endpoint — OAuth redirect URLs, interactivity request URLs, Block Kit options-load URLs and Events API request URLs; TLS 1.2+ has been mandatory since 19 Feb 2020.[1] Activation yields an embeddable Add to Slack button, a shareable install URL, and the <meta name="slack-app-id"> tag. Deactivating it removes the app from every workspace except its home workspace — and once listed, you cannot deactivate this way at all; you must discontinue the listing.[1]

Org-ready / org-wide (Enterprise Grid). Opt in via Org Level Apps; the manifest gains "org_deploy_enabled": true. The app is installed once at org level with a single org-wide token, then Org Admins grant it to specific workspaces. Two things developers get wrong: org-level install grants no additional privileges, and the app is not auto-added to any workspace. Detect with is_enterprise_install, key your storage on enterprise_id, and handle global user IDs beginning W.[25][50]

App manifests make config portable and version-controllable — and there are two incompatible versions: Deno SDK apps use v2 exclusively, regular apps may use v1 or v2, and an absent version_metadata is treated as v1.[46]

THE WORKFLOW BUILDER DEAD END — the platform's largest distribution gap “Steps from Apps” was retired on 26 Sep 2024 along with legacy Workflow Builder, with no direct migration path; workflows.stepCompleted, workflows.stepFailed and workflows.updateStep all ceased functioning.[49] The replacement — custom steps — carries a hard blocker: “Apps containing workflow steps cannot be distributed publicly or submitted to the Slack Marketplace.”[27] Slack's own suggested workaround is to publish your code as a public repository. Coded/Deno workflow apps are likewise “currently not eligible for listing”[28], and triggers:* plus workflow.steps:execute sit on the unacceptable-scopes list.[3] A 2023 changelog conceded there was “no clear path forward” for existing distributed apps that provided steps.[49]

Net: as of this research date, an ISV that wants its functionality inside Workflow Builder has no supported route. Connector steps are Slack-only. VERIFY BEFORE RELYING this is a 2023–24 claim and the most likely of any here to have quietly changed.
INTERPRETATION The pattern across connector steps, Workflow Builder and Agentforce is consistent: Slack opens the messaging surface generously to third parties and keeps the automation and orchestration surface for itself. A partner can be a participant in a conversation but not a primitive in the workflow engine. That is a defensible platform choice, but it means the marketplace's ceiling is set by Slack's product roadmap, not the developer's imagination.

Legacy models: what is dead, dying, and unexpectedly resurrected

ModelStatusDetail
Classic apps (old bot-scope model)PAUSEDCannot be newly created since Apr 2024. Deprecation slipped Sept 2025 → Mar 2026 → May 2026 → Nov 2026, then paused entirely on 8 Dec 2025: “Based on feedback from our customers and developer community, we have decided to pause this migration. Classic apps will continue to work for the foreseeable future.” [26]
Legacy custom botsDEADAPI calls rejected from 31 Mar 2025; apps removed from channels, tokens revoked, config pages withdrawn [47]
RTM APICLOSEDGranular-permission apps cannot use RTM at all — only classic apps can. Slack calls it “ancient” and steers to Events API or Socket Mode [48]
Steps from AppsDEADRetired 26 Sep 2024, no migration path [49]
Verification tokensDEPRECATEDReplaced by signing secrets or mutual TLS [4]
SOURCE CONFLICT The Sept-2024 changelog page still says “Beginning November 16, 2026, classic apps will no longer function” in its body while carrying an inline banner announcing the pause.[47] Treat the 8 Dec 2025 pause as authoritative.[26]
04

Getting listed — the review pipeline

Two human review phases on top of automated tests, with an install-count floor that must hold for the entire review, and a queue that resets every time you resubmit in phase one.

resubmit → QUEUE POSITION RESETS resubmit after first feedback → queue position kept Eligibility ~25 disqualifying categories Public distribution OAuth 2.0 + TLS 1.2+ hard prerequisite Automated tests Slack blocks submission until all flags fixed Preliminary review up to 10 business days listing, docs, scope reasons Functional review up to 10 weeks named reviewer installs it Approved → you publish at a time of your choosing live config then LOCKED Advanced Security Review — may occur at ANY time, unannounced web + network scanning · manual least-privilege scope verification architecture review · asking you to stop may itself mean “Failed” Explicitly NOT a certification INSTALL FLOOR: 10 active workspaces + 10 weekly active users must hold for the ENTIRE review duration · 10 → 5 (Aug 2025) → 10 (Jul 2026) Legend forward path costly loop cheap loop

Fig 2. The pipeline. The two resubmission loops are the operationally important detail: a preliminary-review bounce resets your queue position and restarts the clock on the functional review; a functional-review bounce after first feedback does not.[2][4]

The install-count floor has whipsawed — get this one right

DateThresholdNote
pre-Aug 202510 active workspaces—
11 Aug 2025reduced to 5submissions below auto-blocked; in-review apps exempt [32]
Jul 2026back up to 10“Your app needs to stay at 10 or more installed workspaces throughout the entire duration of the review” [31]

“Active” means used in the past 28 days, excluding sandboxes. Security & compliance partners using the Discovery API are exempt.[3]

Categorically unsuitable — the ~25 disqualifiers

Data extraction

  • export or back up message data
  • use restricted scopes: admin.*, identity.*, search:read
  • circumvent the free-tier 90-day history limit
  • use Slack data to train LLMs

Not really a Slack app

  • no functionality inside Slack
  • embed Slack into another site
  • only use Sign in with Slack
  • replicate Slack client functionality
  • provide only an MCP server with no meaningful in-Slack functionality

Risk & harm

  • destructive behaviour — self-destructing messages, bulk file/message deletion
  • remote server execution via downloadable script
  • share third-party service accounts between users
  • financial transactions, crypto, NFT minting
  • sentiment analysis unless aggregate and explainable

Not ready

  • private beta, still being built, not fully tested
  • below the install floor AUTO-BLOCK
  • request an unnecessarily large number of scopes
  • coded workflows — ineligible outright
SLACK'S STATED POSITION — residual discretion “This list is not exhaustive — the Slack Marketplace team may use their judgment to deny any app from being listed.”[2]

What the reviewer actually checks

AreaRequirementFailure mode Slack names
Landing pagepublicly accessible, purpose-built for the Slack app, explains how it works in Slack, clear install path and post-install next stepsbehind a login; a PDF, doc or repo instead of a real page
Support pagepublic, contact route that does not require creating another account, response within 2 business daysGitHub Issues or Twitter alone is insufficient
Privacy policywhat is collected, how used, retention period, how to access/transfer/delete, email or webform contactphysical address alone insufficient; missing retention or deletion mechanics
Scopesleast privilege; explain how each is used, not what it doesno scopes for future functionality — “We will only approve scopes related to functionality we can test”
Privacy modelapp must not grant access to anything the user could not already access in Slack; must hold in Slack Connect and for guestsexposing private channel names to non-members; exercising restricted actions
UXvisible feedback, input hints, actionable errors, predictable output, clear attributionone-way doors; dead ends; “Oops! something went wrong!” instead of “Type /invite @bestapp and try again”
Listing assets≤10-word short description; distinctive icon not resembling Slackbot; screenshots 1600×1000 (8:5), <2 MB; video 30–90 s, public YouTube, captions on, ads off, production app in a realistic workspacelow-quality or unrelated images; screencasts of the test app
Enhanced review triggers*:history, files:read, canvases:read, user-token groups:write/mpim:write, conversations.connect:write, admin.*admin.* unlikely to be approved outside the partner program

Sources: Marketplace guidelines & requirements [3], review guide [4]

SLACK'S STATED POSITION — review is not QA, and cannot be rushed “our review is not a replacement for Quality Assurance testing” — and on timelines, “we will not be able to skip or accelerate the review process in order to coordinate with your launch.” Slack recommends budgeting “at least a few weeks to spare.”[2][4]
TIMELINE CONFLICT The submission guide says the functional review takes “up to 10 weeks” without qualification; the review guide says 10 weeks for new submissions and 6 weeks for published apps resubmitting changes. Both pages defer to the live estimate shown on your submission page in app settings.[2][4]

Newest category: MCP apps get their own checklist

MCP submissions require the mcp:connect bot scope, an HTTPS MCP server URL you own, OAuth via external_auth_providers with redirect URI https://oauth2.slack.com/external/auth/callback, and a successful Fetch Tools run. Every tool needs a human-readable title, an accurate description, a readOnlyHint annotation and a valid inputSchema. Slack states that “vague, misleading [descriptions]… will be grounds for rejection”; iframes must be scoped to the triggering tool call and must not replicate your whole product. Post-approval, iframe divergence “may result in app suspension” and sustained tool failures are “subject to auto-off enforcement.”[33]

05

Commercials & lifecycle

Listing is free with no revenue share, billing is entirely self-managed, and the listing carries a display-only price label. In exchange the developer accepts eight ongoing obligations and a config freeze.

No fee, no commission

  • No listing fee, no commission, no revenue-share clause in the Marketplace Agreement, API ToS, guidelines or partner page
  • Marketplace Agreement grants Slack a “royalty-free” distribution licence — no reciprocal payment [8]
  • Partner FAQ: “We offer access to all of our Slack APIs and integration patterns for free to partners.” [29]
  • API ToS permits charging for your app but bars selling or syndicating API access [6]

Zero billing infrastructure

  • No Slack-operated checkout, subscriptions or entitlements
  • Guidelines: “you should handle payments securely and provide transparent information on your billing policy” [3]
  • Listing records a display-only label: Paid · Paid with free trial · Free and paid plans · Free · Included with service subscription
  • Automation-platform apps must gate installs to paid Slack workspaces via team.billing:read [3]

Partner tiers

  • Developer — sandboxes, core APIs, toolkit
  • Marketplace Partner — listing, roadmap visibility, partner badge, webinars
  • Agent Partner — co-marketing, betas, advisory board, dedicated partner manager, early access to advanced agentic capabilities
  • Framing: “The more you build, the more the program invests.” [29]

Placement is discretionary

  • Ratings “may be used to determine the placement of your Application… subject to Slack's ability to change placement at Slack's sole discretion” [8]
  • Inadequate support “may result in low ratings, less prominent placement, or removal” [8]
  • No documented application process for Featured
  • First four category slots: MCP Registry, Featured, AI Apps & Assistants, Enterprise-Ready — the two newest categories sit at the front
INFERRED FROM ABSENCE The “no revenue share” finding rests on the absence of any such clause across four legal documents plus one positive statement that APIs are free to partners. We found no affirmative Slack statement of the form “Slack takes no cut.” Given the Salesforce AppExchange relationship, verify directly before relying on it in a negotiation.

There is no app certification — and claiming one is prohibited

SLACK'S STATED POSITION — the load-bearing disclaimer “The Slack Application Security Review is not a certification, or proof of a secure application.”[7]

And contractually: “notwithstanding any Security Review conducted by Slack, Slack does not ‘certify,’ warrant or support the Application. You further represent and warrant that you will not make any externally-facing statements to the contrary, including any statements that imply a Slack endorsement, certification, affiliation or partnership.”[8]

The only badge Slack documents is the partner badge at Marketplace Partner tier and above. RED HERRING “Slack Certified” redirects to a human professional-credential program, not an app certification — do not conflate the two.[29]

The live app is locked after publish

SLACK'S STATED POSITION “Once your app is published in the Slack Marketplace, the live version of your app is locked. This means that you will not be able to make any changes to your app's configuration, features, or scopes without re-submitting the app for review.”[2]

Dashboard changes do not affect the published app until re-review passes, so Slack requires you to maintain a separate staging app cloned from your published manifest and distributed so reviewers can test it. The concrete failure mode Slack calls out: adding un-reviewed scopes to your install link makes installs error out for customers. A video demo and test app are required for new functionality, new scopes, or anything touching the privacy model — but not for display info, pricing, language support or URL updates. “If in doubt, provide a video demo.”[2]

Eight post-approval obligations

#ObligationEnforcement
1Keep the listing current — functionality, pricing, visualsdelisting
2Maintain quality and performance at or above submission leveldelisting
3Timely customer support“If we do not receive a prompt reply to our own messages to you, we may de-list your app.”
4Regularly adopt new platform security featuressubscribe to the changelog
5Keep contact details current and respond to Slacktoken revocation if you ignore security issues
6Add at least one app collaboratorotherwise config dies when the creator leaves the workspace
7Resubmit on substantial change to features, purpose or functionalitydelisting without prior notice
8App is actively used“If you do not plan to update your app, or people continue not to use your app, we will delist your app after communication with you.”

Source: Slack Marketplace distribution guide [2]

The enforcement ladder

Slack contacts you when expectations are not met, users report spammy behaviour, broken functionality or poor support, when uninstalls increase, when error rates rise, or when your support/privacy links break. If you do not respond, Slack “will reach out again while simultaneously delisting your app to protect users.” Delisting happens without prior notice when the landing page or install flow is broken, the app appears abandoned, or functionality changed substantially without resubmission.[2]

InstrumentWhat it permits
Marketplace Agreement §9immediate removal for IP violation, illegality or breach; “reserves the right to suspend and/or bar any developer from the Slack Marketplace at its sole discretion, without prior notice” [8]
Marketplace Agreement §7removal if Slack determines “in its sole discretion” the app is not meeting acceptable standards [8]
Marketplace Agreement §11either party may terminate on 10 days' written notice — email suffices [8]
API ToS“We may terminate the Contract with or without cause, and without notice to you.” [6]
Developer PolicyMarketplace removal, token revocation, developer suspension, user notification, legal action. “we may or may not provide notice before taking action… we may periodically audit Applications. If you fail an audit before notifying us of any issues, penalties will be more severe.” [5]
MCP-specificiframe divergence → suspension; sustained tool failures → auto-off enforcement [33]

Sunsetting, and the auto-uninstall trap

Slack's four-step discontinuation checklist: remove from the Marketplace, contact the Marketplace team, contact your customers, and delete and revoke every token your app generated. The Developer Policy adds a hard deadline — on user deletion or discontinuation, delete all associated data within 14 business days.[5] Note you cannot use “Deactivate Public Distribution” once listed.[1]

AUTO-UNINSTALL — the failure mode that catches teams out Apps using only bot, incoming-webhook, commands or identify are generally not auto-uninstalled — except in the home workspace, where they die when the last creator or collaborator leaves or becomes a guest. Apps using any other scope are auto-uninstalled if the installing user leaves the workspace or becomes a guest.[1] This is precisely why the Marketplace mandates adding a collaborator.
INTERPRETATION Slack's commercial posture is unusually generous on money and unusually harsh on obligation. It takes no cut and provides no billing, which keeps it out of the payments business and out of the liability that comes with it — but the price is that every ongoing duty (support, security upkeep, data deletion, staying installed) sits with the developer, and almost every enforcement instrument is exercisable at Slack's sole discretion, often without notice. A marketplace operator choosing this model is choosing low friction to enter and continuous, asymmetric risk to remain.
06

Install & consent — the whole trust transfer in one flow

Everything an app can ever do is decided in one screen, by one person, in about four seconds. No token, no API — and the token's power is fixed at the moment of consent.

SCOPE CHANGE → FULL RE-CONSENT 1 · Discovery Marketplace · install URL · admin App Suggestions (Slack-initiated) 2 · Add to Slack GET /oauth/v2/authorize scope= · user_scope= · state= 3 · Slack-hosted consent screen Slack renders the scope list — the developer cannot style or reword it unlisted app ⇒ "hasn't been reviewed by Slack" banner shown here named unfurl domains are consented to at this instant 4 · Who is consenting? DEFAULT: any member. Not an admin. Not the data owner. bot scopes → workspace-wide reach · user scopes → that person's full view optional scopes deferred to a later, in-context ask 5 · Admin approval gate — OFF BY DEFAULT if on: request + justification → app manager or admin → allow / restrict "approving a request… you are approving the scopes it will use" pre-approved allowlist · restricted blocklist · automation rules admin.apps.approve omit bot_scopes/user_scopes ⇒ ALL scopes granted, including optional ones 6 · Temporary code → redirect_uri expires in 10 min · state MUST be validated or treat as forgery Slack: "The reason is two-factor authentication." 7 · oauth.v2.access → tokens xoxb- bot (app identity) · xoxp- user (acts AS the human) · xapp- app-level store keyed on (team_id | enterprise_id, user_id) — never on the token string 8 · First contact — installer only, App Home preferred redirect back to Slack "for transparency purposes: the user deserves to know the end of the story" SCOPES ARE A ONE-WAY RATCHET Scopes accrete on the existing token. Slack, verbatim: "There is no way to remove scopes from an existing token without revoking it entirely." Consequences: · narrowing permissions = reinstall · restriction is NOT retroactive — already-installed apps keep working · MFA cannot block a consent grant; MFA already happened · grant produces no anomalous sign-in event to alert on Only explicit revocation closes it. Legend user-driven credential exchange policy gate re-consent loop

Fig 3. Install and consent. Steps 1–4 are the trust transfer; step 5 is the only place an organisation can intervene, and it is disabled until someone turns it on.[11][18][19]

Why Slack designed it this way — in Slack's words

SLACK'S STATED RATIONALE — granular scopes On moving to OAuth v2: “more granular Slack scopes, especially for bot users… without requesting excessive permissions that could cause installations to be rejected.”[11]
SLACK'S STATED RATIONALE — optional scopes “more control over what data your app can access while reducing installation abandonment.”[11] note the dual framing — a privacy control sold as a conversion optimisation
SLACK'S STATED RATIONALE — the unreviewed-app banner “Any app not listed in the Slack Marketplace will display a banner letting you know it hasn't been reviewed by Slack before you install it.”[20] And on unfurl domains: “Every time an app is installed, the installing user is agreeing to those specifically-mentioned domains.”[39]
INTERPRETATION The consent screen is the platform's only real security boundary, and its defaults invert the risk. The person clicking is usually the person with the least context about organisational data risk, the scope list is technical rather than consequential (“read messages in channels this app is added to” does not read as “stream our roadmap to a server we've never audited”), and approval is opt-in. A marketplace designed for a security-conscious buyer would default the gate to on and express scopes in terms of blast radius, not API surface.

Reinstall triggers — where re-consent is forced

TriggerEffect
Adding any scopefull re-consent; signal permissions_updated: true
Adding an unfurl domainreinstall required — consent is per-domain [39]
New event subscriptions requiring new scopesreinstall
Upgrading to org-wide deployreinstall at org level; app_upgraded_to_org_install in audit logs [25]
New MCP server domainre-approval by the admin [65]
SLACK DOES NOT NOTIFY USERS OF SCOPE CHANGES There is no Slack-pushed notification when an app needs more permissions. The developer must surface a re-authorisation link, and App Home is the sanctioned place to put it. With app approval enabled, the user's click generates an admin request rather than an install.[11][14] Admins can detect it after the fact via the app_scopes_expanded audit-log action.[67]
07

Data flow & the privacy boundary

Slack sees that an app read your data. It does not see what the app does next. Everything past the developer's ingress is governed by contract and audited by nobody.

SLACK / SALESFORCE CONTROL — processor of Customer Data EKM · data residency (one region per org) · retention policy · audit logs · SOC 2 / ISO / FedRAMP Workspace content messages · files · canvases · profiles Public + invited channels channels:history · groups:history · files:read DMs + private channels im:history · mpim:history (user token) EVERYTHING that user sees search:read — user token, now LEGACY Whole-org bulk export Discovery API — Grid, Org Owner, vetted partners Web API scope check rate limit tier TLS 1.2+ IP allowlist* LOGGED: method · actor scope · IP · volume NOT LOGGED: message content *Web API + SCIM only, no IPv6, does NOT cover webhooks or Events API Events API pushes outbound to your URL 30k/workspace/60min TOKEN visibility ends DEVELOPER CONTROL — separate processor of the CUSTOMER, not a Salesforce sub-processor no residency guarantee · no EKM · no certification required · Slack has zero runtime visibility Developer infrastructure token store · app DB · logs hosted anywhere, any region Governed ONLY by contract: minimum necessary · no bulk export no LLM training · no resale delete within 14 business days LLM / model providers tenancy + residency = developer's disclosure Sub-processors, CDNs, analytics not enumerated to the customer by Slack Breach / token theft Drift · Klue Legend scoped data class high-water-mark reach enforcement point Slack's control boundary developer's control boundary — contract only SLACK'S OWN ADMISSION — Privacy Policy, Third-Party Services "We require each Third-Party Service provider to disclose all permissions for information accessible through the Services, but we do not guarantee that they do so."

Fig 4. The privacy boundary. Left of the token, Slack's compliance estate applies. Right of it, nothing does except the developer's own promises.[55][58][69]

Scope risk tiers

Token / scopeReachRisk
xoxb- bot token, granular scopesonly channels the bot was invited tobounded — the intended model
xoxp- user tokenacts as the human: their DMs, their private channelsa single consent = one person's entire view
search:read (user token, legacy)everything the granting user can see, searchablean admin's consent ≈ workspace-wide read
Legacy umbrella bot scopewide pre-granular default setpersists in old workspaces
Legacy custom-integration tokensfull scope of the creating userlandmine; enumerate and kill
xwfp- workflow token“borrowed visibility” from the invoking user, 15-min lifeshort-lived but user-scoped
Discovery API (eDiscovery + DLP)whole-org read, export, tombstone, removehighest privilege on the platform
Real-Time Search APIgranular search:read.* + action_token consentexplicit zero-copy: “You must not store or copy any of the data retrieved”

Sources: scope reference [58], tokens [60], search:read [59], Discovery [61], Real-Time Search [62]

FOUR THINGS CUSTOMERS ASSUME AND SHOULDN'T 1. Data residency does not follow the data out. One region per organisation (not per team), Business+ and Grid only — and it governs Slack's storage, not the app's. Once data crosses the API it lands wherever the developer hosts.[63]
2. EKM does not protect data an authorised app already read. Customer-held AWS KMS keys cover data at rest in Slack.[66]
3. Audit logs never contain message content. Slack: “They do not enable monitoring of message content… you may consider an e-Discovery or Data Loss Prevention solution.” And: “Slack also does not perform any kind of automated intrusion detection… The Audit Logs API will return the data but can not automatically determine or indicate whether an action was appropriate.”[86][67]
4. IP allowlisting is narrower than its name suggests — Web API and SCIM only, max 20 CIDRs, no IPv6, and it does not cover incoming webhooks or Events API delivery.[69]
SLACK MONITORS APPS LESS THAN IT MONITORS PEOPLE — by design Slack states plainly: “We don't monitor apps for some behaviors that we monitor users for.” App-applicable anomalies are limited to excessive_downloads, excessive_file_shares, excessive_malware_uploads, ip_address (with new-asn/cloud-asn/in-ioc-list), asn, tor and unexpected_credential_testing. The user-only set — unexpected_scraping, unexpected_api_call_volume, unexpected_admin_action, potential_spam — does not apply to apps. And search_volume, the detection most aligned with search-based bulk exfiltration, was deprecated on 2 May 2025 and is “currently being re-tooled.”[68]
INTERPRETATION Nothing technically prevents an app holding channels:history + files:read from streaming a workspace to an arbitrary server — that is the design; it is what an integration is. Zero-copy, no-LLM-training and 14-day deletion are enforcement-by-contract with no technical control behind them, and they bind listed apps most tightly. Internal apps and apps installed by URL sit outside the review regime entirely. So the platform's actual privacy guarantee is: a well-behaved developer will behave well, and a badly-behaved one will be found out afterwards, by volume heuristics, if at all.
08

Liability — two contract stacks that never meet

There are two parallel contractual stacks and no contract between the customer and the app developer. Both stacks bar third-party beneficiaries. That gap is the entire liability story.

BROAD INDEMNITY → incl. your disputes with your users, and Slack's own Security Review narrow: IP infringement only NO CONTRACT HERE Slack creates no customer↔developer relationship. Both stacks bar third-party beneficiaries. The customer's only recourse is whatever it signed with the vendor directly — often nothing. CUSTOMER SIDE — Salesforce ↔ paying Customer Main Services Agreement §4.1 — "Non-SFDC Products" installing an app AUTHORISES the provider to access Customer Data "solely between Customer and the applicable provider" §10.1 cap = 12 months' fees · §12.5 no third-party beneficiaries Privacy Policy Customer = controller Slack = processor User ToS + AUP integration choice = Customer's user liability cap US $100 Data Processing Addendum — THE GAP §5.4 SFDC liable for SUB-PROCESSOR acts as its own §7 breach notice "without undue delay" — SFDC or sub-processors Schedule 2 implements the EU SCCs The DPA never mentions third-party apps. An app vendor is NOT a sub-processor ⇒ none of the above reaches it. DEVELOPER SIDE — Slack ↔ app developer API Terms of Service — eff. 10 Oct 2025 APIs "AS IS" and "AS AVAILABLE" · all warranties disclaimed Slack's liability to a developer capped at US $100 audit right · no bulk export · no third-party beneficiaries Application Developer Policy — eff. 10 Dec 2024 "you have no independent rights to any Data" no LLM training · no renting/selling · delete in 14 business days EAR99 / ECCN 5D992 · surveillance use cases prohibited Marketplace Agreement — only if you list "Last modified: July 11, 2016" §4 consent to review · §5 no certification · §6 sole support duty · §9 no monitoring duty Legend broad indemnity narrow indemnity absent relationship coverage gap

Fig 5. The contractual stack. Note the asymmetry: the broad indemnity runs developer→Slack, and the one arrow a harmed customer would want — developer→customer — does not exist.[51][6][5][8][56]

Four documents, one message: Slack is a distributor, not a warrantor

SLACK / SALESFORCE — stated in four independent places 1. MSA §4.1 — “SFDC does not warrant or support Non-SFDC Applications”; Salesforce is “not responsible for any disclosure, modification or deletion of Customer Data resulting from access by a Non-SFDC Application.”[51]

2. Marketplace Agreement §5 — “Slack does not ‘certify’, warrant or support the Application.”[8]

3. Security review doc — “The Slack Application Security Review is not a certification, or proof of a secure application.”[7]

4. Admin help article — “Though we review all apps in the Slack Marketplace, including their requested permissions, Slack doesn't endorse or certify these apps. We recommend that you only install tools that you trust.”[57]

The indemnity and liability map

DirectionExists?ScopeSource
Developer → Slackyes, broadthe app, its data handling, its users — including “any dispute between you and a user of your app” and indemnity for Slack's performance of a Security ReviewAPI ToS; Mktpl §8 [6][8]
Developer → CustomerNONEnothing in the Slack stack creates oneabsence across all docs
Salesforce → Customernarrowthird-party IP infringement of the Service itself onlyMSA §9 [51]
Slack → DeveloperNONE—API ToS [6]
$100
Slack's cap to a developer
API ToS [6]
$100
Slack's cap to an individual user
User ToS [53]
12 mo
Salesforce cap to a customer — fees paid in the preceding 12 months
MSA §10.1 [51]
$0
liability on Free Services — “AS-IS”, no warranty, no indemnity
MSA §8.3 [51]

What actually happens when a third-party app is breached

QuestionAnswer
Must the developer tell Slack?Yes — “immediately”, to users and Slack [5]
Must Salesforce tell the customer?No. DPA §7 covers incidents at SFDC or its sub-processors; an app vendor is neither. The DPA also expressly excludes “incidents that are caused by Customer or Customer's Users” — and the customer's user is who installed the app [56]
Must the developer tell the customer?Only per the developer's own contract and statute (GDPR Art. 33 processor→controller, where the developer is the customer's processor)
Can the customer sue Slack on the developer's agreement?No — “There are no third party beneficiaries to the Contract.” [6]
Can the customer sue the developer on the MSA?No — MSA §12.5 bars third-party beneficiaries [51]
What can Slack do?Revoke tokens, delist, suspend the developer, notify users, demand deletion in 14 business days, pursue legal action [5]
THE COMPLIANCE GAP CUSTOMERS ROUTINELY ASSUME IS CLOSED Because an app vendor is a separate processor of the customer — or, for its own purposes, an independent controller — and not a Salesforce sub-processor, the customer needs its own Article 28 DPA with each app vendor and must record each app in its own Article 30 register. Slack does not provide this and the DPA does not cover it. Meanwhile Slack is the controller of “Other Information”, so telemetry about your app usage is Slack's own data.[55][56]

Documentation hygiene problems worth knowing about

A ten-year-old listing contract

  • The Marketplace Agreement reads “Last modified: July 11, 2016”
  • It predates the Salesforce acquisition, the App Directory → Marketplace rename, granular scopes, token rotation, the automation platform and the entire AI/MCP surface
  • It is nonetheless the document every listing developer contractually accepts [8]

Two breach-notification addresses

  • API ToS (Oct 2025) says security@slack.com
  • Developer Policy (Dec 2024) says feedback@slack.com
  • Same contract, two addresses. In an incident, notify both [6][5]

Broken canonical URLs

  • slack.com/terms-of-service/developer-policy → “There's been a glitch”; live doc is on docs.slack.dev
  • slack.com/terms-of-service/marketplace → 404; the live path is /slack-marketplace
  • slack.com/legal no longer indexes the customer terms — several documents are reachable only via undocumented redirects

A DPA unsure of its own date

  • Retrieved copy is headed “(Revision August 2026)” with a page footer reading “April 2026” [56]
  • No standalone Slack Developer Program agreement could be located — its terms appear to be the API ToS + Developer Policy UNRESOLVED
INTERPRETATION This is a coherent and, from Slack's seat, well-built position: review the app enough to protect users, disclaim certification so the review creates no warranty, take an indemnity from the developer for the review itself, and route all residual risk to the customer through one clause in the MSA. The cost is borne where it is least visible. A buyer's actual exposure on any installed app is capped by that vendor's balance sheet and click-through terms, not by Salesforce's — and for a free app, often by nothing at all. Any marketplace copying this structure should expect that its largest customers' security teams will eventually read §4.1 and start demanding direct DPAs, which is a procurement burden the operator has pushed onto its own buyers.
09

Admin guardrails — capable, and off by default

Slack ships a genuinely deep control plane. The single most consequential fact about it is that app approval is not enabled until an admin turns it on.

OFF
app approval, by default — any member can install
help 222386767 [19]
Grid only
Audit Logs API, EKM, Discovery API, data residency
Slack docs [86]
read-only
Audit Logs API — observation, never enforcement
audit-logs-api [86]
not retroactive
restricting an app leaves existing installs running
help 202035138 [20]

Workspace level

Approval modes

  • Require approved apps — the master switch
  • Pre-approved allowlist — appears as its own “Pre-Approved” category to members
  • Restricted blocklist — cannot be installed or even requested
  • Everything else generates a request with a justification field
  • Separate toggle for Sign in with Slack [19]

Delegation & automation

  • App Managers — an approval role distinct from Admin, so review does not require full admin rights
  • Automation rules — auto-approve, auto-restrict, dismiss or flag by criteria
  • Slack, on what approval means: “When approving a request to install an app, you are approving the scopes it will use.” [18]

Org / Grid level

  • Org policy overrides workspace policy
  • admin.apps.*, admin.workflows.*, admin.functions.*, admin.apps.mcp.servers.* [64]
  • app_requested event payload carries scopes with is_optional, previous_resolution, and developer_type: internal / third_party / slack
  • Per-scope subsetting on approval via bot_scopes / user_scopes

MCP governance (newest)

  • Per-server allow / deny lists
  • Consent screen names the external MCP servers
  • Re-approval required on a new domain
  • Audit actions: mcp_server_acl_updated, mcp_server_config_updated, mcp_server_enabled/disabled/deleted, mcp_server_org_disconnected/reconnected, mcp_server_tool_acl_updated [65][67]
SILENT PRIVILEGE ESCALATION — quoted verbatim “If you do not provide user_scopes or bot_scopes, all requested scopes will be granted, including optional ones.”[18] Any naive approval automation — the exact thing a busy IT team builds — therefore grants the full request including the optional scopes the app deliberately deferred. Two further sharp edges: installing an admin app disables the workspace App Management UI, and restriction is not retroactive.

The audit trail an admin actually gets

CategoryActions
Install lifecycleapp_approved · app_installed · app_uninstalled · app_restricted · app_upgraded_to_org_install
Privilege changeapp_scopes_expanded · app_resources_granted · bot_token_upgraded / bot_token_downgraded
Policyapp_allowlist_rule_matched · app_whitelist_enabled · app_removed_from_whitelist
Configapp_manifest_created / updated / deleted / exported
AIbot_ai_canvas_approval_bypassed · the full mcp_server_* set

Source: audit-logs actions reference [67]. Enterprise Grid only, auditlogs:read, org-Owner install, read-only, no message content.

Developer-side controls

ControlStatusDetail
Token rotationoptional12-hour access-token expiry, refresh via oauth.v2.exchange. Irreversible once enabled per app. Not generally required for listing [70]
Signing secretsrequiredverification tokens deprecated; mutual TLS available [69]
TLS 1.2+enforcedsince 19 Feb 2020 [69]
OAuth staterequiredCSRF defence; mismatch ⇒ “consider the authorization a forgery” [11]
Redirect-URL allowlistrequiredplus enterprise OAuth domain verification [69]
EKMcustomer-sidecustomer-held AWS KMS keys, CloudTrail key-usage logging, revocation at org / workspace / channel / file / time-frame granularity — does not reach data an app already read [66]
INTERPRETATION The control surface is strong; the defaults and the tiering are what undermine it. Approval is opt-in, the deepest instruments (audit logs, EKM, Discovery, residency) are Enterprise-Grid-only, the audit trail is read-only and content-free, app-specific anomaly detection is thinner than the user-facing equivalent with its most relevant signal currently deprecated, and the one API built for automating approvals grants everything if you omit an argument. The net effect is that safety scales with a customer's price tier and its security team's diligence, not with the platform. If you are designing a marketplace now, the cheap wins are obvious: default the gate on, make scope subsetting the default rather than the opt-in, and put privilege-change alerting in every tier.
10

Notification surfaces — mapped by intrusiveness and initiative

Slack gives an app roughly eleven ways to reach a human. They are not interchangeable, and Slack has published a design intent for nearly every one — the recurring theme is keep the human the initiator.

DANGER ZONE app-initiated + high intrusion Slack restricts all three by policy INTRUSIVENESS → push + badge silent WHO INITIATES → the human the app Slash command 3000ms ack · ephemeral default Shortcuts 5 global + 5 message max App Home pull · "always-on" · 100 blocks Canvases · Lists persistent · searchable Link unfurl max 5 domains · in-place Ephemeral message no push · not persisted · Tier 4 Assistant split view user opens it · paid plans Modal blocks the UI · invocation only Channel message persistent · ~1/sec/channel Direct message push notification + badge @channel · @here Marketplace: "(nearly never)" USER-INITIATED, INTRUSIVE consented — intrusion is the point USER-INITIATED, QUIET — the sanctioned default APP-INITIATED, QUIET — safe proactive contact Legend human pulls app pushes, quietly interrupts, but bounded policy-restricted AI surface Position is our reading of Slack's own guidance on each surface, not a Slack-published ranking. Every surface's constraint annotation is sourced; the two-axis placement is interpretive.

Fig 6. Surfaces by initiative and intrusiveness. Almost all of Slack's design guidance pushes apps down and to the left.[24][44]

Slack's stated intent, surface by surface

SLACK ON EPHEMERAL MESSAGES — why they exist “a good fit for content that shouldn't be broadcast to everyone, such as command acknowledgments, inline errors, confirmations.”[37] Constraints: not persisted, not searchable, delivery is not guaranteed, requires the user to be active and a channel member (else user_not_in_channel), Tier 4. Slack's design guidance prefers an ephemeral message over a DM.
SLACK ON DIRECT MESSAGES — why they are rationed “DMs generate push notifications for mobile users and badges on desktop and mobile. These are useful but also disruptive and can be unexpected.”[12] Permitted only when the user DMed first, the app serves only that user, or the information is genuinely confidential. The Slackbot channel is off-limits — use the App Home Messages tab.
SLACK ON APP HOME — why it is the preferred home for configuration “a private, one-to-one space” with an “‘always-on’ nature”, and the right place to put configuration “in a safe place, away from public channels.”[14] Three tabs — Home, Messages, About; views.publish; app_home_opened; max 100 blocks.
SLACK ON MODALS — why they cannot be pushed “Apps can only create modals in response to user invocation” — a trigger_id is required — because “Modals block the rest of the UI.”[44]

Surface selection matrix

SurfaceVisibilityPersistentSearchableGenerates a push
App Homeone useryesnoMessages tab only
Ephemeralone user, one channelnonono
Channel messagechannel membersyesyesper user prefs
DMone useryesyesyes — always
Modalone usernonono
Canvas / Listas sharedyesyesno
Split view (assistant)one useryesthread-scopedno

Source: choosing the right surface [24], surfaces overview [44]

Transport choice is constrained by listing ambition

SLACK ON HTTP vs SOCKET MODE — the requirement and the reason “if you intend to submit your app to be available for use in the Slack Marketplace, using HTTP is a requirement.” The reasoning given: “short-lived connections… are inherently more reliable than long-lived connections.” Socket Mode is capped at 10 concurrent connections per app.[42]

Incoming webhooks are the minimal path — 1 message/second, and they cannot delete or update messages. Slack adds a warning worth repeating: “Slack actively searches out and revokes leaked secrets.”[43]

INTERPRETATION Read the taxonomy as a single sentence: Slack made the quiet surfaces cheap and capable, and made the loud ones administratively expensive. Ephemeral messages are Tier 4 — the most generous rate limit on the platform — while chat.postMessage is throttled to roughly one per second per channel and @channel is gated by written policy rather than by the API. The economics of the rate-limit tiers are the etiquette policy, expressed in a form developers cannot ignore.
11

Engagement rules — who may speak first

An app cannot reach a human before that human acts. There is exactly one pre-install contact path in the entire platform, and Slack — not the app — operates it.

SLACK'S LOAD-BEARING SENTENCE ON FIRST CONTACT “Since we don't recommend DMing users out of the blue, your app will need to cue off events to begin onboarding.”[13]

And on breadth: “Do not DM the entire team… Only the installing user should receive a direct message from your app.”[13]

The one exception — and Slack keeps control of it

App Suggestions is the only mechanism by which a Slack user hears about an app before installing it in-product, and the app never touches it. The developer adds <meta name="slack-app-id"> to their site; Slack crawls it; when someone pastes that link into a channel, Slack sends an ephemeral message — visible only to the person who posted the link — offering Yes please Not now No thanks, where No thanks is a permanent opt-out. It is available only to Marketplace-listed apps.[13]

INTERPRETATION This is the cleanest single design decision in the platform. The distribution channel with the highest spam potential is implemented as: Slack is the sender, the audience is one person, the trigger is that person's own action, the message is ephemeral, and declining is permanent. Every property is chosen to make abuse structurally impossible rather than contractually forbidden — the opposite of how the privacy rules are enforced.

Rate-limit tiers — the etiquette policy, expressed as quota

Web API rate-limit tiers · calls per minute, per method, per workspace Tier 1 1+ rare, expensive calls Tier 2 20+ occasional Tier 3 50+ paginated reads — where conversations.history normally sits Tier 4 100+ incl. ephemeral 29 May 2025: conversations.history / .replies cut Tier 3 → Tier 1 for commercially-distributed NON-Marketplace apps — a 50× reduction, plus an object cap of 15 per call. Applies to apps created on/after that date and to new installs of existing unlisted apps. Listing restores the tier.

Fig 7. Tiers are per-method and per-workspace. Source: rate limits [9], 2025 changelog [10]. Burst allowances are deliberately undisclosed.

LimitValue
chat.postMessage~1 per second per channel, with a workspace ceiling of “several hundred messages per minute” [38]
Events API delivery30,000 per workspace per app per 60 minutes [9]
Incoming webhooks1 per second [43]
users.profile.set10/min per user; 30 profiles/min per token [9]
Socket Mode10 concurrent connections per app [42]
Over limitHTTP 429 + Retry-After, scoped to that method and workspace only [9]
SLACK ON WHY BURSTS ARE THROTTLED “Slack is primarily a communication tool for humans. We try to detect apps acting spammy, unintentionally or not, and quiet them down.”[9] Escalation runs: rate limit → disconnect → “permanently disabled.”
SLACK ON @channel AND @here “There are very few cases where an app should use @channel or @here. One exception might be if your app sends a notification for immediate action when a critical system or service goes down. Even then, you should get explicit permission from the installer.”[12] The Marketplace guidelines are blunter: “(nearly never)”.[3] INTERPRETATION this is a policy-level restriction, not an API-level one — nothing in the API blocks it.

What the Developer Policy forbids outright

Never

  • Advertising in any Slack surface
  • Using Data to contact Users
  • Spamming; impersonating Slack or another app
  • Training an LLM on Data — “under any circumstances”
  • Renting, selling or sharing Data — “under any circumstances”
  • Surveillance / employee-monitoring use cases

Must

  • Notify users and Slack of a breach “immediately”
  • Delete data within 14 business days of removal or request
  • Process the minimum necessary
  • Stay within EAR99 / ECCN 5D992
  • Submit to Slack's audit right on request

Consequences — the omnibus clause

  • “removal from the Slack Marketplace, token revocation, developer suspension, User notification, legal action…”
  • “we may or may not provide notice before taking action”
  • “if you fail an audit before notifying us of any issues, penalties will be more severe” [5]

Offboarding — the two events, and the trap in them

Uninstallation fires app_uninstalled and tokens_revoked. Both are Events-API-only and require no scopes. Two implementation details that break naive token stores:

OFFBOARDING GOTCHAS 1. Order is not guaranteed sequential — do not assume app_uninstalled arrives first, or at all, before tokens_revoked.[22]
2. tokens_revoked carries user IDs, not token strings — so a token store keyed on the token value cannot process the event. Key on (team_id | enterprise_id, user_id).[23]

See also the auto-uninstall rules in §05: apps holding any scope beyond bot/incoming-webhook/commands/identify are auto-uninstalled when the installing user leaves the workspace or becomes a guest — an offboarding path with no developer involvement at all.[1]

12

AI agents & assistants — where the risk model changes

An agent is an app that acts. Slack's response is a dedicated container, three published principles, and a governance layer — plus the most candid warning in any of its documentation.

SLACK'S THREE STATED PRINCIPLES FOR AGENTS 1. Control. “People feel in control… Any action with real-world output (sending an email, approvals, updating a record) should require explicit human confirmation.”

2. Presence without intrusion. “Agents are available where people are already working, but not disruptive.”

3. Safety is the developer's job. “Agents are not inherently safe. An autonomous tool with unfettered access… can do real world harm. It is the duty of every developer to build guardrails, permissions, and human-in-the-loop checkpoints as engineering requirements, not afterthoughts.”[16]
INTERPRETATION Principle 3 is unusually honest for platform documentation — and it is also a liability allocation. “It is the duty of every developer” is the same move as §4.1 of the MSA and §5 of the Marketplace Agreement, applied to autonomy: state the risk clearly, assign the duty to the party you have a one-way indemnity from, and ship the capability.

The container and its mechanics

Split view

  • Slack's framing: “allows users to initiate private conversations with agents side by side with the rest of Slack, in the flow of work.” [15]
  • The user opens it — the agent cannot summon it
  • Requires a paid Slack plan
  • Cannot be reached by slash commands

Wiring

  • The Agents toggle auto-adds assistant:write
  • Events: app_home_opened, app_context_changed, message.im
  • entities array arrives “ordered by relevance”
  • assistant.threads.setSuggestedPrompts — up to 4 [16]

Governance layer

  • Audit-log coverage, incl. bot_ai_canvas_approval_bypassed
  • An “AI Excluded” indicator in the channel header
  • Per-response metrics; assistant.threads.setStatus
  • Advice that FedRAMP customers restrict search:read.* [17]

Marketplace AI rules

  • Disclose the model used, LLM data retention and use, tenancy and residency
  • Zero-copy: “DON'T store any Slack data you obtain. Store metadata instead and pull in data in real time.”
  • “apps should not join all public channels by default after installation”
  • No consequential (legal / medical / HR) decisions without human review [3]
API MIGRATION IN FLIGHT — as of this research date agents.sessions.setStatus and agents.sessions.rename are replacing assistant.threads.setStatus and assistant.threads.setTitle, via a compatibility bridge. Treat any agent-API detail here as the most volatile content on this page.[16]

The demonstrated attack: prompt injection through a public channel

In August 2024, PromptArmor demonstrated a chain in which an attacker plants injected instructions in a public channel — requiring no membership in the victim's private channel — and Slack AI renders an exfiltrating link that leaks private-channel content, including API keys. Slack initially characterised the underlying behaviour as “intended behavior”, on the grounds that public-channel content is legitimately searchable, before Salesforce patched it. The technique was later extended to injection via uploaded files.[77]

INTERPRETATION This is why the agent risk model is genuinely different rather than merely larger. Classic app risk is a scope was granted too broadly — bounded by consent. Agent risk is data the app was legitimately allowed to read contained instructions. No scope decision prevents that, no consent screen describes it, and the agent's own permissions become the attacker's permissions. Slack's answer — human confirmation on consequential actions — is the correct one, and it is a guideline rather than an enforced control.

The compounding problem: cross-app chains

A 2026 analysis defines a “toxic combination” as “a permission breakdown between two or more applications, bridged by an AI agent, integration, or OAuth grant, that no single application owner ever authorized as its own risk surface,” and gives a Slack-shaped example: an MCP connector wiring an IDE to a Slack channel, where “prompt injections inside the IDE push confidential code into Slack, and instructions planted in Slack flow back into the IDE's context on the next session.” It cites the CSA State of SaaS Security 2025 finding that 56% of organisations are concerned about over-privileged API access across SaaS-to-SaaS integrations.[79] Slackbot itself now acts as an MCP client across enterprise apps, which widens exactly this surface.[33]

SOURCE QUALITY The “toxic combinations” and OAuth-consent-phishing analyses are vendor-sponsored contributed content, not independent journalism. The structural framing is sound and matches Slack's own documented mechanics; discount the vendor conclusions.[79][80]
13

How Slack compares

Slack's distinctive choices are the 0% take rate with no billing rail, the explicit anti-certification stance, and a review that is unusually long for a marketplace that extracts no revenue.

DimensionSlack MarketplaceMicrosoft Teams / AppSourceSalesforce AppExchangeAtlassian MarketplaceChrome Web Store
Revenue share None found — no fee, no commission in any of four legal docs Commercial marketplace transact model takes a cut; publishing itself is free Partner Program fees / revenue share via a negotiated partner agreement Paid-app revenue share on Atlassian-billed sales No commission since Google retired Chrome Web Store payments
Billing rail None — developer bills entirely; listing shows a display-only label Microsoft can transact on the developer's behalf Salesforce-adjacent commercial infrastructure Atlassian bills for paid apps Developer bills externally
Review rigour Two human phases, up to 10 weeks; discretionary security review; install-count floor Validation against a published certification policy Mandatory security review, periodically re-run Automated + policy review; a separate paid security program Largely automated with policy enforcement and takedowns
Certification claim Explicitly refused — and developers are contractually barred from implying endorsement “Certified” is the platform's own term for the validation Security review is a marketed trust signal Paid “Cloud Fortified” / security tiers are marketed badges Badges for verified publishers and established developers
Admin gate default Approval OFF — any member may install Tenant admin controls, commonly restrictive by default Install is inherently an admin action Install is an admin action User-level install; enterprise policy is optional
Liability posture Third-party apps disclaimed in the MSA; broad developer→platform indemnity; no developer→customer privity Materially the same pattern across all four — the platform disclaims third-party apps and pushes diligence to the customer
SCOPE OF THIS COMPARISON — read it as orientation, not as citable fact Every Slack column entry on this page is sourced to a Slack primary document. The other four columns are not equivalently sourced — the research pass behind this page could not reach non-Slack vendor documentation (see the method note in §15), so those cells reflect general industry knowledge as of the assistant's training data rather than verified current terms. Revenue-share percentages and program names change frequently and are therefore deliberately omitted rather than guessed. Verify against each vendor's current partner documentation before using this table in any decision.
INTERPRETATION The unusual combination is Slack's, and it is worth naming precisely: a long, human, discretionary review paired with zero revenue extraction. Most marketplaces justify review cost with a take rate. Slack's review is instead paid for by the platform and priced in developer time, which tells you what the review is for — protecting Slack's own trust surface and enterprise credibility, not policing a revenue stream. The corollary is that its enforcement instruments must be cheap and unilateral, which is exactly what §05 describes. Anyone designing a marketplace should decide this pairing deliberately: a 0% take rate is a powerful acquisition story, but it means every marginal review hour is pure cost, and cost pressure on review is what eventually shows up as inconsistent enforcement.
14

Platform timeline — what Slack had to revise

For a blueprint, the instructive events are not the launches. They are the reversals — and Slack has had several, including two in the last year.

20152020 20232024 20252026 App Directory launches · 2015 OAuth v2 + granular scopes bot ≠ user tokens renamed Slack Marketplace no dated announcement found Agents & Assistants split view · assistant:write paid plans only MCP Registry Slackbot as MCP client admin allow/deny per server TLS <1.2 dropped 19 Feb 2020 workflow scopes barred Oct 2023 · from submissions Steps from Apps retired 26 Sep 2024 "no clear path forward" legacy custom bots die 31 Mar 2025 non-Marketplace apps rate-limited 50× down 29 May 2025 REVERSALS — the instructive part Install floor: 10 → 5 → 10 cut Aug 2025, restored Jul 2026 Classic-app deprecation PAUSED slipped Sep 25 → Mar 26 → May 26 → Nov 26, then paused outright 8 Dec 2025: "for the foreseeable future" Legend additive new AI surface breaking, migratable breaking, no path forward reversal Horizontal spacing is compressed for legibility and is not linear in time.

Fig 8. Additive changes above the spine, breaking changes below, reversals boxed. Dated changelog sources throughout.[26][31][32][47][49]

INTERPRETATION Three lessons a marketplace operator can take directly. First, deprecating a distribution primitive is far more expensive than deprecating an API. Slack could retire RTM with a migration path; it could not retire Steps from Apps without stranding ISVs, and the changelog admitted as much. Second, reversals cluster where the platform tried to shape supply with a dial. Both — the install floor and the classic-app sunset — were attempts to move developers by policy, and both were walked back after developer feedback. Third, the pause is the tell. A deprecation that slips four times and is then paused “for the foreseeable future” means the replacement never reached parity. The honest read of the classic-app saga is that granular apps still cannot do everything classic apps could — RTM being the clearest case.
15

Sources & method

METHOD AND ITS LIMITS — read this before citing anything above This page was assembled by three parallel research passes against primary sources, almost all of them Slack- or Salesforce-owned: docs.slack.dev, slack.com legal and help pages, the changelog, and the marketplace sitemap; PDFs were extracted directly.

The significant limitation: general web search was unavailable during this research, and document fetching was restricted, so retrieval fell back to direct HTTP requests against known/derived URLs plus the Wayback CDX index. The consequences are specific and worth stating plainly:
  • Slack's official position is very well covered. Nearly every quotation on this page is verbatim from a Slack-owned page.
  • Independent corroboration is thin. There is little developer-side reporting here on what review is actually like in practice, no press coverage of Marketplace growth, and no third-party audit of Slack's claims.
  • No growth or install-count figures. Marketplace category pages are client-side rendered and expose no app links in server HTML, so per-category counts and historical growth could not be obtained. Rather than estimate, this page omits them — which is why §01 has fewer charts than a page like this normally would.
  • Several items are explicitly marked unverified — the App Directory → Marketplace rename date, HackerOne bug-bounty scope for third-party apps, the existence of a standalone Developer Program agreement, and the populated values in third-party listings' Security & Compliance tabs.
  • The §13 comparison table's non-Slack columns are not primary-sourced. See the caveat in that section.

Where sources conflicted, both readings are shown inline rather than smoothed over — see the classic-app date conflict (§03), the review-timeline conflict (§04), and the two breach-notification addresses (§08). Everything here is as of the research date below; volatile items are date-stamped in place.

Slack platform & distribution documentation

  1. [1] Distributing Slack apps — docs.slack.dev/app-management/distributing-your-app
  2. [2] Distributing your app in the Slack Marketplace — docs.slack.dev
  3. [3] Slack Marketplace app guidelines & requirements — docs.slack.dev
  4. [4] Slack Marketplace review guide — docs.slack.dev
  5. [5] Slack Application Developer Policy — docs.slack.dev/developer-policy · effective 10 Dec 2024
  6. [6] Slack API Terms of Service — slack.com/terms-of-service/api · effective 10 Oct 2025
  7. [7] Slack Application Security Review — docs.slack.dev
  8. [8] Slack Marketplace Agreement — slack.com/terms-of-service/slack-marketplace · last modified 11 Jul 2016
  9. [9] Rate limits — docs.slack.dev/apis/web-api/rate-limits
  10. [10] Changelog: rate-limit changes for non-Marketplace apps — docs.slack.dev · 29 May 2025
  11. [11] Installing with OAuth — docs.slack.dev/authentication/installing-with-oauth
  12. [12] App design guidelines — docs.slack.dev/concepts/app-design
  13. [13] Onboarding users to your app — docs.slack.dev/onboarding-users-to-your-app
  14. [14] App Home — docs.slack.dev/surfaces/app-home
  15. [15] Split view — docs.slack.dev/surfaces/split-view
  16. [16] AI agents — docs.slack.dev/ai
  17. [17] Agent governance — docs.slack.dev/ai/agent-governance
  18. [18] Managing app approvals (admin API) — docs.slack.dev/admins/managing-app-approvals
  19. [19] Manage app approval for your workspace — slack.com/help/articles/222386767
  20. [20] Add and update apps — slack.com/help/articles/202035138
  21. [21] Remove apps and custom integrations — slack.com/help/articles/360003125231
  22. [22] app_uninstalled event — docs.slack.dev
  23. [23] tokens_revoked event — docs.slack.dev
  24. [24] Choosing the right surface — docs.slack.dev
  25. [25] Organization-ready apps — docs.slack.dev
  26. [26] Changelog: classic-apps deprecation paused — docs.slack.dev · 8 Dec 2025
  27. [27] Workflow steps — docs.slack.dev/workflows/workflow-steps
  28. [28] Deno Slack SDK — docs.slack.dev/tools/deno-slack-sdk
  29. [29] Slack partner program — slack.com/partners
  30. [30] Slack Marketplace — slack.com/marketplace and docs.slack.dev/slack-marketplace
  31. [31] Changelog: Marketplace install requirement — docs.slack.dev · Jul–Sep 2026
  32. [32] Changelog: Slack Marketplace install threshold reduced — docs.slack.dev · 11 Aug 2025
  33. [33] Slackbot MCP client — distributing & admin approval — docs.slack.dev
  34. [34] Partner sandboxes — docs.slack.dev/tools/partner-sandboxes
  35. [35] Marketplace sitemap · used for the first-party listing sample — slack.com/sitemaps/sitemap_marketplace_en-us.xml
  36. [36] Sending and scheduling messages — docs.slack.dev
  37. [37] chat.postEphemeral — docs.slack.dev
  38. [38] chat.postMessage — docs.slack.dev
  39. [39] Unfurling links in messages — docs.slack.dev
  40. [40] Implementing slash commands — docs.slack.dev
  41. [41] Implementing shortcuts — docs.slack.dev
  42. [42] Comparing HTTP & Socket Mode — docs.slack.dev
  43. [43] Incoming webhooks — docs.slack.dev
  44. [44] Surfaces overview — docs.slack.dev/surfaces
  45. [45] Slack brand guidelines — slack.com/media-kit
  46. [46] App manifests — docs.slack.dev/app-manifests
  47. [47] Changelog: legacy custom bots & classic apps deprecation — docs.slack.dev · Sep 2024, superseded by [26]
  48. [48] Legacy RTM API — docs.slack.dev/legacy/legacy-rtm-api
  49. [49] Changelog: Steps from Apps step back — docs.slack.dev · Aug 2023; retirement 26 Sep 2024
  50. [50] Developing for Enterprise Grid — docs.slack.dev

Legal, privacy, security & governance

  1. [51] Salesforce Main Services Agreement — slack.com/main-services-agreement · index last updated 25 Apr 2023
  2. [52] Slack Supplemental Terms — slack.com/slack-supplemental-terms
  3. [53] Slack User Terms of Service — slack.com/terms-of-service/user
  4. [54] Slack Acceptable Use Policy — slack.com/acceptable-use-policy · 8 Jul 2025
  5. [55] Slack Privacy Policy — slack.com/trust/privacy/privacy-policy · effective 5 Jul 2023
  6. [56] Salesforce Data Processing Addendum · header “Revision August 2026”, footer “April 2026” — salesforce.com (PDF)
  7. [57] Security recommendations for approving apps — slack.com/help/articles/360001670528
  8. [58] Scope reference — docs.slack.dev/reference/scopes
  9. [59] search:read scope · flagged legacy — docs.slack.dev
  10. [60] Token types — docs.slack.dev/authentication/tokens
  11. [61] A guide to Slack's Discovery APIs — slack.com/help/articles/360002079527
  12. [62] Real-Time Search API · formerly Data Access API — docs.slack.dev
  13. [63] Data residency for Slack — slack.com/help/articles/360035633934
  14. [64] Managing apps, workflows & connector permissions — docs.slack.dev
  15. [65] MCP client admin approval — docs.slack.dev
  16. [66] Enterprise Key Management — slack.com/enterprise-key-management
  17. [67] Audit logs — methods & actions reference — docs.slack.dev
  18. [68] Audit logs — anomalous events reference · search_volume deprecated 2 May 2025 — docs.slack.dev
  19. [69] Security best practices — docs.slack.dev/concepts/security
  20. [70] Using token rotation — docs.slack.dev
  21. [71] Slack compliance & certifications — slack.com/trust/compliance
  22. [86] Audit Logs API overview — docs.slack.dev/admins/audit-logs-api
  23. [84] mcp:connect scope — docs.slack.dev
  24. [83] Slack on HackerOne · JS-gated; third-party app scope UNVERIFIED — hackerone.com/slack

Incidents & third-party reporting

  1. [72] Slack bot tokens leaked on GitHub — The Register · 28 Apr 2016 — theregister.com
  2. [73] Slack API abused as covert C2 (“Aclip”, ITG17) — BleepingComputer · 15 Dec 2021 — bleepingcomputer.com
  3. [74] Slack password hashes exposed in invitation links · flaw live 17 Apr 2017 – 17 Jul 2022 — bleepingcomputer.com
  4. [75] Slack ML-training terms controversy — The Register · 20 May 2024 — theregister.com
  5. [76] NullBulge / Disney Slack breach — 1.1 TB, ~10,000 channels · guilty plea 1 May 2025 — bleepingcomputer.com
  6. [77] Slack AI prompt-injection exfiltration (PromptArmor) — The Register · 21 Aug 2024 — theregister.com
  7. [78] Salesloft Drift OAuth token theft (UNC6395), 700+ tenants — The Hacker News · 27 Aug 2025 — thehackernews.com
  8. [79] “Toxic combinations” cross-app risk · 22 Apr 2026 · VENDOR-SPONSORED CONTENT — thehackernews.com
  9. [80] OAuth consent phishing bypassing MFA (EvilTokens) · 19 May 2026 · VENDOR-SPONSORED CONTENT — thehackernews.com
  10. [81] Salesforce disables Klue integration (Drift → Gainsight → Klue pattern) · Jun 2026 — thehackernews.com
  11. [82] Fivetran Open Data Index — Slack scored poorly on programmatic access — The Register · 22 Apr 2026 — theregister.com
  12. [85] Slackbot as MCP client across enterprise apps — The Register · 2 Apr 2026 — theregister.com

Sources [72]–[85] were located and verified as reachable; a small number of additional headlines were found via the Wayback CDX index but not read, and are therefore deliberately excluded from this list rather than cited unread.