Skip to main content

Uptick

Extract data from Uptick, a field service management platform designed for the fire protection industry.

Prerequisites​

  • Your Uptick workspace URL, in the form https://<workspace>.onuptick.com. The connector only connects to onuptick.com workspace hosts. A Base URL on any other host fails the connection check for both authentication methods.
  • Credentials for one of the two authentication methods below. OAuth 2.0 is recommended; the username and password method remains available for existing connections.

This method uses the OAuth 2.0 authorization-code flow with PKCE, and the connector requests only Uptick's read-only read scope. Enter the Base URL exactly as https://<workspace>.onuptick.com, in lowercase and without a path.

On Airbyte Cloud, the Authenticate with Uptick button uses Airbyte's Uptick app, so the Airbyte app must be enabled in your Uptick account before you authenticate. If it isn't enabled, ask your Uptick administrator to enable it. Then enter your Base URL, choose Authenticate with Uptick under Authentication, click Authenticate, and approve the consent page that Uptick shows. The connector stores the resulting tokens in your connection's credentials block.

On self-hosted Airbyte (OSS), first create an OAuth application in Uptick under Control Panel > Uptick API > Create Application with your Airbyte instance's redirect URI https://<airbyte-host>/auth_flow, using the authorization-code grant with PKCE (S256). Then enter your Base URL, choose Authenticate with Uptick, and complete the flow.

Username & password​

The connector authenticates with the Uptick API using OAuth 2.0 with the password grant, so you need both an OAuth application and an Uptick user account:

  • An OAuth Client ID and Client Secret generated from your Uptick instance.
  • The email address and password of an Uptick user account. The connector signs in as this user, so the account must have permission to view every resource you want to sync.

To generate the OAuth credentials, go to Control Panel > Uptick API in your Uptick instance, select Create Application, provide a name, and save. Uptick generates the Client ID and Client Secret for you. For step-by-step instructions, see Uptick API - Getting started. Existing connections that use the top-level client_id, client_secret, username, and password fields continue to work; on the first run after upgrading to 2.1.0, the connector copies them under Authentication (credentials) and saves the migrated config — the original fields are kept, so pinning back to 2.0.x keeps working.

The Uptick user account needs read access to each module you want to sync; in practice task_profitability has required the Intelligence reports permission.

Setup guide​

Set up the Uptick source in Airbyte​

  1. In Airbyte, go to Sources and select + New source.
  2. Search for and select Uptick as the source type.
  3. Enter your Base URL and choose an Authentication method, then fill in the fields from the configuration table below. For Authenticate with Uptick, click Authenticate and approve the consent page; for Username & password, fill in client_id, client_secret, username, and password. Consider creating a dedicated Uptick service user for the connector: the API token inherits that user's permissions, so a service user keeps access scoped to exactly what you sync.
  4. Select Set up source to test the connection.
InputTypeDescriptionDefault Value
base_urlstringRoot URL of your Uptick workspace, for example https://yourcompany.onuptick.com. Required for both authentication methods. The connector strips any scheme, path, or trailing slash and always connects over HTTPS. The host must be <workspace>.onuptick.com, or the connection check fails. For Authenticate with Uptick, enter the host in lowercase.
credentials.auth_typestringoauth2.0 for the OAuth flow, password for the legacy username and password method.
credentials.client_idstringOAuth Client ID generated from Control Panel > Uptick API. Filled automatically by the OAuth flow on Airbyte Cloud.
credentials.client_secretstringOAuth Client Secret generated from Control Panel > Uptick API. Filled automatically by the OAuth flow on Airbyte Cloud.
credentials.refresh_tokenstringRefresh token obtained by authenticating with Uptick. Required for oauth2.0; filled automatically by the OAuth flow.
credentials.usernamestringEmail address for an Uptick user account with API access. Required for password. Synced data is limited to what this user can see in Uptick.
credentials.passwordstringPassword for the Uptick user account. Required for password.
num_workersintegerNumber of concurrent requests. Higher values speed up syncs but increase the chance of Uptick rate limiting. Allowed range 1–10.3
max_requests_per_minuteintegerGlobal request budget shared by all streams and threads. Uptick publishes no numeric limit; 60 is a conservative default. Allowed range 1–600.60

