Clockify

Productivity

Ready to use

Clockify data, published as Clockify publishes it. Ingest delivers this data to a data warehouse you own as 19 tables, and updates it on the schedule you choose. There is no code to write and nothing to install.

What you get

TableEach row is
workspaces
workspaces
Every workspace the key can see, with its settings, features, currencies, rates and memberships. This is the connector's anchor: every other resource is read from these workspaces, so no workspace id is pasted in anywhere.
workspaces_clients
workspaces_clients
Clients of each workspace, archived ones included, with their contact email, cc addresses, address, note and currency, as a transformer child of `workspaces`.
workspaces_custom_fields
workspaces_custom_fields
Custom fields defined on each workspace whose plan has custom fields (CUSTOM_FIELDS), for time entries or for users: name, type, allowed values, default value, whether it is required or only an admin can edit it, and its status. Per-project defaults land in `workspaces_custom_fields__project_default_values`. Values themselves are on the time entries (`customFieldValues`), the users (`customFields`) and the projects (`workspaces_projects__custom_fields`).
workspaces_expense_categories
workspaces_expense_categories
Expense categories of each workspace whose plan has expenses (EXPENSES), archived ones included: name, unit and unit price.
workspaces_expenses
workspaces_expenses
Every member's expenses in each workspace whose plan has expenses (EXPENSES), from Clockify's expense report over 2000 to 2099: date, amount, quantity, category, project, task, member, billable and locked flags, approval state, receipt file link and invoicing state. Keyed on the report's `_id`, the expense's id. Every run reads the whole range again, so an edited expense is corrected; one deleted in Clockify is not removed.
workspaces_holidays
workspaces_holidays
Holidays of each workspace whose plan has time off (TIME_OFF): name, date period, whether it recurs every year, and who it applies to (everyone, or listed users and user groups).
workspaces_invoice_payments
workspaces_invoice_payments
Payments recorded against each invoice: amount, date, note and author, as a transformer child of `workspaces_invoices`. A payment record does not name its invoice, so `_ingest_parent_key` holds the workspace and invoice ids as a JSON array, `["<workspace id>","<invoice id>"]`.
workspaces_invoices
workspaces_invoices
Invoices of each workspace whose plan has invoicing (INVOICING), in every status: number, client, currency, amount, balance, amount paid, issue and due dates, and status. The workspace is `_ingest_parent_key`.
workspaces_projects
workspaces_projects
Projects of each workspace, archived ones included, with their client, colour, billable and archived flags, estimates and budget, public and template flags, note and per-member rates, as a transformer child of `workspaces`. Each project's tasks land in `workspaces_projects__tasks` (status, assignees, user groups, estimate, linked duration, billable flag and rates; done tasks included), and its custom field values, on a plan with custom fields, in `workspaces_projects__custom_fields`. `expenses` holds at most the project's latest 20 expenses, as Clockify serves them here; the full list is `workspaces_expenses`.
workspaces_scheduling_assignments
workspaces_scheduling_assignments
Scheduled assignments of each workspace whose plan has scheduling (SCHEDULING), over 2000 to 2099: the member, project, task and client, hours per day, start time, period, note and billable flag.
workspaces_shared_reports
workspaces_shared_reports
Shared reports of each workspace whose plan has them (SHARED_REPORTS), as the workspace admin sees them: name, type, author, link, whether the link is public, whether the date range is fixed, and which users and user groups can see it. The workspace is `_ingest_parent_key`.
workspaces_tags
workspaces_tags
Tags of each workspace, archived ones included, with their archived flag, as a transformer child of `workspaces`. Tags are what time entries refer to in `tagIds`.
workspaces_time_off_balance_assignments
workspaces_time_off_balance_assignments
The balance assignments behind each member's balance in a policy: the amount accrued and the balance for each date range, as a transformer child of `workspaces_time_off_balances`.
workspaces_time_off_balances
workspaces_time_off_balances
Each member's balance in each time-off policy: total, used, balance and negative balance, as a transformer child of `workspaces_time_off_policies`, one row per member and policy.
workspaces_time_off_policies
workspaces_time_off_policies
Time-off policies of each workspace whose plan has time off (TIME_OFF), archived ones included: name, time unit, approval settings, accrual, negative balance rules, and who the policy applies to.
workspaces_time_off_requests
workspaces_time_off_requests
Time-off requests of each workspace whose plan has time off (TIME_OFF), in every status (pending, approved, rejected): the member and policy, the period and half-day settings, the note, the balance change, and the current status with who changed it and when.
workspaces_user_groups
workspaces_user_groups
User groups (teams) of each workspace with their member ids and team managers, as a transformer child of `workspaces`.
workspaces_user_time_entries
workspaces_user_time_entries
Time entries of each workspace member over the member's whole history, one row per entry, as a transformer child of `workspaces_users` (reading another member's entries needs an admin's key). Fields: description, project, task, billable flag, type, locked flag, rates, and `timeInterval` as JSON carrying start and end (UTC), the same wall-clock values in the entry's own `timeZone`, and the ISO-8601 duration. Clockify filters this endpoint on the entry's START time and has no modified-since filter, and an entry can be edited after it is created, so every run re-reads each member's entries in full and upserts them on `id`; that is how an edited entry is corrected. An entry deleted in Clockify is not removed from the destination. Custom field values are a paid-plan feature and stay empty on a free workspace.
workspaces_users
workspaces_users
Members of each workspace with their email, name, status, profile picture and settings (time zone, date and time formats), as a transformer child of `workspaces`. Each member's roles land in `workspaces_users__roles` (workspace owner, admin, team manager, project manager), and what each role covers (the members a team manager manages, the projects a project manager manages) in `workspaces_users__roles__entities`. Time entries are read from these users. One row per workspace and member: a member of several workspaces has a row in each, with that workspace's roles, told apart by `_ingest_parent_key` (the workspace id).

