Every 5 minutes
Turn labelled Gmail emails into monday.com items
Emails you label in Gmail become items on a monday.com board with the sender and full text, and the label is cleared once logged.
- Runs
- Every 5 minutes
- Apps
- Gmail, monday.com
- AI
- Not needed
- Access
- boards:write; Gmail (gmail.modify)
Send this to your assistant
Create a ClickRuntime automation: every 5 minutes, find Gmail messages with the label "To monday". For each one, create an item on my Inbox board in monday.com named after the subject, put the sender's email in the Email column, add the email body as an update, then remove the label.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Requests, invoices and client questions arrive by email, but the team tracks work in monday.com. Copying each email across by hand is slow and gets skipped on busy days.
A label is the quickest way to say this needs tracking. One click in Gmail, and a few minutes later the email is an item the team can assign and follow.
Removing the label afterwards keeps it simple: anything still labelled has not been picked up yet.
What you get out of it
One click to track
Labelling an email is all it takes to put it on the board.
Full email on the item
The body is saved as an update, so nobody has to go back to the inbox.
Sender saved
The sender's address goes into the Email column for follow-up.
No duplicates
The label is removed once the item exists, so an email is added once.
Works with Gmail filters
Let a filter apply the label and whole categories of email are logged automatically.
How it works
What happens, step by step
You add a Gmail label, such as To monday, to any email you want tracked.
Every 5 minutes ClickRuntime looks for emails with that label.
Each one becomes a monday.com item named after the subject, with the sender in the Email column and the body as an update.
The label is removed, so the email is not added twice.
Before it runs live
- Connect Google through your own Google app (a one-time, 10-minute setup), so it works with your own Gmail
- 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 Slack
- Combine it with other Gmail and monday.com steps into one automation
Under the hood
The code that runs this automation
import base64
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http
BOARD, LABEL = 1234567890, "To monday"
CREATE = """mutation ($board: ID!, $name: String!, $cols: JSON!) {
create_item(board_id: $board, item_name: $name, column_values: $cols) { id } }"""
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"]
def plain_text(payload):
if payload.get("mimeType") == "text/plain" and payload.get("body", {}).get("data"):
return base64.urlsafe_b64decode(payload["body"]["data"]).decode("utf-8", "replace")
for part in payload.get("parts", []):
text = plain_text(part)
if text:
return text
return ""
@on_trigger
def run(event):
gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
label_id = next(l["id"] for l in gmail.users().labels().list(userId="me").execute()["labels"] if l["name"] == LABEL)
msgs = gmail.users().messages().list(userId="me", labelIds=[label_id], maxResults=25).execute().get("messages", [])
created = []
for m in msgs:
full = gmail.users().messages().get(userId="me", id=m["id"], format="full").execute()
h = {x["name"].lower(): x["value"] for x in full["payload"]["headers"]}
sender = h.get("from", "")
email = sender.split("<")[-1].rstrip(">").strip()
cols = '{"email": {"email": "%s", "text": "%s"}}' % (email, email)
item = monday(CREATE, board=BOARD, name=(h.get("subject") or "(no subject)")[:200], cols=cols)["create_item"]
monday(UPDATE, item=item["id"], body=f"From {sender}\n\n{plain_text(full['payload'])[:20000]}")
gmail.users().messages().modify(userId="me", id=m["id"], body={"removeLabelIds": [label_id]}).execute()
created.append(item["id"])
return {"created": len(created)}FAQ
Common questions
Can it add every email from a client, not just labelled ones?
Are attachments copied to monday.com?
What if my board has no Email 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
Draft personal emails for new monday.com leads
New leads on your monday.com board get a personalised outreach email drafted in Gmail, ready for you to review and send.
See how it worksStart onboarding in monday.com and send a welcome email
When a client or new hire fills in your form, an onboarding item with all its steps is created in monday.com and they get a welcome email.
See how it worksEmail clients from Gmail when monday.com work is Done
When an item on a monday.com board is set to Done, the address in its Email column gets a completion email sent from your Gmail.
See how it worksKeep exploring
Set up “Turn labelled Gmail emails into monday.com items” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.