Weekly time-allocation report from Google Calendar every Friday at 5pm

Geni reads the past seven days of your Google Calendar, categorizes every meeting with AI, logs hours per bucket to a Google Sheet, and posts a narrative weekly summary to Slack.

Agentic Task
Google CalendarGoogle SheetsSlackPersonal ProductivityOperationsAI ReportsDaily DigestsMeeting Workflows

I want a weekly time-allocation report that shows where my hours actually went, delivered every Friday at 5pm America/New_York. Trigger this on a cron schedule.

When the workflow runs, call Google Calendar List Events for the past seven days on my primary calendar. Pull the start time, end time, title, attendees, color, and description for each event. Skip all-day events and any event I declined.

For every remaining event, categorize it into one of these buckets: Customer meetings, Internal sync, Recruiting, 1:1s, Focus time, Personal. Use a combination of signals: attendee email domains (external domains that are not mine count as Customer), title keywords (interview or candidate maps to Recruiting, 1:1 or one on one maps to 1:1s, focus or block or deep work maps to Focus time), and event color when present. If a meeting is ambiguous, use your judgement and pick the closest bucket.

For each bucket compute total hours (sum of durations) and meeting count. Also identify the three longest meetings of the entire week across all buckets, with title, duration, and bucket.

Then call Google Sheets Append Values on the Time Tracking tab of my time tracking spreadsheet. Append one row per bucket with these columns: date (the Friday the report covers, ISO format), bucket name, hours (one decimal), meeting count. Include all six buckets even if hours are zero, so the data accumulates cleanly over time.

Before posting the summary, call Google Sheets Get Values on the Time Tracking tab to read the prior weeks of data. Compute week-over-week deltas per bucket (this week's hours minus last week's hours) and identify the bucket with the largest absolute change.

Finally, call Slack Send a Message to post a short narrative summary to my personal Slack channel. The message should include: a one-line headline with total tracked hours, a clean bucket breakdown (bucket: hours, meeting count, delta vs last week with arrow), the three longest meetings of the week, and a one-line observation that calls out where I spent more or less time than usual based on the largest delta. Keep the tone direct and skimmable.

Additional information

What does this prompt do?
  • Runs every Friday at 5pm ET on a cron trigger and pulls the past seven days of events from your primary Google Calendar.
  • Uses AI to categorize each meeting into buckets like Customer meetings, Internal sync, Recruiting, 1:1s, Focus time, and Personal based on attendee domains, title keywords, and event color.
  • Logs one row per bucket to a Time Tracking tab in Google Sheets so hours and meeting counts accumulate week over week.
  • Posts a short narrative Slack summary to your personal channel with the bucket breakdown, the three longest meetings, week-over-week deltas, and a one-line observation about where your time shifted.
What do I need to use this?
  • A connected Google Calendar account with read access to your primary calendar.
  • A connected Google Sheets account and a spreadsheet with a tab named Time Tracking (columns: date, bucket, hours, meeting count).
  • A connected Slack account and the channel or DM where the weekly summary should land.
  • A rough sense of your bucket definitions (which attendee domains count as customers, which titles map to recruiting, etc.) so the agent can categorize accurately.
How can I customize it?
  • Change the cadence or delivery time (Sunday night, Monday 8am, daily instead of weekly) by editing the cron trigger.
  • Add, remove, or rename buckets and tune the categorization rules (domains, keywords, colors) to match how you actually work.
  • Swap the Slack destination for a Notion page, an email digest, or a different channel, and adjust the narrative tone or length.

Frequently asked questions

How does the agent decide which bucket a meeting belongs to?
It combines three signals: attendee email domains (external customer domains vs your own), event title keywords (interview, 1:1, focus, sync), and event color if you color-code your calendar. You describe your buckets in plain English and the agent applies judgement to each event.
Does this work with multiple calendars or just my primary?
The default reads only your primary calendar. You can extend the prompt to include additional calendars by name, and the agent will merge events across them before categorizing.
Where do the week-over-week deltas come from?
From the Time Tracking tab itself. Each Friday the agent appends new rows, then reads back recent prior rows to compute changes per bucket and call out the largest shift.
Can I get this as an email instead of a Slack message?
Yes. Replace the Slack step with a Gmail Send Email step in the prompt and the workflow author will wire it up the same way.
What if I take vacation or have a slow week?
Buckets with zero hours are still logged so the sheet stays consistent, and the narrative will note the lighter week instead of inventing trends.

See where your week actually went.

Connect Google Calendar, Google Sheets, and Slack once, and Geni delivers a categorized time-allocation report every Friday at 5pm.