Harvest integration summary

Stitch’s Harvest integration replicates data using the Harvest REST API V2. Refer to the Schema section for a list of objects available for replication.

Harvest feature snapshot

A high-level look at Stitch's Harvest (v2) integration, including release status, useful links, and the features supported in Stitch.

STITCH
Release status

Released on August 30, 2018

Supported by

Singer Community

Stitch plan

Standard

API availability

Available

Singer GitHub repository

singer-io/tap-harvest

REPLICATION SETTINGS
Anchor Scheduling

Supported

Advanced Scheduling

Unsupported

Table-level reset

Unsupported

Configurable Replication Methods

Unsupported

DATA SELECTION
Table selection

Unsupported

Column selection

Unsupported

Select all

Unsupported

TRANSPARENCY
Extraction Logs

Supported

Loading Reports

Supported

Connecting Harvest

Harvest setup requirements

To set up Harvest in Stitch, you need:

  • Verify your Harvest user’s access. Stitch will have the same permissions as the user setting up the integration. This means Stitch will only be able to access the same objects and data as the authorizing user.

    For example: if you’re unable to access expenses in Harvest, Stitch will be unable to replicate expense data.

Before diving into the setup process, verify that the user setting up the integration has access to all the objects - such as expenses - that you want to replicate.

Read more about Harvest permissions in their documentation.


Step 1: Add Harvest as a Stitch data source

  1. Sign into your Stitch account.
  2. On the Stitch Dashboard page, click the Add Integration button.

  3. Click the Harvest icon.

  4. Enter a name for the integration. This is the name that will display on the Stitch Dashboard for the integration; it’ll also be used to create the schema in your destination.

    For example, the name “Stitch Harvest” would create a schema called stitch_harvest in the destination. Note: Schema names cannot be changed after you save the integration.

  5. Enter your Harvest account name in the Account Name field. For example: if your Harvest account URL is stitch.harvestapp.com, you’d enter stitch in this field.

Step 2: Define the historical replication start date

The Sync Historical Data setting defines the starting date for your Harvest integration. This means that data equal to or newer than this date will be replicated to your data warehouse.

Change this setting if you want to replicate data beyond Harvest’s default setting of 1 year. For a detailed look at historical replication jobs, check out the Syncing Historical SaaS Data guide.

Step 3: Create a replication schedule

In the Replication Frequency section, you’ll create the integration’s replication schedule. An integration’s replication schedule determines how often Stitch runs a replication job, and the time that job begins.

Harvest integrations support the following replication scheduling methods:

To keep your row usage low, consider setting the integration to replicate less frequently. See the Understanding and Reducing Your Row Usage guide for tips on reducing your usage.

Step 4: Authorize Stitch to Access Harvest

Lastly, you’ll be directed to Harvest’s website to complete the setup.

  1. Enter your Harvest credentials and click Create Integration.
  2. A screen asking for authorization to Harvest will display. Note that Stitch will only ever read your data.
  3. Click Connect.
  4. After the authorization process successfully completes, you’ll be redirected back to Stitch.
  5. Click All Done.

Initial and historical replication jobs

After you finish setting up Harvest, its Sync Status may show as Pending on either the Stitch Dashboard or in the Integration Details page.

For a new integration, a Pending status indicates that Stitch is in the process of scheduling the initial replication job for the integration. This may take some time to complete.

Free historical data loads

The first seven days of replication, beginning when data is first replicated, are free. Rows replicated from the new integration during this time won’t count towards your quota. Stitch offers this as a way of testing new integrations, measuring usage, and ensuring historical data volumes don’t quickly consume your quota.


Harvest table reference

clients

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

clients schema on GitHub

Harvest API method

Join clients with on
contacts
clients.id = contacts.client_id
estimates
clients.id = estimates.client_id
expenses
clients.id = expenses.client_id
invoices
clients.id = invoices.client_id
projects
clients.id = projects.client_id
time_entries
clients.id = time_entries.client_id
user_projects
clients.id = user_projects.client_id

address

STRING

created_at

DATE-TIME

currency

STRING

id

INTEGER

is_active

BOOLEAN

name

STRING

updated_at

DATE-TIME

contacts

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

contacts schema on GitHub

Harvest API method

