Skip to main content
Connectors

Timely connector

Set up the Timely connector in Kaivo: authentication, configuration, the 5 BigQuery tables it syncs, and answers to common questions.

Written By Lauri Raivio

Last updated 16 days ago

Kaivo is a fully managed data platform that syncs your Timely data into a Google BigQuery warehouse and keeps it up to date automatically. There is no pipeline to build and no infrastructure to run, so you can spend your time analysing your project management data instead of moving it.

What is the Timely connector

Sync your Timely time tracking data into BigQuery with Kaivo to analyse hours and project profitability.

CategoryProject Management
AuthenticationAPI key
SetupSelf-service

Getting started with the Timely connector

  1. Sign up for Kaivo and create a workspace.
  2. Connect your Timely account.
  3. Choose which tables to sync.
  4. Wait for the initial sync to finish.
  5. Query your data in BigQuery or your favourite AI or BI tool.

Authenticating Timely

Authenticate with your Bearer Token.

FieldDescription
Bearer Token

Your Timely API bearer token.

Configuring the Timely connector

When you set up the connector, you provide:

FieldDescription
Account ID

Your Timely account ID.

Start Date

Any data before this date will not be fetched.

Tables and columns synced from Timely

Kaivo syncs 5 tables from Timely into a dedicated dataset in your BigQuery warehouse. Click any table to see its columns and types.

ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
activeBOOL
idFLOAT64
nameSTRING
updated_atSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
billableBOOL
billedBOOL
cost__amountFLOAT64
cost__currency_codeSTRING
cost__formattedSTRING
cost__fractionalFLOAT64
created_atFLOAT64
created_fromSTRING
creator_idFLOAT64
daySTRING
deletedBOOL
draftBOOL
duration__formattedSTRING
duration__hoursFLOAT64
duration__minutesFLOAT64
duration__secondsFLOAT64
duration__total_hoursFLOAT64
duration__total_minutesFLOAT64
duration__total_secondsFLOAT64
estimatedBOOL
estimated_cost__amountFLOAT64
estimated_cost__currency_codeSTRING
estimated_cost__formattedSTRING
estimated_cost__fractionalFLOAT64
estimated_duration__formattedSTRING
estimated_duration__hoursFLOAT64
estimated_duration__minutesFLOAT64
estimated_duration__secondsFLOAT64
estimated_duration__total_hoursFLOAT64
estimated_duration__total_minutesFLOAT64
estimated_duration__total_secondsFLOAT64
estimated_internal_cost__amountFLOAT64
estimated_internal_cost__currency_codeSTRING
estimated_internal_cost__formattedSTRING
estimated_internal_cost__fractionalFLOAT64
fromSTRING
hour_rateFLOAT64
hour_rate_in_centsFLOAT64
idFLOAT64
internal_cost__amountFLOAT64
internal_cost__currency_codeSTRING
internal_cost__formattedSTRING
internal_cost__fractionalFLOAT64
internal_cost_rateFLOAT64
lockedBOOL
manageBOOL
noteSTRING
profitJSON
project__account_idFLOAT64
project__activeBOOL
project__billableBOOL
project__budgetFLOAT64
project__budget_calculationSTRING
project__budget_percentFLOAT64
project__budget_progressFLOAT64
project__budget_typeSTRING
project__client__activeBOOL
project__client__idFLOAT64
project__client__nameSTRING
project__client__updated_atSTRING
project__colorSTRING
project__created_atFLOAT64
project__created_fromSTRING
project__currency__idSTRING
project__currency__iso_codeSTRING
project__currency__nameSTRING
project__currency__symbolSTRING
project__currency__symbol_firstBOOL
project__default_labelsBOOL
project__enable_labelsSTRING
project__has_recurrenceBOOL
project__hour_rateFLOAT64
project__hour_rate_in_centsFLOAT64
project__idFLOAT64
project__invoice_by_budgetBOOL
project__nameSTRING
project__rate_typeSTRING
project__required_labelsBOOL
project__required_notesBOOL
project__updated_atFLOAT64
sequenceFLOAT64
suggestion_idFLOAT64
timer_started_onFLOAT64
timer_stateSTRING
timer_stopped_onFLOAT64
toSTRING
uidSTRING
updated_atFLOAT64
updated_fromSTRING
updater_idFLOAT64
user__avatar__largeSTRING
user__avatar__large_retinaSTRING
user__avatar__mediumSTRING
user__avatar__medium_retinaSTRING
user__avatar__timelineSTRING
user__emailSTRING
user__idFLOAT64
user__nameSTRING
user__updated_atSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__entry_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__label_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__project__default_label_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__project__label_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__project__labels

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__project__required_label_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__timestamps

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
fromSTRING
hour_idFLOAT64
idFLOAT64
toSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__timestamps__entry_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: events__user_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
activeBOOL
created_atSTRING
emojiSTRING
idFLOAT64
nameSTRING
sequenceFLOAT64
updated_atSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: labels__children

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
activeBOOL
created_atSTRING
emojiSTRING
idFLOAT64
nameSTRING
parent_idFLOAT64
sequenceFLOAT64
updated_atSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: labels__children__children

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
descriptionSTRING
account_idFLOAT64
activeBOOL
billableBOOL
billed_cost__amountFLOAT64
billed_cost__currency_codeSTRING
billed_cost__formattedSTRING
billed_cost__fractionalFLOAT64
billed_duration__formattedSTRING
billed_duration__hoursFLOAT64
billed_duration__minutesFLOAT64
billed_duration__secondsFLOAT64
billed_duration__total_hoursFLOAT64
billed_duration__total_minutesFLOAT64
billed_duration__total_secondsFLOAT64
budgetFLOAT64
budget_calculationSTRING
budget_percentFLOAT64
budget_progressFLOAT64
budget_typeSTRING
client__activeBOOL
client__external_idSTRING
client__idFLOAT64
client__nameSTRING
client__updated_atSTRING
colorSTRING
cost__amountFLOAT64
cost__currency_codeSTRING
cost__formattedSTRING
cost__fractionalFLOAT64
created_atFLOAT64
created_fromSTRING
currency__idSTRING
currency__iso_codeSTRING
currency__nameSTRING
currency__symbolSTRING
currency__symbol_firstBOOL
default_labelsBOOL
duration__formattedSTRING
duration__hoursFLOAT64
duration__minutesFLOAT64
duration__secondsFLOAT64
duration__total_hoursFLOAT64
duration__total_minutesFLOAT64
duration__total_secondsFLOAT64
enable_labelsSTRING
estimated_cost__amountFLOAT64
estimated_cost__currency_codeSTRING
estimated_cost__formattedSTRING
estimated_cost__fractionalFLOAT64
estimated_duration__formattedSTRING
estimated_duration__hoursFLOAT64
estimated_duration__minutesFLOAT64
estimated_duration__secondsFLOAT64
estimated_duration__total_hoursFLOAT64
estimated_duration__total_minutesFLOAT64
estimated_duration__total_secondsFLOAT64
external_idSTRING
has_recurrenceBOOL
hour_rateFLOAT64
hour_rate_in_centsFLOAT64
idFLOAT64
invoice_by_budgetBOOL
nameSTRING
rate_typeSTRING
required_labelsBOOL
required_notesBOOL
unbilled_cost__amountFLOAT64
unbilled_cost__currency_codeSTRING
unbilled_cost__formattedSTRING
unbilled_cost__fractionalFLOAT64
unbilled_duration__formattedSTRING
unbilled_duration__hoursFLOAT64
unbilled_duration__minutesFLOAT64
unbilled_duration__secondsFLOAT64
unbilled_duration__total_hoursFLOAT64
unbilled_duration__total_minutesFLOAT64
unbilled_duration__total_secondsFLOAT64
updated_atFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: projects__default_label_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: projects__label_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: projects__labels

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: projects__required_label_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: projects__team_ids

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
valueJSON
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: projects__users