Supported sync modes​

Sync modeSupported
Full Refresh Sync✅
Incremental Sync✅

Every stream except majorservices supports both full refresh and incremental sync on the updated cursor; majorservices has no updated timestamp and is full refresh only. Among the JSON:API streams, only those marked ✅ in the Reports deletions column below expose a deleted timestamp; on the streams marked ❌ there, an incremental sync retains rows in your destination after they're deleted in Uptick, so use full refresh for those. task_profitability is a generated report with no deleted state and is safe to sync incrementally.

Supported Streams​

The Uptick connector syncs data from the following streams, organized by functional area:

Core business entities​

  • tasks - Work tasks and maintenance requests with scheduling, priority, and assignment details
  • taskcategories - Categories for organizing tasks
  • tasksessions - Time tracking entries for work performed on tasks
  • rounds - Work rounds for technician scheduling and route management
  • projects - Project management entities for larger initiatives
  • clients - Customer organizations and contact information
  • clientgroups - Client organization groupings
  • clientcontacts - Contact people associated with clients
  • properties - Physical locations where work is performed
  • propertycontacts - Contact people associated with properties
  • contractors - External service providers and subcontractors
  • users - System users including technicians and staff
  • servicegroups - Service categorization for organizing work types

Financial and billing​

  • invoices - Customer invoices and billing information
  • invoicelineitems - Individual line items within invoices
  • creditnotes - Credit notes for refunds and adjustments
  • creditnotelineitems - Line items within credit notes
  • billingcards - Billing card information for cost allocation
  • billingcontracts - Recurring billing contracts for ongoing services
  • billingcontractlineitems - Line items within billing contracts
  • costcentres - Cost center assignments for financial tracking
  • task_profitability - Profitability metrics and financial performance data for tasks

Purchasing and supply chain​

  • purchaseorders - Purchase orders for materials and services
  • purchaseorderlineitems - Individual items within purchase orders
  • purchaseorderbills - Bills received for purchase orders
  • purchaseorderbilllineitems - Line items within purchase order bills
  • purchaseorderdockets - Delivery dockets for purchase orders
  • suppliers - Vendor and supplier information
  • products - Products and materials catalog

Asset management and inspections​

  • assets - Physical assets requiring maintenance and inspection
  • assettypes - Categories and specifications for asset types
  • assettypevariants - Variants and configurations of asset types
  • routines - Scheduled maintenance and inspection routines
  • routineservices - Routine service configurations for properties and assets
  • routineservicelevels - Service level definitions for routine services
  • routineservicetypes - Types and categories of routine services
  • routineserviceleveltypes - Service level type classifications
  • majorservices - Major service records for assets
  • servicetasks - Individual work activities on tasks
  • subtasks - Links programme maintenance routines to tasks
  • remarks - Issues, defects, and observations during inspections
  • remarkevents - Events and actions taken on remarks
  • promptquestions - Prompt questions asked during service report completion
  • promptanswergroups - Groupings of prompt answers per service task and section
  • promptanswers - Individual answers to prompt questions
  • appointments - Scheduled appointments for work and inspections

Quality and compliance​

  • accreditations - Technician certifications and qualifications
  • accreditationtypes - Types of certifications and accreditations

Sales​

  • servicequotes - Quotes for service work
  • servicequotefixedlineitems - Fixed price line items within service quotes
  • servicequotedoandchargelineitems - Do-and-charge line items within service quotes
  • servicequoteproductlineitems - Product line items within service quotes
  • defectquotes - Quotes for remedial work on identified defects
  • defectquotelineitems - Line items within defect quotes

Organization and location​

  • branches - Business locations and organizational units

Stream details​