Join contacts with on
clients
contacts.client_id = clients.id
estimates
contacts.client_id = estimates.client_id
expenses
contacts.client_id = expenses.client_id
invoices
contacts.client_id = invoices.client_id
projects
contacts.client_id = projects.client_id
time_entries
contacts.client_id = time_entries.client_id
user_projects
contacts.client_id = user_projects.client_id

client_id

INTEGER

created_at

DATE-TIME

email

STRING

fax

STRING

first_name

STRING

id

INTEGER

last_name

STRING

phone_mobile

STRING

phone_office

STRING

title

STRING

updated_at

DATE-TIME

estimate_item_categories

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

estimate_item_categories schema on GitHub

Harvest API method

created_at

DATE-TIME

id

INTEGER

name

STRING

updated_at

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

Key-based Incremental

Primary Key

id

Useful links

Harvest documentation

estimate_line_items schema on GitHub

Harvest API method

Join estimate_line_items with on
estimate_messages
estimate_line_items.estimate_id = estimate_messages.estimate_id
estimates
estimate_line_items.estimate_id = estimates.id
invoices
estimate_line_items.estimate_id = invoices.estimate_id

amount

NUMBER

description

STRING

estimate_id

INTEGER

id

INTEGER

kind

STRING

quantity

INTEGER

taxed

BOOLEAN

taxed2

BOOLEAN

unit_price

NUMBER

estimate_messages

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

estimate_messages schema on GitHub

Harvest API method

Join estimate_messages with on
estimate_line_items
estimate_messages.estimate_id = estimate_line_items.estimate_id
estimates
estimate_messages.estimate_id = estimates.id
invoices
estimate_messages.estimate_id = invoices.estimate_id

body

STRING

created_at

DATE-TIME

estimate_id

INTEGER

event_type

STRING

id

INTEGER

recipients

ARRAY

email

STRING

name

STRING

send_me_a_copy

BOOLEAN

sent_by

STRING

sent_by_email

STRING

sent_from

STRING

sent_from_email

STRING

subject

STRING

updated_at

DATE-TIME

estimates

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

estimates schema on GitHub

Harvest API method

Join estimates with on
clients
estimates.client_id = clients.id
contacts
estimates.client_id = contacts.client_id
expenses
estimates.client_id = expenses.client_id
invoices
estimates.client_id = invoices.client_id
estimates.id = invoices.estimate_id
estimates.creator_id = invoices.creator_id
projects
estimates.client_id = projects.client_id
time_entries
estimates.client_id = time_entries.client_id
estimates.creator_id = time_entries.user_id
user_projects
estimates.client_id = user_projects.client_id
estimates.creator_id = user_projects.user_id
estimate_line_items
estimates.id = estimate_line_items.estimate_id
estimate_messages
estimates.id = estimate_messages.estimate_id
users
estimates.creator_id = users.id
user_project_tasks
estimates.creator_id = user_project_tasks.user_id
user_roles
estimates.creator_id = user_roles.user_id

accepted_at

DATE-TIME

amount

NUMBER

client_id

INTEGER

client_key

STRING

created_at

DATE-TIME

creator_id

INTEGER

currency

STRING

declined_at

DATE-TIME

discount

STRING, NUMBER

discount_amount

NUMBER

id

INTEGER

issue_date

DATE-TIME

notes

STRING

number

STRING

purchase_order

STRING

sent_at

DATE-TIME

state

STRING

subject

STRING

tax

STRING, NUMBER

tax2

STRING, NUMBER

tax2_amount

NUMBER

tax_amount

NUMBER

updated_at

DATE-TIME

expense_categories

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

expense_categories schema on GitHub

Harvest API method

Join expense_categories with on
expenses
expense_categories.id = expenses.expense_category_id

created_at

DATE-TIME

id

INTEGER

is_active

BOOLEAN

name

STRING

unit_name

STRING

unit_price

NUMBER

updated_at

DATE-TIME

expenses

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

expenses schema on GitHub

Harvest API method

