# Harvest

Harvest is a time tracking and management software with reporting and streamlined online invoicing.

Harvest integration replicates data using the [Harvest REST API V2](https://help.getharvest.com/api-v2/).

See the [Schema](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#Schema) section for a list of objects available for replication.

## Preparing for authentication

To access your data, you need to authenticate the connection with your account credentials.

Information noteMake sure that the account you use has read access to the tables you want to fetch.

To generate the client ID and client secret:

1. Log into your [Harvest Developers](https://id.getharvest.com/sessions/new?go_back=%2Fdevelopers) account.
2. Select the OAuth app you want to use, or create a new one.
3. Make sure Authorized Redirect URIs is set to https://connector.qlik.com/auth/oauth/v3.htm.
4. Click Save.
5. As the client ID and client secret are displayed only once, copy and paste them to a secured file.

## Creating the connection

For more information, see [Connecting to SaaS applications](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Landing/connecting-web-applications.htm).

1. Click Authenticate when you have filled in the required connection settings.

   You may be asked to log in to the source application.

   A window is displayed with an authentication code.

2. Copy the code to the clipboard and return to the connection dialog.

3. Paste the code in Complete authentication with the code provided by the source and click Verify.

   Tip noteYou may need to scroll down to see this field.

   When status is Verified, the authentication is verified.

4. Provide a name for the connection in Connection name.

5. Select Open connection metadata to define metadata for the connection when it has been created.

Connection settings

| Setting | Description |
| --- | --- |
| Data gateway | Select a Data Movement gateway if required by your use case.<br><br>Information note<br><br>This field is not available with the Qlik Talend Cloud Starter subscription, as it does not support Data Movement gateway. If you have another subscription tier and do not want to use Data Movement gateway, select None.<br><br>For information on the benefits of Data Movement gateway and use cases that require it, see [Qlik Data Gateway - Data Movement](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm). |
| Start Date | Enter the date, in the format `MM/DD/YYYY`, from which the data must be replicated from your source to your target. |
| Account Name | Account name. For example: the account name of qlik.harvestapp.com would be qlik. |
| Client ID | Client ID. |
| Client Secret | Client secret. |

## Schema

Information note

Schemas and naming conventions can change from version to version. It is recommended to verify your version before continuing.

Depending on your destination, table and column names may not appear as they are outlined below.

### clients

The `clients` table contains info about the clients in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/clients-api/clients/clients/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/clients-api/clients/clients/#list-all-clients "Opens in new tab: Harvest API method") |

clients table foreign keys

| Join clients with | on |
| --- | --- |
| [contacts](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#contacts) | ```<br>clients.id = contacts.client_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>clients.id = estimates.client_id<br>``` |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>clients.id = expenses.client_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>clients.id = invoices.client_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>clients.id = projects.client_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>clients.id = time_entries.client_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>clients.id = user_projects.client_id<br>``` |

clients table schema

| **address**<br><br><br>STRING |
| --- |
| **created\_at**<br><br><br>DATE-TIME |
| **currency**<br><br><br>STRING |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **name**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### contacts

The `contacts` table contains info about the client contacts in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/clients-api/clients/contacts/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/clients-api/clients/contacts/#list-all-contacts "Opens in new tab: Harvest API method") |

contacts table foreign keys

| Join contacts with | on |
| --- | --- |
| [clients](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#clients) | ```<br>contacts.client_id = clients.id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>contacts.client_id = estimates.client_id<br>``` |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>contacts.client_id = expenses.client_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>contacts.client_id = invoices.client_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>contacts.client_id = projects.client_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>contacts.client_id = time_entries.client_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>contacts.client_id = user_projects.client_id<br>``` |

contacts table schema

| **client\_id**<br><br><br>INTEGER |
| --- |
| **created\_at**<br><br><br>DATE-TIME |
| **email**<br><br><br>STRING |
| **fax**<br><br><br>STRING |
| **first\_name**<br><br><br>STRING |
| **id**<br><br><br>INTEGER |
| **last\_name**<br><br><br>STRING |
| **phone\_mobile**<br><br><br>STRING |
| **phone\_office**<br><br><br>STRING |
| **title**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### estimate\_item\_categories

The `estimate_item_categories` table contains info about the estimate item categories in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-item-categories/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-item-categories/#list-all-estimate-item-categories "Opens in new tab: Harvest API method") |

estimate\_item\_categories table schema

| **created\_at**<br><br><br>DATE-TIME |
| --- |
| **id**<br><br><br>INTEGER |
| **name**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### estimate\_line\_items

The `estimate_line_items` table contains info about the line items contained in estimates.

**Note**: This table is updated based on new and updated `estimates`. This means that when an estimate is updated, this table will also be updated.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/#the-estimate-line-item-object)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/#get-all-estimates "Opens in new tab: Harvest API method") |

estimate\_line\_items table foreign keys

| Join estimate\_line\_items with | on |
| --- | --- |
| [estimate_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimate-messages) | ```<br>estimate_line_items.estimate_id = estimate_messages.estimate_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>estimate_line_items.estimate_id = estimates.id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>estimate_line_items.estimate_id = invoices.estimate_id<br>``` |

estimate\_line\_items table schema

| **amount**<br><br><br>NUMBER |
| --- |
| **description**<br><br><br>STRING |
| **estimate\_id**<br><br><br>INTEGER |
| **id**<br><br><br>INTEGER |
| **kind**<br><br><br>STRING |
| **quantity**<br><br><br>INTEGER |
| **taxed**<br><br><br>BOOLEAN |
| **taxed2**<br><br><br>BOOLEAN |
| **unit\_price**<br><br><br>NUMBER |

### estimate\_messages

The `estimate_messages` table contains info about the messages associated with estimates.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-messages/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-messages/#list-all-messages-for-an-estimate "Opens in new tab: Harvest API method") |

estimate\_messages table foreign keys

| Join estimate\_messages with | on |
| --- | --- |
| [estimate_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimate-line-items) | ```<br>estimate_messages.estimate_id = estimate_line_items.estimate_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>estimate_messages.estimate_id = estimates.id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>estimate_messages.estimate_id = invoices.estimate_id<br>``` |

estimate\_messages table schema

| **body**<br><br><br>STRING |
| --- |
| **created\_at**<br><br><br>DATE-TIME |
| **estimate\_id**<br><br><br>INTEGER |
| **event\_type**<br><br><br>STRING |
| **id**<br><br><br>INTEGER |
| **recipients**<br><br><br>ARRAY<br><br>This is a nested data structure:<br><br><ul><li>email: STRING</li><li>name: STRING</li></ul> |
| **send\_me\_a\_copy**<br><br><br>BOOLEAN |
| **sent\_by**<br><br><br>STRING |
| **sent\_by\_email**<br><br><br>STRING |
| **sent\_from**<br><br><br>STRING |
| **sent\_from\_email**<br><br><br>STRING |
| **subject**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### estimates

The `estimates` table contains info about the estimates in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-messages/#list-all-messages-for-an-estimate "Opens in new tab: Harvest API method") |

estimates table foreign keys

| Join estimates with | on |
| --- | --- |
| [clients](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#clients) | ```<br>estimates.client_id = clients.id<br>``` |
| [contacts](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#contacts) | ```<br>estimates.client_id = contacts.client_id<br>``` |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>estimates.client_id = expenses.client_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>estimates.client_id = invoices.client_id<br>```<br><br>```<br>estimates.id = invoices.estimate_id<br>```<br><br>```<br>estimates.creator_id = invoices.creator_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>estimates.client_id = projects.client_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>estimates.client_id = time_entries.client_id<br>```<br><br>```<br>estimates.creator_id = time_entries.user_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>estimates.client_id = user_projects.client_id<br>```<br><br>```<br>estimates.creator_id = user_projects.user_id<br>``` |
| [estimate_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimate-line-items) | ```<br>estimates.id = estimate_line_items.estimate_id<br>``` |
| [estimate_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimate-messages) | ```<br>estimates.id = estimate_messages.estimate_id<br>``` |
| [users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#users) | ```<br>estimates.creator_id = users.id<br>``` |
| [user_project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-project-tasks) | ```<br>estimates.creator_id = user_project_tasks.user_id<br>``` |
| [user_roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-roles) | ```<br>estimates.creator_id = user_roles.user_id<br>``` |

estimates table schema

| **accepted\_at**<br><br><br>DATE-TIME |
| --- |
| **amount**<br><br><br>NUMBER |
| **client\_id**<br><br><br>INTEGER |
| **client\_key**<br><br><br>STRING |
| **created\_at**<br><br><br>DATE-TIME |
| **creator\_id**<br><br><br>INTEGER |
| **currency**<br><br><br>STRING |
| **declined\_at**<br><br><br>DATE-TIME |
| **discount**<br><br><br>STRING, NUMBER |
| **discount\_amount**<br><br><br>NUMBER |
| **id**<br><br><br>INTEGER |
| **issue\_date**<br><br><br>DATE-TIME |
| **notes**<br><br><br>STRING |
| **number**<br><br><br>STRING |
| **purchase\_order**<br><br><br>STRING |
| **sent\_at**<br><br><br>DATE-TIME |
| **state**<br><br><br>STRING |
| **subject**<br><br><br>STRING |
| **tax**<br><br><br>STRING, NUMBER |
| **tax2**<br><br><br>STRING, NUMBER |
| **tax2\_amount**<br><br><br>NUMBER |
| **tax\_amount**<br><br><br>NUMBER |
| **updated\_at**<br><br><br>DATE-TIME |

### expense\_categories

The `expense_categories` table contains info about the expense categories in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/expenses-api/expenses/expense-categories/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/expenses-api/expenses/expense-categories/#list-all-expense-categories "Opens in new tab: Harvest API method") |

expense\_categories table foreign keys

| Join expense\_categories with | on |
| --- | --- |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>expense_categories.id = expenses.expense_category_id<br>``` |

expense\_categories table schema

| **created\_at**<br><br><br>DATE-TIME |
| --- |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **name**<br><br><br>STRING |
| **unit\_name**<br><br><br>STRING |
| **unit\_price**<br><br><br>NUMBER |
| **updated\_at**<br><br><br>DATE-TIME |

### expenses

The `expenses` table contains info about the expenses recorded in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/expenses-api/expenses/expenses/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/expenses-api/expenses/expenses#list-all-expenses "Opens in new tab: Harvest API method") |

expenses table foreign keys

| Join expenses with | on |
| --- | --- |
| [clients](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#clients) | ```<br>expenses.client_id = clients.id<br>``` |
| [contacts](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#contacts) | ```<br>expenses.client_id = contacts.client_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>expenses.client_id = estimates.client_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>expenses.client_id = invoices.client_id<br>```<br><br>```<br>expenses.invoice_id = invoices.id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>expenses.client_id = projects.client_id<br>```<br><br>```<br>expenses.project_id = projects.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>expenses.client_id = time_entries.client_id<br>```<br><br>```<br>expenses.id = time_entries.external_reference_id<br>```<br><br>```<br>expenses.invoice_id = time_entries.invoice_id<br>```<br><br>```<br>expenses.project_id = time_entries.project_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>expenses.client_id = user_projects.client_id<br>```<br><br>```<br>expenses.project_id = user_projects.project_id<br>``` |
| [expense_categories](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expense-categories) | ```<br>expenses.expense_category_id = expense_categories.id<br>``` |
| [time_entry_external_reference](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entry-external-reference) | ```<br>expenses.id = time_entry_external_reference.external_reference_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>expenses.invoice_id = invoice_line_items.invoice_id<br>```<br><br>```<br>expenses.project_id = invoice_line_items.project_id<br>``` |
| [invoice_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-messages) | ```<br>expenses.invoice_id = invoice_messages.invoice_id<br>``` |
| [invoice_payments](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-payments) | ```<br>expenses.invoice_id = invoice_payments.invoice_id<br>``` |
| [project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-tasks) | ```<br>expenses.project_id = project_tasks.project_id<br>``` |
| [project_users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-users) | ```<br>expenses.project_id = project_users.project_id<br>``` |

expenses table schema

| **billable**<br><br><br>BOOLEAN |
| --- |
| **client\_id**<br><br><br>INTEGER |
| **created\_at**<br><br><br>DATE-TIME |
| **expense\_category\_id**<br><br><br>INTEGER |
| **id**<br><br><br>INTEGER |
| **invoice\_id**<br><br><br>INTEGER |
| **is\_billed**<br><br><br>BOOLEAN |
| **is\_closed**<br><br><br>BOOLEAN |
| **is\_locked**<br><br><br>BOOLEAN |
| **locked\_reason**<br><br><br>STRING |
| **notes**<br><br><br>STRING |
| **project\_id**<br><br><br>INTEGER |
| **receipt\_content\_type**<br><br><br>STRING |
| **receipt\_file\_name**<br><br><br>STRING |
| **receipt\_file\_size**<br><br><br>INTEGER |
| **receipt\_url**<br><br><br>STRING |
| **spent\_date**<br><br><br>DATE-TIME |
| **total\_cost**<br><br><br>NUMBER |
| **units**<br><br><br>NUMBER |
| **updated\_at**<br><br><br>DATE-TIME |
| **user\_assignment\_id**<br><br><br>INTEGER |
| **user\_id**<br><br><br>INTEGER |

### invoice\_item\_categories

The `invoice_item_categories` table contains info about the various categories that can be applied to invoice line items.

**Note**: Harvest includes two non-removable categories by default for the hours and expenses you bill.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-item-categories/)<br><br>[Harvest API method](http://help.getharvest.com/api-v1/invoices-api/invoices/invoice-messages-payments/#show-all-categories "Opens in new tab: Harvest API method") |

invoice\_item\_categories table schema

| **created\_at**<br><br><br>DATE-TIME |
| --- |
| **id**<br><br><br>INTEGER |
| **name**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |
| **use\_as\_expense**<br><br><br>BOOLEAN |
| **use\_as\_service**<br><br><br>BOOLEAN |

### invoice\_line\_items

The `invoice_line_items` table contains info about the line items contained in invoices.

**Note**: This table is updated based on new and updated `invoices`. This means that when an invoice is updated, this table will also be updated.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/invoices-api/invoices/invoices#the-invoice-line-item-object)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/invoices-api/invoices/invoices#list-all-invoices "Opens in new tab: Harvest API method") |

invoice\_line\_items table foreign keys

| Join invoice\_line\_items with | on |
| --- | --- |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>invoice_line_items.invoice_id = expenses.invoice_id<br>```<br><br>```<br>invoice_line_items.project_id = expenses.project_id<br>``` |
| [invoice_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-messages) | ```<br>invoice_line_items.invoice_id = invoice_messages.invoice_id<br>``` |
| [invoice_payments](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-payments) | ```<br>invoice_line_items.invoice_id = invoice_payments.invoice_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>invoice_line_items.invoice_id = invoices.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>invoice_line_items.invoice_id = time_entries.invoice_id<br>```<br><br>```<br>invoice_line_items.project_id = time_entries.project_id<br>``` |
| [project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-tasks) | ```<br>invoice_line_items.project_id = project_tasks.project_id<br>``` |
| [project_users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-users) | ```<br>invoice_line_items.project_id = project_users.project_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>invoice_line_items.project_id = projects.id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>invoice_line_items.project_id = user_projects.project_id<br>``` |

invoice\_line\_items table schema

| **amount**<br><br><br>NUMBER |
| --- |
| **description**<br><br><br>STRING |
| **id**<br><br><br>INTEGER |
| **invoice\_id**<br><br><br>INTEGER |
| **kind**<br><br><br>STRING |
| **project\_id**<br><br><br>INTEGER |
| **quantity**<br><br><br>INTEGER |
| **taxed**<br><br><br>BOOLEAN |
| **taxed2**<br><br><br>BOOLEAN |
| **unit\_price**<br><br><br>NUMBER |

### invoice\_messages

The `invoice_messages` table contains info about invoice messages, or emails sent to clients about invoices.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest API method](https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-messages/ "Opens in new tab: Harvest API method") |

invoice\_messages table foreign keys

| Join invoice\_messages with | on |
| --- | --- |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>invoice_messages.invoice_id = expenses.invoice_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>invoice_messages.invoice_id = invoice_line_items.invoice_id<br>``` |
| [invoice_payments](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-payments) | ```<br>invoice_messages.invoice_id = invoice_payments.invoice_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>invoice_messages.invoice_id = invoices.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>invoice_messages.invoice_id = time_entries.invoice_id<br>``` |

invoice\_messages table schema

| **attach\_pdf**<br><br><br>BOOLEAN |
| --- |
| **body**<br><br><br>STRING |
| **created\_at**<br><br><br>DATE-TIME |
| **event\_type**<br><br><br>STRING |
| **id**<br><br><br>INTEGER |
| **include\_link\_to\_client\_invoice**<br><br><br>BOOLEAN |
| **invoice\_id**<br><br><br>INTEGER |
| **recipients**<br><br><br>ARRAY<br><br>This is a nested data structure:<br><br><ul><li>email: STRING</li><li>name: STRING</li></ul> |
| **reminder**<br><br><br>BOOLEAN |
| **send\_me\_a\_copy**<br><br><br>BOOLEAN |
| **send\_reminder\_on**<br><br><br>DATE-TIME |
| **sent\_by**<br><br><br>STRING |
| **sent\_by\_email**<br><br><br>STRING |
| **sent\_from**<br><br><br>STRING |
| **sent\_from\_email**<br><br><br>STRING |
| **subject**<br><br><br>STRING |
| **thank\_you**<br><br><br>BOOLEAN |
| **updated\_at**<br><br><br>DATE-TIME |

### invoice\_payments

The `invoice_payments` table contains info about the payments applied to invoices in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-payments/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-payments#list-all-payments-for-an-invoice "Opens in new tab: Harvest API method") |

invoice\_payments table foreign keys

| Join invoice\_payments with | on |
| --- | --- |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>invoice_payments.invoice_id = expenses.invoice_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>invoice_payments.invoice_id = invoice_line_items.invoice_id<br>``` |
| [invoice_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-messages) | ```<br>invoice_payments.invoice_id = invoice_messages.invoice_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>invoice_payments.invoice_id = invoices.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>invoice_payments.invoice_id = time_entries.invoice_id<br>``` |

invoice\_payments table schema

| **amount**<br><br><br>NUMBER |
| --- |
| **created\_at**<br><br><br>DATE-TIME |
| **id**<br><br><br>INTEGER |
| **invoice\_id**<br><br><br>INTEGER |
| **notes**<br><br><br>STRING |
| **paid\_at**<br><br><br>DATE-TIME |
| **paid\_date**<br><br><br>DATE-TIME |
| **payment\_gateway\_id**<br><br><br>INTEGER |
| **payment\_gateway\_name**<br><br><br>INTEGER |
| **recorded\_by**<br><br><br>STRING |
| **recorded\_by\_email**<br><br><br>STRING |
| **transaction\_id**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### invoices

The `invoices` table contains info about the invoices in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/invoices-api/invoices/invoices/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/invoices-api/invoices/invoices#list-all-invoices "Opens in new tab: Harvest API method") |

invoices table foreign keys

| Join invoices with | on |
| --- | --- |
| [clients](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#clients) | ```<br>invoices.client_id = clients.id<br>``` |
| [contacts](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#contacts) | ```<br>invoices.client_id = contacts.client_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>invoices.client_id = estimates.client_id<br>```<br><br>```<br>invoices.estimate_id = estimates.id<br>```<br><br>```<br>invoices.creator_id = estimates.creator_id<br>``` |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>invoices.client_id = expenses.client_id<br>```<br><br>```<br>invoices.id = expenses.invoice_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>invoices.client_id = projects.client_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>invoices.client_id = time_entries.client_id<br>```<br><br>```<br>invoices.id = time_entries.invoice_id<br>```<br><br>```<br>invoices.creator_id = time_entries.user_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>invoices.client_id = user_projects.client_id<br>```<br><br>```<br>invoices.creator_id = user_projects.user_id<br>``` |
| [estimate_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimate-line-items) | ```<br>invoices.estimate_id = estimate_line_items.estimate_id<br>``` |
| [estimate_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimate-messages) | ```<br>invoices.estimate_id = estimate_messages.estimate_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>invoices.id = invoice_line_items.invoice_id<br>``` |
| [invoice_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-messages) | ```<br>invoices.id = invoice_messages.invoice_id<br>``` |
| [invoice_payments](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-payments) | ```<br>invoices.id = invoice_payments.invoice_id<br>``` |
| [users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#users) | ```<br>invoices.creator_id = users.id<br>``` |
| [user_project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-project-tasks) | ```<br>invoices.creator_id = user_project_tasks.user_id<br>``` |
| [user_roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-roles) | ```<br>invoices.creator_id = user_roles.user_id<br>``` |

invoices table schema

| **amount**<br><br><br>NUMBER |
| --- |
| **client\_id**<br><br><br>INTEGER |
| **client\_key**<br><br><br>STRING |
| **closed\_at**<br><br><br>DATE-TIME |
| **created\_at**<br><br><br>DATE-TIME |
| **creator\_id**<br><br><br>INTEGER |
| **currency**<br><br><br>STRING |
| **discount**<br><br><br>STRING, NUMBER |
| **discount\_amount**<br><br><br>NUMBER |
| **due\_amount**<br><br><br>NUMBER |
| **due\_date**<br><br><br>DATE-TIME |
| **estimate\_id**<br><br><br>INTEGER |
| **id**<br><br><br>INTEGER |
| **issue\_date**<br><br><br>DATE-TIME |
| **notes**<br><br><br>STRING |
| **number**<br><br><br>STRING |
| **paid\_at**<br><br><br>DATE-TIME |
| **paid\_date**<br><br><br>DATE-TIME |
| **payment\_term**<br><br><br>STRING |
| **period\_end**<br><br><br>DATE-TIME |
| **period\_start**<br><br><br>DATE-TIME |
| **purchase\_order**<br><br><br>STRING |
| **retainer\_id**<br><br><br>INTEGER |
| **sent\_at**<br><br><br>DATE-TIME |
| **state**<br><br><br>STRING |
| **subject**<br><br><br>STRING |
| **tax**<br><br><br>STRING, NUMBER |
| **tax2**<br><br><br>STRING, NUMBER |
| **tax2\_amount**<br><br><br>NUMBER |
| **tax\_amount**<br><br><br>NUMBER |
| **updated\_at**<br><br><br>DATE-TIME |

### project\_tasks

The `project_tasks` table contains info about the tasks assigned to projects.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/projects-api/projects/task-assignments/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/projects-api/projects/task-assignments#list-all-task-assignments "Opens in new tab: Harvest API method") |

project\_tasks table foreign keys

| Join project\_tasks with | on |
| --- | --- |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>project_tasks.project_id = expenses.project_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>project_tasks.project_id = invoice_line_items.project_id<br>``` |
| [project_users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-users) | ```<br>project_tasks.project_id = project_users.project_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>project_tasks.project_id = projects.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>project_tasks.project_id = time_entries.project_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>project_tasks.project_id = user_projects.project_id<br>``` |
| [user_project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-project-tasks) | ```<br>project_tasks.id = user_project_tasks.project_task_id<br>``` |

project\_tasks table schema

| **billable**<br><br><br>BOOLEAN |
| --- |
| **budget**<br><br><br>NUMBER |
| **created\_at**<br><br><br>DATE-TIME |
| **hourly\_rate**<br><br><br>NUMBER |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **project\_id**<br><br><br>INTEGER |
| **task\_id**<br><br><br>INTEGER |
| **updated\_at**<br><br><br>DATE-TIME |

### project\_users

The `project_users` table contains info about the users assigned to projects.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest API method](https://help.getharvest.com/api-v2/projects-api/projects/user-assignments/ "Opens in new tab: Harvest API method") |

project\_users table foreign keys

| Join project\_users with | on |
| --- | --- |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>project_users.project_id = expenses.project_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>project_users.project_id = invoice_line_items.project_id<br>``` |
| [project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-tasks) | ```<br>project_users.project_id = project_tasks.project_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>project_users.project_id = projects.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>project_users.project_id = time_entries.project_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>project_users.project_id = user_projects.project_id<br>``` |

project\_users table schema

| **budget**<br><br><br>NUMBER |
| --- |
| **created\_at**<br><br><br>DATE-TIME |
| **hourly\_rate**<br><br><br>NUMBER |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **is\_project\_manager**<br><br><br>BOOLEAN |
| **project\_id**<br><br><br>INTEGER |
| **updated\_at**<br><br><br>DATE-TIME |
| **user\_id**<br><br><br>INTEGER |

### projects

The `projects` table contains info about the projects in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/projects-api/projects/projects/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/projects-api/projects/projects#list-all-projects "Opens in new tab: Harvest API method") |

projects table foreign keys

| Join projects with | on |
| --- | --- |
| [clients](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#clients) | ```<br>projects.client_id = clients.id<br>``` |
| [contacts](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#contacts) | ```<br>projects.client_id = contacts.client_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>projects.client_id = estimates.client_id<br>``` |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>projects.client_id = expenses.client_id<br>```<br><br>```<br>projects.id = expenses.project_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>projects.client_id = invoices.client_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>projects.client_id = time_entries.client_id<br>```<br><br>```<br>projects.id = time_entries.project_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>projects.client_id = user_projects.client_id<br>```<br><br>```<br>projects.id = user_projects.project_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>projects.id = invoice_line_items.project_id<br>``` |
| [project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-tasks) | ```<br>projects.id = project_tasks.project_id<br>``` |
| [project_users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-users) | ```<br>projects.id = project_users.project_id<br>``` |

projects table schema

| **bill\_by**<br><br><br>STRING |
| --- |
| **budget**<br><br><br>NUMBER |
| **budget\_by**<br><br><br>STRING |
| **budget\_is\_monthly**<br><br><br>BOOLEAN |
| **client\_id**<br><br><br>INTEGER |
| **code**<br><br><br>STRING |
| **cost\_budget**<br><br><br>NUMBER |
| **cost\_budget\_include\_expenses**<br><br><br>BOOLEAN |
| **created\_at**<br><br><br>DATE-TIME |
| **ends\_on**<br><br><br>STRING |
| **fee**<br><br><br>NUMBER |
| **hourly\_rate**<br><br><br>NUMBER |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **is\_billable**<br><br><br>BOOLEAN |
| **is\_fixed\_fee**<br><br><br>BOOLEAN |
| **name**<br><br><br>STRING |
| **notes**<br><br><br>STRING |
| **notify\_when\_over\_budget**<br><br><br>BOOLEAN |
| **over\_budget\_notification\_date**<br><br><br>DATE-TIME |
| **over\_budget\_notification\_percentage**<br><br><br>INTEGER |
| **show\_budget\_to\_all**<br><br><br>BOOLEAN |
| **starts\_on**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### roles

The `roles` table contains info about the roles in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/roles-api/roles/roles/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/roles-api/roles/roles#list-all-roles "Opens in new tab: Harvest API method") |

roles table foreign keys

| Join roles with | on |
| --- | --- |
| [user_roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-roles) | ```<br>roles.id = user_roles.role_id<br>``` |

roles table schema

| **created\_at**<br><br><br>DATE-TIME |
| --- |
| **id**<br><br><br>INTEGER |
| **name**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### tasks

The `tasks` table contains info about the tasks in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/tasks-api/tasks/tasks/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/tasks-api/tasks/tasks#list-all-tasks "Opens in new tab: Harvest API method") |

tasks table foreign keys

| Join tasks with | on |
| --- | --- |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>tasks.id = time_entries.task_id<br>``` |

tasks table schema

| **billable\_by\_default**<br><br><br>BOOLEAN |
| --- |
| **created\_at**<br><br><br>DATE-TIME |
| **default\_hourly\_rate**<br><br><br>NUMBER |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **is\_default**<br><br><br>BOOLEAN |
| **name**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |

### time\_entries

The `time_entries` table contains info about the time entries in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries#list-all-time-entries "Opens in new tab: Harvest API method") |

time\_entries table foreign keys

| Join time\_entries with | on |
| --- | --- |
| [clients](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#clients) | ```<br>time_entries.client_id = clients.id<br>``` |
| [contacts](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#contacts) | ```<br>time_entries.client_id = contacts.client_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>time_entries.client_id = estimates.client_id<br>```<br><br>```<br>time_entries.user_id = estimates.creator_id<br>``` |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>time_entries.client_id = expenses.client_id<br>```<br><br>```<br>time_entries.external_reference_id = expenses.id<br>```<br><br>```<br>time_entries.invoice_id = expenses.invoice_id<br>```<br><br>```<br>time_entries.project_id = expenses.project_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>time_entries.client_id = invoices.client_id<br>```<br><br>```<br>time_entries.invoice_id = invoices.id<br>```<br><br>```<br>time_entries.user_id = invoices.creator_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>time_entries.client_id = projects.client_id<br>```<br><br>```<br>time_entries.project_id = projects.id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>time_entries.client_id = user_projects.client_id<br>```<br><br>```<br>time_entries.project_id = user_projects.project_id<br>```<br><br>```<br>time_entries.user_id = user_projects.user_id<br>``` |
| [time_entry_external_reference](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entry-external-reference) | ```<br>time_entries.external_reference_id = time_entry_external_reference.external_reference_id<br>```<br><br>```<br>time_entries.id = time_entry_external_reference.time_entry_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>time_entries.invoice_id = invoice_line_items.invoice_id<br>```<br><br>```<br>time_entries.project_id = invoice_line_items.project_id<br>``` |
| [invoice_messages](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-messages) | ```<br>time_entries.invoice_id = invoice_messages.invoice_id<br>``` |
| [invoice_payments](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-payments) | ```<br>time_entries.invoice_id = invoice_payments.invoice_id<br>``` |
| [project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-tasks) | ```<br>time_entries.project_id = project_tasks.project_id<br>``` |
| [project_users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-users) | ```<br>time_entries.project_id = project_users.project_id<br>``` |
| [tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#tasks) | ```<br>time_entries.task_id = tasks.id<br>``` |
| [users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#users) | ```<br>time_entries.user_id = users.id<br>``` |
| [user_project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-project-tasks) | ```<br>time_entries.user_id = user_project_tasks.user_id<br>``` |
| [user_roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-roles) | ```<br>time_entries.user_id = user_roles.user_id<br>``` |

time\_entries table schema

| **billable**<br><br><br>BOOLEAN |
| --- |
| **billable\_rate**<br><br><br>NUMBER |
| **budgeted**<br><br><br>NUMBER |
| **client\_id**<br><br><br>INTEGER |
| **cost\_rate**<br><br><br>NUMBER |
| **created\_at**<br><br><br>DATE-TIME |
| **ended\_time**<br><br><br>TIME |
| **external\_reference\_id**<br><br><br>STRING |
| **hours**<br><br><br>NUMBER |
| **id**<br><br><br>INTEGER |
| **invoice\_id**<br><br><br>INTEGER |
| **is\_billed**<br><br><br>BOOLEAN |
| **is\_closed**<br><br><br>BOOLEAN |
| **is\_locked**<br><br><br>BOOLEAN |
| **is\_running**<br><br><br>BOOLEAN |
| **locked\_reason**<br><br><br>STRING |
| **notes**<br><br><br>STRING |
| **project\_id**<br><br><br>INTEGER |
| **spent\_date**<br><br><br>DATE-TIME |
| **started\_time**<br><br><br>TIME |
| **task\_assignment\_id**<br><br><br>INTEGER |
| **task\_id**<br><br><br>INTEGER |
| **timer\_started\_at**<br><br><br>DATE-TIME |
| **updated\_at**<br><br><br>DATE-TIME |
| **user\_assignment\_id**<br><br><br>INTEGER |
| **user\_id**<br><br><br>INTEGER |

### time\_entry\_external\_reference

The `time_entry_external_reference` table contains pairs of time entry IDs and external reference IDs. This data can be used to tie time entries tracked in external services (such as Trello) to your other Harvest data.

**Note**: This table is updated based on new and updated `time_entries`. This means that when a time entry is updated, this table will also be updated.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Keys** | time\_entry\_id<br><br>external\_reference\_id |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries#list-all-time-entries "Opens in new tab: Harvest API method") |

time\_entry\_external\_reference table foreign keys

| Join time\_entry\_external\_reference with | on |
| --- | --- |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>time_entry_external_reference.external_reference_id = expenses.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>time_entry_external_reference.external_reference_id = time_entries.external_reference_id<br>```<br><br>```<br>time_entry_external_reference.time_entry_id = time_entries.id<br>``` |

time\_entry\_external\_reference table schema

| **external\_reference\_id**<br><br><br>STRING |
| --- |
| **time\_entry\_id**<br><br><br>INTEGER |

### user\_project\_tasks

The `user_project_tasks` table contains pairs of user IDs and project task IDs.

This data can be used to see lists of all the project tasks associated with a user, and join tables together to get a comprehensive look at the user’s projects.

**Note**: This table is updated based on new and updated `users`. This means that when a user is updated, this table will also be updated.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Keys** | user\_id<br><br>project\_task\_id |
| **Useful links** | Harvest documentation |

user\_project\_tasks table foreign keys

| Join user\_project\_tasks with | on |
| --- | --- |
| [project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-tasks) | ```<br>user_project_tasks.project_task_id = project_tasks.id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>user_project_tasks.user_id = estimates.creator_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>user_project_tasks.user_id = invoices.creator_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>user_project_tasks.user_id = time_entries.user_id<br>``` |
| [users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#users) | ```<br>user_project_tasks.user_id = users.id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>user_project_tasks.user_id = user_projects.user_id<br>``` |
| [user_roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-roles) | ```<br>user_project_tasks.user_id = user_roles.user_id<br>``` |

user\_project\_tasks table schema

| **project\_task\_id**<br><br><br>INTEGER |
| --- |
| **user\_id**<br><br><br>INTEGER |

### user\_projects

The `user_projects` table contains info about the project assignments users are assigned to.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest API method](https://help.getharvest.com/api-v2/users-api/users/project-assignments/ "Opens in new tab: Harvest API method") |

user\_projects table foreign keys

| Join user\_projects with | on |
| --- | --- |
| [clients](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#clients) | ```<br>user_projects.client_id = clients.id<br>``` |
| [contacts](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#contacts) | ```<br>user_projects.client_id = contacts.client_id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>user_projects.client_id = estimates.client_id<br>```<br><br>```<br>user_projects.user_id = estimates.creator_id<br>``` |
| [expenses](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#expenses) | ```<br>user_projects.client_id = expenses.client_id<br>```<br><br>```<br>user_projects.project_id = expenses.project_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>user_projects.client_id = invoices.client_id<br>```<br><br>```<br>user_projects.user_id = invoices.creator_id<br>``` |
| [projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#projects) | ```<br>user_projects.client_id = projects.client_id<br>```<br><br>```<br>user_projects.project_id = projects.id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>user_projects.client_id = time_entries.client_id<br>```<br><br>```<br>user_projects.project_id = time_entries.project_id<br>```<br><br>```<br>user_projects.user_id = time_entries.user_id<br>``` |
| [invoice_line_items](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoice-line-items) | ```<br>user_projects.project_id = invoice_line_items.project_id<br>``` |
| [project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-tasks) | ```<br>user_projects.project_id = project_tasks.project_id<br>``` |
| [project_users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#project-users) | ```<br>user_projects.project_id = project_users.project_id<br>``` |
| [users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#users) | ```<br>user_projects.user_id = users.id<br>``` |
| [user_project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-project-tasks) | ```<br>user_projects.user_id = user_project_tasks.user_id<br>``` |
| [user_roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-roles) | ```<br>user_projects.user_id = user_roles.user_id<br>``` |

user\_projects table schema

| **budget**<br><br><br>NUMBER |
| --- |
| **client\_id**<br><br><br>INTEGER |
| **created\_at**<br><br><br>DATE-TIME |
| **hourly\_rate**<br><br><br>NUMBER |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **is\_project\_manager**<br><br><br>BOOLEAN |
| **project\_id**<br><br><br>INTEGER |
| **updated\_at**<br><br><br>DATE-TIME |
| **user\_id**<br><br><br>INTEGER |

### user\_roles

The `user_roles` table contains a list of user ID and role ID pairs, enabling you to see the roles users are associated with.

**Note**: This table is updated based on new and updated `users`. This means that when a user is updated, this table will also be updated.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Keys** | user\_id<br><br>role\_id |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/users-api/users/users/) |

user\_roles table foreign keys

| Join user\_roles with | on |
| --- | --- |
| [roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#roles) | ```<br>user_roles.role_id = roles.id<br>``` |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>user_roles.user_id = estimates.creator_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>user_roles.user_id = invoices.creator_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>user_roles.user_id = time_entries.user_id<br>``` |
| [users](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#users) | ```<br>user_roles.user_id = users.id<br>``` |
| [user_project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-project-tasks) | ```<br>user_roles.user_id = user_project_tasks.user_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>user_roles.user_id = user_projects.user_id<br>``` |

user\_roles table schema

| **role\_id**<br><br><br>INTEGER |
| --- |
| **user\_id**<br><br><br>INTEGER |

### users

The `users` table contains info about the users in your Harvest account.

| **Replication Method** | CDC |
| --- | --- |
| **Primary Key** | id |
| **Replication Key** | updated\_at |
| **Useful links** | [Harvest documentation](https://help.getharvest.com/api-v2/users-api/users/users/)<br><br>[Harvest API method](https://help.getharvest.com/api-v2/users-api/users/users#list-all-users "Opens in new tab: Harvest API method") |

users table foreign keys

| Join users with | on |
| --- | --- |
| [estimates](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#estimates) | ```<br>users.id = estimates.creator_id<br>``` |
| [invoices](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#invoices) | ```<br>users.id = invoices.creator_id<br>``` |
| [time_entries](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#time-entries) | ```<br>users.id = time_entries.user_id<br>``` |
| [user_project_tasks](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-project-tasks) | ```<br>users.id = user_project_tasks.user_id<br>``` |
| [user_projects](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-projects) | ```<br>users.id = user_projects.user_id<br>``` |
| [user_roles](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/WebApplications/Connecting-Harvest-v2.htm#user-roles) | ```<br>users.id = user_roles.user_id<br>``` |

users table schema

| **avatar\_url**<br><br><br>STRING |
| --- |
| **can\_create\_invoices**<br><br><br>BOOLEAN |
| **can\_create\_projects**<br><br><br>BOOLEAN |
| **can\_see\_rates**<br><br><br>BOOLEAN |
| **cost\_rate**<br><br><br>NUMBER |
| **created\_at**<br><br><br>DATE-TIME |
| **default\_hourly\_rate**<br><br><br>NUMBER |
| **email**<br><br><br>STRING |
| **first\_name**<br><br><br>STRING |
| **has\_access\_to\_all\_future\_projects**<br><br><br>BOOLEAN |
| **id**<br><br><br>INTEGER |
| **is\_active**<br><br><br>BOOLEAN |
| **is\_admin**<br><br><br>BOOLEAN |
| **is\_contractor**<br><br><br>BOOLEAN |
| **is\_project\_manager**<br><br><br>BOOLEAN |
| **last\_name**<br><br><br>STRING |
| **telephone**<br><br><br>STRING |
| **timezone**<br><br><br>STRING |
| **updated\_at**<br><br><br>DATE-TIME |
| **weekly\_capacity**<br><br><br>INTEGER |