Skip to content

The moment it happens

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

Runs
The moment it happens
Apps
Gmail, monday.com
AI
Not needed
Access
boards:read, boards:write, webhooks:write; Gmail (gmail.send)

Send this to your assistant

Create a ClickRuntime automation: when an item on my Client Requests board in monday.com changes to Done, send an email from my Gmail to the address in the item's Email column saying the request is complete, then add an update on the item noting the email was sent. Send once per item.

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

Clients who send a request want to know when it is finished. Closing the item on the board does nothing for them, and a follow-up email is easy to forget.

Sending the email when the status changes to Done means every client hears back, the same minute the work is marked finished.

Because it is sent from your own Gmail, the message looks like normal correspondence and replies land in your inbox.

What you get out of it

  • Every client hears back

    No finished request is left without a reply.

  • Sent from your address

    Replies come straight to your inbox, and the email sits in your Sent folder.

  • Noted on the item

    An update records when and to whom the email was sent.

  • Once per item

    Reopening and closing an item does not send a second email.

  • Skips items without an email

    Internal items with no client address are ignored.

How it works

What happens, step by step

  1. A monday.com webhook tells ClickRuntime when an item's status changes.

  2. When it changes to Done, ClickRuntime reads the client's email address from the item.

  3. A short email goes out from your Gmail account, so replies come back to you.

  4. An update is added to the item noting when the email was sent, and each item is emailed only once.

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
  • Paste your automation's link into the other app's webhook settings

What you get

RunsThe moment it happens
Email clients from Gmail when monday.com work is Donejust nowSucceeded
Email · Your request is complete: Update store opening hoursHi, Your request "Update store opening hours" is now complete. If anything doesn't look right, just reply to this email. Thanks, Sam Acme Web Services

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.
email_clients_from_gmail_when_their_monday_com_item_is_done.pyexample
import base64
from email.message import EmailMessage
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_event, credentials, http, state

SIGNATURE = "Thanks,\nSam\nAcme Web Services"
ITEM = """query ($id: [ID!]) { items(ids: $id) { name column_values(ids: ["email"]) { text } } }"""
NOTE = """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_event
def handle(event):
    body = event.json or {}
    if "challenge" in body:
        return {"challenge": body["challenge"]}
    ev = body.get("event", {})
    if ((ev.get("value") or {}).get("label") or {}).get("text") != "Done":
        return {"skipped": "not Done"}
    item_id = str(ev["pulseId"])
    sent = state.get("sent") or []
    if item_id in sent:
        return {"skipped": "already emailed"}
    item = monday(ITEM, id=[item_id])["items"][0]
    to = (item["column_values"][0]["text"] or "").split(" ")[0]
    if "@" not in to:
        return {"skipped": "no client email"}
    msg = EmailMessage()
    msg["To"], msg["Subject"] = to, f"Your request is complete: {item['name']}"
    msg.set_content(f"Hi,\n\nYour request \"{item['name']}\" is now complete.\n\n"
                    f"If anything doesn't look right, just reply to this email.\n\n{SIGNATURE}")
    gmail = build("gmail", "v1", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False)
    gmail.users().messages().send(userId="me", body={"raw": base64.urlsafe_b64encode(msg.as_bytes()).decode()}).execute()
    monday(NOTE, item=item_id, body=f"Completion email sent to {to}")
    state.set("sent", (sent + [item_id])[-5000:])
    return {"emailed": to}

FAQ

Common questions

Will the email come from my address?
Yes. It is sent through your connected Gmail account, so it appears in your Sent folder and replies come to you.
Can the email include more detail, like what was done?
Yes. Ask your assistant to add a text column or the latest item update to the email body.
What if I mark something Done by mistake?
The email goes out within seconds, so it cannot be recalled. If that is a worry, use a separate status such as Ready to notify for this automation.
What permissions does it need?
boards:read, boards:write, webhooks:write; Gmail (gmail.send). 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 for each event the app sends.
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 “Email clients from Gmail when monday.com work is Done” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.