Join expenses with on
clients
expenses.client_id = clients.id
contacts
expenses.client_id = contacts.client_id
estimates
expenses.client_id = estimates.client_id
invoices
expenses.client_id = invoices.client_id
expenses.invoice_id = invoices.id
projects
expenses.client_id = projects.client_id
expenses.project_id = projects.id
time_entries
expenses.client_id = time_entries.client_id
expenses.id = time_entries.external_reference_id
expenses.invoice_id = time_entries.invoice_id
expenses.project_id = time_entries.project_id
user_projects
expenses.client_id = user_projects.client_id
expenses.project_id = user_projects.project_id
expense_categories
expenses.expense_category_id = expense_categories.id
time_entry_external_reference
expenses.id = time_entry_external_reference.external_reference_id
invoice_line_items
expenses.invoice_id = invoice_line_items.invoice_id
expenses.project_id = invoice_line_items.project_id
invoice_messages
expenses.invoice_id = invoice_messages.invoice_id
invoice_payments
expenses.invoice_id = invoice_payments.invoice_id
project_tasks
expenses.project_id = project_tasks.project_id
project_users
expenses.project_id = project_users.project_id

billable

BOOLEAN

client_id

INTEGER

created_at

DATE-TIME

expense_category_id

INTEGER

id

INTEGER

invoice_id

INTEGER

is_billed

BOOLEAN

is_closed

BOOLEAN

is_locked

BOOLEAN

locked_reason

STRING

notes

STRING

project_id

INTEGER

receipt_content_type

STRING

receipt_file_name

STRING

receipt_file_size

INTEGER

receipt_url

STRING

spent_date

DATE-TIME

total_cost

NUMBER

units

NUMBER

updated_at

DATE-TIME

user_assignment_id

INTEGER

user_id

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

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

invoice_item_categories schema on GitHub

Harvest API method

created_at

DATE-TIME

id

INTEGER

name

STRING

updated_at

DATE-TIME

use_as_expense

BOOLEAN

use_as_service

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

Key-based Incremental

Primary Key

id

Useful links

Harvest documentation

invoice_line_items schema on GitHub

Harvest API method

Join invoice_line_items with on
expenses
invoice_line_items.invoice_id = expenses.invoice_id
invoice_line_items.project_id = expenses.project_id
invoice_messages
invoice_line_items.invoice_id = invoice_messages.invoice_id
invoice_payments
invoice_line_items.invoice_id = invoice_payments.invoice_id
invoices
invoice_line_items.invoice_id = invoices.id
time_entries
invoice_line_items.invoice_id = time_entries.invoice_id
invoice_line_items.project_id = time_entries.project_id
project_tasks
invoice_line_items.project_id = project_tasks.project_id
project_users
invoice_line_items.project_id = project_users.project_id
projects
invoice_line_items.project_id = projects.id
user_projects
invoice_line_items.project_id = user_projects.project_id

amount

NUMBER

description

STRING

id

INTEGER

invoice_id

INTEGER

kind

STRING

project_id

INTEGER

quantity

INTEGER

taxed

BOOLEAN

taxed2

BOOLEAN

unit_price

NUMBER

invoice_messages

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

invoice_messages schema on GitHub

Harvest API method

Join invoice_messages with on
expenses
invoice_messages.invoice_id = expenses.invoice_id
invoice_line_items
invoice_messages.invoice_id = invoice_line_items.invoice_id
invoice_payments
invoice_messages.invoice_id = invoice_payments.invoice_id
invoices
invoice_messages.invoice_id = invoices.id
time_entries
invoice_messages.invoice_id = time_entries.invoice_id

attach_pdf

BOOLEAN

body

STRING

created_at

DATE-TIME

event_type

STRING

id

INTEGER

include_link_to_client_invoice

BOOLEAN

invoice_id

INTEGER

recipients

ARRAY

email

STRING

name

STRING

reminder

BOOLEAN

send_me_a_copy

BOOLEAN

send_reminder_on

DATE-TIME

sent_by

STRING

sent_by_email

STRING

sent_from

STRING

sent_from_email

STRING

subject

STRING

thank_you

BOOLEAN

updated_at

DATE-TIME

invoice_payments

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

invoice_payments schema on GitHub

Harvest API method

Join invoice_payments with on
expenses
invoice_payments.invoice_id = expenses.invoice_id
invoice_line_items
invoice_payments.invoice_id = invoice_line_items.invoice_id
invoice_messages
invoice_payments.invoice_id = invoice_messages.invoice_id
invoices
invoice_payments.invoice_id = invoices.id
time_entries
invoice_payments.invoice_id = time_entries.invoice_id

