Gusto
You can integrate your Gusto account with Harvest so the hours and reimbursable expenses your team tracks in Harvest flow into Gusto automatically. That removes the double-entry of maintaining timesheets and expenses in both Harvest and Gusto when you run payroll, and means your team only has to track them in one place.
In addition to pushing tracked hours to Gusto as time sheets, the integration lets you match each Harvest user to the corresponding Gusto employee or contractor, choose the FLSA workweek your overtime threshold is calculated against, and schedule a reminder so you don't forget to sync before payroll.
What the integration does
When you connect Gusto to Harvest, an Administrator in Harvest can:
- Push tracked hours to Gusto as time sheets for one or more pay periods at a time.
- Add reimbursable expenses to an open Gusto payroll, so your team is reimbursed with their paycheck.
- Match each Harvest user to a Gusto employee or contractor.
- Review which hours are eligible to sync before sending anything — including any hours that fall inside an already-processed pay period, or that belong to team members who aren't eligible for overtime (exempt and owners).
- Receive an email when a sync run finishes, whether it completed successfully or failed.
- Set a weekly, semi-monthly, or monthly reminder so an Administrator gets a nudge to run the sync ahead of payroll.
- Disconnect from Gusto at any time without losing your user mappings or sync history.
Before you connect
To integrate Gusto with Harvest you need:
- A Harvest account with at least one user tracked against a project.
- A Gusto account in good standing. The Gusto integration is available for US-based Gusto customers.
- An Administrator in Harvest — the only role that can connect, configure, and run syncs.
Harvest syncs hours to Gusto as time sheets. Time sheets are created as pending in Gusto and must be reviewed and approved in Gusto's own Time Tracking UI before they're included in a payroll run. Approving in Gusto is a deliberate, separate step and is not handled by Harvest.
In the current release, each Harvest account can connect to one Gusto company. If you administer multiple Gusto companies, connect each one from a separate Harvest account.
Connecting Gusto to Harvest
- In Harvest, click Settings in the upper right corner. Only Administrators can view and change account settings.
- Click Integrations in the left sidebar.
- In the Gusto section, click Connect.
- Sign in to Gusto and authorize Harvest to access your Gusto company.
When the connection completes you'll land on Gusto settings, where you can map users and configure the workweek.
Matching Harvest users to Gusto employees and contractors
Before any hours can sync, each Harvest user who should have their hours pushed to Gusto must be matched to a Gusto employee or contractor. This step is required — Harvest can't send hours for a user unless it knows which Gusto entity to send them to.
- From the Gusto settings page, find the People to link section.
- For each Harvest user, pick the matching Gusto employee or contractor from the dropdown and click Link.
- Repeat for everyone whose hours you want synced.
A Harvest user can only be linked to one Gusto entity per connection. To change a link, unlink the user and re-link them — editing an existing link directly isn't supported.
Harvest shows each Gusto employee's FLSA status (the US classification that determines overtime eligibility). The integration enforces this at sync time: hours for Exempt and Owner employees are never sent to Gusto, because sending them can corrupt their paycheck. The status is read fresh on every sync, so a reclassification in Gusto is picked up automatically on the next run.
Choosing your workweek anchor
Overtime in the US is calculated against a fixed seven-day workweek, which Gusto needs to know before it can accept any time sheets. The default is whatever day your Harvest week starts on.
You can change the workweek anchor from the Gusto settings page in Harvest. The change is blocked while a sync run is in flight, so you don't move the workweek out from under an in-progress sync.
Setting a sync reminder
The integration never runs automatically — every sync is started by an Administrator from Harvest. If you'd like a nudge, you can set a cadence from the Gusto settings page:
- Weekly on a chosen day of the week.
- Monthly on a named point in the month — the 1st, the 7th, the 15th, seven days before the end, or the last day of the month.
- Semi-monthly on two different named points in the month (for example, the 1st and the 15th).
On the day the reminder fires, a Run payroll button appears at the top of the Team and Approvals pages with a Due today badge. Click it to land on the sync wizard. The reminder never starts a sync on its own.
Running a sync
When you're ready to push hours to Gusto:
- In Harvest, click Settings then Integrations, and in the Gusto section click Sync time.
- Step 1 — Date range. Pick a single pay period (the latest unprocessed one is suggested) or a custom date range up to 90 days. The default range is the last 7 days.
- Step 2 — Choose people. Tick the Harvest users whose hours you want to send. Only mapped users appear here.
- Step 3 — Choose projects. For each person, pick the projects (and, for employees with multiple Gusto jobs, the specific Gusto job) you want included.
- Review the eligibility preview — Harvest shows you exactly what will be sent and what will be skipped, and why.
- Click Sync to start the run.
The run runs asynchronously; you can leave the page and come back. Harvest emails the Administrator who started the run when it finishes, with a link to the full results.
What gets skipped
The preview and the actual sync apply the same rules, so what you see is what gets sent:
- Unmapped users — their hours aren't eligible. Map them first if you want their hours included.
- Exempt and Owner employees — never sent, per Gusto's policy.
- Hours inside a processed pay period — Gusto locks periods that have already been run for payroll. Adjust these directly in Gusto.
- Days with no time tracked — only hours logged against a project in Harvest can be sent; empty days aren't part of the sync.
- Hours that haven't changed since they were last synced — re-running the same range is a safe no-op for those entries.
- Hours outside the selected date range — not eligible.
What gets sent
For each eligible entry, Harvest sends Gusto a time sheet with:
- The Harvest user's hours, broken down into Regular and Overtime against the FLSA 40-hour weekly threshold, with overtime applied per workweek.
- Start and end times for the shift (or, for duration-only entries, a synthetic 9 AM shift).
- The originating Harvest company ID and day-entry ID in the metadata, so you can trace any Gusto time sheet back to its Harvest source.
Approving time sheets in Gusto
Harvest creates time sheets as pending. They do not appear on a Gusto payroll until an Administrator reviews and approves them in Gusto's Time Tracking UI. If you don't see your hours on a payroll run, check Gusto's pending queue.
Syncing expenses
As well as hours, you can send reimbursable expenses tracked in Harvest to Gusto. Each expense is added to a Gusto payroll as a reimbursement, so it's paid with the employee's paycheck. Like the hours sync, every expense sync is started by an Administrator from Harvest. The sync reminder applies to hours only.
- In Harvest, click Settings then Integrations, and in the Gusto section click Sync expenses. This opens your expense sync history.
- Click Sync expenses to start a new sync.
- Step 1 — Choose payroll. Pick an open payroll. Only payrolls that haven't been run in Gusto yet are listed.
- Step 2 — Choose expenses. Harvest lists the reimbursable expenses dated within that payroll's pay period, grouped by person. Tick the expenses you want to send.
- Click Sync selected expenses to Gusto.
Unlike time sheets, expenses go straight onto the payroll. You don't need to approve them in Gusto first. They're paid when that payroll is run. Harvest emails the Administrator who started the sync when it finishes, with a link to the full results.
Which expenses can be synced
An expense can be synced when:
- It's marked reimbursable.
- The person who tracked it is linked to a Gusto employee. Expenses for contractors aren't supported.
- That employee is on the chosen payroll in Gusto.
- It's in US dollars.
- Its amount is greater than zero.
- If your account requires approval, it's approved (see below).
The preview shows every expense that can't be synced, and why.
Expense sync approval
If your account requires approval, choose which expenses can be synced from the Expense sync approval setting on the Gusto settings page: Only approved expenses (the default) or All expenses. If approval isn't required, every reimbursable expense can be synced and this setting has no effect.
What your team sees in Gusto
Each reimbursement shows the expense amount, category, and date. Notes on the expense aren't sent to Gusto.
Changing synced expenses
Re-syncing the same payroll is safe. Expenses that haven't changed are left as they are. If you change an expense's amount, the next sync updates it in Gusto. If you delete an expense, make it non-reimbursable, or move its date out of the pay period, the next sync offers to remove it from the payroll. An expense can only be on one payroll at a time.
Reviewing past sync runs
Every sync run is recorded. From the Gusto settings page, click Sync time (for hours) or Sync expenses (for expenses) to see the full history with counts of created, skipped, and failed operations and the reason for each skip or failure. Failed entries can be retried by running a new sync over the same date range — the run is idempotent, so re-running re-attempts only the entries that didn't succeed the first time.
Disconnecting Gusto from Harvest
Disconnecting tears down the connection to Gusto. Your user mappings, sync history, and reminder setting are preserved so you can reconnect later without losing your setup.
- Head to Settings > Integrations.
- In the Gusto section click View settings.
- Click the Disconnect button.
- Type DISCONNECT and click Disconnect to confirm.
Common questions
Can I connect more than one Gusto company to a single Harvest account? Not in the current release. Each Harvest account can hold one active Gusto connection at a time. If you administer several Gusto companies, connect each one from its own Harvest account.
Why aren't some of my team's hours showing as eligible to sync? The eligibility preview lists every reason. The most common are: the user isn't mapped to a Gusto entity yet, the user is Exempt or Owner in Gusto, the hours fall inside a pay period that Gusto has already processed, or there are no hours tracked against that user for the date range you picked.
Why isn't my synced time sheet on the Gusto payroll? Time sheets created by Harvest land in Gusto as pending. Approve them in Gusto's Time Tracking UI before the payroll run — Harvest doesn't submit or approve on Gusto's behalf.
Can Harvest sync hours automatically, without me clicking Sync? No. Every sync is started by an Administrator. The reminder cadence can nudge you on a schedule you pick, but it never starts a run on its own.
Does the integration support state-specific overtime rules (for example, California daily overtime)? The current release calculates overtime against the federal weekly 40-hour threshold only. State-specific rules — including California daily overtime — are not yet supported.
Can I sync expenses for contractors? Not in the current release. Expense sync supports Gusto employees only.
Why isn't my payroll listed when I sync expenses? Only payrolls that haven't been run in Gusto can receive expenses. Once a payroll is processed, adjust it directly in Gusto.
Why was an expense skipped because of its currency? Gusto pays reimbursements in US dollars only, so expenses in other currencies can't be synced.
What happens to my mappings and sync history if I disconnect? Both are preserved. Reconnecting to the same Gusto company restores your previous mappings; you won't need to re-link your team. Sync history stays available regardless of connection state.