Stream NamePrimary KeyPaginationSupports Full SyncSupports IncrementalReports deletions
tasksidDefaultPaginator✅✅✅
taskcategoriesidDefaultPaginator✅✅❌
clientsidDefaultPaginator✅✅❌
clientgroupsidDefaultPaginator✅✅❌
propertiesidDefaultPaginator✅✅❌
invoicesidDefaultPaginator✅✅❌
projectsidDefaultPaginator✅✅❌
servicequotesidDefaultPaginator✅✅❌
defectquotesidDefaultPaginator✅✅❌
suppliersidDefaultPaginator✅✅❌
purchaseordersidDefaultPaginator✅✅❌
purchaseorderlineitemsidDefaultPaginator✅✅❌
assetsidDefaultPaginator✅✅✅
routinesidDefaultPaginator✅✅❌
billingcardsidDefaultPaginator✅✅❌
purchaseorderbillsidDefaultPaginator✅✅❌
purchaseorderbilllineitemsidDefaultPaginator✅✅❌
purchaseorderdocketsidDefaultPaginator✅✅❌
invoicelineitemsidDefaultPaginator✅✅❌
usersidDefaultPaginator✅✅❌
servicegroupsidDefaultPaginator✅✅❌
costcentresidDefaultPaginator✅✅❌
accreditationtypesidDefaultPaginator✅✅❌
accreditationsidDefaultPaginator✅✅❌
branchesidDefaultPaginator✅✅❌
creditnotesidDefaultPaginator✅✅✅
creditnotelineitemsidDefaultPaginator✅✅✅
remarksidDefaultPaginator✅✅✅
assettypesidDefaultPaginator✅✅✅
assettypevariantsidDefaultPaginator✅✅✅
productsidDefaultPaginator✅✅✅
roundsidDefaultPaginator✅✅✅
tasksessionsidDefaultPaginator✅✅❌
contractorsidDefaultPaginator✅✅❌
appointmentsidDefaultPaginator✅✅❌
billingcontractsidDefaultPaginator✅✅❌
billingcontractlineitemsidDefaultPaginator✅✅❌
defectquotelineitemsidDefaultPaginator✅✅❌
servicequotefixedlineitemsidDefaultPaginator✅✅❌
servicequotedoandchargelineitemsidDefaultPaginator✅✅❌
servicequoteproductlineitemsidDefaultPaginator✅✅❌
remarkeventsidDefaultPaginator✅✅❌
routineservicesidDefaultPaginator✅✅❌
routineservicelevelsidDefaultPaginator✅✅❌
routineservicetypesidDefaultPaginator✅✅❌
routineserviceleveltypesidDefaultPaginator✅✅❌
servicetasksidDefaultPaginator✅✅✅
subtasksidDefaultPaginator✅✅✅
task_profitabilitytask_idDefaultPaginator✅✅n/a (generated report)
clientcontactsidDefaultPaginator✅✅❌
propertycontactsidDefaultPaginator✅✅❌
promptquestionsidDefaultPaginator✅✅✅
promptanswergroupsidDefaultPaginator✅✅❌
promptanswersidDefaultPaginator✅✅❌
majorservicesidDefaultPaginator✅❌ (no updated timestamp)n/a (full refresh only)

API version and fields​

Every stream except task_profitability reads a pinned Uptick endpoint under /api/v2.16/. The task_profitability stream reads the intelligence report at /api/v2/intelligencereports/profitability_by_task/, which resolves to whichever minor version Uptick currently treats as the latest.

Each stream requests a fixed list of fields using Uptick's sparse fieldsets, so a stream carries a curated subset of what the endpoint can return rather than every field. Fields that Uptick adds later show up only after the connector is updated. Uptick keeps roughly three minor API versions live at a time and retires the oldest, so connector releases that move to a newer minor version can add, rename, or remove fields. The Uptick API patch notes list what changed in each version.

Attribute values​

