Skip to main content
Connectors

Keka connector

Set up the Keka connector in Kaivo: authentication, configuration, the 7 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 Keka 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 HR data instead of moving it.

What is the Keka connector

Sync your Keka HR data into BigQuery with Kaivo to report on headcount, attendance, and project time.

CategoryHR
AuthenticationAPI key
SetupSelf-service

Getting started with the Keka connector

  1. Sign up for Kaivo and create a workspace.
  2. Connect your Keka 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 Keka

Authenticate with your Keka credentials. You provide:

FieldDescription
Client Secret

Your Keka Client Secret, from Settings → Integrations and automation → API access.

API Key

A Keka API key — create one under Settings → Integrations and automation → API access (Create key).

Prerequisites

Keka authenticates with credentials from your Keka account. In Keka, go to Settings → Integrations and automation → API access:

  1. Copy your Client ID and Client Secret.
  2. Click Create key, give it a name, set an expiry and the required scopes, then copy the generated API Key.

Enter those three values below.

Need help? Reach our team via the chat in the bottom-right corner.

Configuring the Keka connector

When you set up the connector, you provide:

FieldDescription
Client ID

Your Keka Client ID, from Settings → Integrations and automation → API access.

Tables and columns synced from Keka

Kaivo syncs 7 tables from Keka 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.
idSTRING
day_typeFLOAT64
shift_end_timeSTRING
shift_durationFLOAT64
attendance_dateSTRING
employee_numberSTRING
shift_start_timeSTRING
first_in_of_the_day__timestampSTRING
first_in_of_the_day__punch_statusFLOAT64
first_in_of_the_day__location_address__zipSTRING
first_in_of_the_day__location_address__citySTRING
first_in_of_the_day__location_address__stateSTRING
first_in_of_the_day__location_address__country_codeSTRING
first_in_of_the_day__location_address__address_line1STRING
first_in_of_the_day__location_address__address_line2STRING
first_in_of_the_day__manual_clockin_typeFLOAT64
first_in_of_the_day__employee_identifierSTRING
first_in_of_the_day__attendance_log_sourceFLOAT64
last_out_of_the_day__timestampSTRING
last_out_of_the_day__punch_statusFLOAT64
last_out_of_the_day__location_address__zipSTRING
last_out_of_the_day__location_address__citySTRING
last_out_of_the_day__location_address__stateSTRING
last_out_of_the_day__location_address__country_codeSTRING
last_out_of_the_day__location_address__address_line1STRING
last_out_of_the_day__location_address__address_line2STRING
last_out_of_the_day__manual_clockin_typeFLOAT64
last_out_of_the_day__employee_identifierSTRING
last_out_of_the_day__attendance_log_sourceFLOAT64
total_gross_hoursFLOAT64
employee_identifierSTRING
shift_break_durationFLOAT64
total_break_durationFLOAT64
total_effective_hoursFLOAT64
shift_effective_durationFLOAT64
total_gross_overtime_durationFLOAT64
total_effective_overtime_durationFLOAT64
_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
idSTRING
codeSTRING
nameSTRING
billing_nameSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Clients__client_contacts

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.
idSTRING
nameSTRING
emailSTRING
phoneSTRING
client_idSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Clients__additional_fields

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.
idSTRING
citySTRING
emailSTRING
image__thumbs___33x33STRING
image__thumbs___50x50STRING
image__thumbs___200x200STRING
image__file_nameSTRING
genderFLOAT64
exit_dateSTRING
exit_typeFLOAT64
job_title__titleSTRING
job_title__identifierSTRING
last_nameSTRING
time_typeFLOAT64
first_nameSTRING
home_phoneSTRING
is_privateBOOL
l2_manager__idSTRING
l2_manager__emailSTRING
l2_manager__last_nameSTRING
l2_manager__first_nameSTRING
reports_to__idSTRING
reports_to__emailSTRING
reports_to__last_nameSTRING
reports_to__first_nameSTRING
work_phoneSTRING
blood_groupFLOAT64
exit_reasonSTRING
exit_statusFLOAT64
middle_nameSTRING
worker_typeFLOAT64
country_codeSTRING
date_of_birthSTRING
display_nameSTRING
joining_dateSTRING
mobile_phoneSTRING
nationalitySTRING
marriage_dateSTRING
account_statusFLOAT64
leave_plan_info__titleSTRING
leave_plan_info__identifierSTRING
marital_statusFLOAT64
personal_emailSTRING
contingent_type__idSTRING
contingent_type__nameSTRING
current_address__zipSTRING
current_address__citySTRING
current_address__stateSTRING
current_address__country_codeSTRING
current_address__address_line1STRING
current_address__address_line2STRING
employee_numberSTRING
shift_policy_info__titleSTRING
shift_policy_info__identifierSTRING
attendance_numberSTRING
employment_statusFLOAT64
invitation_statusFLOAT64
permanent_address__zipSTRING
permanent_address__citySTRING
permanent_address__stateSTRING
permanent_address__country_codeSTRING
permanent_address__address_line1STRING
permanent_address__address_line2STRING
probation_end_dateSTRING
capture_scheme_info__titleSTRING
capture_scheme_info__identifierSTRING
dotted_line_manager__idSTRING
dotted_line_manager__emailSTRING
dotted_line_manager__last_nameSTRING
dotted_line_manager__first_nameSTRING
expense_policy_info__titleSTRING
expense_policy_info__identifierSTRING
holiday_calendar_idSTRING
is_profile_completeBOOL
tracking_policy_info__titleSTRING
tracking_policy_info__identifierSTRING
professional_summarySTRING
weekly_off_policy_info__titleSTRING
weekly_off_policy_info__identifierSTRING
total_experience_in_daysFLOAT64
resignation_submitted_dateSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Employees__groups

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.
idSTRING
titleSTRING
group_typeFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Employees__relations

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.
idSTRING
emailSTRING
genderFLOAT64
mobileSTRING
last_nameSTRING
first_nameSTRING
professionSTRING
date_of_birthSTRING
display_nameSTRING
relation_typeFLOAT64
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Employees__custom_fields

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.
typeSTRING
idSTRING
titleSTRING
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Employees__education_details

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.
idSTRING
cgpaFLOAT64
branchSTRING
degreeSTRING
universitySTRING
year_of_joiningSTRING
year_of_completionSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Employees__education_details__custom_fields

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: Employees__experience_details

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.
descriptionSTRING
idSTRING
job_titleSTRING
locationSTRING
company_nameSTRING
date_of_joiningSTRING
date_of_relievingSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Employees__experience_details__custom_fields

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.
idSTRING
noteSTRING
statusFLOAT64
to_dateSTRING
from_dateSTRING
to_sessionFLOAT64
from_sessionFLOAT64
requested_onSTRING
employee_numberSTRING
last_action_taken_onSTRING
cancel_reject_reasonSTRING
employee_identifierSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Leave Request__selection

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.
countFLOAT64
duration__unitFLOAT64
duration__durationFLOAT64
duration__duration_stringSTRING
leave_type_nameSTRING
leave_type_identifierSTRING
_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
nameSTRING
is_paidBOOL
identifierSTRING
_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.
idSTRING
dateSTRING
statusFLOAT64
task_idSTRING
end_timeSTRING
commentsSTRING
project_idSTRING
start_timeSTRING
employee_idSTRING
is_billableBOOL
total_minutesFLOAT64
_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.
idSTRING
codeSTRING
nameSTRING
statusFLOAT64
end_dateSTRING
client_idSTRING
start_dateSTRING
is_archivedBOOL
is_billableBOOL
billing_typeFLOAT64
project_budgetFLOAT64
custom_attributes__cost_centreSTRING
custom_attributes__project_budgetSTRING
custom_attributes__project_stagesSTRING
custom_attributes__contract_expiry_dateSTRING
custom_attributes__contract_signed_by_clientSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: Projects__project_managers

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.
idSTRING
emailSTRING
last_nameSTRING
first_nameSTRING
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

How the Keka sync works

After the first load, Kaivo keeps your BigQuery warehouse up to date for you. Where Keka 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 Keka?

It depends on how much history is in your Keka 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 Keka'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 Keka, 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 Keka 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 Keka connector in Kaivo and all of its synced data is deleted with it.

Common use cases for Keka data

Headcount reporting

Use Employees to track headcount and structure over time.

Attendance and leave

Join Attendance with Leave Request to monitor presence and time off.

Project time

Use Project Timesheets to compare logged time against projects.

Use Keka data in your AI and BI tools

Once Keka 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 Keka 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 Keka connector pricing and plan details.

Was this helpful?

Still need help? Share an idea