Harvest
This page contains the setup guide and reference information for the Harvest source connector.
Prerequisites
- A Harvest account.
- Your Harvest Account ID. You can find it in the Developers section of Harvest ID, listed alongside any Personal Access Tokens you create.
- One of the following authentication methods:
- OAuth (recommended for Airbyte Cloud). Airbyte Cloud completes the Harvest OAuth flow for you, so no developer application or tokens are required up front. You authorize the connection from the source setup page.
- Personal Access Token (recommended for Airbyte Open Source). Create a Personal Access Token from the Developers section of Harvest ID. The token has the
allscope and grants access to every Harvest account on your user.
Setup guide
For Airbyte Cloud:
- Log into your Airbyte Cloud.
- Click Sources and then click + New source.
- On the Set up the source page, select Harvest from the Source type dropdown.
- Enter the name for the Harvest connector.
- For Authentication mechanism, select Authenticate via Harvest (OAuth) from the dropdown, then click Authenticate your Harvest account and authorize the requested account.
- Enter your Harvest Account ID.
- For Start Date, enter a UTC date and time in
YYYY-MM-DDTHH:mm:ssZformat. Data created or updated on and after this date is replicated. - Click Set up source.
For Airbyte Open Source:
- Navigate to the Airbyte Open Source dashboard.
- Click Sources and then click + New source.
- On the Set up the source page, select Harvest from the Source type dropdown.
- Enter the name for the Harvest connector.
- For Authentication mechanism, select Authenticate with Personal Access Token and paste your Personal Access Token.
- Enter your Harvest Account ID.
- For Start Date, enter a UTC date and time in
YYYY-MM-DDTHH:mm:ssZformat. Data created or updated on and after this date is replicated. - Click Set up source.
Supported sync modes
The Harvest source connector supports the following sync modes:
Supported streams
- Client Contacts (Incremental)
- Clients (Incremental)
- Company
- Invoice Messages (Incremental)
- Invoice Payments (Incremental)
- Invoices (Incremental)
- Invoice Item Categories (Incremental)
- Estimate Messages (Incremental)
- Estimates (Incremental)
- Estimate Item Categories (Incremental)
- Expenses (Incremental)
- Expense Categories (Incremental)
- Tasks (Incremental)
- Time Entries (Incremental)
- Project User Assignments (Incremental)
- Project Task Assignments (Incremental)
- Projects (Incremental)
- Roles (Incremental)
- Users (Incremental)
- User Billable Rates
- User Cost Rates
- User Project Assignments (Incremental)
- Expense Clients Report (Incremental)
- Expense Projects Report (Incremental)
- Expense Categories Report (Incremental)
- Expense Team Report (Incremental)
- Uninvoiced Report (Incremental)
- Time Clients Report (Incremental)
- Time Projects Report (Incremental)
- Time Tasks Report (Incremental)
- Time Team Report (Incremental)
- Project Budget Report
Performance considerations
The connector is restricted by Harvest rate limits. Harvest enforces two separate rate limits:
- General API requests: 100 requests per 15 seconds
- Reports API requests: 100 requests per 15 minutes
The connector automatically enforces these limits using a built-in HTTP API budget and retries throttled requests using the Retry-After header provided by the API.
You can configure the number of concurrent threads using the Number of Concurrent Threads field. Higher values can speed up syncs but increase API rate limit usage. The default is 4 threads, and the allowed range is 2 to 10. Lower this value when other applications share your Harvest API quota.
Report streams (Expense Reports, Time Reports, Uninvoiced Report, and Project Budget Report) retrieve data in 365-day date windows. For accounts with a long history, initial syncs of these streams may take longer.
Limitations and troubleshooting
This connector uses Harvest's granular permission model. If your credentials lack access to a specific resource, the corresponding stream produces zero records instead of failing the sync. If a stream returns no data, verify that the Harvest user behind the credentials has the required permissions for that resource.
When authenticating with OAuth, the granted scopes determine which Harvest accounts are reachable through the connection. Personal Access Tokens always have the all scope and reach every Harvest account on your user, while OAuth applications can be limited to a single account, depending on how you registered the application.
Reference
Config fields reference
Changelog
Expand to review
| Version | Date | Pull Request | Subject |
|---|---|---|---|
| 1.2.38 | 2026-05-06 | 77821 | Set Content-Type: application/x-www-form-urlencoded on OAuth access token request |
| 1.2.37 | 2026-05-05 | 77778 | Reorder spec fields so credentials appears before account_id and replication_start_date |
| 1.2.36 | 2026-05-04 | 76217 | Declare OAuth2 flow inline via advanced_auth and oauthConnectorInputSpecification |
| 1.2.35 | 2026-04-28 | 75371 | Update dependencies |
| 1.2.34 | 2026-04-21 | 76845 | Bump SDM base image to stable 7.17.2 |
| 1.2.33 | 2026-04-13 | 76276 | Rename "concurrent workers" to "concurrent threads" in connector spec |
| 1.2.32 | 2026-04-10 | 76247 | Promoted release candidate to GA |
| 1.2.32-rc.4 | 2026-04-08 | 75543 | Added configurable concurrency level with num_workers parameter and HTTP API budget rate limiting |
| 1.2.32-rc.1 | 2026-03-24 | 75409 | Test dev image of source-declarative-manifest (7.13.0.post6.dev23497311155) |
| 1.2.31 | 2026-03-10 | 74687 | Update dependencies |
| 1.2.30 | 2026-02-24 | 73930 | Update dependencies |
| 1.2.29 | 2026-02-10 | 73113 | Update dependencies |
| 1.2.28 | 2026-02-03 | 72645 | Update dependencies |
| 1.2.27 | 2026-01-20 | 71880 | Update dependencies |
| 1.2.26 | 2026-01-14 | 71693 | Update dependencies |
| 1.2.25 | 2025-12-18 | 70496 | Update dependencies |
| 1.2.24 | 2025-11-25 | 70061 | Update dependencies |
| 1.2.23 | 2025-11-18 | 69372 | Update dependencies |
| 1.2.22 | 2025-10-29 | 68814 | Update dependencies |
| 1.2.21 | 2025-10-22 | 68591 | Add suggestedStreams |
| 1.2.20 | 2025-10-21 | 61157 | Update dependencies |
| 1.2.19 | 2025-10-14 | 66013 | Update to CDK v7 |
| 1.2.18 | 2025-05-24 | 60670 | Update dependencies |
| 1.2.17 | 2025-05-10 | 59910 | Update dependencies |
| 1.2.16 | 2025-05-05 | 59215 | Fix missing schema for time_team, users, time_entries, company, & project_assignments streams. |
| 1.2.15 | 2025-05-03 | 59254 | Update dependencies |
| 1.2.14 | 2025-04-26 | 58767 | Update dependencies |
| 1.2.13 | 2025-04-19 | 58170 | Update dependencies |
| 1.2.12 | 2025-04-12 | 57717 | Update dependencies |
| 1.2.11 | 2025-04-05 | 57034 | Update dependencies |
| 1.2.10 | 2025-03-29 | 56653 | Update dependencies |
| 1.2.9 | 2025-03-22 | 56066 | Update dependencies |
| 1.2.8 | 2025-03-08 | 55483 | Update dependencies |
| 1.2.7 | 2025-03-01 | 54796 | Update dependencies |
| 1.2.6 | 2025-02-22 | 54327 | Update dependencies |
| 1.2.5 | 2025-02-15 | 53860 | Update dependencies |
| 1.2.4 | 2025-02-08 | 53282 | Update dependencies |
| 1.2.3 | 2025-02-01 | 52747 | Update dependencies |
| 1.2.2 | 2025-01-25 | 52254 | Update dependencies |
| 1.2.1 | 2025-01-24 | 52139 | Fix low-code state migration |
| 1.2.0 | 2025-01-23 | 52109 | Make incremental per-partition streams concurrent |
| 1.1.9 | 2025-01-18 | 51792 | Update dependencies |
| 1.1.8 | 2025-01-11 | 51155 | Update dependencies |
| 1.1.7 | 2025-01-04 | 50629 | Update dependencies |
| 1.1.6 | 2024-12-21 | 50081 | Update dependencies |
| 1.1.5 | 2024-12-14 | 49634 | Update dependencies |
| 1.1.4 | 2024-12-12 | 49213 | Update dependencies |
| 1.1.3 | 2024-12-11 | 48159 | Starting with this version, the Docker image is now rootless. Please note that this and future versions will not be compatible with Airbyte versions earlier than 0.64 |
| 1.1.2 | 2024-10-29 | 47817 | Update dependencies |
| 1.1.1 | 2024-10-28 | 47670 | Update dependencies |
| 1.1.0 | 2024-10-14 | 46898 | Promoting release candidate 1.1.0-rc1 to a main version. |
| 1.1.0-rc1 | 2024-10-09 | 46685 | Migrate to Manifest-only |
| 1.0.19 | 2024-10-05 | 46470 | Update dependencies |
| 1.0.18 | 2024-09-28 | 46143 | Update dependencies |
| 1.0.17 | 2024-09-21 | 45835 | Update dependencies |
| 1.0.16 | 2024-09-14 | 45537 | Update dependencies |
| 1.0.15 | 2024-09-07 | 44986 | Update dependencies |
| 1.0.14 | 2024-08-24 | 44681 | Update dependencies |
| 1.0.13 | 2024-08-17 | 44263 | Update dependencies |
| 1.0.12 | 2024-08-10 | 43463 | Update dependencies |
| 1.0.11 | 2024-08-03 | 43123 | Update dependencies |
| 1.0.10 | 2024-07-27 | 42831 | Update dependencies |
| 1.0.9 | 2024-07-20 | 42326 | Update dependencies |
| 1.0.8 | 2024-07-13 | 41841 | Update dependencies |
| 1.0.7 | 2024-07-10 | 41381 | Update dependencies |
| 1.0.6 | 2024-07-09 | 41303 | Update dependencies |
| 1.0.5 | 2024-07-06 | 41002 | Update dependencies |
| 1.0.4 | 2024-06-25 | 40475 | Update dependencies |
| 1.0.3 | 2024-06-22 | 40169 | Update dependencies |
| 1.0.2 | 2024-05-08 | 38055 | Fix error handler for retriable errors |
| 1.0.1 | 2024-04-24 | 36641 | Schema descriptions and CDK 0.80.0 |
| 1.0.0 | 2024-04-15 | 35863 | Migrates connector to Low Code CDK, Updates incremental substream state to per-partition state |
| 0.2.0 | 2024-04-08 | 36889 | Unpin CDK version |
| 0.1.24 | 2024-02-26 | 35541 | Improve check command to avoid missing alerts |
| 0.1.23 | 2024-02-19 | 35305 | Fix pendulum parsing error |
| 0.1.22 | 2024-02-12 | 35154 | Manage dependencies with Poetry. |
| 0.1.21 | 2023-11-30 | 33003 | Update expected records |
| 0.1.20 | 2023-10-19 | 31599 | Base image migration: remove Dockerfile and use the python-connector-base image |
| 0.1.19 | 2023-07-26 | 28755 | Changed parameters for Time Reports to use 365 days as opposed to 1 year |
| 0.1.18 | 2023-05-29 | 26714 | Remove authSpecification from spec in favour of advancedAuth |
| 0.1.17 | 2023-03-03 | 22983 | Specified date formatting in specification |
| 0.1.16 | 2023-02-07 | 22417 | Turn on default HttpAvailabilityStrategy |
| 0.1.15 | 2023-01-27 | 22008 | Set AvailabilityStrategy for streams explicitly to None |
| 0.1.14 | 2023-01-09 | 21151 | Skip 403 FORBIDDEN for all stream |
| 0.1.13 | 2022-12-22 | 20810 | Skip 403 FORBIDDEN for EstimateItemCategories stream |
| 0.1.12 | 2022-12-16 | 20572 | Introduce replication end date |
| 0.1.11 | 2022-09-28 | 17326 | Migrate to per-stream states. |
| 0.1.10 | 2022-08-08 | 15221 | Added parent_id for all streams which have parent stream |
| 0.1.9 | 2022-08-04 | 15312 | Fix started_time and ended_time format schema error and updated report slicing |
| 0.1.8 | 2021-12-14 | 8429 | Update titles and descriptions |
| 0.1.6 | 2021-11-14 | 7952 | Implement OAuth 2.0 support |
| 0.1.5 | 2021-09-28 | 5747 | Update schema date-time fields |
| 0.1.4 | 2021-06-22 | 5071 | Harvest normalization failure: fixing the schemas |
| 0.1.3 | 2021-06-22 | 4274 | Fix wrong data type on statement_key in clients stream |
| 0.1.2 | 2021-06-07 | 4222 | Correct specification parameter name |
| 0.1.1 | 2021-06-09 | 3973 | Add AIRBYTE_ENTRYPOINT for Kubernetes support |
| 0.1.0 | 2021-06-07 | 3709 | Release Harvest connector! |