Uptick returns each record as a JSON:API object with an attributes block. The connector copies every attribute to the top level of the record without changing its value, and also keeps the original attributes object, the relationships object, and the resource type. From version 2.1.2, every JSON:API stream declares attributes and relationships as nullable objects in its schema, and every one of those streams except accreditationtypes, billingcontracts, billingcontractlineitems, products, and promptquestions also declares type, so destinations that create typed columns add these columns. Monetary and other decimal fields arrive as strings with the precision Uptick sends, such as "10.00". The exception is servicequotes.product_subtotal, which Uptick returns as a JSON number and the connector declares as a number from version 2.0.0. Attributes that Uptick returns as null land as null in your destination. Uptick returns an empty string ("") instead of null for unset email fields, such as users.email and clients.contact_email, and for tasks.workorder_url, so filter on both values when you look for missing emails or URLs.

Before version 1.2.0, the connector re-rendered each attribute through a template, which reformatted decimal strings ("10.00" became "10.0") and turned null into the string "None". If you filter or join on those fields downstream, check for both representations in data synced before you upgraded.

Relationship fields​

Uptick returns related records in a JSON:API relationships object. The connector flattens each relationship into a scalar <relationship>_id column, such as client_id on clientcontacts or property_id on propertycontacts. Use these columns to join streams in your destination.

Prompt data spans three streams, and Uptick reworked its prompt model in API v2.15, so those joins are worth spelling out:

  • promptanswers.answergroup_id joins promptanswergroups.id, and promptanswers.question_id joins promptquestions.id.
  • promptanswergroups.servicetask_id and promptanswergroups.task_id tie a group of answers back to the service task or task the answers were recorded against.
  • promptquestions.section_id and promptanswergroups.section_id reference Uptick prompt sections. The connector doesn't sync prompt sections, so you can't resolve these IDs to section names from synced data alone.

Incremental sync​

For streams that support incremental sync, the connector uses each record's updated timestamp as the cursor and fetches only records changed since the last sync through the Uptick API's updatedsince filter. Streams that support only full refresh are re-read in full on every sync.

Before version 2.0.0, the servicegroups and accreditationtypes endpoints ignored the updatedsince filter, so the connector read both tables in full on every sync and filtered on the cursor itself. Uptick now applies the filter on these endpoints, and from version 2.0.0 incremental syncs of these streams fetch only changed rows.

The majorservices endpoint has no updated timestamp, so there is no cursor to sync from. From version 2.0.0 the connector offers this stream in full refresh mode only.

Airbyte still offers incremental sync in the UI for the streams marked ❌ under Reports deletions, because the connector defines the updated cursor for every stream except majorservices. Avoid it for those streams: their Uptick endpoints don't report deletions, so an incremental sync keeps records in your destination after they're deleted in Uptick. Sync them with Full Refresh | Overwrite instead.

Data type map​

Connector schema typeAirbyte type
stringstring
integerinteger
numbernumber
decimalstring (airbyte_type decimal)
booleanboolean
datestring (format date)
datetimestring (format date-time, airbyte_type timestamp_with_timezone)
objectobject
arrayarray

Limitations & Troubleshooting​

Permission errors (403)​

If the Uptick user account lacks permission for an endpoint, the sync fails with HTTP 403: Uptick user lacks permission for the requested endpoint. Uptick doesn't publish a per-endpoint permission list; in production this has been seen on task_profitability (resolved by granting the Intelligence reports permission) and on billingcontractlineitems. The connector fails with a configuration error instead of retrying. Grant the missing module permission in Uptick or deselect the stream.

403 Access denied … required licenses (FIELD, DESK, CONTRACTOR) after logging in during "Authenticate with Uptick". The Uptick user you signed in with has no licence in that workspace. Ask your Uptick administrator to grant one (for example, DESK), or use username/password authentication instead.

Authentication errors​

Uptick rejects a wrong username or password with invalid_grant, and a wrong client ID or client secret with invalid_client. The connector reports these as a configuration error without retrying: Refresh token was rejected by the OAuth provider (invalid, expired, or already used). Re-authenticate this source's credentials in its connection settings. Provider error: invalid_grant (or invalid_client). For connections that use Authenticate with Uptick, re-authenticate so the stored tokens are refreshed. For username and password connections, check the four credential fields in the source configuration, and confirm that the OAuth application still exists under Control Panel > Uptick API.