How it works

  1. Choose Clockify. Connect your Clockify account once, from Ingest.
  2. Pick where it goes. BigQuery, Snowflake, Databricks, Redshift and 10 more, in an account you own.
  3. Pick a schedule. Daily is the default, and weekly and monthly are there too.
  4. Ingest runs it from then on. If a run fails, your dashboard shows which table and why.

Questions

Do I need an account with Clockify?
Yes. You connect your own Clockify account once, from Ingest, and the data comes from what that account can see.
Which warehouses can Clockify data go to?
Amazon S3, Google Cloud Storage, Azure Blob Storage, Apache Iceberg, Ingest Managed Lakehouse, MotherDuck, Postgres, Amazon Athena, Databricks, Redshift, BigQuery, ClickHouse, MySQL / generic SQL and Snowflake, in an account you own.
How fresh is the data?
As fresh as your schedule: daily by default, or weekly or monthly. Schedules as often as every 15 minutes are on the Enterprise plan.
Will running it again create duplicate rows?
No. Each row is stored once, by its key: when a run reads a row that is already there, it replaces that copy instead of adding a second one.
Do I need to write code?
No. Ingest builds, runs and maintains the connector. Someone with access to your warehouse connects it once, following a short guide.
For your data team: technical reference

Connector clockify, version 0.1.0, a REST source, status beta, authentication api_key.

Vendor documentation: https://docs.clockify.me/

Configuration

No configuration required.

Resources