ColumnTypeDescription
_kaivo_parent_idSTRINGForeign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo.
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
created_atSTRING
deletedBOOL
hour_rateFLOAT64
hour_rate_in_centsFLOAT64
internal_hour_rateFLOAT64
internal_hour_rate_in_centsFLOAT64
updated_atSTRING
user_idFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.
ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
typeSTRING
activeBOOL
adminBOOL
avatar__largeSTRING
avatar__large_retinaSTRING
avatar__mediumSTRING
avatar__medium_retinaSTRING
avatar__smallSTRING
avatar__small_retinaSTRING
created_atFLOAT64
day_view_onboardedBOOL
default_hour_rateFLOAT64
deletedBOOL
emailSTRING
hide_hourly_rateBOOL
hide_internal_hourly_rateBOOL
idFLOAT64
internal_hour_rateFLOAT64
last_received_memories_dateSTRING
memory_onboardedBOOL
nameSTRING
role__idFLOAT64
role__nameSTRING
role_idFLOAT64
sign_in_countFLOAT64
time_zoneSTRING
updated_atFLOAT64
user_levelSTRING
weekdaysSTRING
weekly_capacityFLOAT64
work_daysSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

How the Timely sync works

After the first load, Kaivo keeps your BigQuery warehouse up to date for you. Where Timely supports it, each sync pulls only new and changed records so it stays fast; otherwise it refreshes the whole table. Every record keeps its original ID, so you won't get duplicate rows.

