Harvest

Connect & Ingest data from Harvest

Harvest is a time tracking and invoicing tool used by teams and freelancers to log hours, manage projects, track expenses, and send invoices. The Sling Harvest connector extracts data from the Harvest REST API v2, supporting users, clients, projects, tasks, time entries, invoices, estimates, expenses, roles, and assignments.

circle-check

Setup

The following credentials are accepted:

Secrets:

  • api_key (required) -> Your Harvest Personal Access Token

  • account_id (required) -> Your Harvest Account ID

Inputs (optional):

  • anchor_date -> Starting date for first sync of incremental endpoints (ISO 8601 format, e.g., 2024-01-01T00:00:00Z). Defaults to 1 year ago.

Getting Your Credentials

  1. Click Create New Personal Access Token

  2. Give the token a name (e.g., "Sling Integration")

  3. Copy both the Token and Account ID

circle-exclamation

Using sling conns

Here are examples of setting a connection named HARVEST. We must provide the type=api property:

Environment Variable

See here to learn more about the .env.sling file.

Sling Env File YAML

See here to learn more about the sling env.yaml file.

Replication

Here's an example replication configuration to sync Harvest data to a PostgreSQL database:

Incremental sync for all supported endpoints:

Endpoints

Endpoint
Description
Incremental
Depends On

users

All users in the account

Yes

β€”

clients

All clients

Yes

β€”

contacts

All client contacts

Yes

β€”

projects

All projects

Yes

β€”

tasks

All tasks

Yes

β€”

roles

All roles

Yes

β€”

company

Company settings (single record)

No

β€”

time_entries

All time entries

Yes

β€”

invoices

All invoices

Yes

β€”

invoice_messages

Messages for each invoice

No

invoices

invoice_payments

Payments for each invoice

No

invoices

invoice_item_categories

Invoice line item categories

Yes

β€”

estimates

All estimates

Yes

β€”

estimate_messages

Messages for each estimate

No

estimates

estimate_item_categories

Estimate line item categories

Yes

β€”

expenses

All expenses

Yes

β€”

expense_categories

Expense categories

Yes

β€”

user_assignments

User-to-project assignments

Yes

β€”

task_assignments

Task-to-project assignments

Yes

β€”

user_billable_rates

Billable rates for each user

No

users

user_cost_rates

Cost rates for each user

No

users

The connector uses a queue-based architecture for child endpoints. The invoices endpoint populates invoice IDs into a queue consumed by invoice_messages and invoice_payments. Similarly, estimates feeds estimate_messages, and users feeds user_billable_rates and user_cost_rates.

To discover available endpoints:

Incremental Sync

Most endpoints support incremental sync using the updated_since parameter:

  • First run: Fetches all records updated within the last year (or since anchor_date if provided)

  • Subsequent runs: Only fetches records modified after the last sync timestamp

  • Update key: updated_at

Child endpoints (invoice_messages, invoice_payments, estimate_messages, user_billable_rates, user_cost_rates) and the company endpoint always run in full-refresh mode since they don't support time-based filtering.

Rate Limiting

The Harvest API enforces a rate limit of 100 requests per 15 seconds. The connector automatically:

  • Uses conservative rate limiting (5 requests/second with concurrency of 3)

  • Retries with exponential backoff on 429 (rate limit) responses, up to 5 attempts

Common Use Cases

Sync All Harvest Data

Track Time Entries and Projects Incrementally

Export Invoices and Expenses

If you are facing issues connecting, please reach out to us at [email protected]envelope, on discordarrow-up-right or open a Github Issue herearrow-up-right.

Last updated

Was this helpful?