Every 30 minutes
Update your leads sheet and get a follow-up draft after each client meeting
When a client meeting ends, the lead's row in your sheet is marked as met and you get an email with a suggested follow-up.
- Runs
- Every 30 minutes
- Apps
- Google Calendar, Google Sheets
- AI
- Yes, uses the built-in AI allowance
- Access
- Calendar read; Sheet edit
Send this to your assistant
Create a ClickRuntime automation: after each client meeting on my Google Calendar, find the attendee in my Leads sheet, mark the meeting done and email me an AI-suggested follow-up.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A mortgage broker has five or six client meetings a day. Her leads sheet is meant to show who she has met and what is next, but after back-to-back calls it falls days behind, and follow-ups go out late or not at all.
Updating the sheet and preparing a follow-up as each meeting ends keeps your pipeline accurate and makes sending the next email a two-minute job while the conversation is fresh.
What you get out of it
Your leads sheet stays current
Each lead you meet is marked as met with the date, so the sheet reflects your real pipeline without end-of-day admin.
Follow-ups go out while you are remembered
A suggested email lands minutes after the meeting, when it is easiest to personalise and send.
Nobody slips through
Every client meeting triggers a follow-up prompt, including the ones squeezed in at the end of a long day.
Context in one place
The suggestion uses the meeting title and the notes already in the lead's row, so it reads like it came from you.
How it works
What happens, step by step
Every 30 minutes ClickRuntime checks your Google Calendar for meetings that have just ended.
It skips meetings it has already handled.
It looks up each attendee's email in your Leads sheet and marks their row as met with today's date.
AI drafts a short follow-up using the meeting title and the lead's notes, and it is emailed to you.
Before it runs live
- Connect Google Calendar
- Connect your Google Sheets account and pick the spreadsheets it may use
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
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Google Calendar and Google Sheets steps into one automation
Under the hood
The code that runs this automation
from datetime import datetime, timezone
from clickruntime import on_trigger, credentials, http, state, ai, notify, report_fetched
SHEET = "your-spreadsheet-id"
S = f"https://sheets.googleapis.com/v4/spreadsheets/{SHEET}/values"
@on_trigger
def run(event):
h = {"Authorization": f"Bearer {credentials.connection('google', 'work')}"}
now = datetime.now(timezone.utc).isoformat()
since = state.get("since") or now
events = http.get("https://www.googleapis.com/calendar/v3/calendars/primary/events", headers=h,
params={"timeMin": since, "timeMax": now, "singleEvents": True}).json().get("items", [])
ended = [e for e in events if since <= e.get("end", {}).get("dateTime", "") <= now]
report_fetched(len(ended))
if not ended:
return {"ended": 0}
rows = http.get(f"{S}/Leads!A2:D", headers=h).json().get("values", [])
for e in ended:
for i, r in enumerate(rows, start=2):
if len(r) > 1 and any(a.get("email") == r[1] for a in e.get("attendees", [])):
http.put(f"{S}/Leads!C{i}", headers=h, params={"valueInputOption": "RAW"}, json={"values": [["met " + now[:10]]]})
draft = ai.generate(f"Write a short follow-up email to {r[0]} after our meeting '{e.get('summary')}'. Notes: {r[3] if len(r) > 3 else ''}",
max_output_tokens=300).text
notify.email_me(f"Follow up with {r[0]}", draft)
state.set("since", now)
return {"ended": len(ended)}FAQ
Common questions
How does it match a meeting to a lead?
Does it send the follow-up to the client?
What about meetings with people not in the sheet?
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
Invite new sheet registrants to your calendar event
Each new email in your registrations sheet is added as a guest to your event and gets a calendar invite.
See how it worksPut unpaid bills from a sheet into your calendar on their due dates
Every unpaid bill in your sheet shows up in your calendar on its due date with a reminder, and the event updates if the amount changes.
See how it worksKeep a Google Sheet of every work calendar event
Your sheet always lists every event on your work calendar with its title, time, guests and status, and updates when events change.
See how it worksKeep exploring
Set up “Update your leads sheet and get a follow-up draft after each client meeting” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.