Auto-log Clockify time entries to a Google Sheets timesheet

By General Input

Every time you stop a timer in Clockify, we add a fully labeled row to your Google Sheets timesheet, so payroll and client billing stay current.

Integrations

  • Clockify
  • Google Sheets

Type

Deterministic Code

Categories

  • Operations
  • Finance

This is a deterministic code workflow. Use Clockify's completed-time-entry poll trigger ("Monitor Clockify for completed time entries") as the source. It fires every time a running timer is stopped and the time entry is completed. The poll payload carries the entry's IDs and fields: the workspace ID, the user (team member) ID, the project ID, the task ID, the description, the billable flag, and the time interval with start, end, and an ISO-8601 duration such as PT1H30M.

The payload gives IDs, not names, so resolve the human-readable names before writing the row. Call Clockify's "Get all projects on a workspace" to map the project ID to its project name and to read the project's client ID; request the hydrated project list so each project also carries its tasks, letting you match the entry's task ID to a task name. Call Clockify's "Find clients on a workspace" to map that client ID to the client name. Call Clockify's "Find all users on a workspace" to map the user ID to the team member's name.

Convert the entry's ISO-8601 duration into decimal hours: parse the hours, minutes, and seconds out of the PT#H#M#S string and compute hours + minutes/60 + seconds/3600, rounded to two decimals (so PT1H30M becomes 1.5). Take the entry date from the start time, formatted as YYYY-MM-DD.

Append exactly one row to the Google Sheets timesheet using Google Sheets "Append Values". Keep this fixed column order so downstream pivots and formulas keep working: date, team member, client, project, task, description, duration in decimal hours, and billable (written as Yes or No). Append after the last row of the existing table so nothing is overwritten.

If a lookup cannot resolve a name (for example an entry with no client or no task), write an empty cell for that column rather than skipping the entry, so every completed time entry always produces exactly one timesheet row.

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