amount

NUMBER

created_at

DATE-TIME

id

INTEGER

invoice_id

INTEGER

notes

STRING

paid_at

DATE-TIME

paid_date

DATE-TIME

payment_gateway_id

INTEGER

payment_gateway_name

INTEGER

recorded_by

STRING

recorded_by_email

STRING

transaction_id

STRING

updated_at

DATE-TIME

invoices

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

invoices schema on GitHub

Harvest API method

Join invoices with on
clients
invoices.client_id = clients.id
contacts
invoices.client_id = contacts.client_id
estimates
invoices.client_id = estimates.client_id
invoices.estimate_id = estimates.id
invoices.creator_id = estimates.creator_id
expenses
invoices.client_id = expenses.client_id
invoices.id = expenses.invoice_id
projects
invoices.client_id = projects.client_id
time_entries
invoices.client_id = time_entries.client_id
invoices.id = time_entries.invoice_id
invoices.creator_id = time_entries.user_id
user_projects
invoices.client_id = user_projects.client_id
invoices.creator_id = user_projects.user_id
estimate_line_items
invoices.estimate_id = estimate_line_items.estimate_id
estimate_messages
invoices.estimate_id = estimate_messages.estimate_id
invoice_line_items
invoices.id = invoice_line_items.invoice_id
invoice_messages
invoices.id = invoice_messages.invoice_id
invoice_payments
invoices.id = invoice_payments.invoice_id
users
invoices.creator_id = users.id
user_project_tasks
invoices.creator_id = user_project_tasks.user_id
user_roles
invoices.creator_id = user_roles.user_id

amount

NUMBER

client_id

INTEGER

client_key

STRING

closed_at

DATE-TIME

created_at

DATE-TIME

creator_id

INTEGER

currency

STRING

discount

STRING, NUMBER

discount_amount

NUMBER

due_amount

NUMBER

due_date

DATE-TIME

estimate_id

INTEGER

id

INTEGER

issue_date

DATE-TIME

notes

STRING

number

STRING

paid_at

DATE-TIME

paid_date

DATE-TIME

payment_term

STRING

period_end

DATE-TIME

period_start

DATE-TIME

purchase_order

STRING

retainer_id

INTEGER

sent_at

DATE-TIME

state

STRING

subject

STRING

tax

STRING, NUMBER

tax2

STRING, NUMBER

tax2_amount

NUMBER

tax_amount

NUMBER

updated_at

DATE-TIME

project_tasks

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

project_tasks schema on GitHub

Harvest API method

Join project_tasks with on
expenses
project_tasks.project_id = expenses.project_id
invoice_line_items
project_tasks.project_id = invoice_line_items.project_id
project_users
project_tasks.project_id = project_users.project_id
projects
project_tasks.project_id = projects.id
time_entries
project_tasks.project_id = time_entries.project_id
user_projects
project_tasks.project_id = user_projects.project_id
user_project_tasks
project_tasks.id = user_project_tasks.project_task_id

billable

BOOLEAN

budget

NUMBER

created_at

DATE-TIME

hourly_rate

NUMBER

id

INTEGER

is_active

BOOLEAN

project_id

INTEGER

task_id

INTEGER

updated_at

DATE-TIME

project_users

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

project_users schema on GitHub

Harvest API method

Join project_users with on
expenses
project_users.project_id = expenses.project_id
invoice_line_items
project_users.project_id = invoice_line_items.project_id
project_tasks
project_users.project_id = project_tasks.project_id
projects
project_users.project_id = projects.id
time_entries
project_users.project_id = time_entries.project_id
user_projects
project_users.project_id = user_projects.project_id

budget

NUMBER

created_at

DATE-TIME

hourly_rate

NUMBER

id

INTEGER

is_active

BOOLEAN

is_project_manager

BOOLEAN

project_id

INTEGER

updated_at

DATE-TIME

user_id

INTEGER

projects

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

projects schema on GitHub

Harvest API method