Uptick access tokens can also expire or be revoked during a long sync. If a stream request returns 401 mid-sync, the connector refreshes the token once and retries the request; if the refresh is rejected (for example because the password changed during the sync) the sync fails with the same configuration error, and if the retried request is still 401 it fails with the configuration error Refreshed OAuth access token is rejected by the API. Update the credentials and run the sync again.

Base URL errors​

From version 2.1.2, the connection check rejects a Base URL whose host isn't <workspace>.onuptick.com before it sends any request, for both authentication methods. The check fails with a JSON schema validation error that says the URL does not match the onuptick.com pattern. Earlier versions didn't restrict the host for Username & password, so connections that use that method with another host, such as a tunnel or localhost, now fail. Set the Base URL to your https://<workspace>.onuptick.com address.

For Authenticate with Uptick, the host is also case-sensitive. A Base URL with uppercase letters, such as https://MyCompany.onuptick.com, fails the check with a message that contains base_url-must-be-https-workspace.onuptick.com, and the connector doesn't send your OAuth credentials to that host. Enter the host in lowercase.

A misspelled workspace name, such as https://typo.onuptick.com, passes this check but fails with a DNS or connection error.

Deleted records​

Streams marked ❌ under Reports deletions in the table above don't report deletions, so records deleted in Uptick stay in your destination until you run a Full Refresh | Overwrite sync (Full Refresh | Append doesn't remove rows). The 12 JSON:API streams marked ✅ there expose a deleted timestamp on deleted records; task_profitability is a generated report and has no deleted state.

Rate limits​

Uptick enforces rate limits and reasonable-use guidelines on its API but doesn't publish a numeric limit. Uptick states that it can revoke API access without notice for applications that violate these limits, so raise the connector's request rate cautiously.

Every stream except task_profitability uses Uptick's cursor pagination and requests 1,000 records per page, so the number of requests a stream needs is roughly its record count divided by 1,000. At the default budget of 60 requests per minute, a sync reads up to about 60,000 records per minute across all streams.

Two settings control how fast the connector reads from Uptick:

  • max_requests_per_minute sets a single request budget that all streams and threads share (allowed range 1–600). The default of 60 requests per minute is a conservative value that Airbyte chose, and it's the throughput ceiling for the whole sync. Large workspaces with millions of records can sync more slowly than they did before version 1.3.0. If Uptick confirms your workspace tolerates more traffic, raise this value. If Uptick returns HTTP 429 responses, lower it.
  • num_workers sets how many requests run at the same time. The default is 3 and the maximum is 10. Because every request still counts against max_requests_per_minute, adding workers only speeds up a sync when slow API responses keep the connector from using its full per-minute budget.

When Uptick throttles a request and returns a Retry-After header, the connector waits the indicated time before retrying. If the header asks for a wait of 30 minutes or longer, the connector fails the stream with a rate-limit error instead of waiting. Without a Retry-After header, the connector backs off exponentially. The connector retries a failed request up to five times.

To reduce API usage, sync only the streams you need and schedule syncs no more often than your reporting requires.

IP allow list​

If you use Airbyte Cloud and your organization restricts access to specific IPs, add the Airbyte Cloud IP addresses to your allow list.

Reference​

Config fields reference

Field
Type
Property name
string
base_url
string
client_id
string
client_secret
object
credentials
integer
max_requests_per_minute
integer
num_workers
string
password
string
username

Changelog​

