Skip to main content
Connectors

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.

CategoryProject Management, Finance & Payments
AuthenticationAPI key
SetupSelf-service

Getting started with the Harvest connector

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

FieldDescription
Personal Access Token

Log into Harvest and then create new personal access token.

API key

Authenticate with your Account ID.

FieldDescription
Account ID

Harvest account ID

Configuring the Harvest connector

When you set up the connector, you provide:

FieldDescription
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.

ColumnTypeDescription
_kaivo_idSTRINGPrimary key that uniquely identifies the row. Auto-generated by Kaivo.
amountFLOAT64The billable amount associated with this rate.
created_atTIMESTAMPThe date and time when this rate was created.
end_dateDATEThe end date for this billable rate period.
idINT64The unique identifier for this billable rate.
parent_idINT64The identifier of the parent resource associated with this rate.
start_dateDATEThe start date for this billable rate period.
updated_atTIMESTAMPThe date and time when this rate was last updated.
_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.
addressSTRINGThe client's postal address.
created_atTIMESTAMPThe date and time when the client record was created.
currencySTRINGThe currency used by the client.
idINT64Unique identifier for the client.
is_activeBOOLIndicates whether the client is currently active or not.
nameSTRINGThe client's name.
statement_keySTRINGKey used for client's statements or invoices.
updated_atTIMESTAMPThe date and time when the client record was last updated.
_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.
approval_featureBOOL
approval_requiredBOOLIndicates if approval is required for certain actions.
base_uriSTRINGThe base URI used in constructing URLs for this company.
currencySTRING
currency_code_displaySTRING
currency_symbol_displaySTRING
clockSTRINGThe clock configuration for time tracking.
color_schemeSTRINGThe color scheme used in the user interface.
date_formatSTRING
day_entry_notes_requiredBOOL
decimal_symbolSTRINGThe symbol used to separate the integer part from the fractional part of a number.
estimate_featureBOOLIndicates if the estimate feature is enabled for this company.
expense_featureBOOLIndicates if the expense feature is enabled for this company.
full_domainSTRINGThe full domain name associated with this company.
invoice_featureBOOLIndicates if the invoice feature is enabled for this company.
is_activeBOOLIndicates if the company is currently active.
nameSTRINGThe name of the company.
plan_typeSTRINGThe type of plan subscribed by the company.
saml_sign_in_requiredBOOL
team_featureBOOL
thousands_separatorSTRINGThe symbol used to separate thousands in a number.
time_formatSTRINGThe format used to display time.
wants_timestamp_timersBOOLIndicates if the company wants timestamp timers displayed.
week_start_daySTRINGThe day considered the start of the week for this company.
weekly_capacityINT64The weekly capacity setting for this company.
_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.
client__idINT64Unique identifier for the client
client__nameSTRINGName of the client
created_atTIMESTAMPTimestamp of when the contact was created
emailSTRINGEmail address of the contact
faxSTRINGFax number of the contact
first_nameSTRINGFirst name of the contact
idINT64Unique identifier for the contact
last_nameSTRINGLast name of the contact
phone_mobileSTRINGMobile phone number of the contact
phone_officeSTRINGOffice phone number of the contact
titleSTRINGJob title of the contact
updated_atTIMESTAMPTimestamp of when the contact was last updated
_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.
amountFLOAT64The cost rate amount associated with this data entry.
created_atTIMESTAMPThe timestamp indicating when this cost rate entry was created.
end_dateDATEThe end date for which the cost rate is valid. Only applicable for intervals.
idINT64The unique identifier for this cost rate entry.
parent_idINT64The parent identifier if this cost rate is a child entry.
start_dateDATEThe start date from which the cost rate is valid. Only applicable for intervals.
updated_atTIMESTAMPThe timestamp for the last update made to this cost rate entry.
_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.
created_atTIMESTAMPThe date and time when the estimate item category was created.
idINT64The unique identifier for the estimate item category.
nameSTRINGThe name of the estimate item category.
updated_atTIMESTAMPThe date and time when the estimate item category was last updated.
_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.
bodySTRINGThe main content of the message.
created_atTIMESTAMPThe date and time when the message was created.
event_typeSTRINGThe type of event associated with the message.
idINT64The unique identifier for the message.
parent_idINT64The identifier of the parent message, if this is a reply.
send_me_a_copyBOOLIndicates if the sender requested a copy of the message.
sent_bySTRINGThe name of the user who sent the message.
sent_by_emailSTRINGThe email address of the user who sent the message.
sent_fromSTRINGThe name displayed as the sender.
sent_from_emailSTRINGThe email address displayed as the sender.
subjectSTRINGThe subject or title of the message.
updated_atTIMESTAMPThe date and time when the message was last updated.
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: estimate_messages__recipients

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.
emailSTRINGThe email address of a recipient.
nameSTRINGThe name of a recipient.
_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.
accepted_atSTRINGThe date and time when the estimates was accepted.
amountFLOAT64The total amount of the estimate.
client__idINT64The unique identifier of the client.
client__nameSTRINGThe name of the client.
client_keySTRINGThe key associated with the client.
created_atTIMESTAMPThe date and time when the estimates was created.
creator__idINT64The unique identifier of the user who created the estimate.
creator__nameSTRINGThe name of the user who created the estimate.
currencySTRINGThe currency used for the estimate.
declined_atSTRINGThe date and time when the estimates was declined.
discountFLOAT64The discount percentage applied to the estimate.
discount_amountFLOAT64The total discount amount applied to the estimate.
idINT64The unique identifier of the estimate.
issue_dateDATEThe date when the estimate was issued.
notesSTRINGAny additional notes or comments related to the estimate.
numberSTRINGThe unique number assigned to the estimate.
purchase_orderSTRINGThe purchase order associated with the estimate.
sent_atTIMESTAMPThe date and time when the estimate was sent.
stateSTRINGThe current state of the estimate (e.g., pending, accepted, declined).
subjectSTRINGThe subject or description of the estimate.
taxFLOAT64The tax rate applied to the estimate.
tax2FLOAT64An additional tax rate applied to the estimate.
tax2_amountFLOAT64The total amount of the additional tax applied to the estimate.
tax_amountFLOAT64The total amount of tax applied to the estimate.
updated_atTIMESTAMPThe date and time when the estimate was last updated.
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: estimates__line_items

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.
created_atTIMESTAMPThe date and time when the expense category was created.
idINT64The unique identifier for the expense category.
is_activeBOOLIndicates whether the expense category is currently active or not.
nameSTRINGThe name of the expense category.
unit_nameSTRINGThe unit of measurement for the expense category.
unit_priceFLOAT64The price per unit of the expense category.
updated_atTIMESTAMPThe date and time when the expense category was last updated.
_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.
billableBOOLIndicates if the expense is billable to the client
client__currencySTRINGCurrency used for the client's transactions
client__idINT64Unique identifier for the client
client__nameSTRINGName of the client associated with the expense
created_atTIMESTAMPDate and time when the expense was created
expense_category__idINT64Unique identifier for the expense category
expense_category__nameSTRINGName of the expense category
expense_category__unit_nameSTRINGName of the unit (if applicable)
expense_category__unit_priceFLOAT64Price per unit (if applicable)
idINT64Unique identifier for the expense entry
invoice__idINT64Unique identifier for the invoice associated with the expense
invoice__numberSTRINGInvoice number related to the expense
is_billedBOOLIndicates if the expense has been billed to the client
is_closedBOOLIndicates if the expense entry is closed
is_lockedBOOLIndicates if the expense entry is locked
locked_reasonSTRINGReason for locking the expense entry
notesSTRINGAdditional notes or comments for the expense entry
project__codeSTRINGCode associated with the project
project__idINT64Unique identifier for the project
project__nameSTRINGName of the project associated with the expense
receipt__content_typeSTRINGMIME type of the receipt content
receipt__file_nameSTRINGName of the receipt file
receipt__file_sizeINT64Size of the receipt file
receipt__urlSTRINGURL path to access the receipt file
spent_dateDATEDate when the expense was incurred
total_costFLOAT64Total cost of the expense entry
unitsFLOAT64Number of units (if applicable)
updated_atTIMESTAMPDate and time of the last update to the expense entry
user__idINT64Unique identifier for the user
user__nameSTRINGName of the user who incurred the expense
user_assignment__budgetFLOAT64Budget allocated for the user assignment
user_assignment__created_atTIMESTAMPDate and time when the user assignment was created
user_assignment__hourly_rateFLOAT64Hourly rate set for the user assignment
user_assignment__idINT64Unique identifier for the user assignment
user_assignment__is_activeBOOLIndicates if the user assignment is active
user_assignment__is_project_managerBOOLIndicates if the user is a project manager
user_assignment__updated_atTIMESTAMPDate and time of the last update to the user assignment
user_assignment__use_default_ratesBOOLIndicates if default rates are used for the user assignment
_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.
billable_amountFLOAT64The amount that can be billed to a client for this expense category
currencySTRINGThe currency in which the expenses are incurred
expense_category_idINT64Unique identifier for the expense category
expense_category_nameSTRINGName of the expense category
fromSTRINGStart date for the expenses
toSTRINGEnd date for the expenses
total_amountFLOAT64Total amount spent on this expense category
_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.
billable_amountFLOAT64The amount billed to the client for the expenses.
client_idINT64The unique identifier of the client.
client_nameSTRINGThe name of the client associated with the expenses.
currencySTRINGThe currency in which the expenses are recorded.
fromSTRINGThe start date of the expense period.
toSTRINGThe end date of the expense period.
total_amountFLOAT64The total amount of expenses including billable and non-billable expenses.
_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.
billable_amountFLOAT64The amount of expenses that are billable to the client
client_idINT64The unique identifier of the client associated with the project
client_nameSTRINGThe name of the client associated with the project
currencySTRINGThe currency in which the expenses are recorded
fromSTRINGThe starting date of the expense record period
project_idINT64The unique identifier of the project
project_nameSTRINGThe name of the project
toSTRINGThe ending date of the expense record period
total_amountFLOAT64The total amount of expenses incurred for the project
_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.
billable_amountFLOAT64The amount that can be billed for the expense
currencySTRINGThe currency in which the expense is incurred
fromSTRINGThe start date of the expense
is_contractorBOOLIndicates if the user is a contractor
toSTRINGThe end date of the expense
total_amountFLOAT64The total amount of the expense
user_idINT64The ID of the user associated with the expense
user_nameSTRINGThe name of the user associated with the expense
_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.
created_atTIMESTAMPThe date and time when the invoice item category was created.
idINT64The unique identifier for the invoice item category.
nameSTRINGThe name of the invoice item category.
updated_atTIMESTAMPThe date and time when the invoice item category was last updated.
use_as_expenseBOOLIndicates whether the category is used as an expense type.
use_as_serviceBOOLIndicates whether the category is used as a service type.
_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.
attach_pdfBOOLIndicates if a PDF file is attached to the message.
bodySTRINGThe content of the invoice message.
created_atTIMESTAMPThe date and time when the message was created.
event_typeSTRINGThe type of event associated with the message.
idINT64The unique identifier of the invoice message.
include_link_to_client_invoiceBOOLIndicates if a link to the client invoice is included.
parent_idINT64The ID of the parent message if it's a reply or related message.
reminderBOOLIndicates if the message is a reminder.
send_me_a_copyBOOLOption to send a copy of the message to the sender.
send_reminder_onSTRINGThe date to send a reminder for the message.
sent_bySTRINGThe sender of the message.
sent_by_emailSTRINGEmail address of the sender.
sent_fromSTRINGThe display name of the sender.
sent_from_emailSTRINGEmail address used to send the message.
subjectSTRINGThe subject of the invoice message.
thank_youBOOLIndicates if the message is a thank you message.
updated_atTIMESTAMPThe date and time when the message was last updated.
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: invoice_messages__recipients

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.
emailSTRINGEmail address of the recipient.
nameSTRINGName of the recipient.
_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.
amountFLOAT64The amount of the invoice payment.
created_atTIMESTAMPThe timestamp when the invoice payment was created.
idINT64The unique identifier of the invoice payment.
notesSTRINGAny additional notes or comments related to the invoice payment.
paid_atTIMESTAMPThe timestamp when the invoice payment was paid.
paid_dateDATEThe date when the invoice payment was paid.
parent_idINT64The ID of the parent invoice associated with this payment.
payment_gateway__idINT64The unique identifier of the payment gateway.
payment_gateway__nameSTRINGThe name of the payment gateway.
recorded_bySTRINGThe user who recorded this invoice payment.
recorded_by_emailSTRINGThe email address of the user who recorded this invoice payment.
transaction_idSTRINGThe transaction ID associated with the invoice payment.
updated_atTIMESTAMPThe timestamp when the invoice payment was last updated.
_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.
amountFLOAT64The total amount of the invoice
client__idINT64The unique identifier of the client
client__nameSTRINGThe name of the client
client_keySTRINGKey associated with the client
closed_atSTRINGTimestamp when the invoice was closed
created_atTIMESTAMPTimestamp when the invoice was created
creator__idINT64The unique identifier of the creator
creator__nameSTRINGThe name of the creator
currencySTRINGThe currency used for the invoice
discountFLOAT64Discount percentage applied to the invoice
discount_amountFLOAT64The total discount amount applied
due_amountFLOAT64The remaining amount that is due
due_dateSTRINGDue date for the invoice payment
estimateSTRINGWhether the invoice is an estimate
idINT64The unique identifier of the invoice
issue_dateSTRINGDate when the invoice was issued
notesSTRINGAdditional notes related to the invoice
numberSTRINGInvoice number
paid_atSTRINGTimestamp when the invoice was paid
paid_dateSTRINGDate when the invoice was paid
payment_termSTRINGPayment terms associated with the invoice
period_endSTRINGEnd date of the period covered by the invoice
period_startSTRINGStart date of the period covered by the invoice
purchase_orderSTRINGPurchase order related to the invoice
recurring_invoice_idSTRINGUnique identifier of the recurring invoice
retainerSTRINGWhether the invoice is for a retainer
sent_atTIMESTAMPTimestamp when the invoice was sent
stateSTRINGCurrent state of the invoice
subjectSTRINGSubject of the invoice
taxFLOAT64Tax amount applied
tax2FLOAT64Additional tax amount applied at a different rate
tax2_amountFLOAT64Total amount of tax2 applied
tax_amountFLOAT64Total amount of tax applied
updated_atTIMESTAMPTimestamp when the invoice was last updated
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: invoices__line_items

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.
descriptionSTRINGDescription of the line item
amountFLOAT64The amount per line item
idINT64The unique identifier of the line item
kindSTRINGType of line item
project__codeSTRINGProject code of the line item
project__idINT64The unique identifier of the project
project__nameSTRINGName of the project
quantityFLOAT64Quantity of the line item
taxedBOOLWhether the line item is taxed
taxed2BOOLWhether the line item is taxed at a different rate
unit_priceFLOAT64Unit price of the line item
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: invoices__payment_options

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.
budgetFLOAT64The budget allocated for this project assignment
client__currencySTRINGThe currency used by the client
client__idINT64The unique identifier of the client
client__nameSTRINGThe name of the client
created_atTIMESTAMPThe date and time when the project assignment was created
hourly_rateFLOAT64The hourly rate for this project assignment
idINT64The unique identifier of the project assignment
is_activeBOOLIndicates whether the project assignment is currently active
is_project_managerBOOLIndicates whether the user is assigned as a project manager
parent_idINT64The parent project assignment ID if this assignment is a sub-assignment
project__codeSTRINGThe code associated with the project
project__idINT64The unique identifier of the project
project__is_billableBOOL
project__nameSTRINGThe name of the project
updated_atTIMESTAMPThe date and time when the project assignment was last updated
use_default_ratesBOOLIndicates whether default rates are used for this project assignment
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: project_assignments__task_assignments

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.
billableBOOLIndicates whether the task is billable
budgetFLOAT64The budget allocated for this task assignment
created_atSTRINGThe date and time when the task assignment was created
hourly_rateFLOAT64The hourly rate for this task assignment
idINT64The unique identifier of the task assignment
is_activeBOOLIndicates whether the task assignment is currently active
task__idINT64The unique identifier of the task
task__nameSTRINGThe name of the task
updated_atSTRINGThe date and time when the task assignment was last updated
_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.
budgetFLOAT64Total budget allocated for the project
budget_bySTRINGPerson or entity responsible for the budget
budget_is_monthlyBOOLIndicates if the budget is calculated on a monthly basis
budget_remainingFLOAT64Remaining budget amount available for the project
budget_spentFLOAT64Total amount spent from the budget
client_idINT64Unique identifier for the client associated with the project
client_nameSTRINGName of the client associated with the project
fromSTRINGStart date of the budget period
is_activeBOOLIndicates if the project is currently active
project_idINT64Unique identifier for the project
project_nameSTRINGName of the project
toSTRINGEnd date of the budget period
_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.
bill_bySTRINGIndicates how the project is billed, e.g., hourly, fixed fee, etc.
budgetFLOAT64The allocated budget for the project.
budget_bySTRINGSpecifies how the budget is managed, e.g., total, task, person, etc.
budget_is_monthlyBOOLIndicates whether the budget is monthly.
client__currencySTRINGThe currency used for the project.
client__idINT64The unique identifier of the client.
client__nameSTRINGThe name of the client associated with the project.
codeSTRINGA unique identifier or code for the project.
cost_budgetFLOAT64The total cost budget for the project.
cost_budget_include_expensesBOOLIndicates whether expenses are included in the cost budget.
created_atTIMESTAMPThe date and time when the project was created.
ends_onSTRINGThe end date of the project.
feeFLOAT64The fee associated with the project.
hourly_rateFLOAT64The hourly rate for the project.
idINT64The unique identifier of the project.
is_activeBOOLIndicates whether the project is currently active.
is_billableBOOLIndicates whether the project is billable.
is_fixed_feeBOOLIndicates whether the project has a fixed fee.
nameSTRINGThe name or title of the project.
notesSTRINGAny additional notes or comments related to the project.
notify_when_over_budgetBOOLIndicates whether notifications are sent when the project goes over budget.
over_budget_notification_dateDATEThe date for sending notifications when the project goes over budget.
over_budget_notification_percentageFLOAT64The percentage threshold for over-budget notifications.
show_budget_to_allBOOLIndicates whether the budget is visible to all project members.
starts_onDATEThe start date of the project.
updated_atTIMESTAMPThe date and time when the project was last updated.
_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.
created_atTIMESTAMPThe date and time when the role was created
idINT64The unique identifier for the role
nameSTRINGThe name of the role
updated_atTIMESTAMPThe date and time when the role was last updated
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: roles__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.
valueINT64The unique identifier for a user assigned to this role
_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.
billableBOOLIndicates if the task assignment is billable or not
budgetSTRINGThe budget allocated for this task assignment
created_atTIMESTAMPThe date and time when the task assignment was created
hourly_rateFLOAT64The hourly rate for this task assignment
idINT64Unique identifier for the task assignment
is_activeBOOLIndicates if the task assignment is currently active
project__codeSTRINGThe code assigned to the project
project__idINT64Unique identifier for the project
project__nameSTRINGThe name of the project
task__idINT64Unique identifier for the task
task__nameSTRINGThe name of the task
updated_atTIMESTAMPThe date and time when the task assignment was last updated
_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.
billable_by_defaultBOOLIndicates if the task is billable by default for the project.
created_atTIMESTAMPTimestamp for when the task was created.
default_hourly_rateFLOAT64Default hourly rate set for the task.
idINT64Unique identifier for the task.
is_activeBOOLIndicates if the task is active or not.
is_defaultBOOLIndicates if the task is the default task for the project.
nameSTRINGName of the task.
updated_atTIMESTAMPTimestamp for when the task was last updated.
_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.
billable_amountFLOAT64The amount that can be billed for the client's hours worked within the specified timeframe.
billable_hoursFLOAT64The total number of billable hours worked for the client within the specified timeframe.
client_idINT64The unique identifier of the client associated with the time entries.
client_nameSTRINGThe name of the client for whom the time entries were recorded.
currencySTRINGThe currency used for billing the client's time entries.
fromSTRINGThe start date and time of the timeframe for which the time entries are being fetched.
toSTRINGThe end date and time of the timeframe for which the time entries are being fetched.
total_hoursFLOAT64The total number of hours worked for the client within the specified timeframe, including both billable and non-billable hours.
_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.
billableBOOLIndicates if the time entry is billable or not.
billable_rateFLOAT64The rate at which the time entry is billable.
budgetedBOOLIndicates if the time entry is within the budget.
client__currencySTRINGThe currency used by the client.
client__idINT64The unique identifier of the client.
client__nameSTRINGThe name of the client.
cost_rateFLOAT64The cost rate associated with the time entry.
created_atTIMESTAMPThe date and time when the time entry was created.
ended_timeSTRINGThe time when the time entry ended.
external_referenceSTRINGAn external reference linked to the time entry.
hoursFLOAT64The total hours logged in the time entry.
hours_without_timerFLOAT64Hours logged without using a timer.
idINT64The unique identifier of the time entry.
invoice__idINT64The unique identifier of the associated invoice.
invoice__numberSTRINGThe invoice number associated with the time entry.
is_billedBOOLIndicates if the time entry has been billed.
is_closedBOOLIndicates if the time entry is closed.
is_lockedBOOLIndicates if the time entry is locked.
is_runningBOOLIndicates if the time entry is currently running.
locked_reasonSTRINGThe reason why the time entry is locked.
notesSTRINGAny additional notes associated with the time entry.
project__codeSTRINGThe project code associated with the time entry.
project__idINT64The unique identifier of the project.
project__nameSTRINGThe name of the project.
rounded_hoursFLOAT64The total hours rounded to a specific precision.
spent_dateDATEThe date when the time was spent.
started_timeSTRINGThe time when the time entry started.
task__idINT64The unique identifier of the task.
task__nameSTRINGThe name of the task.
task_assignment__billableBOOLIndicates if the task assignment is billable.
task_assignment__budgetFLOAT64The budget associated with the task assignment.
task_assignment__created_atTIMESTAMPThe date and time when the task assignment was created.
task_assignment__hourly_rateFLOAT64The hourly rate associated with the task assignment.
task_assignment__idINT64The unique identifier of the task assignment.
task_assignment__is_activeBOOLIndicates if the task assignment is active.
task_assignment__updated_atTIMESTAMPThe date and time when the task assignment was last updated.
timer_started_atSTRINGThe time when the timer for the time entry was started.
updated_atTIMESTAMPThe date and time when the time entry was last updated.
user__idINT64The unique identifier of the user.
user__nameSTRINGThe name of the user.
user_assignment__budgetFLOAT64The budget associated with the user assignment.
user_assignment__created_atTIMESTAMPThe date and time when the user assignment was created.
user_assignment__hourly_rateFLOAT64The hourly rate associated with the user assignment.
user_assignment__idINT64The unique identifier of the user assignment.
user_assignment__is_activeBOOLIndicates if the user assignment is active.
user_assignment__is_project_managerBOOLIndicates if the user is a project manager.
user_assignment__updated_atTIMESTAMPThe date and time when the user assignment was last updated.
user_assignment__use_default_ratesBOOL
_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.
billable_amountFLOAT64The total amount that can be billed for this project in the given currency.
billable_hoursFLOAT64The number of billable hours spent on this project.
client_idINT64The unique identifier for the client associated with this project.
client_nameSTRINGThe name of the client associated with this project.
currencySTRINGThe currency in which the billable amount is specified.
fromSTRINGThe start date for the project time frame.
project_idINT64The unique identifier for the project.
project_nameSTRINGThe name of the project.
toSTRINGThe end date for the project time frame.
total_hoursFLOAT64The total number of hours spent on this project.
_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.
billable_amountFLOAT64The amount that can be billed for this time task
billable_hoursFLOAT64The number of hours that can be billed for this time task
currencySTRINGThe currency in which the billable amount is calculated
fromSTRINGThe starting time of the time task
task_idINT64The unique identifier for the task associated with this time entry
task_nameSTRINGThe name of the task associated with this time entry
toSTRINGThe ending time of the time task
total_hoursFLOAT64The total number of hours spent on this time task
_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.
avatar_urlSTRING
billable_amountFLOAT64The amount that can be billed for the time period
billable_hoursFLOAT64The number of hours that can be billed for the time period
currencySTRINGThe currency used for billing
fromSTRINGThe start date and time of the time period
is_contractorBOOLFlag indicating if the user is a contractor
toSTRINGThe end date and time of the time period
total_hoursFLOAT64The total number of hours worked for the time period
user_idINT64The unique identifier of the user
user_nameSTRINGThe name of the user
weekly_capacityFLOAT64
_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.
client_idINT64Unique identifier for the client
client_nameSTRINGName of the client
currencySTRINGCurrency used for the transaction
fromSTRINGStart date for the data range
project_idINT64Unique identifier for the project
project_nameSTRINGName of the project
toSTRINGEnd date for the data range
total_hoursFLOAT64Total hours tracked for the project within the data range
uninvoiced_amountFLOAT64Total amount yet to be invoiced for the project within the data range
uninvoiced_expensesFLOAT64Total expenses yet to be invoiced for the project within the data range
uninvoiced_hoursFLOAT64Total hours yet to be invoiced for the project within the data range
_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.
budgetFLOAT64The budget allocated for the assignment
created_atTIMESTAMPThe date and time when the assignment was created
hourly_rateFLOAT64The hourly rate for the assignment
idINT64The unique identifier for the assignment
is_activeBOOLFlag indicating if the assignment is currently active
is_project_managerBOOLFlag indicating if the user is a project manager for the assignment
project__codeSTRINGThe project code associated with the assignment
project__idINT64The unique identifier of the project
project__nameSTRINGThe name of the project associated with the assignment
updated_atTIMESTAMPThe date and time when the assignment was last updated
use_default_ratesBOOLFlag indicating if default rates are used for the assignment
user__idINT64The unique identifier of the user assigned to the project
user__nameSTRINGThe name of the user assigned to the project
_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.
avatar_urlSTRINGURL of the user's avatar image.
calendar_integration_enabledBOOLIndicates if calendar integration is enabled for the user.
calendar_integration_sourceSTRINGSource of calendar integration for the user.
can_create_invoicesBOOLShows if the user can create invoices.
can_create_projectsBOOLShows if the user can create projects.
can_see_ratesBOOLIndicates if the user can see rates.
cost_rateFLOAT64The cost rate associated with the user.
created_atTIMESTAMPDate and time when the user was created.
default_hourly_rateFLOAT64User's default hourly rate for billing.
emailSTRINGUser's email address.
first_nameSTRINGUser's first name.
has_access_to_all_future_projectsBOOLIndicates if the user has access to all future projects.
idINT64Unique identifier for the user.
is_activeBOOLShows if the user is currently active.
is_adminBOOLIndicates if the user is an admin.
is_contractorBOOLShows if the user is a contractor.
is_project_managerBOOLIndicates if the user is a project manager.
last_nameSTRINGUser's last name.
telephoneSTRINGUser's telephone number.
timezoneSTRINGUser's timezone.
updated_atTIMESTAMPDate and time when the user record was last updated.
weekly_capacityINT64User's weekly capacity for work.
_kaivo_extracted_atTIMESTAMPTimestamp that shows when the row was extracted. Auto-generated by Kaivo.

Subtable: users__access_roles

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

Subtable: users__permissions_claims

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

Subtable: users__roles

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.
valueSTRING
_kaivo_extracted_atTIMESTAMPTimestamp 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.

Was this helpful?

Still need help? Share an idea