Join projects with on
clients
projects.client_id = clients.id
contacts
projects.client_id = contacts.client_id
estimates
projects.client_id = estimates.client_id
expenses
projects.client_id = expenses.client_id
projects.id = expenses.project_id
invoices
projects.client_id = invoices.client_id
time_entries
projects.client_id = time_entries.client_id
projects.id = time_entries.project_id
user_projects
projects.client_id = user_projects.client_id
projects.id = user_projects.project_id
invoice_line_items
projects.id = invoice_line_items.project_id
project_tasks
projects.id = project_tasks.project_id
project_users
projects.id = project_users.project_id

bill_by

STRING

budget

NUMBER

budget_by

STRING

budget_is_monthly

BOOLEAN

client_id

INTEGER

code

STRING

cost_budget

NUMBER

cost_budget_include_expenses

BOOLEAN

created_at

DATE-TIME

ends_on

STRING

fee

NUMBER

hourly_rate

NUMBER

id

INTEGER

is_active

BOOLEAN

is_billable

BOOLEAN

is_fixed_fee

BOOLEAN

name

STRING

notes

STRING

notify_when_over_budget

BOOLEAN

over_budget_notification_date

DATE-TIME

over_budget_notification_percentage

INTEGER

show_budget_to_all

BOOLEAN

starts_on

STRING

updated_at

DATE-TIME

roles

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

roles schema on GitHub

Harvest API method

Join roles with on
user_roles
roles.id = user_roles.role_id

created_at

DATE-TIME

id

INTEGER

name

STRING

updated_at

DATE-TIME

tasks

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

tasks schema on GitHub

Harvest API method

Join tasks with on
time_entries
tasks.id = time_entries.task_id

billable_by_default

BOOLEAN

created_at

DATE-TIME

default_hourly_rate

NUMBER

id

INTEGER

is_active

BOOLEAN

is_default

BOOLEAN

name

STRING

updated_at

DATE-TIME

time_entries

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

time_entries schema on GitHub

Harvest API method

Join time_entries with on
clients
time_entries.client_id = clients.id
contacts
time_entries.client_id = contacts.client_id
estimates
time_entries.client_id = estimates.client_id
time_entries.user_id = estimates.creator_id
expenses
time_entries.client_id = expenses.client_id
time_entries.external_reference_id = expenses.id
time_entries.invoice_id = expenses.invoice_id
time_entries.project_id = expenses.project_id
invoices
time_entries.client_id = invoices.client_id
time_entries.invoice_id = invoices.id
time_entries.user_id = invoices.creator_id
projects
time_entries.client_id = projects.client_id
time_entries.project_id = projects.id
user_projects
time_entries.client_id = user_projects.client_id
time_entries.project_id = user_projects.project_id
time_entries.user_id = user_projects.user_id
time_entry_external_reference
time_entries.external_reference_id = time_entry_external_reference.external_reference_id
time_entries.id = time_entry_external_reference.time_entry_id
invoice_line_items
time_entries.invoice_id = invoice_line_items.invoice_id
time_entries.project_id = invoice_line_items.project_id
invoice_messages
time_entries.invoice_id = invoice_messages.invoice_id
invoice_payments
time_entries.invoice_id = invoice_payments.invoice_id
project_tasks
time_entries.project_id = project_tasks.project_id
project_users
time_entries.project_id = project_users.project_id
tasks
time_entries.task_id = tasks.id
users
time_entries.user_id = users.id
user_project_tasks
time_entries.user_id = user_project_tasks.user_id
user_roles
time_entries.user_id = user_roles.user_id

billable

BOOLEAN

billable_rate

NUMBER

budgeted

NUMBER

client_id

INTEGER

cost_rate

NUMBER

created_at

DATE-TIME

ended_time

TIME

external_reference_id

STRING

hours

NUMBER

id

INTEGER

invoice_id

INTEGER

is_billed

BOOLEAN

is_closed

BOOLEAN

is_locked

BOOLEAN

is_running

BOOLEAN

locked_reason

STRING

notes

STRING

project_id

INTEGER

spent_date

DATE-TIME

started_time

TIME

task_assignment_id

INTEGER

task_id

INTEGER

timer_started_at

DATE-TIME

updated_at

DATE-TIME

user_assignment_id

INTEGER

user_id

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

Key-based Incremental

Primary Keys

time_entry_id

