Harvest connector
Set up the Harvest connector in Kaivo: authentication, configuration, the 32 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 Harvest 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 Harvest connector
Sync your Harvest time entries, projects, and invoices into BigQuery with Kaivo to report on billable work and project profitability alongside your data.
| Category | Project Management, Finance & Payments |
|---|---|
| Authentication | API key |
| Setup | Self-service |
Getting started with the Harvest connector
- Sign up for Kaivo and create a workspace.
- Connect your Harvest account.
- Choose which tables to sync.
- Wait for the initial sync to finish.
- Query your data in BigQuery or your favourite AI or BI tool.
Authenticating Harvest
The Harvest connector supports 2 ways to connect. Pick the one that fits how you work.
API key
Authenticate with your Personal Access Token.
| Field | Description |
|---|---|
| Personal Access Token | Log into Harvest and then create new personal access token. |
API key
Authenticate with your Account ID.
| Field | Description |
|---|---|
| Account ID | Harvest account ID |
Configuring the Harvest connector
When you set up the connector, you provide:
| Field | Description |
|---|---|
| Start Date | Any data before this date will not be fetched. |
Tables and columns synced from Harvest
Kaivo syncs 32 tables from Harvest into a dedicated dataset in your BigQuery warehouse. Click any table to see its columns and types.
billable_rates (9 columns)
billable_rates (9 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
amount | FLOAT64 | The billable amount associated with this rate. |
created_at | TIMESTAMP | The date and time when this rate was created. |
end_date | DATE | The end date for this billable rate period. |
id | INT64 | The unique identifier for this billable rate. |
parent_id | INT64 | The identifier of the parent resource associated with this rate. |
start_date | DATE | The start date for this billable rate period. |
updated_at | TIMESTAMP | The date and time when this rate was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
clients (10 columns)
clients (10 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
address | STRING | The client's postal address. |
created_at | TIMESTAMP | The date and time when the client record was created. |
currency | STRING | The currency used by the client. |
id | INT64 | Unique identifier for the client. |
is_active | BOOL | Indicates whether the client is currently active or not. |
name | STRING | The client's name. |
statement_key | STRING | Key used for client's statements or invoices. |
updated_at | TIMESTAMP | The date and time when the client record was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
company (27 columns)
company (27 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
approval_feature | BOOL | |
approval_required | BOOL | Indicates if approval is required for certain actions. |
base_uri | STRING | The base URI used in constructing URLs for this company. |
currency | STRING | |
currency_code_display | STRING | |
currency_symbol_display | STRING | |
clock | STRING | The clock configuration for time tracking. |
color_scheme | STRING | The color scheme used in the user interface. |
date_format | STRING | |
day_entry_notes_required | BOOL | |
decimal_symbol | STRING | The symbol used to separate the integer part from the fractional part of a number. |
estimate_feature | BOOL | Indicates if the estimate feature is enabled for this company. |
expense_feature | BOOL | Indicates if the expense feature is enabled for this company. |
full_domain | STRING | The full domain name associated with this company. |
invoice_feature | BOOL | Indicates if the invoice feature is enabled for this company. |
is_active | BOOL | Indicates if the company is currently active. |
name | STRING | The name of the company. |
plan_type | STRING | The type of plan subscribed by the company. |
saml_sign_in_required | BOOL | |
team_feature | BOOL | |
thousands_separator | STRING | The symbol used to separate thousands in a number. |
time_format | STRING | The format used to display time. |
wants_timestamp_timers | BOOL | Indicates if the company wants timestamp timers displayed. |
week_start_day | STRING | The day considered the start of the week for this company. |
weekly_capacity | INT64 | The weekly capacity setting for this company. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
contacts (14 columns)
contacts (14 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
client__id | INT64 | Unique identifier for the client |
client__name | STRING | Name of the client |
created_at | TIMESTAMP | Timestamp of when the contact was created |
email | STRING | Email address of the contact |
fax | STRING | Fax number of the contact |
first_name | STRING | First name of the contact |
id | INT64 | Unique identifier for the contact |
last_name | STRING | Last name of the contact |
phone_mobile | STRING | Mobile phone number of the contact |
phone_office | STRING | Office phone number of the contact |
title | STRING | Job title of the contact |
updated_at | TIMESTAMP | Timestamp of when the contact was last updated |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
cost_rates (9 columns)
cost_rates (9 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
amount | FLOAT64 | The cost rate amount associated with this data entry. |
created_at | TIMESTAMP | The timestamp indicating when this cost rate entry was created. |
end_date | DATE | The end date for which the cost rate is valid. Only applicable for intervals. |
id | INT64 | The unique identifier for this cost rate entry. |
parent_id | INT64 | The parent identifier if this cost rate is a child entry. |
start_date | DATE | The start date from which the cost rate is valid. Only applicable for intervals. |
updated_at | TIMESTAMP | The timestamp for the last update made to this cost rate entry. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
estimate_item_categories (6 columns)
estimate_item_categories (6 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
created_at | TIMESTAMP | The date and time when the estimate item category was created. |
id | INT64 | The unique identifier for the estimate item category. |
name | STRING | The name of the estimate item category. |
updated_at | TIMESTAMP | The date and time when the estimate item category was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
estimate_messages (14 columns)
estimate_messages (14 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
body | STRING | The main content of the message. |
created_at | TIMESTAMP | The date and time when the message was created. |
event_type | STRING | The type of event associated with the message. |
id | INT64 | The unique identifier for the message. |
parent_id | INT64 | The identifier of the parent message, if this is a reply. |
send_me_a_copy | BOOL | Indicates if the sender requested a copy of the message. |
sent_by | STRING | The name of the user who sent the message. |
sent_by_email | STRING | The email address of the user who sent the message. |
sent_from | STRING | The name displayed as the sender. |
sent_from_email | STRING | The email address displayed as the sender. |
subject | STRING | The subject or title of the message. |
updated_at | TIMESTAMP | The date and time when the message was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: estimate_messages__recipients
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
email | STRING | The email address of a recipient. |
name | STRING | The name of a recipient. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
estimates (27 columns)
estimates (27 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
accepted_at | STRING | The date and time when the estimates was accepted. |
amount | FLOAT64 | The total amount of the estimate. |
client__id | INT64 | The unique identifier of the client. |
client__name | STRING | The name of the client. |
client_key | STRING | The key associated with the client. |
created_at | TIMESTAMP | The date and time when the estimates was created. |
creator__id | INT64 | The unique identifier of the user who created the estimate. |
creator__name | STRING | The name of the user who created the estimate. |
currency | STRING | The currency used for the estimate. |
declined_at | STRING | The date and time when the estimates was declined. |
discount | FLOAT64 | The discount percentage applied to the estimate. |
discount_amount | FLOAT64 | The total discount amount applied to the estimate. |
id | INT64 | The unique identifier of the estimate. |
issue_date | DATE | The date when the estimate was issued. |
notes | STRING | Any additional notes or comments related to the estimate. |
number | STRING | The unique number assigned to the estimate. |
purchase_order | STRING | The purchase order associated with the estimate. |
sent_at | TIMESTAMP | The date and time when the estimate was sent. |
state | STRING | The current state of the estimate (e.g., pending, accepted, declined). |
subject | STRING | The subject or description of the estimate. |
tax | FLOAT64 | The tax rate applied to the estimate. |
tax2 | FLOAT64 | An additional tax rate applied to the estimate. |
tax2_amount | FLOAT64 | The total amount of the additional tax applied to the estimate. |
tax_amount | FLOAT64 | The total amount of tax applied to the estimate. |
updated_at | TIMESTAMP | The date and time when the estimate was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: estimates__line_items
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
value | JSON | |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
expense_categories (9 columns)
expense_categories (9 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
created_at | TIMESTAMP | The date and time when the expense category was created. |
id | INT64 | The unique identifier for the expense category. |
is_active | BOOL | Indicates whether the expense category is currently active or not. |
name | STRING | The name of the expense category. |
unit_name | STRING | The unit of measurement for the expense category. |
unit_price | FLOAT64 | The price per unit of the expense category. |
updated_at | TIMESTAMP | The date and time when the expense category was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
expenses (40 columns)
expenses (40 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable | BOOL | Indicates if the expense is billable to the client |
client__currency | STRING | Currency used for the client's transactions |
client__id | INT64 | Unique identifier for the client |
client__name | STRING | Name of the client associated with the expense |
created_at | TIMESTAMP | Date and time when the expense was created |
expense_category__id | INT64 | Unique identifier for the expense category |
expense_category__name | STRING | Name of the expense category |
expense_category__unit_name | STRING | Name of the unit (if applicable) |
expense_category__unit_price | FLOAT64 | Price per unit (if applicable) |
id | INT64 | Unique identifier for the expense entry |
invoice__id | INT64 | Unique identifier for the invoice associated with the expense |
invoice__number | STRING | Invoice number related to the expense |
is_billed | BOOL | Indicates if the expense has been billed to the client |
is_closed | BOOL | Indicates if the expense entry is closed |
is_locked | BOOL | Indicates if the expense entry is locked |
locked_reason | STRING | Reason for locking the expense entry |
notes | STRING | Additional notes or comments for the expense entry |
project__code | STRING | Code associated with the project |
project__id | INT64 | Unique identifier for the project |
project__name | STRING | Name of the project associated with the expense |
receipt__content_type | STRING | MIME type of the receipt content |
receipt__file_name | STRING | Name of the receipt file |
receipt__file_size | INT64 | Size of the receipt file |
receipt__url | STRING | URL path to access the receipt file |
spent_date | DATE | Date when the expense was incurred |
total_cost | FLOAT64 | Total cost of the expense entry |
units | FLOAT64 | Number of units (if applicable) |
updated_at | TIMESTAMP | Date and time of the last update to the expense entry |
user__id | INT64 | Unique identifier for the user |
user__name | STRING | Name of the user who incurred the expense |
user_assignment__budget | FLOAT64 | Budget allocated for the user assignment |
user_assignment__created_at | TIMESTAMP | Date and time when the user assignment was created |
user_assignment__hourly_rate | FLOAT64 | Hourly rate set for the user assignment |
user_assignment__id | INT64 | Unique identifier for the user assignment |
user_assignment__is_active | BOOL | Indicates if the user assignment is active |
user_assignment__is_project_manager | BOOL | Indicates if the user is a project manager |
user_assignment__updated_at | TIMESTAMP | Date and time of the last update to the user assignment |
user_assignment__use_default_rates | BOOL | Indicates if default rates are used for the user assignment |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
expenses_categories (9 columns)
expenses_categories (9 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_amount | FLOAT64 | The amount that can be billed to a client for this expense category |
currency | STRING | The currency in which the expenses are incurred |
expense_category_id | INT64 | Unique identifier for the expense category |
expense_category_name | STRING | Name of the expense category |
from | STRING | Start date for the expenses |
to | STRING | End date for the expenses |
total_amount | FLOAT64 | Total amount spent on this expense category |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
expenses_clients (9 columns)
expenses_clients (9 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_amount | FLOAT64 | The amount billed to the client for the expenses. |
client_id | INT64 | The unique identifier of the client. |
client_name | STRING | The name of the client associated with the expenses. |
currency | STRING | The currency in which the expenses are recorded. |
from | STRING | The start date of the expense period. |
to | STRING | The end date of the expense period. |
total_amount | FLOAT64 | The total amount of expenses including billable and non-billable expenses. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
expenses_projects (11 columns)
expenses_projects (11 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_amount | FLOAT64 | The amount of expenses that are billable to the client |
client_id | INT64 | The unique identifier of the client associated with the project |
client_name | STRING | The name of the client associated with the project |
currency | STRING | The currency in which the expenses are recorded |
from | STRING | The starting date of the expense record period |
project_id | INT64 | The unique identifier of the project |
project_name | STRING | The name of the project |
to | STRING | The ending date of the expense record period |
total_amount | FLOAT64 | The total amount of expenses incurred for the project |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
expenses_team (10 columns)
expenses_team (10 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_amount | FLOAT64 | The amount that can be billed for the expense |
currency | STRING | The currency in which the expense is incurred |
from | STRING | The start date of the expense |
is_contractor | BOOL | Indicates if the user is a contractor |
to | STRING | The end date of the expense |
total_amount | FLOAT64 | The total amount of the expense |
user_id | INT64 | The ID of the user associated with the expense |
user_name | STRING | The name of the user associated with the expense |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
invoice_item_categories (8 columns)
invoice_item_categories (8 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
created_at | TIMESTAMP | The date and time when the invoice item category was created. |
id | INT64 | The unique identifier for the invoice item category. |
name | STRING | The name of the invoice item category. |
updated_at | TIMESTAMP | The date and time when the invoice item category was last updated. |
use_as_expense | BOOL | Indicates whether the category is used as an expense type. |
use_as_service | BOOL | Indicates whether the category is used as a service type. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
invoice_messages (19 columns)
invoice_messages (19 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
attach_pdf | BOOL | Indicates if a PDF file is attached to the message. |
body | STRING | The content of the invoice message. |
created_at | TIMESTAMP | The date and time when the message was created. |
event_type | STRING | The type of event associated with the message. |
id | INT64 | The unique identifier of the invoice message. |
include_link_to_client_invoice | BOOL | Indicates if a link to the client invoice is included. |
parent_id | INT64 | The ID of the parent message if it's a reply or related message. |
reminder | BOOL | Indicates if the message is a reminder. |
send_me_a_copy | BOOL | Option to send a copy of the message to the sender. |
send_reminder_on | STRING | The date to send a reminder for the message. |
sent_by | STRING | The sender of the message. |
sent_by_email | STRING | Email address of the sender. |
sent_from | STRING | The display name of the sender. |
sent_from_email | STRING | Email address used to send the message. |
subject | STRING | The subject of the invoice message. |
thank_you | BOOL | Indicates if the message is a thank you message. |
updated_at | TIMESTAMP | The date and time when the message was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: invoice_messages__recipients
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
email | STRING | Email address of the recipient. |
name | STRING | Name of the recipient. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
invoice_payments (15 columns)
invoice_payments (15 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
amount | FLOAT64 | The amount of the invoice payment. |
created_at | TIMESTAMP | The timestamp when the invoice payment was created. |
id | INT64 | The unique identifier of the invoice payment. |
notes | STRING | Any additional notes or comments related to the invoice payment. |
paid_at | TIMESTAMP | The timestamp when the invoice payment was paid. |
paid_date | DATE | The date when the invoice payment was paid. |
parent_id | INT64 | The ID of the parent invoice associated with this payment. |
payment_gateway__id | INT64 | The unique identifier of the payment gateway. |
payment_gateway__name | STRING | The name of the payment gateway. |
recorded_by | STRING | The user who recorded this invoice payment. |
recorded_by_email | STRING | The email address of the user who recorded this invoice payment. |
transaction_id | STRING | The transaction ID associated with the invoice payment. |
updated_at | TIMESTAMP | The timestamp when the invoice payment was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
invoices (36 columns)
invoices (36 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
amount | FLOAT64 | The total amount of the invoice |
client__id | INT64 | The unique identifier of the client |
client__name | STRING | The name of the client |
client_key | STRING | Key associated with the client |
closed_at | STRING | Timestamp when the invoice was closed |
created_at | TIMESTAMP | Timestamp when the invoice was created |
creator__id | INT64 | The unique identifier of the creator |
creator__name | STRING | The name of the creator |
currency | STRING | The currency used for the invoice |
discount | FLOAT64 | Discount percentage applied to the invoice |
discount_amount | FLOAT64 | The total discount amount applied |
due_amount | FLOAT64 | The remaining amount that is due |
due_date | STRING | Due date for the invoice payment |
estimate | STRING | Whether the invoice is an estimate |
id | INT64 | The unique identifier of the invoice |
issue_date | STRING | Date when the invoice was issued |
notes | STRING | Additional notes related to the invoice |
number | STRING | Invoice number |
paid_at | STRING | Timestamp when the invoice was paid |
paid_date | STRING | Date when the invoice was paid |
payment_term | STRING | Payment terms associated with the invoice |
period_end | STRING | End date of the period covered by the invoice |
period_start | STRING | Start date of the period covered by the invoice |
purchase_order | STRING | Purchase order related to the invoice |
recurring_invoice_id | STRING | Unique identifier of the recurring invoice |
retainer | STRING | Whether the invoice is for a retainer |
sent_at | TIMESTAMP | Timestamp when the invoice was sent |
state | STRING | Current state of the invoice |
subject | STRING | Subject of the invoice |
tax | FLOAT64 | Tax amount applied |
tax2 | FLOAT64 | Additional tax amount applied at a different rate |
tax2_amount | FLOAT64 | Total amount of tax2 applied |
tax_amount | FLOAT64 | Total amount of tax applied |
updated_at | TIMESTAMP | Timestamp when the invoice was last updated |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: invoices__line_items
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
description | STRING | Description of the line item |
amount | FLOAT64 | The amount per line item |
id | INT64 | The unique identifier of the line item |
kind | STRING | Type of line item |
project__code | STRING | Project code of the line item |
project__id | INT64 | The unique identifier of the project |
project__name | STRING | Name of the project |
quantity | FLOAT64 | Quantity of the line item |
taxed | BOOL | Whether the line item is taxed |
taxed2 | BOOL | Whether the line item is taxed at a different rate |
unit_price | FLOAT64 | Unit price of the line item |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: invoices__payment_options
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
value | JSON | |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
project_assignments (18 columns)
project_assignments (18 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
budget | FLOAT64 | The budget allocated for this project assignment |
client__currency | STRING | The currency used by the client |
client__id | INT64 | The unique identifier of the client |
client__name | STRING | The name of the client |
created_at | TIMESTAMP | The date and time when the project assignment was created |
hourly_rate | FLOAT64 | The hourly rate for this project assignment |
id | INT64 | The unique identifier of the project assignment |
is_active | BOOL | Indicates whether the project assignment is currently active |
is_project_manager | BOOL | Indicates whether the user is assigned as a project manager |
parent_id | INT64 | The parent project assignment ID if this assignment is a sub-assignment |
project__code | STRING | The code associated with the project |
project__id | INT64 | The unique identifier of the project |
project__is_billable | BOOL | |
project__name | STRING | The name of the project |
updated_at | TIMESTAMP | The date and time when the project assignment was last updated |
use_default_rates | BOOL | Indicates whether default rates are used for this project assignment |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: project_assignments__task_assignments
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable | BOOL | Indicates whether the task is billable |
budget | FLOAT64 | The budget allocated for this task assignment |
created_at | STRING | The date and time when the task assignment was created |
hourly_rate | FLOAT64 | The hourly rate for this task assignment |
id | INT64 | The unique identifier of the task assignment |
is_active | BOOL | Indicates whether the task assignment is currently active |
task__id | INT64 | The unique identifier of the task |
task__name | STRING | The name of the task |
updated_at | STRING | The date and time when the task assignment was last updated |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
project_budget (14 columns)
project_budget (14 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
budget | FLOAT64 | Total budget allocated for the project |
budget_by | STRING | Person or entity responsible for the budget |
budget_is_monthly | BOOL | Indicates if the budget is calculated on a monthly basis |
budget_remaining | FLOAT64 | Remaining budget amount available for the project |
budget_spent | FLOAT64 | Total amount spent from the budget |
client_id | INT64 | Unique identifier for the client associated with the project |
client_name | STRING | Name of the client associated with the project |
from | STRING | Start date of the budget period |
is_active | BOOL | Indicates if the project is currently active |
project_id | INT64 | Unique identifier for the project |
project_name | STRING | Name of the project |
to | STRING | End date of the budget period |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
projects (28 columns)
projects (28 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
bill_by | STRING | Indicates how the project is billed, e.g., hourly, fixed fee, etc. |
budget | FLOAT64 | The allocated budget for the project. |
budget_by | STRING | Specifies how the budget is managed, e.g., total, task, person, etc. |
budget_is_monthly | BOOL | Indicates whether the budget is monthly. |
client__currency | STRING | The currency used for the project. |
client__id | INT64 | The unique identifier of the client. |
client__name | STRING | The name of the client associated with the project. |
code | STRING | A unique identifier or code for the project. |
cost_budget | FLOAT64 | The total cost budget for the project. |
cost_budget_include_expenses | BOOL | Indicates whether expenses are included in the cost budget. |
created_at | TIMESTAMP | The date and time when the project was created. |
ends_on | STRING | The end date of the project. |
fee | FLOAT64 | The fee associated with the project. |
hourly_rate | FLOAT64 | The hourly rate for the project. |
id | INT64 | The unique identifier of the project. |
is_active | BOOL | Indicates whether the project is currently active. |
is_billable | BOOL | Indicates whether the project is billable. |
is_fixed_fee | BOOL | Indicates whether the project has a fixed fee. |
name | STRING | The name or title of the project. |
notes | STRING | Any additional notes or comments related to the project. |
notify_when_over_budget | BOOL | Indicates whether notifications are sent when the project goes over budget. |
over_budget_notification_date | DATE | The date for sending notifications when the project goes over budget. |
over_budget_notification_percentage | FLOAT64 | The percentage threshold for over-budget notifications. |
show_budget_to_all | BOOL | Indicates whether the budget is visible to all project members. |
starts_on | DATE | The start date of the project. |
updated_at | TIMESTAMP | The date and time when the project was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
roles (6 columns)
roles (6 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
created_at | TIMESTAMP | The date and time when the role was created |
id | INT64 | The unique identifier for the role |
name | STRING | The name of the role |
updated_at | TIMESTAMP | The date and time when the role was last updated |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: roles__user_ids
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
value | INT64 | The unique identifier for a user assigned to this role |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
task_assignments (14 columns)
task_assignments (14 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable | BOOL | Indicates if the task assignment is billable or not |
budget | STRING | The budget allocated for this task assignment |
created_at | TIMESTAMP | The date and time when the task assignment was created |
hourly_rate | FLOAT64 | The hourly rate for this task assignment |
id | INT64 | Unique identifier for the task assignment |
is_active | BOOL | Indicates if the task assignment is currently active |
project__code | STRING | The code assigned to the project |
project__id | INT64 | Unique identifier for the project |
project__name | STRING | The name of the project |
task__id | INT64 | Unique identifier for the task |
task__name | STRING | The name of the task |
updated_at | TIMESTAMP | The date and time when the task assignment was last updated |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
tasks (10 columns)
tasks (10 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_by_default | BOOL | Indicates if the task is billable by default for the project. |
created_at | TIMESTAMP | Timestamp for when the task was created. |
default_hourly_rate | FLOAT64 | Default hourly rate set for the task. |
id | INT64 | Unique identifier for the task. |
is_active | BOOL | Indicates if the task is active or not. |
is_default | BOOL | Indicates if the task is the default task for the project. |
name | STRING | Name of the task. |
updated_at | TIMESTAMP | Timestamp for when the task was last updated. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
time_clients (10 columns)
time_clients (10 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_amount | FLOAT64 | The amount that can be billed for the client's hours worked within the specified timeframe. |
billable_hours | FLOAT64 | The total number of billable hours worked for the client within the specified timeframe. |
client_id | INT64 | The unique identifier of the client associated with the time entries. |
client_name | STRING | The name of the client for whom the time entries were recorded. |
currency | STRING | The currency used for billing the client's time entries. |
from | STRING | The start date and time of the timeframe for which the time entries are being fetched. |
to | STRING | The end date and time of the timeframe for which the time entries are being fetched. |
total_hours | FLOAT64 | The total number of hours worked for the client within the specified timeframe, including both billable and non-billable hours. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
time_entries (50 columns)
time_entries (50 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable | BOOL | Indicates if the time entry is billable or not. |
billable_rate | FLOAT64 | The rate at which the time entry is billable. |
budgeted | BOOL | Indicates if the time entry is within the budget. |
client__currency | STRING | The currency used by the client. |
client__id | INT64 | The unique identifier of the client. |
client__name | STRING | The name of the client. |
cost_rate | FLOAT64 | The cost rate associated with the time entry. |
created_at | TIMESTAMP | The date and time when the time entry was created. |
ended_time | STRING | The time when the time entry ended. |
external_reference | STRING | An external reference linked to the time entry. |
hours | FLOAT64 | The total hours logged in the time entry. |
hours_without_timer | FLOAT64 | Hours logged without using a timer. |
id | INT64 | The unique identifier of the time entry. |
invoice__id | INT64 | The unique identifier of the associated invoice. |
invoice__number | STRING | The invoice number associated with the time entry. |
is_billed | BOOL | Indicates if the time entry has been billed. |
is_closed | BOOL | Indicates if the time entry is closed. |
is_locked | BOOL | Indicates if the time entry is locked. |
is_running | BOOL | Indicates if the time entry is currently running. |
locked_reason | STRING | The reason why the time entry is locked. |
notes | STRING | Any additional notes associated with the time entry. |
project__code | STRING | The project code associated with the time entry. |
project__id | INT64 | The unique identifier of the project. |
project__name | STRING | The name of the project. |
rounded_hours | FLOAT64 | The total hours rounded to a specific precision. |
spent_date | DATE | The date when the time was spent. |
started_time | STRING | The time when the time entry started. |
task__id | INT64 | The unique identifier of the task. |
task__name | STRING | The name of the task. |
task_assignment__billable | BOOL | Indicates if the task assignment is billable. |
task_assignment__budget | FLOAT64 | The budget associated with the task assignment. |
task_assignment__created_at | TIMESTAMP | The date and time when the task assignment was created. |
task_assignment__hourly_rate | FLOAT64 | The hourly rate associated with the task assignment. |
task_assignment__id | INT64 | The unique identifier of the task assignment. |
task_assignment__is_active | BOOL | Indicates if the task assignment is active. |
task_assignment__updated_at | TIMESTAMP | The date and time when the task assignment was last updated. |
timer_started_at | STRING | The time when the timer for the time entry was started. |
updated_at | TIMESTAMP | The date and time when the time entry was last updated. |
user__id | INT64 | The unique identifier of the user. |
user__name | STRING | The name of the user. |
user_assignment__budget | FLOAT64 | The budget associated with the user assignment. |
user_assignment__created_at | TIMESTAMP | The date and time when the user assignment was created. |
user_assignment__hourly_rate | FLOAT64 | The hourly rate associated with the user assignment. |
user_assignment__id | INT64 | The unique identifier of the user assignment. |
user_assignment__is_active | BOOL | Indicates if the user assignment is active. |
user_assignment__is_project_manager | BOOL | Indicates if the user is a project manager. |
user_assignment__updated_at | TIMESTAMP | The date and time when the user assignment was last updated. |
user_assignment__use_default_rates | BOOL | |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
time_projects (12 columns)
time_projects (12 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_amount | FLOAT64 | The total amount that can be billed for this project in the given currency. |
billable_hours | FLOAT64 | The number of billable hours spent on this project. |
client_id | INT64 | The unique identifier for the client associated with this project. |
client_name | STRING | The name of the client associated with this project. |
currency | STRING | The currency in which the billable amount is specified. |
from | STRING | The start date for the project time frame. |
project_id | INT64 | The unique identifier for the project. |
project_name | STRING | The name of the project. |
to | STRING | The end date for the project time frame. |
total_hours | FLOAT64 | The total number of hours spent on this project. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
time_tasks (10 columns)
time_tasks (10 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
billable_amount | FLOAT64 | The amount that can be billed for this time task |
billable_hours | FLOAT64 | The number of hours that can be billed for this time task |
currency | STRING | The currency in which the billable amount is calculated |
from | STRING | The starting time of the time task |
task_id | INT64 | The unique identifier for the task associated with this time entry |
task_name | STRING | The name of the task associated with this time entry |
to | STRING | The ending time of the time task |
total_hours | FLOAT64 | The total number of hours spent on this time task |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
time_team (13 columns)
time_team (13 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
avatar_url | STRING | |
billable_amount | FLOAT64 | The amount that can be billed for the time period |
billable_hours | FLOAT64 | The number of hours that can be billed for the time period |
currency | STRING | The currency used for billing |
from | STRING | The start date and time of the time period |
is_contractor | BOOL | Flag indicating if the user is a contractor |
to | STRING | The end date and time of the time period |
total_hours | FLOAT64 | The total number of hours worked for the time period |
user_id | INT64 | The unique identifier of the user |
user_name | STRING | The name of the user |
weekly_capacity | FLOAT64 | |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
uninvoiced (13 columns)
uninvoiced (13 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
client_id | INT64 | Unique identifier for the client |
client_name | STRING | Name of the client |
currency | STRING | Currency used for the transaction |
from | STRING | Start date for the data range |
project_id | INT64 | Unique identifier for the project |
project_name | STRING | Name of the project |
to | STRING | End date for the data range |
total_hours | FLOAT64 | Total hours tracked for the project within the data range |
uninvoiced_amount | FLOAT64 | Total amount yet to be invoiced for the project within the data range |
uninvoiced_expenses | FLOAT64 | Total expenses yet to be invoiced for the project within the data range |
uninvoiced_hours | FLOAT64 | Total hours yet to be invoiced for the project within the data range |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
user_assignments (15 columns)
user_assignments (15 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
budget | FLOAT64 | The budget allocated for the assignment |
created_at | TIMESTAMP | The date and time when the assignment was created |
hourly_rate | FLOAT64 | The hourly rate for the assignment |
id | INT64 | The unique identifier for the assignment |
is_active | BOOL | Flag indicating if the assignment is currently active |
is_project_manager | BOOL | Flag indicating if the user is a project manager for the assignment |
project__code | STRING | The project code associated with the assignment |
project__id | INT64 | The unique identifier of the project |
project__name | STRING | The name of the project associated with the assignment |
updated_at | TIMESTAMP | The date and time when the assignment was last updated |
use_default_rates | BOOL | Flag indicating if default rates are used for the assignment |
user__id | INT64 | The unique identifier of the user assigned to the project |
user__name | STRING | The name of the user assigned to the project |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
users (24 columns)
users (24 columns)
| Column | Type | Description |
|---|---|---|
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
avatar_url | STRING | URL of the user's avatar image. |
calendar_integration_enabled | BOOL | Indicates if calendar integration is enabled for the user. |
calendar_integration_source | STRING | Source of calendar integration for the user. |
can_create_invoices | BOOL | Shows if the user can create invoices. |
can_create_projects | BOOL | Shows if the user can create projects. |
can_see_rates | BOOL | Indicates if the user can see rates. |
cost_rate | FLOAT64 | The cost rate associated with the user. |
created_at | TIMESTAMP | Date and time when the user was created. |
default_hourly_rate | FLOAT64 | User's default hourly rate for billing. |
email | STRING | User's email address. |
first_name | STRING | User's first name. |
has_access_to_all_future_projects | BOOL | Indicates if the user has access to all future projects. |
id | INT64 | Unique identifier for the user. |
is_active | BOOL | Shows if the user is currently active. |
is_admin | BOOL | Indicates if the user is an admin. |
is_contractor | BOOL | Shows if the user is a contractor. |
is_project_manager | BOOL | Indicates if the user is a project manager. |
last_name | STRING | User's last name. |
telephone | STRING | User's telephone number. |
timezone | STRING | User's timezone. |
updated_at | TIMESTAMP | Date and time when the user record was last updated. |
weekly_capacity | INT64 | User's weekly capacity for work. |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: users__access_roles
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
value | STRING | |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: users__permissions_claims
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
value | STRING | |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
Subtable: users__roles
| Column | Type | Description |
|---|---|---|
_kaivo_parent_id | STRING | Foreign key referencing _kaivo_id in the parent table. Auto-generated by Kaivo. |
_kaivo_id | STRING | Primary key that uniquely identifies the row. Auto-generated by Kaivo. |
value | STRING | |
_kaivo_extracted_at | TIMESTAMP | Timestamp that shows when the row was extracted. Auto-generated by Kaivo. |
How the Harvest sync works
After the first load, Kaivo keeps your BigQuery warehouse up to date for you. Where Harvest 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 Harvest?
It depends on how much history is in your Harvest 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 Harvest'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 Harvest, 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 Harvest 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 Harvest connector in Kaivo and all of its synced data is deleted with it.
Common use cases for Harvest data
Time and utilisation
Aggregate time_entries by person and project to measure utilisation and billable hours.
Project profitability
Combine time_entries and expenses with invoices to see which projects make money.
Invoicing and revenue
Track invoices to monitor billed revenue and outstanding payments.
Client reporting
Report on time and cost by client to support reviews and renewals.
Use Harvest data in your AI and BI tools
Once Harvest 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 Harvest 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 Harvest connector pricing and plan details.
Related connectors
- Chargebee: Sync Chargebee to BigQuery.
- ChartMogul: Sync ChartMogul to BigQuery.
- ClickUp: Sync ClickUp to BigQuery.
- Fennoa: Sync Fennoa to BigQuery.
- Fortnox: Sync Fortnox to BigQuery.
- FreshBooks: Sync FreshBooks to BigQuery.
Was this helpful?
Still need help? Share an idea