Skip to content

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.

Paste it into your assistant. It tells you what it will send or change before it runs live.

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

  1. You add a Gmail label, such as To monday, to any email you want tracked.

  2. Every 5 minutes ClickRuntime looks for emails with that label.

  3. Each one becomes a monday.com item named after the subject, with the sender in the Email column and the body as an update.

  4. 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

RunsEvery 5 minutes
Turn labelled Gmail emails into monday.com itemstoday, 9:00Succeeded
monday.com · Inbox boardNew item: Re: Invoice 4471 needs a PO number Email: accounts@harborfoods.com Update: "From accounts@harborfoods.com – Hi, our finance team can't process invoice 4471 without a PO number. Could you resend with PO-2290?"

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • 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

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
turn_labelled_gmail_emails_into_monday_com_items.pyexample
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?
Yes. Use a Gmail filter that applies the label automatically, for example to everything from a client's domain.
Are attachments copied to monday.com?
Not by default. The item gets the text. Ask your assistant to upload attachments to a file column if you need them on the item.
What if my board has no Email column?
Tell your assistant the column ID to use, or drop it. The sender is always written at the top of the update as well.
What permissions does it need?
boards:write; Gmail (gmail.modify). Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it checks. Checks that find nothing new and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

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.