Skip to main content

Harvest

Harvest is a comprehensive time tracking and project management platform that helps teams track time, manage projects, and analyze productivity through intuitive tools for time logging, expense tracking, and detailed reporting, enabling better project planning and resource allocation.

Harvest icon

Power end-to-end data operations for your Harvest API with Nexla. Our bi-directional Harvest connector is purpose-built for Harvest, making it simple to ingest data, sync it across systems, and deliver it anywhere — all with no coding required. Nexla turns API-sourced data into ready-to-use, reusable data products and makes it easy to send data to Harvest or any other destination. With comprehensive monitoring, lineage tracking, and access controls, Nexla keeps your Harvest workflows fast, secure, and fully governed.

Features

Type: API

SourceDestination

  • Seamless API Integration: Connect to any endpoint as source or destination without coding, with automatic data product creation
  • Visual Composition & Chaining: Build complex integrations using visual templates, chain API calls, and compose workflows with data validation and filtering
  • API Proxy: Expose curated slices of your data securely with a secure and customizable API proxy that validates and transforms data on the fly
  • Request optimization with intelligent batching, retry, and caching to minimize API calls and costs

Prerequisites

Before creating a Harvest credential, you need to obtain a Personal Access Token and Account ID from your Harvest account. The Personal Access Token and Account ID are required to authenticate with the Harvest API.

To obtain your Personal Access Token and Account ID, you need to have a Harvest account. Once you have access to your account, you can create a Personal Access Token from your Developer dashboard. The Account ID can also be found in your Developer dashboard. The Personal Access Token is sent in the Authorization header with the Bearer prefix, and the Account ID is sent in the Harvest-Account-ID header for all API requests to the Harvest API. For detailed information about Personal Access Token setup and authentication, refer to the Harvest API authentication documentation.

Authenticate

Credentials required

Personal Access Token is used to access the API by providing token in the Authorization header along with Harvest Account ID.

FieldRequiredSecretDescription
Harvest Account IDYesYesAccount ID for the Harvest application from your Developer dashboard.
Harvest Personal Access TokenYesYesAccess Token for the Harvest application from your Developer dashboard.

Create a credential in Nexla

  1. After selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.

New Credential Overlay – Harvest

HarvestCred.png
  1. Enter a name for the credential in the Credential Name field and a short, meaningful description in the Credential Description field.

  2. Enter your Harvest Account ID in the Harvest Account ID field. This is the Account ID you obtained from your Harvest Developer dashboard. The Account ID is sent in the Harvest-Account-ID header for all API requests to the Harvest API.

    Your Harvest Account ID can be found in your Developer dashboard. The Account ID identifies your Harvest account and is required for all API requests. The Account ID is sent in the Harvest-Account-ID header for all API requests to the Harvest API. For detailed information about finding your Account ID, see the Harvest API authentication documentation.

  3. Enter your Harvest Personal Access Token in the Harvest Personal Access Token field. This is the Personal Access Token you created from your Harvest Developer dashboard. The Personal Access Token is sent in the Authorization header with the Bearer prefix for all API requests to the Harvest API.

    Keep your Personal Access Token secure and do not share it publicly. The Personal Access Token provides access to your Harvest account data and should be treated as sensitive information. You can create and manage Personal Access Tokens from your Harvest Developer dashboard. The Personal Access Token is sent in the Authorization header with the Bearer prefix for all API requests to the Harvest API. For detailed information about creating and managing Personal Access Tokens, see the Harvest API authentication documentation.

  4. Click the Save button at the bottom of the overlay. The newly added credential will now appear in a tile on the Authenticate screen during data source/destination creation.

Use as a data source

To create a new data flow, navigate to the Integrate section, and click the New Data Flow button. Select the Harvest connector tile, then select the credential that will be used to connect to the Harvest account, and click Next; or, create a new Harvest credential for use in this flow.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure data sources to ingest data from common Harvest endpoints. Select the endpoint from which this source will fetch data from the Endpoint pulldown menu. Available endpoint templates are listed in the expandable boxes below. Click on an endpoint to see more information about it and how to configure your data source for this endpoint.

Fetch all Records of a Resource

Fetch all records of any resource. Use the advanced tab for fetching a filtered list of records.

  • Select or enter the resource type you want to fetch from the Resource Type field. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. The default value is projects if not specified. The resource type determines which type of data will be retrieved from your Harvest account.
  • The endpoint uses GET requests to https://api.harvestapp.com/api/v2/{resource_type} where {resource_type} is the Resource Type you provide. The endpoint URL is automatically constructed based on the Harvest API base URL and the resource type.
  • The endpoint uses URL-based pagination (iteration.type: paging.next.url) through the links.next mechanism. The response data path is $.{resource_type}[*], which extracts all items from the resource type array in the API response.
  • When a response includes a links.next value, Nexla automatically uses it as the URL for the subsequent request to fetch the next page of results until all records have been retrieved.

This endpoint retrieves all records of the specified resource type from your Harvest account. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. The endpoint supports pagination through the links.next URL, which allows you to retrieve large datasets efficiently. You can use the advanced tab for fetching a filtered list of records with custom query parameters. For detailed information about available resource types and the API response format, see the Harvest API documentation.

Fetch Resource By ID

Fetch individual resource in user account by ID.

  • Select or enter the resource type you want to fetch from the Resource Type field. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. The default value is projects if not specified. The resource type determines which type of data will be retrieved from your Harvest account.
  • Enter the ID of the specific resource you want to fetch in the Resource ID field. This should be the unique identifier for the resource you want to retrieve.
  • The endpoint uses GET requests to https://api.harvestapp.com/api/v2/{resource_type}/{resource_id} where {resource_type} is the Resource Type you provide and {resource_id} is the Resource ID you provide. The endpoint URL is automatically constructed based on the Harvest API base URL, the resource type, and the resource ID.
  • The endpoint does not use pagination (iteration.type: static) and returns a single response. The response data path is $, which extracts the entire root-level object from the API response.