Expand to review
VersionDatePull RequestSubject
2.1.32026-10-2289668Promote connector to certified support level.
2.1.22026-10-2289616Request 1,000 records per page; declare attributes, relationships, type, invoicelineitems.subtotal, and properties.address.place_id in stream schemas; accept date-only cursor state; reject a Base URL outside onuptick.com on check; stop validating email fields and tasks.workorder_url as email and uri formats because Uptick returns "" when they're unset; update the base image and vendor docs links
2.1.12026-10-2189505Reject an empty or whitespace-only base_url and remove unused legacy config fields
2.1.02026-10-2087436Add OAuth 2.0 authorization-code (PKCE) authentication with the read-only scope
2.0.12026-10-2089415Update dependencies
2.0.02026-10-1688925Upgrade the Uptick API to v2.16, correct the types of object and numeric fields, make majorservices full refresh only, filter servicegroups and accreditationtypes server-side, and add product_id to invoicelineitems
1.3.32026-10-1388821Update dependencies
1.3.22026-10-0688063Update dependencies
1.3.12026-09-2987373Update dependencies
1.3.02026-09-2886356Add a configurable request budget (default 60/min), refresh expired tokens mid-sync, and normalize base_url
1.2.12026-09-2286843Update dependencies
1.2.02026-09-2186363Emit attribute values verbatim and filter servicegroups and accreditationtypes incrementally
1.1.32026-09-1586280Update dependencies
1.1.22026-09-0885702Update dependencies
1.1.12026-08-1884790Update dependencies
1.1.02026-08-1283710Add 6 new streams (clientcontacts, propertycontacts, promptquestions, promptanswergroups, promptanswers, majorservices), add fields to the clients, properties, invoices, defectquotes, servicequotes, users, and purchaseorders streams, and make relationship field extraction null-safe
1.0.32026-08-1184162Update dependencies
1.0.22026-08-0483652Update dependencies
1.0.12026-07-2883098Update dependencies
1.0.02026-07-2173740Upgrade the Uptick API to v2.15 and remove deprecated fields from the branches, defectquotelineitems, servicetasks, and tasksessions streams
0.5.162026-07-2182628Update dependencies
0.5.152026-07-1481991Update dependencies
0.5.142026-06-3081268Update dependencies
0.5.132026-06-2380682Update dependencies
0.5.122026-06-1680076Update dependencies
0.5.112026-06-0979539Update dependencies
0.5.102026-06-0279025Update dependencies
0.5.92026-04-2877504Update dependencies
0.5.82026-04-2176809Update dependencies
0.5.72026-03-3175703Update dependencies
0.5.62026-03-1775044Update dependencies
0.5.52026-03-1074493Update dependencies
0.5.42026-02-2473926Update dependencies
0.5.32026-02-2372302Add fields to defectquotes and projects streams
0.5.22026-02-1773433Update dependencies
0.5.12026-02-1073007Update dependencies
0.5.02026-01-2271122Add invoice_id to invoicelineitems, and add 6 new streams: servicetasks, routineservices, routineservicelevels, routineservicetypes, routineserviceleveltypes, subtasks
0.4.32026-01-2072056Update dependencies
0.4.22026-01-1471437Update dependencies
0.4.12025-12-1870713Update dependencies
0.4.02025-12-1068194Remove expensive calculation fields from tasksessions, add more streams, including task profitability
0.3.92025-11-2570176Update dependencies
0.3.82025-11-1869684Update dependencies
0.3.72025-10-2968880Update dependencies
0.3.62025-10-2168365Update dependencies
0.3.52025-10-1767585Remove projectsectiontask and add more incremental sync streams
0.3.42025-10-1467855Update dependencies
0.3.32025-10-0767515Update dependencies
0.3.22025-10-0367020Remove start_date, include more task fields
0.3.12025-09-3066839Update dependencies
0.3.02025-09-2566410Add more streams
0.2.42025-09-2466598Update dependencies
0.2.32025-09-0965733Update dependencies
0.2.22025-09-0765534Add extra_fields to property stream
0.2.12025-08-2465445Update dependencies
0.2.02025-08-22Update task profitability stream to use start_date parameter
0.0.112025-08-2165061Add users and task profitability streams
0.0.102025-08-1564942Fix docker image entrypoint for platform syncs
0.0.92025-08-1464170adds cursor pagination, incremental sync and rate limiting
0.0.82025-08-1064845Update dependencies
0.0.72025-08-0264403Update dependencies
0.0.62025-07-2664055Update dependencies
0.0.52025-07-2063685Update dependencies
0.0.42025-07-1263165Update dependencies
0.0.32025-07-0562739Update dependencies
0.0.22025-06-2862220Update dependencies
0.0.12025-06-10Initial release by @sajarin via Connector Builder