Harvest is a simple online time tracking software, which makes it easy to track billable hours, manage invoices, and streamline expense reports. Here are some things you can expect from the Harvest/Grow integration.
Connecting to Harvest
Before connecting please collect your Harvest Subdomain, Email and Password.
- Click on the Data tab at the top left of the global navigation. You will be brought to your Data Connections.
- Click on the blue Connect button and search for Harvest.
- Click on the Harvest logo.
- In the initial popup window, enter your Harvest Subdomain and click Connect.
- You will see a pop-up asking to login if you're not currently logged in to your Harvest account, then for authorization for Grow to access the data in your Harvest account. Click Authorize App.
- You will see a green confirmation message that the connection has been made.
Using Data Warehouse
Harvest is on the Grow Data Warehouse, which we highly recommend you use. For more information about warehousing your data, visit the Data Warehouse Help Article.
We pull in all the main tables from the Harvest API.
These tables include:
- Expense Categories
- Invoice Item Categories
- Task Assignments
- Time Entries
- User Assignments
Warehousing Your Data
- Starting with the Connections Overview Page, navigate to your Harvest connection and click on it to open the Connection Details page.
- Select the Manage Connection button inside the Connection Details section to open the warehouse table selection flow.
- If your data source isn't already connected, refer to the How to Connect section of this article for more details. If your data source is already connected, you can immediately select which tables of data you want to warehouse.
- Once you have finished selecting the data that you want stored in the Data Warehouse, click the Sync & Store button at the bottom of the Manage Connection page. This will begin the initial population of your warehouse with the tables you defined. Populating your data warehouse for the first time may take a while, even up to several hours.
- While your data is In Queue or Processing, you may continue working within the app.
The default sync interval is 12 hours per table for tables that don't have incremental sync enabled. All Harvest tables have incremental sync available.
When incremental sync is available, the default incremental sync interval is 1 hour, while the default full sync interval is 1 week.
Incremental sync is enabled for all Harvest tables that are warehoused.
To learn more about sync intervals and how to adjust the default settings, please visit the relevant section of the Data Warehouse help article.
Using Direct Query
A direct query connection can be used to pull data into Grow. With abnormal usage, Direct Query can run into API limitations depending on the data source. For this reason, we recommend that you use Grow's Data Warehouse for a more performant, reliable experience.
Below is a list of the reports you can pull from Harvest, along with a description of the fields available with each report.
- Client Contacts: All contacts attached to client accounts, including client ID, name, phone, contact details, company, etc.
- Clients: All clients, including ID, name, active, currency, updated date, created date, statement key, address, delete date, details, etc.
- Expenses: All expense items matching the selected date range, including ID, total cost, units, created date, updated date, project ID, expense category, user, spent date, is closed, notes, billable, company, has receipt, is locked, locked reason, project, client name, etc.
- Expense Categories: All expense categories, including ID, name, unit name, unit price, created date, updated date, and is_active.
- Invoice Categories: All invoice categories, including ID, name, created date, updated date, use as service, and use as expense.
- Invoices: All invoices created within the selected date range, including issue date, created date, due date, amount due, etc.
- People: All persons of interest, including ID, email, created date, company, is admin, name, timezone, is contractor, phone, is active, has access to future projects, default hourly rate, preferred entry method, preferred approval screen, updated date, first timer, is project manager, can see rates, can create invoices, can create projects, cost rate, weekly capacity, etc.
- Projects: All projects, including ID, client name, code, active, bill by, budget, budget by, over budget notification percentage, show budget to all, created date, updated date, start date, end date, is fixed fee, billable, notes, hourly rate, cost budget, cost budget include expenses, etc.
- Tasks: All tasks, including ID, name, billable by default, created date, updated date, is default, and default hourly rate.
- Time Entries: All time entries for the selected date range and client(s), including ID, notes, spent date, hours, user, project, task, created date, is closed, is billed, hours with timer, etc.
- Time Entries by User For Timeframe: All time entries matching the selected date range and user(s), including ID, notes, spent date, hours, user, project, task, created date, adjustment record, is closed, is billed, hours with timer, etc.
- Time Entries No Billable Info: All time entries lacking billable information for the selected client(s), including ID, notes, spent date, hours, user, project, task, created date, adjustment record, is closed, is billed, hours with timer, etc.
- User Assignments: All user assignments for the selected project(s), including assignment ID, user, project, is project manager, hourly rate, budget, created date, updated date, and estimate.
- Task Assignments: All task assignments for the selected project(s), including task assignment ID, project and task ID, deactivated, hourly rate, budget, created date, and updated date.
You shouldn't need to look at these docs very often.
FAQs + Tips and Tricks
The Time Entries endpoint is sometimes slow on direct query.
If you have lots of users and lots of projects, it will be easier if you are very specific in what you want pull in. If you can limit the data to what you are actually planning on visualizing, the data will pull in faster. We suggest using the endpoint Time Entries by User, but you can do according to your needs. If you choose to warehouse your Harvest tables, this issue could be avoided altogether.
Invoices data comes in based on the inserted_at data.
If you use the custom date range and group by any other date (created_at, updated_at, due_at), then you will see some extra dates and will have to use SQL to limit the data further. The best practice is to filter based on the "inserted_at" column.
Harvest Hours Numbers Not Matching
Harvest gives users the option to round up to half hour increments. You can know if you are using rounding if you see this on your Harvest dashboard:
Then to get the numbers to match, we need to round our numbers in Grow. But it is not that simple. If in a given week, if someone works 20 minutes on an account, 10 times. (200 minutes, or 3 Hours and 20 Minutes) then Harvest will round it up to 3 hours and 30 minutes. Harvest does NOT round up each individual 20 minutes to 30 minutes. That would be 300 minutes, very far off from the exact amount. You need to find out what time frame is being rounded (weekly, monthly, invoice period?) and round the data in Grow accordingly.