external_reference_id

Useful links

Harvest documentation

time_entry_external_reference schema on GitHub

Harvest API method

Join time_entry_external_reference with on
expenses
time_entry_external_reference.external_reference_id = expenses.id
time_entries
time_entry_external_reference.external_reference_id = time_entries.external_reference_id
time_entry_external_reference.time_entry_id = time_entries.id

external_reference_id

STRING

time_entry_id

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

Key-based Incremental

Primary Keys

user_id

project_task_id

Useful links

Harvest documentation

user_project_tasks schema on GitHub

Join user_project_tasks with on
project_tasks
user_project_tasks.project_task_id = project_tasks.id
estimates
user_project_tasks.user_id = estimates.creator_id
invoices
user_project_tasks.user_id = invoices.creator_id
time_entries
user_project_tasks.user_id = time_entries.user_id
users
user_project_tasks.user_id = users.id
user_projects
user_project_tasks.user_id = user_projects.user_id
user_roles
user_project_tasks.user_id = user_roles.user_id

project_task_id

INTEGER

user_id

INTEGER

user_projects

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

user_projects schema on GitHub

Harvest API method

Join user_projects with on
clients
user_projects.client_id = clients.id
contacts
user_projects.client_id = contacts.client_id
estimates
user_projects.client_id = estimates.client_id
user_projects.user_id = estimates.creator_id
expenses
user_projects.client_id = expenses.client_id
user_projects.project_id = expenses.project_id
invoices
user_projects.client_id = invoices.client_id
user_projects.user_id = invoices.creator_id
projects
user_projects.client_id = projects.client_id
user_projects.project_id = projects.id
time_entries
user_projects.client_id = time_entries.client_id
user_projects.project_id = time_entries.project_id
user_projects.user_id = time_entries.user_id
invoice_line_items
user_projects.project_id = invoice_line_items.project_id
project_tasks
user_projects.project_id = project_tasks.project_id
project_users
user_projects.project_id = project_users.project_id
users
user_projects.user_id = users.id
user_project_tasks
user_projects.user_id = user_project_tasks.user_id
user_roles
user_projects.user_id = user_roles.user_id

budget

NUMBER

client_id

INTEGER

created_at

DATE-TIME

hourly_rate

NUMBER

id

INTEGER

is_active

BOOLEAN

is_project_manager

BOOLEAN

project_id

INTEGER

updated_at

DATE-TIME

user_id

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

Key-based Incremental

Primary Keys

user_id

role_id

Useful links

Harvest documentation

user_roles schema on GitHub

Join user_roles with on
roles
user_roles.role_id = roles.id
estimates
user_roles.user_id = estimates.creator_id
invoices
user_roles.user_id = invoices.creator_id
time_entries
user_roles.user_id = time_entries.user_id
users
user_roles.user_id = users.id
user_project_tasks
user_roles.user_id = user_project_tasks.user_id
user_projects
user_roles.user_id = user_projects.user_id

role_id

INTEGER

user_id

INTEGER

users

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

Replication Method

Key-based Incremental

Primary Key

id

Replication Key

updated_at

Useful links

Harvest documentation

users schema on GitHub

Harvest API method

Join users with on
estimates
users.id = estimates.creator_id
invoices
users.id = invoices.creator_id
time_entries
users.id = time_entries.user_id
user_project_tasks
users.id = user_project_tasks.user_id
user_projects
users.id = user_projects.user_id
user_roles
users.id = user_roles.user_id

avatar_url

STRING

can_create_invoices

BOOLEAN

can_create_projects

BOOLEAN

can_see_rates

BOOLEAN

cost_rate

NUMBER

created_at

DATE-TIME

default_hourly_rate

NUMBER

email

STRING

first_name

STRING

has_access_to_all_future_projects

BOOLEAN

id

INTEGER

is_active

BOOLEAN

is_admin

BOOLEAN

is_contractor

BOOLEAN

is_project_manager

BOOLEAN

last_name

STRING

telephone

STRING

timezone

STRING

updated_at

DATE-TIME

weekly_capacity

INTEGER


Questions? Feedback?

Did this article help? If you have questions or feedback, feel free to submit a pull request with your suggestions, open an issue on GitHub, or reach out to us.