Calendar time audit dashboard with meeting cost estimates

By General Input

Pick any week or month and see where your hours actually went: internal versus external, recurring versus one-off, and what each standing meeting really costs.

Integrations

  • Aurinko
  • Google Sheets

Type

App

Categories

  • Operations
  • Personal Productivity

Build me a calendar time audit dashboard I open at the end of every week and every month to see where my time actually went. It runs on Aurinko for calendar data and Google Sheets for period-over-period tracking. This is a reporting surface I open on a rhythm, not something that runs on a schedule.

The main view starts with a date range picker with presets for this week, last week, this month, and last month, plus a custom range. When I pick a range, load my calendars with List Calendars and pull every event in the window with List Events In Range against each calendar. Time ranges are ISO 8601 with a timezone offset, so build them in my calendar's timezone rather than UTC. Both list operations paginate: they return a nextPageToken that you pass back as pageToken, and you must follow every page or long ranges will silently under-report. Use Get Calendar when you need a calendar's display name or timezone for labeling.

Break the total hours into the cuts I care about, each as its own card or section: internal versus external hours, decided by whether attendee email domains match my own; recurring series versus one-off meetings; hours per person; hours per outside company, grouped by attendee email domain; meetings I organized versus meetings I was invited to; after-hours and weekend time; and how much unbroken focus time was left over in the gaps between bookings. Aurinko has no contacts operations, so person and company grouping has to come from the attendee email addresses on the events themselves and the domains inside them, not from an address book.

Two counting rules are essential and I want them baked in. First, a single event with many attendees still only consumes one block of my time. Attendee lists are for grouping hours by person and company, never for multiplying my own total, and the per-person and per-company cuts should be clearly labeled as overlapping views of the same underlying hours so the sub-totals are not mistaken for a sum. Second, exclude declined events, all-day blocks, and out-of-office entries from the totals by default, with a single visible toggle to include them and recompute everything.

Give me a ranked biggest time sinks table showing the recurring series eating the most hours in the period. Group events into series by their recurrence identity, falling back to matching title plus organizer plus attendee set when the underlying provider does not expose a clean series id. Columns: series title, number of occurrences in the period, total hours, attendee count, my category tag, and estimated cost.

I set an hourly rate once in settings and the dashboard puts a cost estimate against each recurring series. Let me choose whether the cost reflects just my own hours or the whole room, meaning my hours multiplied by attendee count, since the whole-room number is usually the stronger argument for killing a standing meeting. The rate is app-side persistence, not a calendar field.

Every number on the dashboard should be clickable and drill into the underlying events behind it, showing date, time, duration, organizer, and attendees for each one. From that drill-down I want to act: shorten a series or change its cadence with Update Calendar Event, and cancel one outright with Delete Calendar Event. Confirm destructive actions before they run, be explicit about whether the change hits one occurrence or the whole series, and refresh the affected numbers afterward. Aurinko events use ETag optimistic concurrency, so an update needs the current record's ETag in the If-Match header. On a 409 mismatch, refetch the event and retry rather than surfacing a raw error.

Let me tag any recurring series with a category of my own, such as client work, internal sync, one-on-one, or interviews. Store these tags app-side keyed to the series identity so the label sticks for future periods and I only ever tag a series once. Add a category breakdown to the dashboard alongside the other cuts, and let me manage the category list itself.

Add a button that appends the period summary to a tracking spreadsheet with Google Sheets Append Values: the period start and end, total hours, internal and external hours, recurring and one-off hours, organized versus invited hours, after-hours and weekend hours, focus time, meeting count, and total estimated cost. Read that sheet back so the dashboard can show this period against the last one with deltas, plus a trend line over all recorded periods. Let me point it at an existing spreadsheet, or offer to create one with the right headers on first use. Guard against appending the same period twice, and let me overwrite a period's row if I rerun the audit after cancelling something.

Settings should hold my own email domain for the internal versus external split, my hourly rate and cost mode, what counts as after hours and which days are my weekend, my category list, and the tracking spreadsheet. Everything must work identically whether the calendar lives on Gmail, Office 365, Exchange, iCloud, or IMAP, so lean on the unified calendar surface and degrade gracefully when a provider does not return a field like recurrence or response status rather than failing the whole view.

Long date ranges mean a lot of pages of events, so show real loading progress while a period is being pulled and make the numbers feel fast once loaded. The point of the dashboard is a calibration check between where I think my time goes and where it actually went, so lead with the headline hours and the biggest time sinks rather than burying them under configuration.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads