Slack Automation

How to automate your Slack status (API, Zapier & no-code)

By Updated 2026-09-04

Most "automate your Slack status" guides stop at Slack's built-in triggers or a Zapier zap. That covers status text — the emoji and the words. It doesn't cover presence, the green dot itself, which is a different signal with a different API surface and a gap that trips up almost everyone who goes looking for it.

Looking specifically to automate presence, not status text?

Stay Green On Slack keeps your green dot accurate on autopilot, and pairs it with a Developer API for Zapier, Make, or your own scripts. 14-day free trial.

Start for free →

Quick answer

There are three ways to automate your Slack status text: Slack's built-in automatic statuses (huddles, Focus mode, after-hours, calendar sync), the Slack Web API's users.profile.set method for custom code, and no-code webhooks through Zapier or Make. None of them reliably automate your presence — the green/away dot — because Slack's users.setPresence only holds for your current session and reverts once your client idles out. Presence needs a tool built specifically for it, like a cloud presence service, or its own API.

Status text vs presence — the distinction that trips people up

Slack actually tracks two separate things under the same "status" umbrella, and conflating them is why so much automation advice half-works:

You can set your status text to "In a meeting" via a script running on a server with zero problem. Keeping the green dot itself lit from that same server is a different, harder problem — which is exactly why the options below split cleanly into "these automate text" and "this automates presence."

Option 1: Slack's built-in automatic statuses

The lowest-effort option, and the right one if your triggers match what Slack already ships. Under your profile photo → Preferences → Automatic statuses, Slack can set your status when:

This is genuinely automatic — no code, no third-party app beyond the official calendar integrations. The limitation is the trigger list is fixed. If you want "set my status when a Stripe payment fails" or "clear my status at exactly 5:01pm on weekdays," you need one of the next two options.

Option 2: Build it yourself with the Slack Web API

For anything Slack's own triggers don't cover, users.profile.set is the method that updates status text and emoji programmatically. You'll need a Slack app with the users.profile:write scope and a user token (xoxp-…) — a workspace admin has to approve the install once.

curl -X POST https://slack.com/api/users.profile.set \
  -H "Authorization: Bearer xoxp-your-user-token" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{
    "profile": {
      "status_text": "Deep work",
      "status_emoji": ":brain:",
      "status_expiration": 0
    }
  }' # status_expiration: 0 = doesn't auto-clear

Run this from a cron job, a scheduled cloud function, or trigger it from any event your own systems fire. It's the same call the built-in triggers use under the hood — you're just supplying your own conditions. Set status_expiration to a Unix timestamp if you want it to clear itself, or leave it at 0 to clear manually or with a second call.

Option 3: No-code automation with Zapier or Make

If writing and hosting a script isn't appealing, both Zapier and Make have native Slack integrations that wrap the same API without you touching a token directly:

This is the right call for most non-developers: recurring status changes, calendar-driven updates, or status text that reacts to something happening in another tool — all without maintaining a server.

The one thing none of these automate: presence

Here's the gap. Every option above updates your status text. None of them reliably keep your presence dot green, because users.setPresence only sets presence for the lifetime of the session that calls it — the moment that connection drops or your desktop client goes idle, Slack reverts you to Away. There's no supported way to tell Slack "keep this user Active indefinitely" from an external script the way there is for status text.

That's a deliberate gap on Slack's side, and it's the exact problem a dedicated presence tool exists to solve. Stay Green On Slack keeps a live, authenticated session running in the cloud so your dot reflects your actual working hours — and if you want to control that presence layer programmatically, its Developer API is a single authenticated endpoint (POST /functions/v1/api) with actions for status, pause, resume, activate, deactivate, and schedule, built to drop into Zapier or Make the same way the status-text automations above do.

Status text vs presence automation, compared

Method Automates Setup Code required
Slack automatic statuses Status text (fixed triggers) Toggle in Preferences None
Slack Web API Status text (custom triggers) Create a Slack app + token Yes
Zapier / Make Status text (custom triggers) Connect Slack in a Zap/scenario None
Cloud presence tool + API Presence (the green/away dot) Connect once, generate a key Optional

Want presence in your automation stack too?

The Developer API pauses, resumes, and reschedules your Stay Green On Slack presence from one HTTP call — included free on every paid plan.

See the Developer API →

FAQ

Is there a way to schedule a Slack status?
Yes — Slack's own "Schedule a status" sets a one-off status with a clear-after time, the Status Scheduler app from the Marketplace handles recurring schedules, and Workflow Builder or the Web API can drive fully custom, triggered updates.

Does Slack status change automatically?
It can. Under Preferences → Automatic statuses, Slack updates your status for huddles, Focus mode, after-hours, and connected calendar events, once those triggers are enabled.

Is the Slack API free to use?
Yes. Building a Slack app and calling methods like users.profile.set against your own workspace is free — you just need a workspace admin to approve the install and its OAuth scopes.

Can I automate my Slack presence, not just my status text, with the API?
Not cleanly with Slack's own API — users.setPresence only holds for the current session and reverts on idle. That gap is what dedicated presence tools, including Stay Green On Slack's Developer API, are built to close.

Try it free for 14 days.

No credit card required to start. $3.99/month after the trial. Cancel anytime.

Start for free →
← Back to the blog