All workflows
Google Sheets logoGoogle Calendar logoGmail logoAnthropic logo

Build yesterday's timesheet from what you actually did

Rebuilds yesterday from your calendar, sent mail and commits, and appends one evidence row to your timesheet.

Every day at 12:004 apps5 steps

Apps it connects

Authenticate each one once and the workflow is ready to run.

What it does

The integration steps this workflow runs, in the order it first runs them.

  1. 1Google SheetsRead column
  2. 2Google CalendarCheck timeslot
  3. 3GmailList emails
  4. 4AnthropicGenerate model response
  5. 5Google SheetsAppend row

How it works

Everything the template sets up, and what to fill in before the first run.

Rebuilds yesterday from the traces it left - time marked busy on your calendar, mail you sent, commits you pushed - and appends one row to your timesheet, so a billable day starts from evidence rather than from memory.

Every day at 12:00 UTC it works out yesterday's date in the time zone you name, then writes one row: how many minutes and hours your calendar was marked busy between 'workingDayStartsAt' and 'workingDayEndsAt', how many separate busy windows that was, how many emails you sent, how many commits you pushed, which repositories they were in, and a short written description of the day's shape. It only ever appends. Nothing already on the tab is edited or removed.

What it can and cannot tell you about meetings. Lodol can ask your calendar which windows were busy; it cannot ask what was in them. So the row reports time in meetings, not what the meetings were - no titles, no attendees, no descriptions - and the written summary is instructed never to invent any. "Busy" means anything your calendar counts as busy, so a focus block counts the same as a call. A single busy block longer than 'skipBusyBlocksLongerThanHours' is left out of the total and listed in Notes instead, on the grounds that a block that long is an all-day or out-of-office marker rather than a meeting.

Every figure is a count of something the run actually read. Nothing is estimated and nothing is rounded up: the exact figure is the minutes, and the hours column is those same minutes divided by 60. If something could not be read - the calendar would not answer, the mail search failed, a repository returned an error - that cell is left empty and the reason goes in Notes, so a blank never quietly reads as zero. Where a count could be short, Notes says so: the sent-mail count stops at 'maxEmailsPerDay', and GitHub returns at most 100 commits per request per repository.

Set it up by pasting your spreadsheet link into 'spreadsheetUrl' and your time zone into 'timeZone', written the long way - Europe/London, America/New_York. Your tab, 'Timesheet' unless you rename it, needs these nine headings in row 1, in this order, with the date in column A: Date, Meeting minutes, Meeting hours, Busy windows, Emails sent, Commits, Repositories, What the day looked like, Notes. Column A is how the workflow knows which days are already written up, so running it twice on the same day adds nothing.

Commits are optional. Leave 'githubRepositories' empty and the commit cells stay blank. To count them, list repositories as 'owner/name, owner/name', put your GitHub username in 'githubUsername', and paste a GitHub token that can read those repositories into 'githubReadToken' - Lodol has no built-in step that lists commits, so this part calls GitHub's API directly and needs a token of its own. Read-only access is enough.

Two boundaries worth knowing before you invoice from this. Commits are matched against the UTC day, and Gmail applies its date filter in the time zone set on the Gmail account rather than the one you type here, so activity within a few hours of midnight can land on the neighbouring day's row. To backfill or redo a particular day, put its date in 'reportDate' as YYYY-MM-DD; leave it blank for yesterday.

timesheetbillable hoursgoogle sheetsgoogle calendargmailgithubdaily

Start from a workflow that already works.

Add "Build yesterday's timesheet from what you actually did" to your workspace, connect its apps, and make it yours. No credit card required.

Free plan available · No credit card required