ResourceStatusPlanWritePrimary keyOverrides
workspaces
Every workspace the key can see, with its settings, features, currencies, rates and memberships. This is the connector's anchor: every other resource is read from these workspaces, so no workspace id is pasted in anywhere.
betafullmergeid-
workspaces_clients
Clients of each workspace, archived ones included, with their contact email, cc addresses, address, note and currency, as a transformer child of `workspaces`.
betaparent_childmergeid-
workspaces_custom_fields
Custom fields defined on each workspace whose plan has custom fields (CUSTOM_FIELDS), for time entries or for users: name, type, allowed values, default value, whether it is required or only an admin can edit it, and its status. Per-project defaults land in `workspaces_custom_fields__project_default_values`. Values themselves are on the time entries (`customFieldValues`), the users (`customFields`) and the projects (`workspaces_projects__custom_fields`).
betaparent_childmergeid-
workspaces_expense_categories
Expense categories of each workspace whose plan has expenses (EXPENSES), archived ones included: name, unit and unit price.
betaparent_childmergeid-
workspaces_expenses
Every member's expenses in each workspace whose plan has expenses (EXPENSES), from Clockify's expense report over 2000 to 2099: date, amount, quantity, category, project, task, member, billable and locked flags, approval state, receipt file link and invoicing state. Keyed on the report's `_id`, the expense's id. Every run reads the whole range again, so an edited expense is corrected; one deleted in Clockify is not removed.
betaparent_childmerge_id-
workspaces_holidays
Holidays of each workspace whose plan has time off (TIME_OFF): name, date period, whether it recurs every year, and who it applies to (everyone, or listed users and user groups).
betaparent_childmergeid-
workspaces_invoice_payments
Payments recorded against each invoice: amount, date, note and author, as a transformer child of `workspaces_invoices`. A payment record does not name its invoice, so `_ingest_parent_key` holds the workspace and invoice ids as a JSON array, `["<workspace id>","<invoice id>"]`.
betaparent_childmergeid-
workspaces_invoices
Invoices of each workspace whose plan has invoicing (INVOICING), in every status: number, client, currency, amount, balance, amount paid, issue and due dates, and status. The workspace is `_ingest_parent_key`.
betaparent_childmergeid-
workspaces_projects
Projects of each workspace, archived ones included, with their client, colour, billable and archived flags, estimates and budget, public and template flags, note and per-member rates, as a transformer child of `workspaces`. Each project's tasks land in `workspaces_projects__tasks` (status, assignees, user groups, estimate, linked duration, billable flag and rates; done tasks included), and its custom field values, on a plan with custom fields, in `workspaces_projects__custom_fields`. `expenses` holds at most the project's latest 20 expenses, as Clockify serves them here; the full list is `workspaces_expenses`.
betaparent_childmergeid-
workspaces_scheduling_assignments
Scheduled assignments of each workspace whose plan has scheduling (SCHEDULING), over 2000 to 2099: the member, project, task and client, hours per day, start time, period, note and billable flag.
betaparent_childmergeid-
workspaces_shared_reports
Shared reports of each workspace whose plan has them (SHARED_REPORTS), as the workspace admin sees them: name, type, author, link, whether the link is public, whether the date range is fixed, and which users and user groups can see it. The workspace is `_ingest_parent_key`.
betaparent_childmergeid-
workspaces_tags
Tags of each workspace, archived ones included, with their archived flag, as a transformer child of `workspaces`. Tags are what time entries refer to in `tagIds`.
betaparent_childmergeid-
workspaces_time_off_balance_assignments
The balance assignments behind each member's balance in a policy: the amount accrued and the balance for each date range, as a transformer child of `workspaces_time_off_balances`.
betaparent_childmergeid-
workspaces_time_off_balances
Each member's balance in each time-off policy: total, used, balance and negative balance, as a transformer child of `workspaces_time_off_policies`, one row per member and policy.
betaparent_childmergeid-
workspaces_time_off_policies
Time-off policies of each workspace whose plan has time off (TIME_OFF), archived ones included: name, time unit, approval settings, accrual, negative balance rules, and who the policy applies to.
betaparent_childmergeid-
workspaces_time_off_requests
Time-off requests of each workspace whose plan has time off (TIME_OFF), in every status (pending, approved, rejected): the member and policy, the period and half-day settings, the note, the balance change, and the current status with who changed it and when.
betaparent_childmergeid-
workspaces_user_groups
User groups (teams) of each workspace with their member ids and team managers, as a transformer child of `workspaces`.
betaparent_childmergeid-
workspaces_user_time_entries
Time entries of each workspace member over the member's whole history, one row per entry, as a transformer child of `workspaces_users` (reading another member's entries needs an admin's key). Fields: description, project, task, billable flag, type, locked flag, rates, and `timeInterval` as JSON carrying start and end (UTC), the same wall-clock values in the entry's own `timeZone`, and the ISO-8601 duration. Clockify filters this endpoint on the entry's START time and has no modified-since filter, and an entry can be edited after it is created, so every run re-reads each member's entries in full and upserts them on `id`; that is how an edited entry is corrected. An entry deleted in Clockify is not removed from the destination. Custom field values are a paid-plan feature and stay empty on a free workspace.
betaparent_childmergeid-
workspaces_users
Members of each workspace with their email, name, status, profile picture and settings (time zone, date and time formats), as a transformer child of `workspaces`. Each member's roles land in `workspaces_users__roles` (workspace owner, admin, team manager, project manager), and what each role covers (the members a team manager manages, the projects a project manager manages) in `workspaces_users__roles__entities`. Time entries are read from these users. One row per workspace and member: a member of several workspaces has a row in each, with that workspace's roles, told apart by `_ingest_parent_key` (the workspace id).
betaparent_childmerge_ingest_parent_key, id-

Setting up the destination is its own short guide, one per warehouse or lake: Amazon S3, Google Cloud Storage, Azure Blob Storage, Apache Iceberg, Ingest Managed Lakehouse, MotherDuck, Postgres, Amazon Athena, Databricks, Redshift, BigQuery, ClickHouse, MySQL / generic SQL, Snowflake.

Other sources Ingest connects for SaaS teams: Asana, Jira, Salesforce, Airtable, Facebook Ads, Frankfurter.

Get Clockify data into your warehouse

Last updated .