QuickBooks Time Connector
Description
QuickBooks Time is an employee time tracking solution from Intuit. The QuickBooks Time component supports managing users, job codes, job code assignments, and timesheets.
API Documentation
This component was built using the QuickBooks Time (TSheets) REST API.
Connections
OAuth 2.0
key: oauthQuickBooks Time uses OAuth 2.0 Authorization Code authentication. An OAuth application must be created in the QuickBooks Time developer portal before configuring this connection.
Prerequisites
- A QuickBooks Time (TSheets) account with administrator access
- An OAuth application registered in the QuickBooks Time developer portal
Setup Steps
- Navigate to the QuickBooks Time developer portal and create a new OAuth application
- Configure the application:
- Redirect URI:
https://oauth2.prismatic.io/callback
- Redirect URI:
- Copy the Client ID and Client Secret from the application settings
Configure the Connection
- Client ID: Enter the Client ID from the OAuth application
- Client Secret: Enter the Client Secret from the OAuth application
| Input | Notes | Example |
|---|---|---|
| Authorize URL | The OAuth 2.0 Authorization URL for Quickbooks Time | https://rest.tsheets.com/api/v1/authorize |
| Client ID | Client Identifier of your app for Quickbooks Time | |
| Client Secret | Client Secret of your app for Quickbooks Time | |
| Scopes | Space separated OAuth 2.0 permission scopes for Quickbooks Time | |
| Token URL | The OAuth 2.0 Token URL for Quickbooks Time | https://rest.tsheets.com/api/v1/grant |
Triggers
New Records
Retrieves existing and ongoing records for a specified QuickBooks Time resource type. Load history once, check for changes on a schedule, or both. | key: pollChangesTrigger
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Look-back Date | The date the initial sync starts from, in YYYY-MM-DD format. Cannot be a future date. Leave empty to start from the first recurrence with no backfill. When set, the initial sync seeds each record created (for timesheets, dated) on or after this date once, ignoring the visibility filters. | 2026-01-01 |
| Resource Type | The type of resource to poll for new records. | |
| Show New Records | Include newly created records in trigger results. | true |
This trigger polls the QuickBooks Time API for new records on a scheduled basis.
How It Works
- The trigger runs on the configured schedule
- It fetches records from QuickBooks Time for the selected resource type. For Timesheets, a
start_dateparameter derived from the last poll time is passed as an optimization to limit the result set - New records are identified by comparing returned IDs against the set of known IDs from previous polls
- The trigger updates its internal state after each poll
Initial Sync
An initial sync seeds a complete starting state rather than a change feed, so an input that narrows
which changes are reported would leave gaps in it: Show New Records is ignored while it runs,
and is the only input it ignores. It begins on the first recurrence when a Look-back Date
(YYYY-MM-DD) is set, and seeds each record exactly once: Timesheets whose work date is on or
after that date, and Users or Job Codes whose created timestamp is on or after 00:00 UTC of that
date. Left empty, there is no sync: the first Users or Job Codes recurrence only records a baseline
and returns nothing, and the first Timesheets recurrence reports the timesheets dated on or after
the current UTC date.
The sync has no fixed upper bound and finishes in one recurrence with batching on or off, because the trigger fetches every page before it returns. It then stores the IDs it received as its position (for Timesheets, together with that recurrence's date), and the next recurrence reports only records whose IDs are not in that set, so no seeded record is reported twice. Nothing in the payload marks the handoff.
Resource Type still applies throughout. The trigger has no page-size or field-selection input, so nothing else is suppressed.
Batching
Batching is enabled per flow on this trigger: each changed record is dispatched as its own execution, or grouped by the configured batch size. Batch size and batch concurrency can both be overridden per instance. Raising concurrency increases the request volume sent to QuickBooks Time, which limits requests to 300 per 5 minutes per access token.
To turn it on, select the flow's trigger, open the Flow control tab, and switch on Enable Batching. Under Batch Size, keep Trigger default or choose Custom batch size. Batch Concurrency is optional; leave it blank for no batch-level limit.
With batching off a downstream step reads body.data.created (body.data.updated is always
empty). With batching on those fields do not exist: each execution receives one
{ "changeType": ..., "record": ... } item, or an array of them when the batch size is greater
than 1. Any step reading the older shape must be updated before batching is enabled. Because
batching is enabled per flow, that change is scoped to the flow rather than to the component or to
other flows using the same trigger.
Returned Data
With batching off, the trigger returns an object with a created array containing new records detected since the last poll, and an updated array that is always empty because this trigger detects additions only. Fields shown are representative. The full response object includes additional properties.
Example Response
{
"data": {
"created": [
{
"id": 135288482,
"user_id": 317046,
"jobcode_id": 18080900,
"start": "2024-01-16T08:00:00-06:00",
"end": "2024-01-16T17:00:00-06:00",
"duration": 32400,
"date": "2024-01-16",
"tz": -6,
"type": "regular",
"on_the_clock": false,
"created": "2024-01-16T17:01:12-06:00",
"last_modified": "2024-01-16T17:01:12-06:00"
}
],
"updated": []
}
}
With batching on, each execution receives one record tagged with how it changed, or an array of such items when the batch size is greater than 1. changeType is always created. The created and updated arrays are not part of this shape.
Batched Item
{
"changeType": "created",
"record": {
"id": 135288482,
"user_id": 317046,
"jobcode_id": 18080900,
"date": "2024-01-16",
"type": "regular",
"created": "2024-01-16T17:01:12-06:00",
"last_modified": "2024-01-16T17:01:12-06:00"
}
}
Notes
- For Timesheets, each recurrence queries from the date of the previous recurrence, so a timesheet added later with an earlier work date is not reported
- For Timesheets, the
start_datefilter is applied as a query optimization, but change detection still relies on ID comparison rather than timestamps - Update detection is not supported for any resource type. Only new records are returned
- Refer to the QuickBooks Time API documentation for details on available fields per resource type
Data Sources
Select Job Code
Select a job code from a list of job codes. | key: selectJobCode | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Select Job Code⤓
Select Job Code Assignment
Select a job code assignment from a list of job code assignments. | key: selectJobCodeAssignment | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Select Job Code Assignment⤓
Select Time Sheet
Select a timesheet from a list of timesheets. | key: selectTimeSheet | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Select Time Sheet⤓
Select User
Select a user from a list of users. | key: selectUser | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection |
Example Payload for Select User⤓
Actions
Create Timesheet
Creates a Timesheet | key: createTimesheet
| Input | Notes | Example |
|---|---|---|
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| End Date | End time of the timesheet, in ISO 8601 format (YYYY-MM-DDThh:mm:ss±hh:mm). Time should reflect the user's local time. | YYYY-MM-DDThh:mm:ss±hh:mm |
| User ID | The Id of the record to modify | |
| Jobcode ID | The Jobcode Id | |
| Start Date | Start time of the timesheet, in ISO 8601 format (YYYY-MM-DDThh:mm:ss±hh:mm). Time should reflect the user's local time. | YYYY-MM-DDThh:mm:ss±hh:mm |
Create User
Creates a User from the provided data | key: createUser
| Input | Notes | Example |
|---|---|---|
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| First Name | First name of the user | |
| Last Name | Last name of the user | |
| Username | Username of the user |
Delete Timesheet
Deletes a Timesheet | key: deleteTimeSheet
| Input | Notes | Example |
|---|---|---|
| Connection | ||
| Job Code IDs | A comma separated list of Job Code Ids | 123,456,789 |
Get Job Code Assignments
Gets a list of Job Codes and their associated Users | key: getJobCodeAssignments
| Input | Notes | Example |
|---|---|---|
| Active | 'yes', 'no', or 'both'. Default is 'yes' | |
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| Page | Represents the page of results you'd like to retrieve. Default is 1. | |
| Per Page | Represents how many results you'd like to retrieve per request (page). Default is 50. Max is 50 | |
| User IDs | A comma separated list of User Ids to filter on | 123,456,789 |
Get Job Codes
Gets a list of Job Codes | key: getJobCodes
| Input | Notes | Example |
|---|---|---|
| Active | 'yes', 'no', or 'both'. Default is 'yes' | |
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| Page | Represents the page of results you'd like to retrieve. Default is 1. | |
| Per Page | Represents how many results you'd like to retrieve per request (page). Default is 50. Max is 50 |
Get Time Sheets
Gets a list of Time Sheets | key: getTimeSheets
| Input | Notes | Example |
|---|---|---|
| Active | 'yes', 'no', or 'both'. Default is 'yes' | |
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| End Date | YYYY-MM-DD formatted date | |
| Job Code IDs | A comma separated list of Job Code Ids to filter on | 123,456,789 |
| Page | Represents the page of results you'd like to retrieve. Default is 1. | |
| Per Page | Represents how many results you'd like to retrieve per request (page). Default is 50. Max is 50 | |
| Start Date | YYYY-MM-DD formatted date | |
| User IDs | A comma separated list of User Ids to filter on | 123,456,789 |
Get Users
Gets a list of Users with optional filters | key: getUsers
| Input | Notes | Example |
|---|---|---|
| Active | 'yes', 'no', or 'both'. Default is 'yes' | |
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| Page | Represents the page of results you'd like to retrieve. Default is 1. | |
| Per Page | Represents how many results you'd like to retrieve per request (page). Default is 50. Max is 50 |
Update Timesheet
Updates a Timesheet | key: updateTimesheet
| Input | Notes | Example |
|---|---|---|
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| End Date | End time of the timesheet, in ISO 8601 format (YYYY-MM-DDThh:mm:ss±hh:mm). Time should reflect the user's local time. | |
| Jobcode ID | The Jobcode Id | |
| Start Date | Start time of the timesheet, in ISO 8601 format (YYYY-MM-DDThh:mm:ss±hh:mm). Time should reflect the user's local time. | |
| Timesheet ID | The Id of the record to modify |
Update User
Updates a specified User | key: updateUser
| Input | Notes | Example |
|---|---|---|
| Additional Query Parameters | Additional query parameters to be provided for use in filtering result sets. For example, when filtering users it is possible to provide 'usernames' as the key and a comma separated list of one or more usernames to filter on. | |
| Connection | ||
| ID | The Id of the record to modify | |
| Username | Username of the user |
Changelog
2026-10-13
Added batching and initial sync support to the New Records trigger:
- Fixed the New Records trigger, which never reported new timesheets, users, or job codes
- Added opt-in batching to the New Records trigger, dispatching each new record individually or in configured batches; enabling it changes the shape a downstream step receives
- Added an optional Look-back Date input to the New Records trigger for performing an initial sync of records. The initial sync begins on the first recurrence and backfills every record from the specified date onward, seeding each once and ignoring the trigger's visibility filter; later recurrences are unaffected. Leave it empty to start from the first recurrence with no backfill
2026-04-30
Updated spectral version
2026-04-21
Added New Records polling trigger that checks for new timesheets, users, or job codes in QuickBooks Time on a configured schedule
2026-04-07
Added global debug support across all actions for improved troubleshooting
2026-02-26
Added inline data sources for users, job codes, job code assignments, and timesheets to enable dynamic dropdown selection