Frequently asked questions

How long does the initial sync take for Timely?

It depends on how much history is in your Timely account. Most initial syncs finish within minutes, while large accounts can take a few hours. After that, syncs only fetch new and changed records, so they're much faster.

Can I sync only some tables or columns?

Yes. You pick which tables to sync when you set up the connection and can change the selection later. Tables you don't select are never copied to your warehouse.

What happens when Timely's schema changes?

New fields are never added automatically. You choose which fields to sync, so data you haven't selected (sensitive personal data, for example) never lands in your warehouse. When a new field appears, it becomes available for you to add. What happens to removed or renamed fields depends on a table's sync mode: full-refresh tables always match what's currently in Timely, so dropped fields disappear, while incremental tables keep their existing columns and history, so an old field stays and newly added fields fill in over time.

How do I handle GDPR or data deletion requests?

Your data lives in your own Kaivo-managed BigQuery warehouse, so the most direct option is to delete or anonymise specific records right in BigQuery. If you delete data in Timely instead, full-refresh tables drop it on the next sync, while incremental tables keep it, so you would remove the row in BigQuery or ask us to run a full refresh. To remove everything, delete the Timely connector in Kaivo and all of its synced data is deleted with it.

Common use cases for Timely data

Logged hours

Use events to track logged hours by project and client over time.

Project profitability

Join events with projects and clients to compare time against budgets.

Team utilisation

Use users to see how time is spent across the team.

Use Timely data in your AI and BI tools

Once Timely data lands in your Kaivo-managed BigQuery warehouse, you can explore it with AI tools or any BI tool that connects to BigQuery. Here's how the most common destinations work with Timely data.

Claude

Use Kaivo's MCP server to give Claude secure, workspace-scoped access to your data. Setup guide →

Power BI

Microsoft's BI tool with a native BigQuery connector. Supports direct query and scheduled refresh. Setup guide →

Data Studio

Free Google BI tool with native BigQuery support. One-click connection to your Kaivo warehouse; great for SMB teams on Google Workspace. Setup guide →

Tableau

The premium analytics standard, with native BigQuery integration. Setup guide →

Google Sheets

Use Connected Sheets to query BigQuery directly from a spreadsheet, with no SQL. Setup guide →

Excel

Connect via Power Query's BigQuery connector. Setup guide →

Metabase

Open-source BI tool with strong BigQuery support. Setup guide →

See our pricing page for Timely connector pricing and plan details.

Was this helpful?

Still need help? Share an idea