Every 5 minutes
Turn Slack #requests messages into monday.com items
Each new message in a Slack #requests channel becomes an item on a monday.com board, and the thread gets a link back to it.
- Runs
- Every 5 minutes
- Apps
- Slack, monday.com
- AI
- Not needed
- Access
- boards:write; channels:history, users:read, chat:write
Send this to your assistant
Create a ClickRuntime automation: every 5 minutes, read new messages in #requests in Slack. For each top-level message, create an item on my Requests board in monday.com named after the first line, add the full message and the author as an update, then reply in the Slack thread with the item link.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Requests posted in Slack are easy to make and easy to lose. A day later the message has scrolled away and nobody remembers who said they would handle it.
Turning each message into a monday.com item gives every request an owner, a status and a place in the queue, without asking people to leave Slack.
The reply in the thread closes the loop: the requester sees the request was logged and can open it any time.
What you get out of it
People keep asking in Slack
Nobody has to learn a form. They post in #requests as they always have.
Nothing scrolls away
Every top-level message becomes an item that stays on the board until it is done.
Requester can follow along
The threaded reply links to the item, so status questions answer themselves.
Full context on the item
The whole message and the author's name are saved as an update on the item.
No duplicates
The automation remembers the last message it read, so each request is logged once.
How it works
What happens, step by step
Every 5 minutes ClickRuntime reads the messages posted in #requests since the last check.
It skips thread replies and bot posts, so only new requests count.
Each request becomes a monday.com item named after its first line, with the full text and the author added as an update.
The automation replies in the Slack thread with the item link, so the requester can follow progress.
Before it runs live
- Connect Slack, then invite the app to the channel (type /invite @ClickRuntime there)
- Connect monday.com
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Act only on the items that match your own rules, and skip the rest
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Google Sheets
- Combine it with other Slack and monday.com steps into one automation
Under the hood
The code that runs this automation
from slack_sdk import WebClient
from clickruntime import on_trigger, credentials, http, state
CHANNEL, BOARD = "C04REQUESTS", 1234567890
CREATE = """mutation ($board: ID!, $name: String!) { create_item(board_id: $board, item_name: $name) { id url } }"""
UPDATE = """mutation ($item: ID!, $body: String!) { create_update(item_id: $item, body: $body) { id } }"""
def monday(query, **variables):
resp = http.post("https://api.monday.com/v2", json={"query": query, "variables": variables},
headers={"Authorization": credentials.secret("MONDAY_API_TOKEN"), "API-Version": "2024-10"})
resp.raise_for_status()
return resp.json()["data"]
@on_trigger
def run(event):
slack = WebClient(token=credentials.connection("slack", "work"))
last = state.get("last_ts")
if not last:
latest = slack.conversations_history(channel=CHANNEL, limit=1)["messages"]
state.set("last_ts", latest[0]["ts"] if latest else "0")
return {"created": 0, "note": "starting point saved"}
msgs = slack.conversations_history(channel=CHANNEL, oldest=last, limit=200)["messages"]
created = 0
for m in sorted(msgs, key=lambda m: float(m["ts"])):
last = m["ts"]
if m.get("bot_id") or m.get("subtype") or m.get("thread_ts", m["ts"]) != m["ts"]:
continue
text = m.get("text", "").strip()
if not text:
continue
author = slack.users_info(user=m["user"])["user"]["real_name"]
item = monday(CREATE, board=BOARD, name=text.splitlines()[0][:200])["create_item"]
monday(UPDATE, item=item["id"], body=f"From {author} in #requests:\n\n{text}")
slack.chat_postMessage(channel=CHANNEL, thread_ts=m["ts"], text=f"Logged on the Requests board: *{text.splitlines()[0][:120]}*\n{item['url']}")
created += 1
state.set("last_ts", last)
return {"created": created}FAQ
Common questions
Will replies in a thread create items too?
Does it work in a private channel?
Can it fill in a requester or priority column?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Alert Slack when monday.com items get stuck
When an item on your monday.com board is marked Stuck, Slack gets a message with the owner and a link.
See how it worksPost finished monday.com items to Slack #wins
When an item on a monday.com board is set to Done, #wins gets a message with the item, its owner and a link.
See how it worksPost monday.com items due today to Slack by person
Every weekday morning, a Slack channel gets the monday.com items due today or overdue, grouped by owner and mentioning each one.
See how it worksKeep exploring
Set up “Turn Slack #requests messages into monday.com items” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.