Syncing Time Tracking Data

Time Tracking

Gusto allows partners to send their classified time data into our platform for application to payroll. In addition to providing a cleaner interface for time data, usage of Time Tracking API over other approaches, such as writing directly into a payroll, includes a number of improvements aimed at improving the accuracy and compliance of data used to run payroll: for example, showing what shift data makes up each pay period.

🚧

Please Note

All new time tracking integrations are required to integrate via the Time Tracking API

How to Set Up

To fully set up access to the Time API, you need to complete the following steps. After completing them you will be able to see your time data in Gusto!

1. Create a Time Tracking application via the Gusto Developer Portal

  1. Sign in to dev.gusto.com
  2. Click “Applications” in the left nav
    1. Note: If you do not see “Applications,” you first need to create or join an “Organization”
  3. Click “Create application”
  4. Fill out the form, ensuring that “Disable Gusto's time tracking features” is selected

2. Connect your time application via OAuth2

Using the credentials generated in step #1, connect your application to Gusto’s demo environment by following the steps in our OAuth2 guide.

3. Sync and reconcile employees

In order to sync time, you’ll first need to pull an employee roster from Gusto and reconcile those employees against those in your system. See our Syncing Employees guide for details and best practices.

4. Create a time sheet

Now that you’re authenticated and have a reconciled roster of employees, you’re ready to sync your first time sheet! Using our Create a time sheet endpoint, you can pass over classified hours by employee and job. You can use the curl request below as a starting point, just replace YOUR_COMPANY_UUID, YOUR_EMPLOYEE_UUID and YOUR_JOB_UUID with the corresponding UUIDs:

curl --request POST \
     --url https://api.gusto-demo.com/v1/companies/YOUR_COMPANY_UUID/time_tracking/time_sheets \
     --header 'X-Gusto-API-Version: 2024-04-01' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "entity_uuid": "YOUR_EMPLOYEE_UUID",
  "entity_type": "Employee",
  "job_uuid": "YOUR_JOB_UUID",
  "time_zone": "America/New_York",
  "shift_started_at": "2025-04-20T09:00:00Z",
  "shift_ended_at": "2025-04-20T17:00:00Z",
  "entries": [
    {
      "hours_worked": 8,
      "pay_classification": "Regular"
    }
  ]
}
'

UI overview

After you successfully set up the integration and sent over your first time sheet, you can see the time data you submitted under “Time & Attendance” -> “Time Tracking.”

When you are ready to sync hours to payroll, you can either go to payroll and sync hours from there by pressing “Sync hours from connected time tracking apps”, or press the “Sync hours to payroll” button on the “Time Tracking” page.

Common Questions

When should I send time tracking data to Gusto?

Ideally, time tracking data is sent as promptly as possible (i.e. when shifts complete or upon timecard approval, if required).

Can I send time data in aggregate, for an entire pay period?

No, time tracking data must be submitted by shift in order for accurate and compliant application of relevant rules and regulations.

Am I required to classify hours?

Yes, hours must be classified (i.e. broken out into regular hours, overtime hours and double overtime hours) when being submitted to Gusto.

I’ve sent Time data to Gusto and have gotten a 200 response, but the time data isn’t showing on the payroll?

The hours are likely awaiting application to payroll from our Time Tracking page. You can reach the Time Tracking page via the left nav or by clicking the “Sync hours from connected time tracking apps” hyperlink in the run payroll flow.

What happens if a timesheet is created or updated for a pay period that has already been paid?

For 3rd party time tracking integrations there is not a direct association with pay periods, therefore if a timesheet is created or updated after a payroll has already been run the company admin will need to run an off-cycle payroll in Gusto.

If a partner syncs hours for a salaried employee at the time of the sync, but prior to pulling the hours to payroll the employee is converted to hourly, will the hours sync?

In this scenario, compensation will be shown as hourly.

Do I provide the shift start and end in UTC or the specified timezone?

Start and end timestamps should be provided in UTC. Additionally, in the payload, you need to specify a time zone in which time is reported.

What do I use the metadata object for?

Metadata is used to store any additional third-party data associated with a time sheet.