This endpoint retrieves a specific resource of the specified resource type from your Harvest account by its ID. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. You must provide the unique identifier (Resource ID) for the resource you want to retrieve. The endpoint returns a single resource matching the specified resource type and ID. For detailed information about available resource types and the API response format, see the Harvest API documentation.

Once the selected endpoint template has been configured, click the Test button to the right of the endpoint selection menu to retrieve a sample of the data that will be fetched. Sample data will be displayed in the Endpoint Test Result panel on the right, allowing you to verify that the source is configured correctly before saving.

Manual configuration

Harvest data sources can also be manually configured to ingest data from any valid Harvest API endpoint, including endpoints not covered by the pre-built templates, chained API calls, or custom request parameters. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, endpoint URL, date/time and lookup macros, path to data, metadata, and request headers.

Harvest API endpoints typically follow the pattern https://api.harvestapp.com/api/v2/{endpoint_path} and return data in JSON format. The endpoint requires Personal Access Token authentication via the Authorization: Bearer {token} header and Harvest-Account-ID: {account_id} header, which are handled automatically by your credential configuration. For detailed information about Harvest API endpoints and available APIs, see the Harvest API documentation.

Once all of the relevant settings have been configured, click the Create button in the upper right corner of the screen to save and create the new Harvest data source. Nexla will now begin ingesting data from the configured endpoint and will organize any data that it finds into one or more Nexsets.

Use as a destination

Click the + icon on the Nexset that will be sent to the Harvest destination, and select the Send to Destination option from the menu. Select the Harvest connector from the list of available destination connectors, then select the credential that will be used to connect to the Harvest organization, and click Next; or, create a new Harvest credential for use in this flow.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure destinations to send data to common Harvest endpoints. Select the endpoint to which data will be sent from the Endpoint pulldown menu. Then, click on the template in the list below to expand it, and follow the instructions to configure additional endpoint settings.

Create a Resource

Creates a new resource for the client.

  • Select or enter the resource type you want to create from the Resource Type field. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. The default value is projects if not specified. The resource type determines which type of resource will be created in your Harvest account.
  • The endpoint uses POST requests to https://api.harvestapp.com/api/v2/{resource_type} where {resource_type} is the Resource Type you provide. The endpoint URL is automatically constructed based on the Harvest API base URL and the resource type.
  • The endpoint sends data from your Nexset as the request body in JSON format. The request body is automatically formatted according to the schema fields and data mapping you configure. Each record in your Nexset will be sent as a JSON object containing the resource data to create.
  • Batch mode is disabled by default for this endpoint. Each record in your Nexset will be sent as a separate API request to create a resource. If you need to create multiple resources, you can send multiple records, but each will be processed as a separate request.
  • This endpoint does not automatically create a data source to track the responses received from the Harvest API after each call.

The request body must be properly formatted JSON that matches the Harvest API specification for creating resources. The endpoint requires Personal Access Token authentication via the Authorization: Bearer {token} header and Harvest-Account-ID: {account_id} header, which are handled automatically by your credential configuration. The Content-Type: application/json header is automatically included in requests. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. Batch mode is disabled by default, so each record will be sent as a separate request. For detailed information about creating resources, including required fields, field names, and request formats, see the Harvest API documentation.

Delete a resource By Id

Deletes an existing resource by Id from user account.

  • Select or enter the resource type you want to delete from the Resource Type field. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. The default value is projects if not specified. The resource type determines which type of resource will be deleted from your Harvest account.
  • Select the dataset attribute that corresponds to the resource ID you wish to delete from the Resource ID dataset attribute field. This should be the attribute in your Nexset that contains the unique identifier for the resource you want to delete.
  • The endpoint uses DELETE requests to https://api.harvestapp.com/api/v2/{resource_type}/{resource_id} where {resource_type} is the Resource Type you provide and {resource_id} is the Resource ID from the dataset attribute you specify. The endpoint URL is automatically constructed based on the Harvest API base URL, the resource type, and the resource ID from your Nexset data.
  • This endpoint automatically creates a data source to track the responses received from the Harvest API after each deletion call.

The endpoint requires Personal Access Token authentication via the Authorization: Bearer {token} header and Harvest-Account-ID: {account_id} header, which are handled automatically by your credential configuration. The Content-Type: application/json header is automatically included in requests. Available resource types include Projects, Invoices, Expenses, Time entries, and Tasks. You can also add custom resource types if needed. The resource ID is extracted from the dataset attribute you specify, so make sure your Nexset contains the resource ID in the specified attribute. This endpoint automatically creates a data source to track deletion responses. For detailed information about deleting resources, including required fields and request formats, see the Harvest API documentation.

Manual configuration

Harvest destinations can also be manually configured to send data to any valid Harvest API endpoint. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, data format, endpoint URL, request headers, attribute exclusions, record batching, and response webhooks.

Harvest API endpoints typically follow the pattern https://api.harvestapp.com/api/v2/{endpoint_path} and use JSON format for request bodies. The endpoint requires Personal Access Token authentication via the Authorization: Bearer {token} header and Harvest-Account-ID: {account_id} header, which are handled automatically by your credential configuration. For detailed information about Harvest API endpoints and available APIs, see the Harvest API documentation.

Save & activate

Once all endpoint settings have been configured, click the Done button in the upper right corner of the screen to save and create the destination. To send the data to the configured Harvest endpoint, open the destination resource menu, and select Activate.

The Nexset data will not be sent to the Harvest endpoint until the destination is activated. Destinations can be activated immediately or at a later time, providing full control over data movement.