This integration is powered by Singer's Harvest tap. For support, visit the GitHub repo or join the Singer Slack.
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 | |
Stitch plan |
Standard |
API availability |
Available |
Singer GitHub repository | |||
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
- Sign into your Stitch account.
-
On the Stitch Dashboard page, click the Add Integration button.
-
Click the Harvest icon.
-
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. - Enter your Harvest account name in the Account Name field. For example: if your Harvest account URL is
stitch.harvestapp.com
, you’d enterstitch
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.
- Enter your Harvest credentials and click Create Integration.
- A screen asking for authorization to Harvest will display. Note that Stitch will only ever read your data.
- Click Connect.
- After the authorization process successfully completes, you’ll be redirected back to Stitch.
- 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.
Initial replication jobs with Anchor Scheduling
If using Anchor Scheduling, an initial replication job may not kick off immediately. This depends on the selected Replication Frequency and Anchor Time. Refer to the Anchor Scheduling documentation for more information.
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
Schemas and versioning
Schemas and naming conventions can change from version to version, so we recommend verifying your integration’s version before continuing.
The schema and info displayed below is for version 2 of this integration.
This is the latest version of the Harvest integration.
Table and column names in your destination
Depending on your destination, table and column names may not appear as they are outlined below.
For example: Object names are lowercased in Redshift (CusTomERs
> customers
), while case is maintained in PostgreSQL destinations (CusTomERs
> CusTomERs
). Refer to the Loading Guide for your destination for more info.
clients
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The clients
table contains info about the clients in your Harvest account.
id
Unique ID for the client. Reference: |
updated_at
The last time the client was updated. |
name
The client’s name. Ex: |
is_active
Indicates if the client is active or archived. |
address
The physical address for the client. |
currency
The currency denomination used by the client. |
created_at
The time the client was updated. |
contacts
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The contacts
table contains info about the client contacts in your Harvest account.
id
The contact ID. |
updated_at
The last time the contact was updated. |
client_id
The contact’s client id. Reference: |
title
The title of the contact. |
first_name
The contact’s first name. |
last_name
The contact’s last name. |
email
The contact’s email address. |
phone_office
The contact’s office phone number. |
phone_mobile
The contact’s mobile phone number. |
fax
The contact’s fax number. |
created_at
The time the contact was created. |
estimates
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The estimates
table contains info about the estimates in your Harvest account.
id
The estimate ID. Reference: |
updated_at
The time the estimate was last updated. |
client_id
The ID of the client the estimate is associated with. Reference: |
creator_id
The ID of the user that created the estimate. Reference: |
client_key
A string used to build a URL to the public web invoice for the client. |
number
The estimate number. |
purchase_order
The purchase order number. |
amount
The total amount of the estimate, including discounts and taxes. |
tax
The tax percentage applied to the subtotal, including line items and discounts. |
tax_amount
The first amount of tax included, calculated from |
tax2
The percentage applied to the subtotal, including line items and discounts. |
tax2_amount
The second amount of tax included, calculated from |
discount
The percentage to be subtracted from the subtotal. |
discount_amount
The discount amount, calulated from |
subject
The estimate subject. |
notes
Any additional notes included on the estimate. |
currency
The currency code associated with the estimate. |
state
The current state of the estimate. Possible values are:
|
issue_date
The date the estimate was issued. |
sent_at
The time the estimate was sent. |
accepted_at
The time the estimate was accepted. |
declined_at
The time the estimate was declined. |
created_at
The time the estimate was created. |
estimate_item_categories
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The estimate_item_categories
table contains info about the estimate item categories in your Harvest account.
id
The estimate item category ID. |
updated_at
Date and time the estimate item category was last updated. |
name
The name of the estimate item category. |
created_at
Date and time the estimate item category was created. |
estimate_line_items
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
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.
id
The estimate line item ID. |
estimate_id
The ID of the estimate the line item is a part of. Reference: |
kind
The name of the estimate item category associated with the line item. |
description
The description of the item. |
quantity
The unit quantity of the item. |
unit_price
The individual price per unit. |
amount
The line item subtotal, calculated as |
taxed
If |
taxed2
If |
estimate_messages
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The estimate_messages
table contains info about the messages associated with estimates.
id
The estimate message ID. |
||
updated_at
The time the message was last updated. |
||
sent_by
The name of the user that created the message. |
||
sent_by_email
The email of the user that created the message. |
||
sent_from
The name of the user that the message was sent from. |
||
sent_from_email
The email of the user that the message was sent from. |
||
subject
The message subject. |
||
body
The message body. |
||
send_me_a_copy
If |
||
event_type
The type of estimate event that occurred with the message. Possible values are:
|
||
created_at
The time the message was created. |
||
estimate_id
The ID of the estimate the message is associated. Reference: |
||
recipients
Details about the recipients of the message.
|
expenses
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The expenses
table contains info about the expenses recorded in your Harvest account.
id
The expense ID. |
updated_at
The last time the expense was updated. |
client_id
The ID of the client associated with the expense. Reference: |
project_id
The ID of the project associated with the expense. Reference: |
expense_category_id
The ID of the category associated with the expense. Reference: |
user_id
The ID of the user that recorded the expense. Reference: |
user_assignment_id
The user assignment ID. |
receipt_url
The URL of the receipt associated with the expense. |
receipt_file_name
The file name of the receipt. |
receipt_file_size
The size of the receipt file. |
receipt_content_type
The content type of the receipt file. |
invoice_id
The ID of the invoice associated with the expense. Reference: |
notes
Notes used to describe the expense. |
billable
If |
is_closed
If |
is_locked
If |
is_billed
If |
locked_reason
The explanation for why the expense has been locked. |
spent_date
The date the expense occurred. |
created_at
The time the expense was created. |
total_cost
The total cost of the expense. |
units
The number of units contained in the expense, if calculated by unit price. Ex: |
expense_categories
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The expense_categories
table contains info about the expense categories in your Harvest account.
id
The expense category ID. Reference: |
updated_at
The last time the expense category was updated. |
name
The name of the expense category. |
unit_name
The name of the unit associated with the expense category. This column will only contain values for expense categories based on unit values. |
unit_price
The price of the unit associated with the expense category. This column will only contain values for expense categories based on unit values. |
is_active
If |
created_at
The time the expense category was created. |
external_references
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
Official docs : |
The external_references
table contains info about external references. External references are references to external services where time is tracked.
Note: This table is updated based on new and updated time_entries
. This means that when an time entry is updated, this table will also be updated.
id
The ID of the external reference. Reference: |
task_id
The ID of the task associated with the reference. Reference: |
group_id
The ID of the group associated with the reference. |
permalink
The permalink value associated with the reference. |
service
The name of the service associated with the reference. |
service_icon_url
The URL of the associated service’s icon. |
invoices
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The invoices
table contains info about the invoices in your Harvest account.
id
The invoice ID. Reference: |
updated_at
The last time the invoice was updated. |
amount
The total amount of the invoice. |
client_id
The ID of the client associated with the invoice. Reference: |
client_key
A string used to build a URL to the public web invoice for the associated client. |
closed_at
The date and time the invoice was closed. |
creator_id
The ID of the user who created the invoice. Reference: |
created_at
The time the invoice was created. |
currency
The currency denomination of the invoice. |
discount
If applicable, the percentage to be subtracted from the subtotal. |
discount_amount
If applicable, the amount calculated from |
due_amount
The due amount of the invoice. |
due_date
The date that payment of the invoice is due by. |
estimate_id
If applicable, the ID of the estimate associated with the invoice. Reference: |
issue_date
The date the invoice was issued. |
notes
Any notes entered about the invoice. |
number
The invoice number. If no value is set, Harvest will automatically generate a value. |
paid_at
The date and time the invoice was paid. |
paid_date
The date the invoice was paid. |
payment_term
The timeframe in which the invoice should be paid. Possible values are:
|
period_start
The start date of the period associated with the invoice. |
period_end
The end date of the period associated with the invoice. |
purchase_order
If applicable, the purchase order associated with the invoice. |
retainer_id
If applicable, the ID of the retainer associated with the invoice. |
sent_at
The date the invoice was sent. |
state
The state of the invoice. Possible values:
|
subject
The subject of the invoice. |
tax
The tax percentage applied to the subtotal, including line items and discounts. |
tax_amount
The first amount of tax included, calculated from |
tax2
The tax percentage applied to the subtotal, including line items and discounts. |
tax2_amount
The amount calculated from |
invoice_item_categories
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
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.
id
The ID of the invoice item category. |
updated_at
The last time the invoice item category was updated. |
name
The name of the invoice item category. |
created_at
The time the invoice item category was created. |
use_as_service
Indicates if the invoice item category is used as a service. |
use_as_expense
Indicates if the invoice item category is used as an expense. |
invoice_line_items
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
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.
id
The invoice line item ID. |
amount
The line item subtotal, calculated as |
description
The description of the line item. |
invoice_id
The ID of the invoice containing the line item. Reference: |
kind
The name of the invoice item category associated with the item. |
project_id
The ID of the project associated with the item. Reference: |
quantity
The unit quantity of the item. |
taxed
If |
taxed2
If |
unit_price
The individual price per unit. |
invoice_messages
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The invoice_messages
table contains info about invoice messages, or emails sent to clients about invoices.
id
The ID of the invoice message. |
||
updated_at
The time the invoice message was last updated. |
||
attach_pdf
If |
||
body
The body of the invoice message. |
||
created_at
The time the invoice message was created. |
||
event_type
The type of event that occurred with the message. Possible values are:
|
||
include_link_to_client_invoice
If |
||
invoice_id
The ID of the invoice associated with the invoice message. Reference: |
||
recipients
Details about the recipients of the message.
|
||
reminder
If |
||
sent_by
The name of the user who created the invoice message. |
||
sent_by_email
The email address of the user who created the invoice message. |
||
sent_from
The name of the user who sent the invoice message. |
||
sent_from_email
The email address the invoice message was sent from. |
||
send_me_a_copy
If |
||
send_reminder_on
The date that a reminder should be sent. |
||
subject
The subject of the invoice message. |
||
thank_you
Indicates if this is a |
invoice_payments
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The invoice_payments
table contains info about the payments applied to invoices in your Harvest account.
id
The invoice payment ID. |
updated_at
The last time the invoice payment was updated. |
amount
The amount of the invoice payment. |
created_at
The time the invoice payment was created. |
invoice_id
The ID of the invoice associated with the payment. Reference: |
notes
Any notes entered about the invoice payment. |
paid_at
The date and time the invoice payment was made. |
paid_date
The date the payment was made. |
payment_gateway_id
If paid via the payment gateway, this field will contain the ID of the payment gateway used to make the invoice payment. |
payment_gateway_name
If paid via the payment gateway, this field will contain the name of the payment gateway used to make the invoice payment. |
recorded_by
The name of the user who recorded the invoice payment. |
recorded_by_email
The email address of the user who recorded the payment. |
transaction_id
If paid via PayPal, this field will contain the PayPal transaction ID associated with the invoice payment. Otherwise, this will contain the card authorization. |
projects
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The projects
table contains info about the projects in your Harvest account.
id
The project ID. Reference: |
updated_at
The time the project was last updated. |
bill_by
The method by which the project is invoiced. |
budget
The budget for the project. |
budget_by
The method by which the project is budgeted. |
budget_is_monthly
If |
client_id
The ID of the client associated with the project. Reference: |
code
The code applied to the project. |
cost_budget
The budget value for Total Project Fees projects, or projects that have a |
cost_budget_include_expenses
Indicates if the budgets of Total Project Fees projects should include tracked expenses. |
created_at
The time the project was created. |
fee
The amount to be invoiced for the project. Only used by fixed-fee projects. |
ends_on
The end date of the project. |
hourly_rate
The rate for projects that are billed by Project Hourly Rate. |
is_active
If |
is_billable
Indicates if the project is billable. |
is_fixed_fee
If |
name
The name of the project. |
notes
Any notes entered about the project. |
notify_when_over_budget
Indicates if notification emails should be sent when a project reaches the budget threshold set in |
over_budget_notification_percentage
The percentage value to trigger over budget email alerts. |
over_budget_notification_date
The date of the last over budget notification. This will be |
show_budget_to_all
Indicates if the project budget should be shown to all employees. Note: This doesn’t apply to Total Fee Projects, or projects that have a |
starts_on
The start date of the project. |
project_tasks
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The project_tasks
table contains info about the tasks assigned to projects.
id
The project task ID. Reference: |
updated_at
The last time the project task was updated. |
billable
If |
budget
The budget associated with the project task. |
created_at
The time the project task was created. |
hourly_rate
The hourly rate of the project task. |
is_active
If |
project_id
The ID of the project the task is associated with. Reference: |
task_id
The task ID. Reference: |
project_users
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The project_users
table contains info about the users assigned to projects.
id
The project user ID. Reference: |
updated_at
The last time the project user was updated. |
budget
If applicable, the budget of the project user. |
created_at
The time the project user was created. |
hourly_rate
The hourly rate of the project user. |
is_active
If |
is_project_manager
If |
project_id
The ID of the project the user is assigned to. Reference: |
user_id
The user ID of the project user. Reference: |
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The roles
table contains info about the roles in your Harvest account.
id
The role ID. Reference: |
updated_at
The date and time the role was last updated. |
created_at
The date and time the role was created. |
name
The name of the role. |
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The tasks
table contains info about the tasks in your Harvest account.
id
The task ID. Reference: |
updated_at
The date and time the task was last updated. |
billable_by_default
If |
created_at
The date and time the task was created. |
default_hourly_rate
The hourly rate to use for the task when it is added to a project. |
is_active
If |
is_default
If |
name
The name of the task. |
time_entries
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The time_entries
table contains info about the time entries in your Harvest account.
id
The time entry ID. Reference: |
updated_at
The time the time entry was last updated. |
billable
If |
billable_rate
The billable rate for the time entry. |
budgeted
If |
client_id
he ID of the client associated with the time entry. Reference: |
cost_rate
The cost rate for the time entry. |
created_at
The time the time entry was created. |
ended_time
The time the time entry was ended, if tracking by start/end times. |
external_reference_id
The ID of the associated external reference, if any. Reference: |
hours
The number of hours tracked in the time entry. |
is_billed
If |
is_closed
If |
is_locked
If |
is_running
If |
invoice_id
The ID of the invoice associated with the time entry. Reference: |
locked_reason
The reason why the time entry is locked. |
notes
Notes entered about the time entry. |
project_id
The ID of the project associated with the time entry. Reference: |
spent_date
The date of the time entry. |
started_time
The time the time entry was started, if tracking by start/end times. |
task_id
The ID of the task associated with the time entry. Reference: |
task_assignment_id
The ID of the task assignment associated with the time entry. |
timer_started_at
The date and time the timer was started, if tracked by duration. |
user_id
The ID of the user associated with the time entry. Reference: |
user_assignment_id
The ID of the user assignment associated with the time entry. |
time_entry_external_reference
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
time_entry_id : external_reference_id |
API endpoint : |
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.
time_entry_id
The time entry ID. Reference: |
external_reference_id
The external reference ID. Reference: |
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
API endpoint : |
The users
table contains info about the users in your Harvest account.
id
The user ID. Reference: |
updated_at
The date and time when the user was last updated. |
avatar_url
The URL to the user’s avatar image. |
can_see_rates
If |
can_create_projects
If |
can_create_invoices
If |
cost_rate
The cost rate to use for this user when calculating a project’s cost versus billable amount. |
created_at
The date and time when the user was created. |
default_hourly_rate
The billable rate to use for this user when they’re added to a project. |
email
The email address of the user. |
first_name
The first name of the user. |
has_access_to_all_future_projects
If |
is_contractor
If |
is_active
If |
is_admin
If |
is_project_manager
If |
last_name
The last name of the user. |
telephone
The telephone number of the user. |
timezone
The user’s timezone. |
weekly_capacity
The number of hours the user is available to work, in seconds. For example: If a user is available for 35 hours, the value of this field will be |
user_projects
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
id |
Official docs : |
The user_projects
table contains info about the project assignments users are assigned to.
id
The project assignment ID. |
updated_at
The date and time when the project assignment was last updated. |
budget
The budget used when the project’s |
client_id
The ID of the associated client. Reference: |
created_at
The date and time when the project assignment was created. |
is_active
If |
is_project_manager
If |
hourly_rate
The rate used when the project’s |
project_id
The ID of the associated project. Reference: |
user_id
The ID of the user associated with the project assignment. Reference: |
user_project_tasks
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
user_id : project_task_id |
Official docs : |
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.
user_id
The user ID. Reference: |
project_task_id
The project task ID. Reference: |
user_roles
Replication Method : |
Key-based Incremental |
Replication Key |
updated_at |
Primary Key |
user_id : role_id |
Official docs : |
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.
user_id
The user ID. Reference: |
role_id
The role ID. Reference: |
Related | Troubleshooting |
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.