If you’re already using the app in our legacy Custom Objects mode, please note that reinstallation will automatically switch your configuration to App Objects mode. If your using Custom Objects mode and need to reinstall the app, please submit a support request so we can assist you.
Before you can start using StopWatch for HubSpot, you must successfully install the app within your HubSpot account. Choose one of the 2 options below to get started.
Install via the HubSpot App Marketplace
Install via direct OAuth link
The user who first installs the app in a given HubSpot Portal is the designated StopWatch for HubSpot Primary Admin. Managing additional admins is handled via user-specific app settings. If you need to update your primary admin, please submit a support request
After the installation process is complete, hopefully you’ll see an installation success message. If you see an error message, please wait a couple of minutes before trying again. If you see an error message again, please submit a support request. For reference, we’ve included some screenshots of the installation process below.
As part of the installation process, HubSpot will ask you to confirm within which account/portal you’d like to install the StopWatch for HubSpot app. You’ll then be prompted to allow StopWatch for HubSpot access to certain information and permissions relating to the selected HubSpot account. We only request access and permissions necessary to deliver our services. If you’d like to discuss why we need certain access or permissions, please get in touch via email: support@threadi.au
Free trial ended? Create a subscription to continue enjoying access to all app features
Price Lock Promise: In March 2026, we committed to never raising prices for . As long as your subscription remains active, your price is locked in.
Please ensure you’ve successfully installed StopWatch for HubSpot within your HubSpot account before proceeding with any steps outlined in this section.
The first time you successfully install StopWatch for HubSpot, you’ll gain access to all app features as part of our 💥 14 day free trial period 💥. Once this free trial period has ended, you’ll need to choose and confirm your StopWatch for HubSpot subscription plan.You can compare all available subscription options on our Pricing page. If you select a paid subscription, you’ll need to confirm via our third-party payment provider, Stripe. Once you’ve successfully confirmed your subscription, you can manage it via our customer portal (powered by Stripe).
Links for each subscription option are available here. Multiple currency options are available, including AUD, USD, GBP, EUR, CAD, NZD
If you’ve chosen the 🤗 Free plan, all you’ll need to do to confirm your subscription is nominate your users via our admin app settings.
Please note, there will be no chance to change or rotate users at a later date. If you need other members of your team to use the app after having already nominated your users, you’ll need to upgrade to a paid subscription.
The StopWatch for HubSpot experience, and the quality of your time tracking data, relies heavily on your interaction with the features made available by the app.
We recommend tracking time via our App Cards and/or our Custom Workflow Actions only. We do not recommend creating or updating “Time Log” records manually or by any means other than interacting directly with StopWatch for HubSpot app features.
, the StopWatch and StopWatch (Preview) App Cards can be made available on HubSpot Custom Object views. If you’d like to learn more about using the StopWatch App Card with Custom Objects, please feel free to make a request via our support form.
In most cases, App Cards are hidden by default. You must follow the steps outlined below to add them to your HubSpot CRM Views.
How to add an App Card to a CRM View
1
Navigate to HubSpot Settings
Open your HubSpot account and click the icon in the top navigation bar.
2
Navigate to the relevant Object Type's settings page
Use the left sidebar to navigate to Data Management > Objects >
3
Navigate to the relevant CRM View
Click the Record Customization or Preview Customization tab, then find and click the relevant CRM View. If you only have 1 view, it’ll likely be called Default view.
4
Add the App Card to the CRM View
Hover over the position you’d like to add the App Card, then click the icon. Click into the Card library tab and then search for the relevant . If it’s not already added to the view, click Add card.
5
Reposition & Save
Reposition the App Card as desired, then click Save or Save and exit.
For example, to add the StopWatch App Card to your Contact right sidebar view:
StopWatch for HubSpot - Add the StopWatch App Card to a HubSpot CRM View
Your experience using the StopWatch, StopWatch (Preview) and StopWatch (Help Desk) App Cards should be largely identical. The only difference between these App Cards is where they can be placed.
To track time against the CRM record you are viewing (or previewing), use the ⏱️ Timer toggle visible at the top of the App Card.When you use a StopWatch App Card to track time against a HubSpot CRM record, the app creates/updates a Time Log record and associates it with you are tracking time against. You can view and navigate to your Time Log records using the right sidebar (see example screenshot below).
In addition to being associated with the CRM record time is tracked against, Time Logs can also be associated with that record’s Primary (or only) Associated Company. See our App Settings section for more information on our Associate Primary Company admin-level setting.
The StopWatch App Cards offer the ability to Quick Add a time tracking session. This is intended to be used in the following scenarios:
Scenario
Detail
1. ‘Batch’ / ‘end-of-day’ time tracking method
For customers who prefer or need to be able to input historic time tracking sessions manually, rather than inputting time tracking sessions in real-time via the ‘Timer’ toggle.
2. Forgotten to track time spent
For customers who may have forgotten to track time via the ‘Timer’ toggle and need to be able to manually input the forgotten time tracking session.
To use this feature, simply expand the Quick Add section, input all the relevant information relating to the time tracking session you’d like to record and click ‘Submit’.
Associate Engagements is a user-specific setting (disabled by default).
This feature is only available if the 1 Time Log Per Session user-specific setting is enabled. Review our App Settings section for more information.
You can associate time tracking sessions with specific HubSpot Engagements linked to the CRM record you’re viewing. The following HubSpot Engagement types are supported by this feature:
Tasks (including Subtasks)
Meetings
Calls
Simply check the Associate Engagements? checkbox in the App Card and select the relevant Engagement record(s) you’d like the time tracking session to be associated with. You can filter the list of available options by Engagements you own and/or Engagement Type. This feature is available when tracking time manually via the timer toggle, as well as via the Quick Add feature.
This feature unlocks powerful reporting and automation capabilities by enabling you to associate Time Logs with specific .For example, build custom reports to analyse your time spent on specific Tasks, Meetings and Calls, offering deeper insights into team productivity, project allocation and process efficiency. It also facilitates advanced automation workflows that can trigger based on time tracked against particular HubSpot Engagements, streamlining your operational processes and enhancing overall performance.
This feature is only available if the 1 Time Log Per Session user-specific setting is enabled. Review our App Settings section for more information.
If you no longer wish to submit a time tracking session after starting a timer, use the Cancel button to cancel the session. In the background, this deletes the relevant Time Log record that was created when you started the timer.
If you installed StopWatch for HubSpot prior to 1 April 2026, you may need to reauthenticate in order to gain access to this feature. To do this, simply install the app again (there’s no need to uninstall first). See the Installing StopWatch for HubSpot section for instructions.
Flagging a time tracking session as billable populates a number of Time Log properties that help you keep track of Billable Tracked Time vs. Total Tracked Time.💫 Unlimited subscribers also have access to the Billable Amount, Cost Amount and Margin Amount Time Log properties, which are automatically populated based on billable rates set by a StopWatch for HubSpot Admin user. This is intended to support common invoicing and workforce profitability analysis use cases.Within the Billable RatesApp Settings tab, app admins can choose between the following Billable Rate Modes:
👤 User-Based: billable rates are managed per HubSpot User
As much as possible, we recommend you avoid updating Time Logs manually
When selecting Time Log properties for your views, reports and general analysis, we recommend using the Tracked Time and Amount properties that are appeneded with “Calculated” (i.e. not the properties appended with “Legacy”). This is because the “Calculated” properties automatically update to reflect changes made to the corresponding Minutes and Rate properties. “Legacy” properties are only updated when a new time tracking session is submitted.
To decrease the likelihood of time tracking data quality issues for our customers, we generally recommend avoiding manually updating Time Log records. However, we understand that in some cases this may be unavoidable. the tracked time data stored on an individual Time Log record, there are a few options available to you.
Manage Time Log App Cards
1
Ensure the Manage Time Log and/or Manage Time Log (Preview) App Card(s) are added to the relevant CRM View(s), as outlined above
2
Navigate to the relevant Time Log record view or preview
3
Find the Manage Time Log or Manage Time Log (Preview) App Card and click Edit Time Log
4
Update the relevant input fields and click Save
Timesheets
Refer to the Editing Time Logs heading within the Timesheets section below
Direct Update of Time Log Properties
This is the riskiest of options available. If you must use this method, please exercise caution.
If you must directly update Time Log properties, please restrict these updates to the properties listed below. Any issues relating to changes made to properties not listed below will not be covered by standard StopWatch for HubSpot support:
Depending on your specific combination of StopWatch for HubSpot account and user-specific settings, the aggregation of and data contained within your Time Logs may vary. Expand the following sections for explanations of how Time Logs can vary depending on your settings:
Enabling this setting can unlock powerful Time Log segmentation capabilities
1 Time Log Per Session is an optional, user-specific setting. It is disabled by default and available only to 👥 Team and 💫 Unlimited subscribers.
Each submitted time tracking session results in 1 Time Log Record (i.e. no Time Log aggregation). This unlocks powerful segmentation capabilities by enabling users to set custom Time Log Titles, Categories and Descriptions.
Submission of Category can be made mandatory via enabling the Require Time Log Category admin setting. See our App Settings section for more information.
By default, when time is tracked against a HubSpot CRM record via the StopWatch App Card, information about this tracked time is stored on an associated “Time Log” record. If you use only StopWatch for HubSpot app features for creating and managing Time Log records (as is recommended), there should exist in your HubSpot account 1 Time Log record per unique combination of the following variables:
Object Type (e.g. CONTACT)
Object/Record ID (e.g. 1234567890)
HubSpot User ID (e.g. 12345)
Example: CONTACT_1234567890_12345
These variables are used to construct the primary Time Log display property (StopWatch Record ID), for example CONTACT_1234567890_12345 (where CONTACT is the object type of the record that time is being tracked against, 1234567890 is the relevant Contact record ID and 12345 is the HubSpot user ID of the person tracking the time).
“Split Time Logs By Week” and “Split Time Logs By Month” are optional, user-specific settings. They are both disabled by default.
For any period of time where either of the optional, user-specific Split By Week or Split By Monthapp settings are enabled, there should exist in your HubSpot account 1 Time Log record per unique combination of the following variables:
Each Time Log record contains , reflecting a summary of all relevant time tracking sessions, with respect to the . This data is visible in the left sidebar on the Time Log record view (see screenshot below). The display of these properties can be customised within your HubSpot account settings.
Information relating to each individual time tracking “session” can be viewed as within the activity timeline of the relevant Time Log record (see image below).
These Notes are standard HubSpot Engagement records, of “Note” type. They are automatically generated by StopWatch for HubSpot based on interaction with our App Cards and/or Custom Workflow Actions. If the app encounters an issue when creating these Notes, this is treated as a non-critical error. As such, it’s possible that not all time tracking sessions will be represented as a Note in the Time Log activity timeline.
The Timesheet interface provides a weekly view of your relevant Time Log records, directly inside HubSpot.
The Timesheet displays Time Logs created while either of the following user-specific settings were enabled: 1 Time Log Per Session or Split Time Logs By Week.
The Timesheet always represents one HubSpot user at a time
can view and edit any HubSpot User’s Timesheet. Non-admin users can only view and edit their own Timesheet.
By default, the Timesheet shows a weekly view. You can navigate between weeks using the arrow buttons near the , or use the date selector to jump to a specific week.In Grid view, click a date column header to focus the Timesheet on that specific day. In List view, click a value in the Date column to do the same.If a specific day has been selected, click Week view to return to the default weekly view.
The Timesheet can display Time Logs in either of the following modes:
Grouped Time Logs are grouped by the HubSpot CRM record that time has been tracked against
Individual Logs Each Time Log is displayed as its own row
Grouped mode is useful for reviewing and editing total time tracked against a CRM record. Individual Logs mode is useful when you want to inspect or edit each Time Log individually.
The Tags column is intended to help you segment your Timesheet. Depending on the Time Log data, tags may include:
CRM object type, such as Deal, Company, Ticket etc.
Time Log Category
Billable Service Name
Whether the Time Log is Billable
Whether the Time Log’s timer is on
Use the Filters dropdown and/or Search input to constrain the displayed data accordingly.
If a timer is currently running for a Time Log, the Timesheet displays an ON status beside that Time Log’s display title, and a Timer On tag in the Tags column.
The headline metrics at the top of the Timesheet can be customised. Available metrics include:
Total Time
Billable Time
Billable %
Billable Amount
Cost Amount
Margin Amount
Margin %
You can optionally compare headline metrics against a previous period, such as the previous week, previous month, or previous year.The metric(s) displayed in the results table can also be changed. In Grid view, one table metric is displayed at a time. In List view, you can select multiple table metrics.
The available hours tracked this week progress bar in the shows how much of a user’s available time has been used in the selected week. This is calculated based on the Weekly Capacity (Hours) user-specific app setting.
To submit a new time tracking session, click the add button (looks like ) above the table. This opens a modal where you can input all relevant information relating to the time tracking session you’d like to record. First find the HubSpot CRM record you want to track time against, then input the relevant information, and then finally click Submit Session. Alternatively, in some cases, you may be able to simply click Start Timer to begin a time tracking session, rather than submitting a complete session.
To open an edit Time Log modal, click a Time Log title, or a clickable metric value.If the selected value represents multiple Time Logs, you will be prompted to choose which Time Log you want to edit.From the edit Time Log modal, you can navigate directly to the Time Log record view, update several Time Log properties, stop the timer (if it’s running) and, depending on your install configuration, you may also be able to delete the Time Log record.
Time Logs with an active timer generally cannot be edited from the Timesheet. Use the Stop Timer button first before attempting to edit.
Click the copy/export button (looks like ) above the table to copy the currently visible Timesheet table in TSV format. You can paste this directly into spreadsheet tools such as Google Sheets or Microsoft Excel.Exported values are formatted for spreadsheet use:
Duration values are converted to hours, such as 1.5 for 1 hour 30 minutes.
Percentage values are converted to decimals, such as 0.9 for 90%.
Currency values are exported as numbers, with the currency unit included in the column heading.
This feature is only available to our 💫 Unlimited subscribers. Information about our subscription options is available on our Pricing page.
To use this feature, specific users must first be nominated by a StopWatch for HubSpot admin. Admins can manage their Web UI Users via the admin app settings.
Log in to StopWatch for HubSpot’s Web UI
Our Web UI allows your team to track time against HubSpot CRM records, without needing to log into HubSpot.This is particularly useful for team members who aren’t always at their desk, but still need to track their time. It’s available via any web browser, so you can even track time on your phone.
To access this feature, you’ll need to login here (a link is sent to the supplied email address). You can also get there via the “Web Login” button on our app homepage.Once you’re in, follow the prompts to find the HubSpot CRM record you’re wanting to track time against, and then submit your time tracking session.
This feature is available to 👥 Team and 💫 Unlimited subscribers only
After enabling this feature, our App Events may not appear in your HubSpot Portal immediately. Please allow up to 24 hours for App Events and related features to become visible. If you don’t see our App Events after this time, please submit a support request.
StopWatch for HubSpot supports App Events for time tracking sessions. This is an , controlled via the Admin App SettingsWhen enabled, App Events are logged within the relevant activity timeline for each submitted time tracking session. This makes it possible to build HubSpot Workflows and Custom Reports based on the submission of individual time tracking sessions.
By default, App Events are often hidden from the activity timeline. You must manually add them to the relevant activity timeline view by clicking Activity > Integrations. See the screenshot below for reference.
This feature is available when tracking time against the HubSpot CRM object types listed below. All time tracking are supported.
Only relevant to customers using App Objects Mode. If you’re using the legacy Custom Objects Mode, you can configure webhooks directly via native HubSpot features.
StopWatch for HubSpot supports Webhook subscriptions for time tracking sessions. This is an , controlled via the Admin App SettingsWhen enabled, webhook requests are sent to a specified target URL when Time Logs are created and when time tracking sessions are submitted. This makes it possible to build push-based integrations with external systems and build custom automation workflows.
Time Log Creation
When a Time Log is created, a webhook is triggered, sending a request to the configured target URL with a request body that follows the following structure:
{ "eventId": 1122334455, // unique identifier for the webhook event "subscriptionId": 123456789, // unique identifier for the webhook subscription that triggered the event "portalId": 11111111, // unique identifier for the HubSpot Portal where the event occurred "appId": 552213, // unique identifier for the app that triggered the event (i.e. StopWatch for HubSpot) "occurredAt": 1781663476554, // unix timestamp in milliseconds representing when the event occurred "subscriptionType": "object.creation", // type of event that triggered the webhook "attemptNumber": 0, // number of attempts made to deliver the webhook (starts at 0 for the first attempt) "objectId": 9988776655, // unique identifier for the Time Log record that triggered the event "objectTypeId": "1-5233895", // unique identifier for the Time Log object type in HubSpot "changeFlag": "CREATED", // type of change that occurred to trigger the event "changeSource": "INTEGRATION", // source of the change that triggered the event "sourceId": "552213" // unique identifier for the source of the change}
Time Tracking Session Submissions
When a time tracking session is submitted, a webhook is triggered, sending a request to the configured target URL with a request body that follows the following structure:
{ "eventId": 1122334455, // unique identifier for the webhook event "subscriptionId": 123456789, // unique identifier for the webhook subscription that triggered the event "portalId": 11111111, // unique identifier for the HubSpot Portal where the event occurred "appId": 552213, // unique identifier for the app that triggered the event (i.e. StopWatch for HubSpot) "occurredAt": 1781662300785, // unix timestamp in milliseconds representing when the event occurred "subscriptionType": "object.propertyChange", // type of event that triggered the webhook "attemptNumber": 0, // number of attempts made to deliver the webhook (starts at 0 for the first attempt) "objectId": 9988776655, // unique identifier for the Time Log record that triggered the event "objectTypeId": "1-5233895", // unique identifier for the Time Log object type in HubSpot "propertyName": "a552213_last_end_date", // name of the Time Log property that was changed "propertyValue": "1781662297005", // new value of the changed property "changeSource": "INTEGRATION", // source of the change that triggered the event "sourceId": "552213", // unique identifier for the source of the change "isSensitive": false // indicates whether the changed property contains sensitive information}
Time Log Deletion
When a Time Log is deleted, a webhook is triggered, sending a request to the configured target URL with a request body that follows the following structure:
{ "eventId": 1122334455, // unique identifier for the webhook event "subscriptionId": 123456789, // unique identifier for the webhook subscription that triggered the event "portalId": 11111111, // unique identifier for the HubSpot Portal where the event occurred "appId": 552213, // unique identifier for the app that triggered the event (i.e. StopWatch for HubSpot) "occurredAt": 1781663476554, // unix timestamp in milliseconds representing when the event occurred "subscriptionType": "object.deletion", // type of event that triggered the webhook "attemptNumber": 0, // number of attempts made to deliver the webhook (starts at 0 for the first attempt) "objectId": 9988776655, // unique identifier for the Time Log record that triggered the event "objectTypeId": "1-5233895", // unique identifier for the Time Log object type in HubSpot "changeFlag": "DELETED", // type of change that occurred to trigger the event "changeSource": "INTEGRATION", // source of the change that triggered the event "sourceId": "552213" // unique identifier for the source of the change}
Return a 2xx response code from your server within 15 seconds to acknowledge successful receipt of the webhook request
When you enable the Webhooks setting, you’ll be allocated a request Signing Secret. This secret can be used to verify that incoming webhook requests were sent by StopWatch for HubSpot.
Webhook Request Headers
Each webhook request includes headers you can use to verify that the request came from StopWatch for HubSpot:
X-StopWatch-Signature e.g. v1=abc123
X-StopWatch-Timestamp e.g.
X-StopWatch-Webhook-Id e.g.
Verification Steps
1
Read the raw request body
Read the raw request body exactly as received. Do not parse the body as JSON or in any other way before using it to calculate the signature.
2
Check the timestamp
Check the X-StopWatch-Timestamp header to ensure the request is recent. Reject the request if the timestamp is more than 5 minutes old to prevent replay attacks.
3
Create an HMAC-SHA256 signature
Create an HMAC-SHA256 signature using your Webhook Signing Secret and the raw request body. The signature should be in the format: v1={hexdigest}, where {hexdigest} is the hexadecimal representation of the HMAC-SHA256 digest.
4
Compare signatures
Compare your calculated signature with the value in the X-StopWatch-Signature header. Use a constant-time comparison method to prevent timing attacks.
5
Reject invalid requests
If the signatures do not match, reject the request with an appropriate HTTP status code (e.g. 401 Unauthorized).
Example Webhook Request Validation Code
Example Webhook Request Validation
import hmacimport hashlibimport timefrom flask import Flask, request, abortSECRET = "{{your_webhook_signing_secret}}"def validate_stopwatch_webhook(headers, raw_body: bytes) -> bool: signature_header = headers.get("X-StopWatch-Signature", "") timestamp_header = headers.get("X-StopWatch-Timestamp", "") if not signature_header.startswith("v1="): return False try: timestamp_ms = int(timestamp_header) except ValueError: return False # Reject requests older than 5 minutes. now_ms = int(time.time() * 1000) if abs(now_ms - timestamp_ms) > 5 * 60 * 1000: return False received_signature = signature_header.removeprefix("v1=") # Use the exact raw request body bytes, not parsed JSON. expected_signature = hmac.new( SECRET.encode("utf-8"), raw_body, hashlib.sha256, ).hexdigest() return hmac.compare_digest(expected_signature, received_signature)app = Flask(__name__)# Example endpoint to receive StopWatch for HubSpot webhooks@app.post("/catch-stopwatch-webhook")def catch_stopwatch_webhook(): raw_body = request.get_data() if not validate_stopwatch_webhook(request.headers, raw_body): abort(401) event = request.get_json() # Process event here. return {"ok": True}, 200
Each Time Log record created via interaction with the StopWatch App Card is automatically assigned a HubSpot “Owner”, reflecting the HubSpot user who is tracking the time. This is also the case for Time Logs created via the app’s Custom Workflow Actions that are not designated as Workflow-Managed.The inclusion of this feature within StopWatch for HubSpot is designed to allow for more powerful reporting and automation when working with Time Log records.
Among other benefits, record ownership of Time Logs allows for:
Dynamic filtering within reports, and
Subsequent record ownership assignment within workflows
By default, if a record of is assigned an Owner, the relevant HubSpot user is sent an email notification, alerting them to their ownership of the record.This email notification can be managed by users within HubSpot’s settings:
1
Navigate to HubSpot Settings
Open your HubSpot account and click the icon in the top navigation bar.
2
Navigate to User-Specific Notifications
Via the left sidebar, navigate to ‘Your Preferences’ > ‘Notifications’
3
Find 'Custom Objects' and Disable the Notification
Locate ‘Custom Objects’ in the centre panel within the ‘Email & Desktop’ tab. Disable the email notification relating to ‘Custom object assigned to you’.
Unfortunately, this notification can only be managed collectively across all custom objects within a HubSpot account (i.e. it’s not possible to manage this notification granularly, per custom object type). Rather than turning them off in HubSpot, alternatively you could consider configuring your email inbox filters / settings to more selectively “hide” or “delete” these notification emails.
HubSpot Custom Reports and Workflows are restricted to certain HubSpot subscription levels. Please review the previously linked HubSpot Knowledge Base Articles to confirm whether you have access to these features.
Once you have collected some time tracking data in your HubSpot account (in the format of Time Log records), you’re likely going to want to extract some value from it.
You can use your Time Logs as you would any other CRM object type within your HubSpot account. With your Time Logs as the centrepiece, we recommend creating or updating your existing HubSpot reports/dashboards to better understand how your team is collectively spending their time across Deals, Contact, Companies, Tickets, Appointments, Courses, Listings, Services and/or Projects.To help get the ball rolling, below are a couple of screenshots of example HubSpot reports leveraging data made available by StopWatch for HubSpot.
This feature is available to 💫 Unlimited subscribers only
💫 Unlimited subscribers have access to 3 custom workflow actions provided by StopWatch for HubSpot. There’s a daily usage cap of 1,000 custom workflow action requests . Any requests made over this usage cap will be rejected by the app.The great majority of requests will be processed within 5 minutes of being received. If you require more requests per day or faster processing times, please submit a support request.
Title
Detail
Start Timer
This custom workflow action starts a StopWatch for HubSpot Timer, relevant to the record enrolled in the given workflow. The “Start Timer” action includes an option to tag a Time Log as being ‘Workflow-Managed’. As a general rule, you should use this feature when the time being tracked does not directly relate to the Owner of the given CRM record.
Stop Timer
This custom workflow action stops a StopWatch for HubSpot Timer, relevant to the record enrolled in the given workflow. If you’ve tagged the corresponding “Start Timer” action as being ‘Workflow-Managed’, be sure to use the exact same tag within the “Stop Timer” action. Failure to do so could lead to errors relating to the app not being able to find the corresponding Time Log. The “Stop Timer” action also includes an option to exclude out of office hours, with configurable settings including the ability to specify your timezone and the start/end hours of your standard work day. This allows for the support of common sales and service time tracking use cases involving the analysis of how long CRM records spend in a given stage/status, excluding out of office hours.
Stop Timer on Existing Time Log
[Time Log-based Workflows Only] This custom workflow action stops the StopWatch for HubSpot Timer directly on the Time Log enrolled in the given workflow. Please note, for installs using the app in the legacy Custom Objects mode, this feature can only be made available on a case-by-case basis. If you’d like to request access, please submit a support request
These custom workflow actions come with settings that offer far greater time tracking flexibility, in comparison to using the StopWatch App Card feature alone. For example, it’s possible to configure workflows that track the time an individual record spends within a given object stage (e.g. Deal Stage, Contact Lifecycle Stage, Ticket Status, Listing Stage, Service Stage), excluding out of office hours.
To learn more about how to use your Time Logs in HubSpot’s custom reporting and automation tools, please review the previously linked HubSpot Knowledge Base Articles.
Only admins can edit the account-specific settings. To access StopWatch for HubSpot settings:
1
Navigate to HubSpot Settings
Open your HubSpot account and click the icon in the top navigation bar.
2
Navigate to Connected Apps
Via the left sidebar, navigate to Account Management > Integrations > Connected Apps
3
Find & Click 'StopWatch'
From the list of apps connected to your HubSpot account, find and click StopWatch. Then click through to the Settings tab.
Admin
User
Categories
Billable Rates
Please refer to the below table for an explanation of all the account-specific settings available within the “Admin Settings” tab.
Setting
Default
Description
Nominated Users
Primary Admin
Only visible to our 🤗 Free subscribers. A list of up to 3 nominated users with access to app features. User rotation is not supported. Once you successfully nominate 3 users, you will not be able to make further changes.
Web UI Users
None
Only available to our 💫 Unlimited subscribers. A list of nominated users with access to our Web UI feature.
StopWatch API Key
None
Manage your StopWatch API authentication token. Only available to our 💫 Unlimited subscribers and only visible to Primary Admins.
Webhooks
OFF
Subscribe to Time Log creation and time tracking session submission webhook events.
Lockdown User Settings
OFF
If enabled, prevents non-admins from modifying their own user-specific settings.
Lockdown User Settings Exceptions
None
Indicates which users should be exempt from the ‘Lockdown User Settings’ restriction (described above). This gives specific non-admins the ability to modify their own user-specific settings, while preventing all other non-admins from doing so. Only available if ‘Lockdown User Settings’ is enabled.
Auto Start Override
OFF
When enabled, the Auto Start Timer feature is engaged whenever a user loads a CRM record view containing the StopWatch App Card, provided the timer was last stopped more than 1 minute ago. This removes the default requirement for a prior time tracking session to have been logged against the given CRM record. This makes it possible to use the Auto Start Timer and 1 Time Log Per Session features concurrently.
App Events for Time Tracking Sessions
OFF
Only available to our 👥 Team and 💫 Unlimited subscribers. When enabled, App Events are logged within the relevant HubSpot CRM record’s activity timeline for each submitted time tracking session. This makes it possible to build HubSpot Workflows and Reports based on the submission of individual time tracking sessions.
Timesheet Managers
None
Assign the role of Timesheet Manager to individual users. Timesheet Managers can view and edit all users’ Timesheets and submit time tracking sessions on their behalf. App Admins inherently have Timesheet Manager permissions, so they aren’t shown as options in this setting.
Require Time Log Category
OFF
Only available to our 👥 Team and 💫 Unlimited subscribers. When enabled, users with the 1 Time Log Per Session setting enabled must select a Category when submitting a new time tracking session. This does not apply when editing existing Time Logs or to Time Logs created by custom workflow actions.
Associate Primary Company
OFF
Only available to our 💫 Unlimited subscribers. In addition to being associated with the CRM record time is tracked against, Time Logs are also associated with that record’s Primary (or only) Associated Company. Applied only when creating Time Logs via StopWatch . Only relevant when tracking time against CRM Object Types other than Company.
Please refer to the below table for an explanation of all the user-specific settings available within the “User Settings” tab.
Setting
Default
Description
Admin User
OFF
Visible to admins only If enabled, this user is assigned admin privileges. Only existing admins can assign/remove admin privileges to/from other users. The cannot have their admin privileges removed within the app settings. To change the Primary Admin user, please submit a support request.
1 Time Log Per Session
OFF
If enabled, each time tracking session is represented as its own Time Log record. Enables users to specify custom Time Log ‘Titles’, ‘Categories’ and ‘Descriptions’, unlocking powerful segmentation capabilities for your time tracking data. Also enables analysis relating to .
Associate Engagements Option
OFF
Only available if the 1 Time Log Per Session setting is enabled. Enables the selective association between Time Logs and one or more related HubSpot Engagements (e.g. Tasks, Meetings and Calls). This makes it possible to create custom reports displaying time tracked against Engagements.
Split Time Logs By Week
OFF
Allows for time tracked via the StopWatch App Card and Workflow Actions to be segmented by the week of a given year. This is useful for reporting and automation use cases where tracked time needs to be segmented by individual weeks of a given year (e.g. ‘Last week’).
Split Time Logs By Month
OFF
Allows for time tracked via the StopWatch App Card and Workflow Actions to be segmented by “Month + Year”. This is useful for reporting and automation use cases where tracked time needs to be segmented by month/year combination (e.g. March 2026).
Auto Start Timer
OFF
If enabled, starts the timer automatically when an individual HubSpot CRM record view is loaded, assuming all of the following conditions are met:
1. The “StopWatch” App Card is present on the given record view. 2. You’ve already tracked time against the given HubSpot CRM record (excl. 1 Time Log Per Session records). The first time tracking session per record (and per period, if you’ve enabled either “Split By Week” or “Split By Month”) must be submitted manually. This condition can be bypassed via the Auto Start Override adming setting. 3. Timer last stopped >1 minute ago. This is to avoid unintentionally restarting the timer soon after having stopped it. This requirement does not apply if you have enabled both the 1 Time Log Per Session user setting and Auto Start Override admin setting.
Billable By Default
OFF
If enabled, all time tracking sessions are flagged as billable by default. If the user has the ‘Billable Time Option’ enabled (see below), they can manually override the billable status for each individual time tracking session.
Billable Time Option
OFF
Allows for time tracked via the StopWatch App Card to be segmented into the groups “Billable” and “Total”. This is particularly useful for reporting and automating use cases where tracked time needs to be segmented as “Billable”, “Total” or “Non-Billable” (i.e. “Total” minus “Billable”).
Round Up Time Tracking Sessions
Disabled
Allows for time tracked via the StopWatch App Card to be rounded up to the nearest 1, 5, 6, 15, 30 or 60 minute interval.
Quick Add Session Increments
Default
Configure the duration increments available when submitting a ‘Quick Add’ time tracking session (in ‘Simple’ submission mode).
Show ‘Team Summary Data’ Section
OFF
If enabled, the aggregated time tracked by all team members and other useful summary data is displayed in the StopWatch App Card (relevant to the CRM record being viewed).
Show ‘Quick Add’ Feature
ON
Controls whether the ‘Quick Add’ feature is displayed within the StopWatch App Card.
Preferred Date Format
Default
Customise the date format used in certain app features, including the Start Date Quick Add input field. Medium and Long date format options are .
Max One Active Timer
OFF
Controls whether only one timer can be active at a time. If enabled, manually starting a timer via the StopWatch App Card will automatically stop any other active timers belonging to the given user.
Weekly Capacity (Hours)
0
The number of hours this user is available per week (min: 0, max: 168). Used for capacity calculations in the app’s Timesheets feature.
Time Log Categories can only be selected by users who have the ‘1 Time Log Per Session’ setting enabled (explained in the ‘User Settings’ tab).
Manage the categories that are available when creating Time Logs. There are a handful of default categories that are automatically available upon installing the app. These categories are customisable — it’s possible to delete existing and create new categories for your team to use when they submit time tracking sessions.
Billable Rates are only available for 💫 Unlimited subscribers
Manage the hourly billable rate and hourly cost used by StopWatch when calculating the Time Log Billable Amount, Cost Amount and Margin Amount properties.Admins can choose between:
👤 User-Based: billable rates are managed per HubSpot User
💼 Service-Based: billable rates are managed per
The Service selector in the StopWatch App Card is only shown when all of the following conditions are true:
Billable Rate Type is set to Service-Based
At least 1 Service has been configured
The user’s 1 Time Log Per Session setting is enabled
Dates and times are always stored in HubSpot as UTC. However, when displaying dates and times in certain app interfaces, StopWatch for HubSpot uses your by default.
By default, when displaying times in certain app interfaces, StopWatch for HubSpot uses your . However, you can override this default behaviour by specifying a preferred time zone per user, as follows:
1
Navigate to HubSpot Settings
Open your HubSpot account and click the icon in the top navigation bar.
2
Navigate to Users & Teams
Via the left sidebar, navigate to Account Management > Users & Teams
3
Click Relevant User
From the list of users, click the relevant user’s display name to open their user configuration area.
4
Preferences > Time Zone
Click the Preferences tab, then scroll down to the Time zone setting. Update the time zone as required, then click Save.
Unfortunately, enabling the Update time zone based on device location setting is not currently compatible with this feature. For this feature to work, you must select a specific time zone.
If you need to uninstall the app from your HubSpot account, this can be performed via HubSpot’s Connected Apps settings page.
1
Navigate to HubSpot Settings
Open your HubSpot account and click the icon in the top navigation bar.
2
Navigate to Connected Apps
Via the left sidebar, navigate to Account Management > Integrations > Connected Apps
3
Find 'StopWatch' and click 'Actions''
From the list of apps connected to your HubSpot account, find StopWatch and click the Actions dropdown button. Then click Uninstall.
Once the app is uninstalled, your HubSpot account would no longer be connected to the StopWatch for HubSpot app. As such, you would no longer be able to use any StopWatch for HubSpot features. However, any existing will remain stored within your HubSpot account.Additionally, any existing HubSpot Workflows leveraging will be flagged with a Changes needed (or similar) alert. Please note, any such workflow executions occurring after the app has been uninstalled will result in error.StopWatch for HubSpot features and associated data are contained entirely within HubSpot. As such, uninstalling the app is the only action required by you to effectively disconnect your HubSpot account from the app. If you have any questions regarding the disconnection of your HubSpot account with the app, please feel free to submit a support request.
StopWatch for HubSpot is created and managed by Thread Integrations, a small Australian business providing expert system integration, software development & analytics services.
⌘I
{"docsConfig":{"theme":"linden","$schema":"https://mintlify.com/docs.json","name":"Thread Integrations","colors":{"primary":"#6AA850","light":"#6AA850","dark":"#6AA850"},"logo":{"light":"https://mintcdn.com/threadintegrations/-a0yZn5t2jU8z0Uj/logo/light.png?fit=max\u0026auto=format\u0026n=-a0yZn5t2jU8z0Uj\u0026q=85\u0026s=7745351dbee5227c0313fcaf7038580c","dark":"https://mintcdn.com/threadintegrations/-a0yZn5t2jU8z0Uj/logo/dark.png?fit=max\u0026auto=format\u0026n=-a0yZn5t2jU8z0Uj\u0026q=85\u0026s=4928d5c182ef3ee9b61a48f90d4febc5"},"favicon":"https://mintcdn.com/threadintegrations/RlfFcmIRLf5Qay-W/favicon.png?fit=max\u0026auto=format\u0026n=RlfFcmIRLf5Qay-W\u0026q=85\u0026s=d9658ebb301bc2eb71c3b71bf31d15cb","appearance":{"default":"light","strict":false},"navbar":{"links":[{"href":"https://www.threadi.au/support","label":"Support"}]},"footer":{"socials":{"github":"https://github.com/thread-integrations","linkedin":"https://www.linkedin.com/company/thread-integrations"}},"icons":{"library":"fontawesome"},"styling":{"latex":false},"background":{"color":{"light":"#fbfcfa","dark":"#0c0e0d"}},"navigation":{"global":{"anchors":[{"anchor":"Resources","icon":"book-open-lines","href":"/apps/stopwatch"},{"anchor":"Pricing","icon":"wallet","href":"/pricing"},{"anchor":"Support","icon":"circle-question","href":"https://www.threadi.au/support"},{"anchor":"Reviews","icon":"star","href":"/reviews"},{"anchor":"Manage Subscription","icon":"stripe-s","href":"https://billing.stripe.com/p/login/3csdSc2wP68ybTi144"},{"anchor":"Thread Integrations Website","icon":"globe-pointer","href":"https://www.threadi.au/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"threadintegrations","hasAudioNarration":false,"actualSubdomain":"threadintegrations","customDomains":["docs.threadi.au"],"gitSource":{"type":"github","owner":"zaklein","repo":"thread-integrations-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad3dd3097ef286ce64d0596","collectionId":"444833a3-3a20-4ff2-ba0a-cb884fdcfad4","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad3dd3097ef286ce64d0596"},"entitlements":{},"buildId":"6ae1283240695dc7fa1205db","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Resources","count":15},{"language":"default","tag":"StopWatch API","count":10},{"language":"default","tag":"API Reference","count":8},{"language":"default","tag":"Other Resources","count":3},{"language":"default","tag":"App Usage Guides","count":2},{"language":"default","tag":"Pricing","count":1}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"apps/stopwatch","slug":"/apps/stopwatch","pageMetadata":{"title":"StopWatch for HubSpot","description":"This **App Usage Guide** aims to help you get up and running with **StopWatch for HubSpot**, an intuitive time tracking app designed specifically for HubSpot.","icon":"timer","tag":"","sidebarTitle":"","href":"/apps/stopwatch"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"This \", _jsx(_components.strong, {\n children: \"App Usage Guide\"\n }), \" aims to help you get up and running with \", _jsx(_components.strong, {\n children: \"StopWatch for HubSpot\"\n }), \", an intuitive time tracking app designed specifically for HubSpot.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,Badge,Callout,Card,Check,CodeBlock,CodeGroup,Columns,Expandable,Frame,Heading,Icon,Info,Note,OptimizedFrame,OptimizedImage,Step,Steps,Tab,Table,Tabs,Tip,Tooltip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Badge)_missingMdxReference(`Badge`,true);if(!Callout)_missingMdxReference(`Callout`,true);if(!Card)_missingMdxReference(`Card`,true);if(!Check)_missingMdxReference(`Check`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Icon)_missingMdxReference(`Icon`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedFrame)_missingMdxReference(`OptimizedFrame`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Tip,{children:[`Since September 2025, `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` has been `,_jsx(Tooltip,{tip:`The app no longer requires your HubSpot Portal to have access to Custom Objects`,children:_jsx(`u`,{children:_jsx(_components.strong,{children:`compatible with all HubSpot Portals`})})})]}),`\n`,_jsxs(Check,{children:[_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` has been `,_jsx(Icon,{icon:`badge-check`}),` `,_jsx(_components.a,{href:`https://ecosystem.hubspot.com/marketplace/listing/hubclock-by-thread-integrations-552213`,children:`Certified by HubSpot`}),` since July 2024 and was named an `,_jsx(Icon,{icon:`award`}),` `,_jsx(_components.a,{href:`https://community.hubspot.com/t/updated-in-the-app-marketplace-essential-apps-for-customer-service/129698`,children:`Essential App for Customer Service`}),` in 2025.`]}),`\n`,_jsx(Heading,{level:`2`,id:`app-demo-videos`,children:`App Demo Videos`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Usage Demo`,icon:`book`,id:`usage-demo`,children:_jsx(Frame,{caption:`StopWatch for HubSpot - App Usage Demo`,children:_jsx(OptimizedFrame,{className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://www.youtube-nocookie.com/embed/A0peNvimE0k?si=rQUdBcDUXOwEqkwS`,title:`StopWatch for HubSpot - App Usage Demo`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,allowFullScreen:true})})}),_jsx(Tab,{title:`App Card \u0026 Settings`,icon:`timer`,id:`app-card-%26-settings`,children:_jsx(Frame,{caption:`StopWatch for HubSpot - App Card \u0026 App Settings Features`,children:_jsx(OptimizedFrame,{className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://www.youtube-nocookie.com/embed/BGjVctJ7ayA?si=4xmnJrb8azDJyHlY`,title:`StopWatch for HubSpot - App Card \u0026 App Settings Features`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,allowFullScreen:true})})}),_jsx(Tab,{title:`Automation`,icon:`bolt-auto`,id:`automation`,children:_jsx(Frame,{caption:`StopWatch for HubSpot - Custom Workflow Actions Demo (Start Timer \u0026 Stop Timer)`,children:_jsx(OptimizedFrame,{className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://www.youtube-nocookie.com/embed/Vl-ai968Nqs?si=SyzcLmwXZbiqSU3g`,title:`StopWatch for HubSpot - Custom Workflow Actions Demo (Start Timer \u0026 Stop Timer)`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,allowFullScreen:true})})}),_jsx(Tab,{title:`Reporting`,icon:`chart-simple`,id:`reporting`,children:_jsx(Frame,{caption:`StopWatch for HubSpot - Example User Tracked Time vs. Monthly Capacity Report Creation`,children:_jsx(OptimizedFrame,{className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://www.youtube-nocookie.com/embed/HPRxQQ0W_fI?si=Z3nVSH2FMuvlg-fI`,title:`StopWatch for HubSpot - Example User Tracked Time vs. Monthly Capacity Report Creation`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,allowFullScreen:true})})})]}),`\n`,_jsx(`br`,{}),`\n`,_jsx(Heading,{level:`2`,id:`1-installing-stopwatch-for-hubspot`,children:`1. Installing StopWatch for HubSpot`}),`\n`,_jsxs(Accordion,{title:`Installing StopWatch for HubSpot`,icon:`desktop-arrow-down`,iconType:`duotone`,id:`installing-stopwatch-for-hubspot`,children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[`If you’re already using the app in our legacy `,_jsx(_components.strong,{children:`Custom Objects mode`}),`, please note that reinstallation will automatically switch your configuration to `,_jsx(_components.strong,{children:`App Objects mode`}),`. If your using `,_jsx(_components.strong,{children:`Custom Objects mode`}),` and need to reinstall the app, please submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support request`}),` so we can assist you.`]})}),_jsxs(_components.p,{children:[`Before you can start using `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),`, you must successfully install the app within your HubSpot account. Choose one of the 2 options below to get started.`]}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`hubspot`,type:`brands`,href:`https://ecosystem.hubspot.com/marketplace/listing/hubclock-by-thread-integrations-552213`,arrow:true,color:`#FF7A59`,children:_jsx(_components.p,{children:`Install via the HubSpot App Marketplace`})}),_jsx(Card,{icon:`link`,iconType:`duotone`,href:`https://app.hubspot.com/oauth/authorize?client_id=028d1e7a-3622-4421-841b-228cc120088a\u0026redirect_uri=https%3A%2F%2Fstopwatch.threadi.au%2Finstall\u0026scope=crm.objects.owners.read%20crm.objects.deals.read%20crm.objects.services.read%20crm.objects.contacts.read%20crm.objects.courses.read%20crm.objects.companies.read%20crm.objects.listings.read%20crm.objects.appointments.read%20crm.objects.projects.read%20tickets%20automation%20oauth%20crm.app.schemas.a552213_time_log.properties.write%20crm.app.schemas.a552213_time_log.read%20crm.app.objects.a552213_time_log.view%20crm.app.objects.a552213_time_log.create%20crm.app.objects.a552213_time_log.edit%20crm.app.objects.a552213_time_log.delete%20timeline%20crm.objects.users.read\u0026state=ao`,arrow:true,children:_jsx(_components.p,{children:`Install via direct OAuth link`})})]}),_jsxs(Note,{children:[`The user who first installs the app in a given HubSpot Portal is the designated `,_jsx(_components.strong,{children:`StopWatch for HubSpot Primary Admin`}),`. Managing additional admins is handled via `,_jsx(_components.a,{href:`#user-settings`,children:`user-specific app settings`}),`. If you need to update your primary admin, please submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support request`})]}),_jsxs(_components.p,{children:[`After the installation process is complete, hopefully you’ll see an installation success message. If you see an error message, please wait a couple of minutes before trying again. If you see an error message again, please submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support request`}),`. For reference, we’ve included some screenshots of the installation process below.`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`As part of the installation process, HubSpot will ask you to confirm within which account/portal you’d like to install the `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` app. You’ll then be prompted to allow `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` access to certain information and permissions relating to the selected HubSpot account. We only request access and permissions necessary to deliver our services. If you’d like to discuss why we need certain access or permissions, please get in touch via email: `,_jsx(_components.a,{href:`mailto:support@threadi.au`,children:`support@threadi.au`})]})}),_jsx(Heading,{level:`3`,id:`app-installation-process-screenshots`,children:`App Installation Process Screenshots`}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-1.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=ed0b21dfab0965c915b955adc24a1d10`,width:`100%`,\"data-og-width\":`1494`,\"data-og-height\":`915`,\"data-path\":`images/stopwatch/guide-install-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=73ad61e05d9943d8df282c9ef8d1a658 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=78126011682dbe8d0e86ab78354e9cd3 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=22e301e847603699ebd92e1e48509303 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=dc9ea9b1f65675d360a470348cb8f4ee 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=bb1efd6187d05e287862995ce62203ab 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=687ae92afbe1db558a1d57b1a6fd804b 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-2.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=98808ff988239c2099de1056cf681333`,width:`100%`,\"data-og-width\":`559`,\"data-og-height\":`925`,\"data-path\":`images/stopwatch/guide-install-2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-2.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=267cd33f918b2f3fa56b0f646594a43c 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-2.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=489f6c0f4477030104ac0c615b27cd2b 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-2.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=b037afc0459b5e972996f497dddd3b29 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=0d83cb7117ae7a8bc0b1d4b44832cab2 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=a4d5503d104113da75bc5706691cc04b 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=386985299e20735cee89ebcdae81bb9b 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-3.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=fb0e8f897280e8ec3b4c3c407231e570`,width:`100%`,\"data-og-width\":`1304`,\"data-og-height\":`656`,\"data-path\":`images/stopwatch/guide-install-3.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-3.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=b7cfeead7b0f482e8eaa4662f8e4440b 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-3.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d5dbfdfe9ddecd837f26d2fc2fefc7b0 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-3.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=4cdc52eb26add881d04aa3029d759449 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-3.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=bb182f31426e6d4f5250fe32ef09ba17 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-3.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=fbff88545fc4743e8ff77505d0c02215 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-install-3.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=28d93be4fc454ddccbd3ff2eaf4c3791 2500w`})}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#installing-stopwatch-for-hubspot`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`2-subscriptions-and-nominating-users`,children:`2. Subscriptions and Nominating Users`}),`\n`,_jsxs(Accordion,{title:`Subscriptions \u0026 Nominating Users`,icon:`wallet`,iconType:`duotone`,id:`subscriptions-and-nominating-users`,children:[_jsx(Card,{icon:`wallet`,iconType:`duotone`,href:`/pricing?app=stopwatch`,arrow:true,cta:`View Subscription Options`,color:`#FF7A59`,children:_jsx(_components.p,{children:`Free trial ended? Create a subscription to continue enjoying access to all app features`})}),_jsx(Callout,{icon:`lock`,color:`#10B981`,iconType:`regular`,children:_jsxs(_components.p,{children:[_jsx(`strong`,{children:`Price Lock Promise`}),`: In March 2026, we committed to never raising prices for `,_jsx(Tooltip,{tip:`Limited to subscriptions created from March 2026 onwards`,children:`active subscription holders`}),`. As long as your subscription remains active, your price is locked in.`]})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Please ensure you’ve successfully `,_jsxs(_components.a,{href:`https://stopwatch.threadi.au/`,children:[`installed `,_jsx(_components.strong,{children:`StopWatch for HubSpot`})]}),` within your HubSpot account before proceeding with any steps outlined in this section.`]})}),_jsxs(_components.p,{children:[`The first time you successfully install `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),`, you’ll gain access to all app features as part of our 💥 `,_jsx(_components.strong,{children:`14 day free trial period`}),` 💥. Once this free trial period has ended, you’ll need to choose and confirm your `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` subscription plan.`]}),_jsxs(_components.p,{children:[`You can compare all available subscription options on our `,_jsx(_components.a,{href:`/pricing?app=stopwatch`,children:`Pricing page`}),`. If you select a paid subscription, you’ll need to confirm via our third-party payment provider, `,_jsx(_components.strong,{children:`Stripe`}),`. Once you’ve successfully confirmed your subscription, you can manage it via our `,_jsx(_components.a,{href:`https://billing.stripe.com/p/login/3csdSc2wP68ybTi144`,children:`customer portal`}),` (powered by `,_jsx(_components.strong,{children:`Stripe`}),`).`]}),_jsxs(Info,{children:[`Links for each subscription option are available `,_jsx(_components.a,{href:`/pricing?app=stopwatch`,children:`here`}),`. Multiple currency options are available, including AUD, USD, GBP, EUR, CAD, NZD`]}),_jsxs(_components.p,{children:[`If you’ve chosen the `,_jsx(_components.strong,{children:`🤗 Free`}),` plan, all you’ll need to do to confirm your subscription is nominate your users via our `,_jsx(_components.a,{href:`#app-settings`,children:`admin app settings`}),`.`]}),_jsx(Info,{children:_jsx(_components.p,{children:`Please note, there will be no chance to change or rotate users at a later date. If you need other members of your team to use the app after having already nominated your users, you’ll need to upgrade to a paid subscription.`})}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#subscriptions-and-nominating-users`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`3-app-cards`,children:`3. App Cards`}),`\n`,_jsxs(Accordion,{title:`App Cards`,icon:`timer`,iconType:`regular`,id:`app-cards`,children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` experience, and the quality of your time tracking data, relies heavily on your interaction with the features made available by the app.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`We recommend tracking time via our `,_jsx(_components.strong,{children:`App Cards`}),` and/or our `,_jsx(_components.strong,{children:`Custom Workflow Actions`}),` only. We do not recommend creating or updating “Time Log” records manually or by any means other than interacting directly with `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` app features.`]})}),_jsxs(Callout,{icon:`link`,iconType:`duotone`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Feature Quick Links`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`cards-blank`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#our-app-cards`,children:`Our App Cards`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`table-columns-add-after`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#adding-app-cards-to-hubspot-crm-views`,children:`Adding App Cards to HubSpot CRM Views`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`timer`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#the-%E2%80%9Cstopwatch%E2%80%9D-app-cards`,children:`The “StopWatch” App Cards`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`plus`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#quick-add`,children:`Quick Add`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`list-check`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#associate-engagements`,children:`Associate Engagements`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`x`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#cancel-a-time-tracking-session`,children:`Cancel a Time Tracking Session`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`money-bill-1-wave`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#billable-time`,children:`Billable Time`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(Icon,{icon:`pen-to-square`,iconType:`duotone`}),` `,_jsx(_components.a,{href:`#manually-adjusting-time-logs`,children:`Manually Adjusting Time Logs`})]}),`\n`]})]}),_jsxs(Heading,{level:`3`,id:`our-app-cards`,children:[_jsx(Icon,{icon:`cards-blank`,iconType:`duotone`}),` Our App Cards`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Name`}),_jsx(_components.th,{children:`Object Type(s)`}),_jsx(_components.th,{children:`View Location`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`StopWatch`})}),_jsx(_components.td,{children:_jsxs(`ul`,{children:[_jsx(`li`,{children:`Contacts`}),_jsx(`li`,{children:`Companies`}),_jsx(`li`,{children:`Deals`}),_jsx(`li`,{children:`Tickets`}),_jsx(`li`,{children:`Projects`}),_jsx(`li`,{children:`Appointments`}),_jsx(`li`,{children:`Courses`}),_jsx(`li`,{children:`Listings`}),_jsx(`li`,{children:`Services`})]})}),_jsx(_components.td,{children:_jsx(Tooltip,{tip:`Right Sidebar`,children:`CRM Record Page`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsxs(_components.strong,{children:[`StopWatch `,_jsx(`br`,{}),`(Preview)`]})}),_jsx(_components.td,{children:_jsxs(`ul`,{children:[_jsx(`li`,{children:`Contacts`}),_jsx(`li`,{children:`Companies`}),_jsx(`li`,{children:`Deals`}),_jsx(`li`,{children:`Tickets`}),_jsx(`li`,{children:`Projects`}),_jsx(`li`,{children:`Appointments`}),_jsx(`li`,{children:`Courses`}),_jsx(`li`,{children:`Listings`}),_jsx(`li`,{children:`Services`})]})}),_jsx(_components.td,{children:`CRM Record Preview`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsxs(_components.strong,{children:[`StopWatch `,_jsx(`br`,{}),`(Help Desk)`]})}),_jsx(_components.td,{children:_jsx(`ul`,{children:_jsx(`li`,{children:`Tickets`})})}),_jsx(_components.td,{children:`Help Desk`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Manage Time Log`})}),_jsx(_components.td,{children:_jsx(`ul`,{children:_jsx(`li`,{children:`Time Logs`})})}),_jsx(_components.td,{children:_jsx(Tooltip,{tip:`Right Sidebar`,children:`CRM Record Page`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsxs(_components.strong,{children:[`Manage Time Log `,_jsx(`br`,{}),` (Preview)`]})}),_jsx(_components.td,{children:_jsx(`ul`,{children:_jsx(`li`,{children:`Time Logs`})})}),_jsx(_components.td,{children:`CRM Record Preview`})]})]})]}),_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(Tooltip,{tip:`With a little custom development work and only in certain circumstances`,children:`Upon special request`}),`, the `,_jsx(_components.strong,{children:`StopWatch`}),` and `,_jsx(_components.strong,{children:`StopWatch (Preview)`}),` App Cards can be made available on HubSpot `,_jsx(_components.strong,{children:`Custom Object`}),` views. If you’d like to learn more about using the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card with `,_jsx(_components.strong,{children:`Custom Objects`}),`, please feel free to make a request via our `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support form`}),`.`]})}),_jsxs(Heading,{level:`3`,id:`adding-app-cards-to-hubspot-crm-views`,children:[_jsx(Icon,{icon:`table-columns-add-after`,iconType:`duotone`}),` Adding App Cards to HubSpot CRM Views`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`In most cases, `,_jsx(_components.strong,{children:`App Cards are hidden by default`}),`. You must follow the steps outlined below to add them to your HubSpot CRM Views.`]})}),_jsx(Accordion,{title:`How to add an App Card to a CRM View`,icon:`circle-info`,id:`how-to-add-an-app-card-to-a-crm-view`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Navigate to HubSpot Settings`,children:_jsxs(_components.p,{children:[`Open your HubSpot account and click the `,_jsx(Icon,{icon:`gear`}),` icon in the top navigation bar.`]})}),_jsx(Step,{title:`Navigate to the relevant Object Type's settings page`,children:_jsxs(_components.p,{children:[`Use the left sidebar to navigate to Data Management > Objects > `,_jsx(Tooltip,{tip:`The type of object you want to add the App Card to. For example, Tickets.`,children:_jsx(`u`,{children:_jsx(_components.em,{children:`Object Type`})})})]})}),_jsx(Step,{title:`Navigate to the relevant CRM View`,children:_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`Record Customization`}),` or `,_jsx(_components.strong,{children:`Preview Customization`}),` tab, then find and click the relevant CRM View. If you only have 1 view, it’ll likely be called `,_jsx(_components.strong,{children:`Default view`}),`.`]})}),_jsx(Step,{title:`Add the App Card to the CRM View`,children:_jsxs(_components.p,{children:[`Hover over the position you’d like to add the App Card, then click the `,_jsx(Icon,{icon:`plus`}),` icon. Click into the `,_jsx(_components.em,{children:`Card library`}),` tab and then search for the relevant `,_jsx(Tooltip,{tip:`For example, try searching for 'StopWatch' or 'Time Log'`,children:`App Card Name`}),`. If it’s not already added to the view, click `,_jsx(_components.strong,{children:`Add card`}),`.`]})}),_jsx(Step,{title:`Reposition \u0026 Save`,children:_jsxs(_components.p,{children:[`Reposition the App Card as desired, then click `,_jsx(_components.strong,{children:`Save`}),` or `,_jsx(_components.strong,{children:`Save and exit`}),`.`]})})]})}),_jsxs(_components.p,{children:[`For example, to add the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card to your `,_jsx(_components.strong,{children:`Contact`}),` right sidebar view:`]}),_jsx(Frame,{caption:`StopWatch for HubSpot - Add the StopWatch App Card to a HubSpot CRM View`,children:_jsx(OptimizedFrame,{className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://www.youtube-nocookie.com/embed/UcbGziHgsnE?si=L6Ees0lD1VS9P94BS`,title:`StopWatch for HubSpot - Add the StopWatch App Card to a HubSpot CRM View`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,allowFullScreen:true})}),_jsxs(Heading,{level:`3`,id:`the-%E2%80%9Cstopwatch%E2%80%9D-app-cards`,children:[_jsx(Icon,{icon:`timer`}),` The “StopWatch” App Cards`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Your experience using the `,_jsx(_components.strong,{children:`StopWatch`}),`, `,_jsx(_components.strong,{children:`StopWatch (Preview)`}),` and `,_jsx(_components.strong,{children:`StopWatch (Help Desk)`}),` App Cards should be largely identical. The only difference between these App Cards is where they can be placed.`]})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-stopwatch-2.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=47d85f91a6be0f6346c0e182fda7856f`,width:`100%`,\"data-og-width\":`1847`,\"data-og-height\":`882`,\"data-path\":`images/stopwatch/guide-stopwatch-2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-stopwatch-2.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=4c88fcdceb2019c0ba3ec266aff1aed3 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-stopwatch-2.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=da28267e0cbf50f0d3fca2c451eb6ab3 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-stopwatch-2.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=0cf618946a7d23a8b87dbea67b518fe5 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-stopwatch-2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=bb80e757b48995558c1ae9e67c4bab77 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-stopwatch-2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=344b81f6a70282a5b5219aaf95d941df 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-stopwatch-2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=21adfd466dbf3fc3ae4afa8a4978bc9e 2500w`})}),_jsxs(_components.p,{children:[`To track time against the CRM record you are viewing (or previewing), use the `,_jsx(_components.strong,{children:`⏱️ Timer`}),` toggle visible at the top of the App Card.`]}),_jsxs(_components.p,{children:[`When you use a `,_jsx(_components.strong,{children:`StopWatch`}),` App Card to track time against a HubSpot CRM record, the app creates/updates a `,_jsx(_components.strong,{children:`Time Log`}),` record and associates it with `,_jsx(Tooltip,{tip:`i.e. an individual Contact, Company, Deal, Ticket, Appointment, Course, Listing, Service or Project`,children:`the record`}),` you are tracking time against. You can view and navigate to your Time Log records using the right sidebar (see example screenshot below).`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-1.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=4ea8b8da8e1db7b36a0e870518ba220a`,width:`100%`,\"data-og-width\":`1847`,\"data-og-height\":`882`,\"data-path\":`images/stopwatch/guide-timelog-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=5feb3eefafc6f4699805819b26e527c4 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=f43d12b1645c85257584737893706c77 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=072ceff0161c5d27cf6cd29308e090e5 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=eb3f65eae4f1da5802ac69ceb8296435 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=1e54ff17356498d259cb2c8e3bbae051 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d92ff75a33d760e26c8201148b079d20 2500w`})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`In addition to being associated with the CRM record time is tracked against, Time Logs can also be associated with that record’s Primary (or only) Associated Company. See our `,_jsx(_components.a,{href:`#app-settings`,children:`App Settings`}),` section for more information on our `,_jsx(_components.strong,{children:`Associate Primary Company`}),` admin-level setting.`]})}),_jsxs(Heading,{level:`4`,id:`quick-add`,children:[_jsx(Icon,{icon:`plus`}),` Quick Add`]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`StopWatch`}),` App Cards offer the ability to `,_jsx(_components.strong,{children:`Quick Add`}),` a time tracking session. This is intended to be used in the following scenarios:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scenario`}),_jsx(_components.th,{children:`Detail`}),_jsx(_components.th,{})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`1. ‘Batch’ / ‘end-of-day’ time tracking method`})}),_jsx(_components.td,{children:`For customers who prefer or need to be able to input historic time tracking sessions manually, rather than inputting time tracking sessions in real-time via the ‘Timer’ toggle.`}),_jsx(_components.td,{})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`2. Forgotten to track time spent`})}),_jsx(_components.td,{children:`For customers who may have forgotten to track time via the ‘Timer’ toggle and need to be able to manually input the forgotten time tracking session.`}),_jsx(_components.td,{})]})]})]}),_jsxs(_components.p,{children:[`To use this feature, simply expand the `,_jsxs(_components.strong,{children:[_jsx(Icon,{icon:`plus`}),` Quick Add`]}),` section, input all the relevant information relating to the time tracking session you’d like to record and click ‘Submit’.`]}),_jsxs(Heading,{level:`4`,id:`associate-engagements`,children:[_jsx(Icon,{icon:`list-check`,iconType:`duotone`}),` Associate Engagements`]}),_jsx(Note,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Associate Engagements`}),` is a user-specific setting (disabled by default).`]}),`\n`,_jsxs(_components.li,{children:[`This feature is only available if the `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` user-specific setting is enabled. Review our `,_jsx(_components.a,{href:`#app-settings`,children:`App Settings`}),` section for more information.`]}),`\n`]})}),_jsx(_components.p,{children:`You can associate time tracking sessions with specific HubSpot Engagements linked to the CRM record you’re viewing. The following HubSpot Engagement types are supported by this feature:`}),_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Tasks (including Subtasks)`}),`\n`,_jsx(_components.li,{children:`Meetings`}),`\n`,_jsx(_components.li,{children:`Calls`}),`\n`]})}),_jsxs(_components.p,{children:[`Simply check the `,_jsx(_components.strong,{children:`Associate Engagements?`}),` checkbox in the App Card and select the relevant Engagement record(s) you’d like the time tracking session to be associated with. You can filter the list of available options by Engagements you own and/or Engagement Type. This feature is available when tracking time manually via the timer toggle, as well as via the `,_jsx(_components.strong,{children:`Quick Add`}),` feature.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/RiExhPaJpCDswgdA/images/stopwatch/guide-stopwatch-4.png?fit=max\u0026auto=format\u0026n=RiExhPaJpCDswgdA\u0026q=85\u0026s=1aec3331403eb22d6b836a47a652ea7d`,width:`66%`,\"data-og-width\":`376`,\"data-og-height\":`426`,\"data-path\":`images/stopwatch/guide-stopwatch-4.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/RiExhPaJpCDswgdA/images/stopwatch/guide-stopwatch-4.png?w=280\u0026fit=max\u0026auto=format\u0026n=RiExhPaJpCDswgdA\u0026q=85\u0026s=12b1a35798ab389fa1878f02cc5c619d 280w, https://mintcdn.com/threadintegrations/RiExhPaJpCDswgdA/images/stopwatch/guide-stopwatch-4.png?w=560\u0026fit=max\u0026auto=format\u0026n=RiExhPaJpCDswgdA\u0026q=85\u0026s=9a9fc782aa25a8e12bd8a77c5925d48a 560w, https://mintcdn.com/threadintegrations/RiExhPaJpCDswgdA/images/stopwatch/guide-stopwatch-4.png?w=840\u0026fit=max\u0026auto=format\u0026n=RiExhPaJpCDswgdA\u0026q=85\u0026s=0525174173d1b1947edf9825486c9aab 840w, https://mintcdn.com/threadintegrations/RiExhPaJpCDswgdA/images/stopwatch/guide-stopwatch-4.png?w=1100\u0026fit=max\u0026auto=format\u0026n=RiExhPaJpCDswgdA\u0026q=85\u0026s=f53ddbe1dc2cd6a72ef054ed215fa9a3 1100w, https://mintcdn.com/threadintegrations/RiExhPaJpCDswgdA/images/stopwatch/guide-stopwatch-4.png?w=1650\u0026fit=max\u0026auto=format\u0026n=RiExhPaJpCDswgdA\u0026q=85\u0026s=70e61743420186597428ed477b06a08a 1650w, https://mintcdn.com/threadintegrations/RiExhPaJpCDswgdA/images/stopwatch/guide-stopwatch-4.png?w=2500\u0026fit=max\u0026auto=format\u0026n=RiExhPaJpCDswgdA\u0026q=85\u0026s=d0673270ead0b6b600c16dee72961aa3 2500w`})}),_jsxs(_components.p,{children:[`This feature unlocks powerful reporting and automation capabilities by enabling you to associate `,_jsx(_components.strong,{children:`Time Logs`}),` with specific `,_jsx(_components.strong,{children:_jsx(Tooltip,{tip:`e.g. Tasks, Meetings, Calls`,children:`HubSpot Engagements`})}),`.`]}),_jsxs(_components.p,{children:[`For example, `,_jsx(_components.a,{href:`https://knowledge.hubspot.com/reports/create-custom-reports`,children:`build custom reports`}),` to analyse your time spent on specific Tasks, Meetings and Calls, offering deeper insights into team productivity, project allocation and process efficiency. It also facilitates advanced `,_jsx(_components.a,{href:`https://knowledge.hubspot.com/workflows/create-workflows`,children:`automation workflows`}),` that can trigger `,_jsx(Tooltip,{tip:`e.g. notifications, follow-ups, escalations`,children:`actions`}),` based on time tracked against particular HubSpot Engagements, streamlining your operational processes and enhancing overall performance.`]}),_jsx(Info,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`This feature is not currently available within `,_jsx(_components.a,{href:`#web-ui`,children:_jsx(_components.strong,{children:`StopWatch Web UI`})})]}),`\n`,_jsx(_components.li,{children:`A maximum of 500 records per Engagement type (i.e. Tasks, Meetings, Calls) are made available for selection`}),`\n`]})}),_jsxs(Heading,{level:`4`,id:`cancel-a-time-tracking-session`,children:[_jsx(Icon,{icon:`x`}),` Cancel a Time Tracking Session`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`This feature is only available if the `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` user-specific setting is enabled. Review our `,_jsx(_components.a,{href:`#app-settings`,children:`App Settings`}),` section for more information.`]})}),_jsxs(_components.p,{children:[`If you no longer wish to submit a time tracking session after starting a timer, use the `,_jsx(Badge,{color:`red`,size:`md`,icon:`x`,children:`Cancel`}),` button to cancel the session. In the background, this deletes the relevant Time Log record that was created when you started the timer.`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`If you installed `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` prior to `,_jsx(Badge,{color:`yellow`,children:`1 April 2026`}),`, you may need to reauthenticate in order to gain access to this feature. To do this, simply install the app again (there’s no need to uninstall first). See the `,_jsx(_components.a,{href:`#installing-stopwatch-for-hubspot`,children:`Installing StopWatch for HubSpot section`}),` for instructions.`]})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/tjD-EiuKeGVxuIBt/images/stopwatch/guide-stopwatch-3.png?fit=max\u0026auto=format\u0026n=tjD-EiuKeGVxuIBt\u0026q=85\u0026s=38ee2eb233f8746d18224a22430bd409`,width:`66%`,\"data-og-width\":`392`,\"data-og-height\":`490`,\"data-path\":`images/stopwatch/guide-stopwatch-3.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/tjD-EiuKeGVxuIBt/images/stopwatch/guide-stopwatch-3.png?w=280\u0026fit=max\u0026auto=format\u0026n=tjD-EiuKeGVxuIBt\u0026q=85\u0026s=c5e36dd5755aa38669e75518a0605a24 280w, https://mintcdn.com/threadintegrations/tjD-EiuKeGVxuIBt/images/stopwatch/guide-stopwatch-3.png?w=560\u0026fit=max\u0026auto=format\u0026n=tjD-EiuKeGVxuIBt\u0026q=85\u0026s=a496794127e420ee4eb623c2c0b6ddbf 560w, https://mintcdn.com/threadintegrations/tjD-EiuKeGVxuIBt/images/stopwatch/guide-stopwatch-3.png?w=840\u0026fit=max\u0026auto=format\u0026n=tjD-EiuKeGVxuIBt\u0026q=85\u0026s=afd66e0552212583a29387a453d05276 840w, https://mintcdn.com/threadintegrations/tjD-EiuKeGVxuIBt/images/stopwatch/guide-stopwatch-3.png?w=1100\u0026fit=max\u0026auto=format\u0026n=tjD-EiuKeGVxuIBt\u0026q=85\u0026s=43a7fe50f57c507c10c919e5aeab2682 1100w, https://mintcdn.com/threadintegrations/tjD-EiuKeGVxuIBt/images/stopwatch/guide-stopwatch-3.png?w=1650\u0026fit=max\u0026auto=format\u0026n=tjD-EiuKeGVxuIBt\u0026q=85\u0026s=92f941741384673f9b74ebdfd10485c8 1650w, https://mintcdn.com/threadintegrations/tjD-EiuKeGVxuIBt/images/stopwatch/guide-stopwatch-3.png?w=2500\u0026fit=max\u0026auto=format\u0026n=tjD-EiuKeGVxuIBt\u0026q=85\u0026s=d7e382d74a34b6a2ac454f8af510a642 2500w`})}),_jsxs(Heading,{level:`4`,id:`billable-time`,children:[_jsx(Icon,{icon:`money-bill-1-wave`,iconType:`duotone`}),` Billable Time`]}),_jsxs(_components.p,{children:[`Flagging a time tracking session as `,_jsx(_components.strong,{children:`billable`}),` populates a number of Time Log properties that help you keep track of `,_jsx(_components.strong,{children:`Billable Tracked Time`}),` vs. `,_jsx(_components.strong,{children:`Total Tracked Time`}),`.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers also have access to the `,_jsx(_components.strong,{children:`Billable Amount`}),`, `,_jsx(_components.strong,{children:`Cost Amount`}),` and `,_jsx(_components.strong,{children:`Margin Amount`}),` Time Log properties, which are automatically populated based on billable rates set by a `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` Admin user. This is intended to support common invoicing and workforce profitability analysis use cases.`]}),_jsxs(_components.p,{children:[`Within the `,_jsx(_components.strong,{children:`Billable Rates`}),` `,_jsx(_components.a,{href:`#app-settings`,children:`App Settings`}),` tab, app admins can choose between the following `,_jsx(_components.strong,{children:`Billable Rate Modes`}),`:`]}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`👤 User-Based`}),`: billable rates are managed per HubSpot User`]}),`\n`]})}),_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`💼 Service-Based`}),`: billable rates are managed per `,_jsx(Tooltip,{tip:`As defined by app admins`,children:`Service`})]}),`\n`]})})]}),_jsx(Frame,{caption:`StopWatch for HubSpot - 'Billable Amount' Demo`,children:_jsx(OptimizedFrame,{className:`mint-w-full mint-aspect-video mint-rounded-xl`,src:`https://www.youtube-nocookie.com/embed/rcCMfKlSMKI?si=ZuuUesmUE_idIs3P`,title:`StopWatch for HubSpot - 'Billable Amount' Demo`,frameBorder:`0`,allow:`accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share`,allowFullScreen:true})}),_jsxs(Heading,{level:`3`,id:`manually-adjusting-time-logs`,children:[_jsx(Icon,{icon:`pen-to-square`}),` Manually Adjusting Time Logs`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`As much as possible, we recommend you avoid updating Time Logs manually`})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`When selecting Time Log properties for your views, reports and general analysis, we recommend using the `,_jsx(_components.strong,{children:`Tracked Time`}),` and `,_jsx(_components.strong,{children:`Amount`}),` properties that are appeneded with `,_jsx(_components.strong,{children:`“Calculated”`}),` (i.e. not the properties appended with “Legacy”). This is because the `,_jsx(_components.strong,{children:`“Calculated”`}),` properties automatically update to reflect changes made to the corresponding `,_jsx(_components.strong,{children:`Minutes`}),` and `,_jsx(_components.strong,{children:`Rate`}),` properties. `,_jsx(_components.strong,{children:`“Legacy”`}),` properties are only updated when a new time tracking session is submitted.`]})}),_jsxs(_components.p,{children:[`To decrease the likelihood of time tracking data quality issues for our customers, `,_jsx(_components.strong,{children:`we generally recommend avoiding manually updating Time Log records`}),`. However, we understand that in some cases this may be unavoidable. `,_jsx(Tooltip,{tip:`e.g. if you accidentally left a timer running`,children:`If you must adjust`}),` the tracked time data stored on an individual Time Log record, there are a few options available to you.`]}),_jsxs(Accordion,{title:`Manage Time Log App Cards`,icon:`cards-blank`,iconType:`duotone`,id:`manage-time-log-app-cards`,children:[_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/JH9okhfNp87U26i0/images/stopwatch/guide-manage-time-log-card-preview-1.png?fit=max\u0026auto=format\u0026n=JH9okhfNp87U26i0\u0026q=85\u0026s=7aae0adb438759f4cda99a10f993bc9d`,width:`100%`,\"data-og-width\":`417`,\"data-og-height\":`205`,\"data-path\":`images/stopwatch/guide-manage-time-log-card-preview-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/JH9okhfNp87U26i0/images/stopwatch/guide-manage-time-log-card-preview-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=JH9okhfNp87U26i0\u0026q=85\u0026s=a86582623812650e8e998eaf5bbfc594 280w, https://mintcdn.com/threadintegrations/JH9okhfNp87U26i0/images/stopwatch/guide-manage-time-log-card-preview-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=JH9okhfNp87U26i0\u0026q=85\u0026s=f8a62b1ef6484b1f3af1010117eba074 560w, https://mintcdn.com/threadintegrations/JH9okhfNp87U26i0/images/stopwatch/guide-manage-time-log-card-preview-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=JH9okhfNp87U26i0\u0026q=85\u0026s=39345450e39f4f9e642c3d83d1f35f99 840w, https://mintcdn.com/threadintegrations/JH9okhfNp87U26i0/images/stopwatch/guide-manage-time-log-card-preview-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=JH9okhfNp87U26i0\u0026q=85\u0026s=400ef1fad88a07818582894bf550fc62 1100w, https://mintcdn.com/threadintegrations/JH9okhfNp87U26i0/images/stopwatch/guide-manage-time-log-card-preview-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=JH9okhfNp87U26i0\u0026q=85\u0026s=bb9194d0c385e7c712c92777f43ae22d 1650w, https://mintcdn.com/threadintegrations/JH9okhfNp87U26i0/images/stopwatch/guide-manage-time-log-card-preview-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=JH9okhfNp87U26i0\u0026q=85\u0026s=4ff37fa73bbf62ac689899a9dc464c47 2500w`})}),_jsxs(Steps,{children:[_jsx(Step,{children:_jsxs(_components.p,{children:[`Ensure the `,_jsx(_components.strong,{children:`Manage Time Log`}),` and/or `,_jsx(_components.strong,{children:`Manage Time Log (Preview)`}),` App Card(s) are added to the relevant CRM View(s), as outlined `,_jsx(_components.a,{href:`#app-cards:how-to-add-an-app-card-to-a-crm-view`,children:`above`})]})}),_jsx(Step,{children:_jsxs(_components.p,{children:[`Navigate to the relevant `,_jsx(_components.strong,{children:`Time Log`}),` record view or preview`]})}),_jsx(Step,{children:_jsxs(_components.p,{children:[`Find the `,_jsx(_components.strong,{children:`Manage Time Log`}),` or `,_jsx(_components.strong,{children:`Manage Time Log (Preview)`}),` App Card and click `,_jsx(Icon,{icon:`pencil`,iconType:`duotone`}),` `,_jsx(_components.strong,{children:`Edit Time Log`})]})}),_jsx(Step,{children:_jsxs(_components.p,{children:[`Update the relevant input fields and click `,_jsx(Icon,{icon:`floppy-disk`,iconType:`duotone`}),` `,_jsx(_components.strong,{children:`Save`})]})})]})]}),_jsx(Accordion,{title:`Timesheets`,icon:`table`,iconType:`duotone`,id:`timesheets`,children:_jsx(Info,{children:_jsxs(_components.p,{children:[`Refer to the `,_jsx(_components.strong,{children:`Editing Time Logs`}),` heading within the `,_jsx(_components.a,{href:`#timesheets-1`,children:_jsx(_components.strong,{children:`Timesheets`})}),` section below`]})})}),_jsxs(Accordion,{title:`Direct Update of Time Log Properties`,icon:`warning`,id:`direct-update-of-time-log-properties`,children:[_jsx(Warning,{children:_jsx(_components.p,{children:`This is the riskiest of options available. If you must use this method, please exercise caution.`})}),_jsxs(_components.p,{children:[`If you must directly update Time Log properties, please restrict these updates to the properties listed below. `,_jsx(_components.strong,{children:`Any issues relating to changes made to properties not listed below will not be covered by standard StopWatch for HubSpot support`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Total Tracked Time Minutes`}),`\n`,_jsx(_components.li,{children:`Billable Tracked Time Minutes`}),`\n`,_jsx(_components.li,{children:`Billable Rate`}),`\n`,_jsx(_components.li,{children:`Cost Rate`}),`\n`,_jsx(_components.li,{children:`Title`}),`\n`,_jsx(_components.li,{children:`Category`}),`\n`,_jsx(_components.li,{children:`Description`}),`\n`,_jsx(_components.li,{children:`Service Name`}),`\n`,_jsx(_components.li,{children:`Number of Sessions`}),`\n`,_jsx(_components.li,{children:`Time Log Week of Year`}),`\n`,_jsx(_components.li,{children:`Time Log Month of Year`}),`\n`]})]}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#using-the-stopwatch`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`4-time-logs`,children:`4. Time Logs`}),`\n`,_jsxs(Accordion,{title:`Time Logs`,icon:`list`,iconType:`duotone`,id:`time-logs`,children:[_jsxs(_components.p,{children:[`As part of the installation process, `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` creates an App Object within your HubSpot account, called `,_jsx(_components.strong,{children:`Time Logs`}),`.`]}),_jsx(Heading,{level:`3`,id:`time-log-variations`,children:`Time Log Variations`}),_jsxs(_components.p,{children:[`Depending on your specific combination of `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` account and user-specific settings, the aggregation of and data contained within your Time Logs may vary. Expand the following sections for explanations of how Time Logs can vary depending on your settings:`]}),_jsxs(Expandable,{title:`1 Time Log Per Session`,children:[_jsx(Heading,{level:`4`,id:`1-time-log-per-session`,children:`1 Time Log Per Session`}),_jsx(Tip,{children:_jsx(_components.p,{children:`Enabling this setting can unlock powerful Time Log segmentation capabilities`})}),_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`1 Time Log Per Session`}),` is an optional, user-specific setting. It is disabled by default and available only to `,_jsx(_components.strong,{children:`👥 Team`}),` and `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers.`]})}),_jsxs(_components.p,{children:[`Each submitted time tracking session results in 1 Time Log Record (i.e. no Time Log aggregation). This unlocks powerful segmentation capabilities by enabling users to set custom Time Log `,_jsx(_components.strong,{children:`Titles`}),`, `,_jsx(_components.strong,{children:`Categories`}),` and `,_jsx(_components.strong,{children:`Descriptions`}),`.`]}),_jsx(`br`,{}),_jsx(`br`,{}),_jsxs(_components.p,{children:[`Submission of `,_jsx(_components.strong,{children:`Category`}),` can be made mandatory via enabling the `,_jsx(_components.strong,{children:`Require Time Log Category`}),` admin setting. See our `,_jsx(_components.a,{href:`#app-settings`,children:`App Settings`}),` section for more information.`]}),_jsx(`br`,{}),_jsx(`br`,{})]}),_jsxs(Expandable,{title:`Default`,children:[_jsx(Heading,{level:`4`,id:`default`,children:`Default`}),_jsxs(_components.p,{children:[`By default, when time is tracked against a HubSpot CRM record via the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card, information about this tracked time is stored on an associated “Time Log” record. If you use only `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` app features for creating and managing Time Log records (as is recommended), there should exist in your HubSpot account `,_jsx(_components.strong,{children:`1 Time Log record per unique combination of the following variables`}),`:`]}),_jsx(Card,{horizontal:true,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Object Type`}),` (e.g. CONTACT)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Object/Record ID`}),` (e.g. 1234567890)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`HubSpot User ID`}),` (e.g. 12345)`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.em,{children:[_jsx(_components.strong,{children:`Example`}),`: CONTACT_1234567890_12345`]})}),`\n`]})}),_jsxs(_components.p,{children:[`These variables are used to construct the primary Time Log display property (StopWatch Record ID), for example `,_jsx(_components.strong,{children:`CONTACT_1234567890_12345`}),` (where `,_jsx(_components.strong,{children:`CONTACT`}),` is the object type of the record that time is being tracked against, `,_jsx(_components.strong,{children:`1234567890`}),` is the relevant Contact record ID and `,_jsx(_components.strong,{children:`12345`}),` is the HubSpot user ID of the person tracking the time).`]}),_jsx(`br`,{}),_jsx(`br`,{})]}),_jsxs(Expandable,{title:`Split By Week OR Month`,children:[_jsx(Heading,{level:`4`,id:`split-by-week-%2F-split-by-month`,children:`Split By Week / Split By Month`}),_jsx(Info,{children:_jsx(_components.p,{children:`“Split Time Logs By Week” and “Split Time Logs By Month” are optional, user-specific settings. They are both disabled by default.`})}),_jsxs(_components.p,{children:[`For any period of time where either of the optional, user-specific `,_jsx(_components.strong,{children:`Split By Week`}),` or `,_jsx(_components.strong,{children:`Split By Month`}),` `,_jsx(_components.a,{href:`#app-settings`,children:`app settings`}),` are enabled, there should exist in your HubSpot account `,_jsx(_components.strong,{children:`1 Time Log record per unique combination of the following variables`}),`:`]}),_jsxs(Card,{horizontal:true,children:[_jsx(_components.p,{children:`Default`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Object Type`}),` (e.g. CONTACT)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Object/Record ID`}),` (e.g. 1234567890)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`HubSpot User ID`}),` (e.g. 12345)`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.em,{children:[_jsx(_components.strong,{children:`Example`}),`: CONTACT_1234567890_12345`]})}),`\n`]}),_jsx(_components.p,{children:`Split By Week`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Year`}),` (e.g. 2026)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Week Number`}),` (e.g. 50)`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.em,{children:[_jsx(_components.strong,{children:`Example`}),`: CONTACT_1234567890_12345_2026_50`]})}),`\n`]}),_jsx(_components.p,{children:`Split By Month`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Year/Month`}),` (e.g. 202608)`]}),`\n`,_jsx(_components.li,{children:_jsxs(_components.em,{children:[_jsx(_components.strong,{children:`Example`}),`: CONTACT_1234567890_12345_202608`]})}),`\n`]})]}),_jsx(`br`,{})]}),_jsx(Heading,{level:`3`,id:`time-log-record-view`,children:`Time Log Record View`}),_jsxs(_components.p,{children:[`Each `,_jsx(_components.strong,{children:`Time Log`}),` record contains `,_jsx(Tooltip,{tip:`Stored within HubSpot 'properties'`,children:`data`}),`, reflecting a summary of all relevant time tracking sessions, with respect to the `,_jsx(Tooltip,{tip:`Time Log aggregation depends on your settings. See the 'Time Log Variations' section above.`,children:`configured settings`}),`. This data is visible in the left sidebar on the Time Log record view (see screenshot below). The display of these properties can be customised within your HubSpot account settings.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-2.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d63f7ffb4174a54bfc36ffd01e5cb839`,width:`100%`,\"data-og-width\":`1847`,\"data-og-height\":`882`,\"data-path\":`images/stopwatch/guide-timelog-2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-2.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=3d8446ec9c68f373548bee0a8143d2e1 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-2.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=496dbdc6d8623dbf05579ce16b1c1983 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-2.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=237a170cd24aa7f459c22c609e3393a7 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=4a32ba9b09f2ee29ad004c95c60a3758 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=9d703c227546b9262669498987998e2e 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-timelog-2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=90fec455a6b9d31bc214a3b83158729a 2500w`})}),_jsxs(_components.p,{children:[`Information relating to each individual time tracking “session” can be viewed as `,_jsx(Tooltip,{tip:`Always titled 'Time Log Session Details'`,children:_jsx(_components.strong,{children:`Notes`})}),` within the activity timeline of the relevant `,_jsx(_components.strong,{children:`Time Log`}),` record (see image below).`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-sessions-1.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=b85db1ba1bf7a353432a33bcfc9d71a7`,width:`100%`,\"data-og-width\":`1847`,\"data-og-height\":`882`,\"data-path\":`images/stopwatch/guide-sessions-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-sessions-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=864564913889d5d3e59051cac82a60ef 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-sessions-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=32d2243f74f447c9d1365453924551ef 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-sessions-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=4a7cabaefb0dd2d3815b555e1ecf1e9f 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-sessions-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=87728e0be4fe783a2c2ef230c0eb331a 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-sessions-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=1bb6e61dcd1dcc432b78af5a93338fe8 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-sessions-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=299e674fc19cbb8a7a25574aa7d07467 2500w`})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`These `,_jsx(_components.strong,{children:`Notes`}),` are standard HubSpot Engagement records, of “Note” type. They are automatically generated by `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` based on interaction with our App Cards and/or Custom Workflow Actions. If the app encounters an issue when creating these Notes, this is treated as a non-critical error. As such, it’s possible that not all time tracking sessions will be represented as a `,_jsx(_components.strong,{children:`Note`}),` in the Time Log activity timeline.`]})}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#time-logs`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`5-timesheets`,children:`5. Timesheets`}),`\n`,_jsxs(Accordion,{title:`Timesheets`,icon:`table`,iconType:`duotone`,id:`timesheets-1`,children:[_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Timesheet`}),` interface provides a weekly view of your relevant `,_jsx(_components.strong,{children:`Time Log`}),` records, directly inside HubSpot.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/A9168Dx440WGYVCl/images/stopwatch/guide-timesheets-1.png?fit=max\u0026auto=format\u0026n=A9168Dx440WGYVCl\u0026q=85\u0026s=d651e34ae0479513ba631688d47fa286`,width:`100%`,\"data-og-width\":`1009`,\"data-og-height\":`819`,\"data-path\":`images/stopwatch/guide-timesheets-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/A9168Dx440WGYVCl/images/stopwatch/guide-timesheets-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=A9168Dx440WGYVCl\u0026q=85\u0026s=8a759b161ff8367047f5e3e045fe4f49 280w, https://mintcdn.com/threadintegrations/A9168Dx440WGYVCl/images/stopwatch/guide-timesheets-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=A9168Dx440WGYVCl\u0026q=85\u0026s=2ce0f5d24ed897a5dd3e25d2f29821c9 560w, https://mintcdn.com/threadintegrations/A9168Dx440WGYVCl/images/stopwatch/guide-timesheets-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=A9168Dx440WGYVCl\u0026q=85\u0026s=8f77f58b5421d0a7799160b901f574a0 840w, https://mintcdn.com/threadintegrations/A9168Dx440WGYVCl/images/stopwatch/guide-timesheets-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=A9168Dx440WGYVCl\u0026q=85\u0026s=45f05641332893c8a3cdf7832a009b8d 1100w, https://mintcdn.com/threadintegrations/A9168Dx440WGYVCl/images/stopwatch/guide-timesheets-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=A9168Dx440WGYVCl\u0026q=85\u0026s=582784f93d213316179cc1387c675164 1650w, https://mintcdn.com/threadintegrations/A9168Dx440WGYVCl/images/stopwatch/guide-timesheets-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=A9168Dx440WGYVCl\u0026q=85\u0026s=ad757e7d2d94269614af33b68d48514c 2500w`})}),_jsx(Note,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Timesheet`}),` displays Time Logs created while either of the following user-specific settings were enabled: `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` or `,_jsx(_components.strong,{children:`Split Time Logs By Week`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Timesheet`}),` always represents one HubSpot user at a time`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(Tooltip,{tip:`Roles managed via App Settings`,children:[_jsx(_components.strong,{children:`App Admins`}),` and `,_jsx(_components.strong,{children:`Timesheet Managers`})]}),` can view and edit any HubSpot User’s Timesheet. Non-admin users can only view and edit their own Timesheet.`]}),`\n`]})}),_jsx(Heading,{level:`3`,id:`accessing-the-timesheet`,children:`Accessing the Timesheet`}),_jsxs(_components.p,{children:[`There are 3 ways to navigate to the `,_jsx(_components.strong,{children:`Timesheet`}),` from within HubSpot:`]}),_jsx(Accordion,{title:`From the StopWatch App Card`,icon:`timer`,iconType:`regular`,id:`from-the-stopwatch-app-card`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Open a supported HubSpot CRM record`,children:_jsxs(_components.p,{children:[`Navigate to an individual HubSpot CRM record view where the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card is available.`]})}),_jsx(Step,{title:`Find the StopWatch App Card`,children:_jsxs(_components.p,{children:[`Locate the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card on the record view.`]})}),_jsx(Step,{title:`Open the Timesheet`,children:_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Tools`}),` > `,_jsx(_components.strong,{children:`Timesheet`}),`.`]})})]})}),_jsx(Accordion,{title:`From the HubSpot App Marketplace icon`,icon:`store`,iconType:`regular`,id:`from-the-hubspot-app-marketplace-icon`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Open the App Marketplace menu`,children:_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`App Marketplace`}),` icon (looks like `,_jsx(Icon,{icon:`store`}),`) in HubSpot’s top navigation bar.`]})}),_jsx(Step,{title:`Find 'Your recently visited apps'`}),_jsx(Step,{title:`Click 'StopWatch'`})]})}),_jsx(Accordion,{title:`From HubSpot Connected Apps settings`,icon:`plug`,iconType:`regular`,id:`from-hubspot-connected-apps-settings`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Open Connected Apps`,children:_jsxs(_components.p,{children:[`Navigate to `,_jsx(_components.strong,{children:`HubSpot Settings`}),` > `,_jsx(_components.strong,{children:`Integrations`}),` > `,_jsx(_components.strong,{children:`Connected Apps`}),`.`]})}),_jsx(Step,{title:`Find StopWatch`,children:_jsxs(_components.p,{children:[`Find the `,_jsx(_components.strong,{children:`StopWatch`}),` row.`]})}),_jsx(Step,{title:`Open the Actions dropdown`,children:_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`Actions`}),` dropdown on the `,_jsx(_components.strong,{children:`StopWatch`}),` row.`]})}),_jsx(Step,{title:`Click 'Go to app home'`})]})}),_jsx(Heading,{level:`3`,id:`admin%2Fmanager-vs-user-view`,children:`Admin/Manager vs. User View`}),_jsxs(_components.p,{children:[_jsxs(Tooltip,{tip:`Roles managed via App Settings`,children:[_jsx(_components.strong,{children:`App Admins`}),` and `,_jsx(_components.strong,{children:`Timesheet Managers`})]}),` can view/edit `,_jsx(Tooltip,{tip:`Displayed by default`,children:`their own Timesheet`}),`, and can also select any other HubSpot user to view/edit that user’s Timesheet.`]}),_jsx(_components.p,{children:`Non-admin users can only view/edit their own Timesheet.`}),_jsx(Heading,{level:`3`,id:`grid-view-%26-list-view`,children:`Grid View \u0026 List View`}),_jsx(_components.p,{children:`The Timesheet supports 2 table layouts:`}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Grid view`}),`\n`,_jsx(`br`,{}),`Displays rows in a list format, with 1 column for each day in the selected week. Only one metric can be displayed at a time.`]})}),_jsx(Card,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`List view`}),`\n`,_jsx(`br`,{}),`Displays rows in a list format, with a dedicated `,_jsx(_components.strong,{children:`Date`}),` column. Multiple metrics can be displayed.`]})})]}),_jsx(Heading,{level:`3`,id:`weekly-%26-daily-views`,children:`Weekly \u0026 Daily Views`}),_jsxs(_components.p,{children:[`By default, the Timesheet shows a weekly view. You can navigate between weeks using the arrow buttons near the `,_jsx(Tooltip,{tip:`Visible towards the top right of screen`,children:`date range`}),`, or use the date selector to jump to a specific week.`]}),_jsxs(_components.p,{children:[`In `,_jsx(_components.strong,{children:`Grid view`}),`, click a date column header to focus the Timesheet on that specific day. In `,_jsx(_components.strong,{children:`List view`}),`, click a value in the `,_jsx(_components.strong,{children:`Date`}),` column to do the same.`]}),_jsxs(_components.p,{children:[`If a specific day has been selected, click `,_jsx(_components.strong,{children:`Week view`}),` to return to the default weekly view.`]}),_jsx(Heading,{level:`3`,id:`grouped-%26-individual-logs`,children:`Grouped \u0026 Individual Logs`}),_jsx(_components.p,{children:`The Timesheet can display Time Logs in either of the following modes:`}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Grouped`}),`\n`,_jsx(`br`,{}),`Time Logs are grouped by the HubSpot CRM record that time has been tracked against`]})}),_jsx(Card,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Individual Logs`}),`\n`,_jsx(`br`,{}),`Each Time Log is displayed as its own row`]})})]}),_jsx(_components.p,{children:`Grouped mode is useful for reviewing and editing total time tracked against a CRM record. Individual Logs mode is useful when you want to inspect or edit each Time Log individually.`}),_jsx(Heading,{level:`3`,id:`tags%2C-filters-%26-search`,children:`Tags, Filters \u0026 Search`}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Tags`}),` column is intended to help you segment your Timesheet. Depending on the Time Log data, tags may include:`]}),_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`CRM object type, such as `,_jsx(_components.strong,{children:`Deal`}),`, `,_jsx(_components.strong,{children:`Company`}),`, `,_jsx(_components.strong,{children:`Ticket`}),` etc.`]}),`\n`,_jsx(_components.li,{children:`Time Log Category`}),`\n`,_jsx(_components.li,{children:`Billable Service Name`}),`\n`,_jsxs(_components.li,{children:[`Whether the Time Log is `,_jsx(_components.strong,{children:`Billable`})]}),`\n`,_jsx(_components.li,{children:`Whether the Time Log’s timer is on`}),`\n`]})}),_jsxs(_components.p,{children:[`Use the `,_jsx(_components.strong,{children:`Filters`}),` dropdown and/or `,_jsx(_components.strong,{children:`Search`}),` input to constrain the displayed data accordingly.`]}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`If a timer is currently running for a Time Log, the Timesheet displays an `,_jsx(_components.strong,{children:`ON`}),` status beside that Time Log’s display title, and a `,_jsx(_components.strong,{children:`Timer On`}),` tag in the Tags column.`]})}),_jsx(Heading,{level:`3`,id:`metrics`,children:`Metrics`}),_jsx(_components.p,{children:`The headline metrics at the top of the Timesheet can be customised. Available metrics include:`}),_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Total Time`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Billable Time`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Billable %`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Billable Amount`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Cost Amount`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Margin Amount`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Margin %`})}),`\n`]})}),_jsx(_components.p,{children:`You can optionally compare headline metrics against a previous period, such as the previous week, previous month, or previous year.`}),_jsxs(_components.p,{children:[`The metric(s) displayed in the results table can also be changed. In `,_jsx(_components.strong,{children:`Grid view`}),`, one table metric is displayed at a time. In `,_jsx(_components.strong,{children:`List view`}),`, you can select multiple table metrics.`]}),_jsx(Heading,{level:`3`,id:`capacity-%26-utilisation`,children:`Capacity \u0026 Utilisation`}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`available hours tracked this week`}),` progress bar in the `,_jsxs(Tooltip,{tip:`Above the Timesheet table, towards the top of the page`,children:[_jsx(_components.strong,{children:`Summary Statistics`}),` section`]}),` shows how much of a user’s available time has been used in the selected week. This is calculated based on the `,_jsx(_components.strong,{children:`Weekly Capacity (Hours)`}),` user-specific `,_jsx(_components.a,{href:`/apps/stopwatch#app-settings`,children:`app setting`}),`.`]}),_jsx(Heading,{level:`3`,id:`submitting-time-tracking-sessions`,children:`Submitting Time Tracking Sessions`}),_jsxs(_components.p,{children:[`To submit a new time tracking session, click the add button (looks like `,_jsx(Icon,{icon:`plus`}),`) above the table. This opens a modal where you can input all relevant information relating to the time tracking session you’d like to record. First find the HubSpot CRM record you want to track time against, then input the relevant information, and then finally click `,_jsx(_components.strong,{children:`Submit Session`}),`. Alternatively, in some cases, you may be able to simply click `,_jsx(_components.strong,{children:`Start Timer`}),` to begin a time tracking session, rather than submitting a complete session.`]}),_jsx(Heading,{level:`3`,id:`editing-time-logs`,children:`Editing Time Logs`}),_jsx(_components.p,{children:`To open an edit Time Log modal, click a Time Log title, or a clickable metric value.`}),_jsx(_components.p,{children:`If the selected value represents multiple Time Logs, you will be prompted to choose which Time Log you want to edit.`}),_jsx(_components.p,{children:`From the edit Time Log modal, you can navigate directly to the Time Log record view, update several Time Log properties, stop the timer (if it’s running) and, depending on your install configuration, you may also be able to delete the Time Log record.`}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Time Logs with an active timer generally cannot be edited from the Timesheet. Use the `,_jsx(_components.strong,{children:`Stop Timer`}),` button first before attempting to edit.`]})}),_jsx(Heading,{level:`3`,id:`exporting-timesheet-data`,children:`Exporting Timesheet Data`}),_jsxs(_components.p,{children:[`Click the copy/export button (looks like `,_jsx(Icon,{icon:`copy`}),`) above the table to copy the currently visible Timesheet table in `,_jsx(_components.strong,{children:`TSV format`}),`. You can paste this directly into spreadsheet tools such as Google Sheets or Microsoft Excel.`]}),_jsx(_components.p,{children:`Exported values are formatted for spreadsheet use:`}),_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Duration values are converted to hours, such as `,_jsx(_components.strong,{children:`1.5`}),` for 1 hour 30 minutes.`]}),`\n`,_jsxs(_components.li,{children:[`Percentage values are converted to decimals, such as `,_jsx(_components.strong,{children:`0.9`}),` for 90%.`]}),`\n`,_jsx(_components.li,{children:`Currency values are exported as numbers, with the currency unit included in the column heading.`}),`\n`]})}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#timesheets`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`6-web-ui`,children:`6. Web UI`}),`\n`,_jsxs(Accordion,{title:`Web UI`,icon:`globe-pointer`,iconType:`duotone`,id:`web-ui`,children:[_jsx(Note,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`This feature is only available to our `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers. Information about our subscription options is available on our `,_jsx(_components.a,{href:`/pricing?app=stopwatch`,children:`Pricing page`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`To use this feature, specific users must first be nominated by a `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` admin. Admins can manage their `,_jsx(_components.strong,{children:`Web UI Users`}),` via the `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`#app-settings`,children:`admin app settings`})}),`.`]}),`\n`]})}),_jsx(Card,{icon:`globe-pointer`,iconType:`duotone`,href:`https://stopwatch.threadi.au/login`,arrow:true,color:`#FF7A59`,horizontal:true,children:_jsx(_components.p,{children:`Log in to StopWatch for HubSpot’s Web UI`})}),_jsxs(_components.p,{children:[`Our `,_jsx(_components.strong,{children:`Web UI`}),` allows your team to track time against HubSpot CRM records, without needing to log into HubSpot.`]}),_jsx(_components.p,{children:`This is particularly useful for team members who aren’t always at their desk, but still need to track their time. It’s available via any web browser, so you can even track time on your phone.`}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/V0nat7_TFc5VbHQk/images/stopwatch/guide-web-1.png?fit=max\u0026auto=format\u0026n=V0nat7_TFc5VbHQk\u0026q=85\u0026s=e0a5586bf0299c3ae2144364d1490f81`,width:`100%`,\"data-og-width\":`632`,\"data-og-height\":`636`,\"data-path\":`images/stopwatch/guide-web-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/V0nat7_TFc5VbHQk/images/stopwatch/guide-web-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=V0nat7_TFc5VbHQk\u0026q=85\u0026s=0654290ddbdf7b9d488708348f372ff6 280w, https://mintcdn.com/threadintegrations/V0nat7_TFc5VbHQk/images/stopwatch/guide-web-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=V0nat7_TFc5VbHQk\u0026q=85\u0026s=9c0fc74fef0dfc0ee90545062db6a8c3 560w, https://mintcdn.com/threadintegrations/V0nat7_TFc5VbHQk/images/stopwatch/guide-web-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=V0nat7_TFc5VbHQk\u0026q=85\u0026s=273d7b024ce90423ca09aa0dca428f53 840w, https://mintcdn.com/threadintegrations/V0nat7_TFc5VbHQk/images/stopwatch/guide-web-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=V0nat7_TFc5VbHQk\u0026q=85\u0026s=45886a4d968d7be5a704a2caafb67a98 1100w, https://mintcdn.com/threadintegrations/V0nat7_TFc5VbHQk/images/stopwatch/guide-web-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=V0nat7_TFc5VbHQk\u0026q=85\u0026s=bb7a147715cef7d0399cb7f64910f8a9 1650w, https://mintcdn.com/threadintegrations/V0nat7_TFc5VbHQk/images/stopwatch/guide-web-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=V0nat7_TFc5VbHQk\u0026q=85\u0026s=9889f297db6a2138d8a57c5d5755da3f 2500w`})}),_jsxs(_components.p,{children:[`To access this feature, you’ll need to login `,_jsx(_components.a,{href:`https://stopwatch.threadi.au/login`,children:`here`}),` (a link is sent to the supplied email address). You can also get there via the `,_jsx(_components.strong,{children:`“Web Login”`}),` button on our `,_jsx(_components.a,{href:`https://stopwatch.threadi.au`,children:`app homepage`}),`.`]}),_jsx(_components.p,{children:`Once you’re in, follow the prompts to find the HubSpot CRM record you’re wanting to track time against, and then submit your time tracking session.`})]}),`\n`,_jsx(Heading,{level:`2`,id:`7-app-events`,children:`7. App Events`}),`\n`,_jsxs(Accordion,{title:`App Events`,icon:`circle-play`,iconType:`duotone`,id:`app-events`,children:[_jsx(Note,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`This feature is available to `,_jsx(_components.strong,{children:`👥 Team`}),` and `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers only`]}),`\n`,_jsxs(_components.li,{children:[`After enabling this feature, our `,_jsx(_components.strong,{children:`App Events`}),` may not appear in your HubSpot Portal immediately. `,_jsx(_components.strong,{children:`Please allow up to 24 hours`}),` for App Events and related features to become visible. If you don’t see our App Events after this time, please submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support request`}),`.`]}),`\n`]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` supports `,_jsx(_components.strong,{children:`App Events`}),` for time tracking sessions. This is an `,_jsx(Tooltip,{tip:`Disabled by default`,children:`optional feature`}),`, controlled via the `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`#app-settings`,children:`Admin App Settings`})})]}),_jsxs(_components.p,{children:[`When enabled, `,_jsxs(_components.strong,{children:[`App Events are logged within the relevant `,_jsx(Tooltip,{tip:`i.e. the relevant Contact, Company, Deal, Ticket, Appointment, Course, Listing, Project or Service record view (not the Time Log record view)`,children:`HubSpot CRM record’s`}),` activity timeline for each submitted time tracking session`]}),`. This makes it possible to build `,_jsx(_components.strong,{children:`HubSpot Workflows`}),` and `,_jsx(_components.strong,{children:`Custom Reports`}),` based on the submission of individual time tracking sessions.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-2.png?fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=e5e07d0d0f4886a91fe4f1ff56ce0bf5`,width:`100%`,\"data-og-width\":`2804`,\"data-og-height\":`1448`,\"data-path\":`images/stopwatch/guide-app-events-2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-2.png?w=280\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=dac58536b7907708fe73475c68fb6347 280w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-2.png?w=560\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=eb4816c412ce419dd21dc752788c551f 560w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-2.png?w=840\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=268d82876c12fab5844e2d56f6be830b 840w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=e6a75d2ed890cecc9d4857e38c0e1e70 1100w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=053838b49db480e13d3b48a470bb222a 1650w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=5bd16754b7d7f6d84b09506da57ae993 2500w`})}),_jsx(Info,{children:_jsxs(_components.p,{children:[`By default, `,_jsx(_components.strong,{children:`App Events`}),` are often hidden from the activity timeline. You must manually add them to the relevant activity timeline view by clicking `,_jsx(_components.strong,{children:`Activity`}),` > `,_jsx(_components.strong,{children:`Integrations`}),`. See the screenshot below for reference.`]})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-1.png?fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=2dd0dcb18ec20f33a7d79ea9d6304d53`,width:`100%`,\"data-og-width\":`2804`,\"data-og-height\":`1448`,\"data-path\":`images/stopwatch/guide-app-events-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=85bf7f92dc6f8ec063276361e9480496 280w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=06bc9250e58c0f6e3ce64dbcfea7c892 560w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=ec3325334dd067982b4c5f2cd7f03c24 840w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=8bd82c399c1b22ad0644b584ec9c14bc 1100w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=d4b3f22d69127e93fda9a01b94952976 1650w, https://mintcdn.com/threadintegrations/Bkm7U4dkFqMhw0bw/images/stopwatch/guide-app-events-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=Bkm7U4dkFqMhw0bw\u0026q=85\u0026s=7f18f783ff30bcd5b304ab451709dd43 2500w`})}),_jsxs(_components.p,{children:[`This feature is available when tracking time against the HubSpot CRM object types listed below. All time tracking `,_jsx(Tooltip,{tip:`i.e. StopWatch App Card Timer, StopWatch App Card Quick Add, StopWatch Web UI and Custom Workflow Actions`,children:`session submission sources`}),` are supported.`]}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Contact`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Company`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Deal`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Ticket`})}),`\n`]})}),_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Project`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Appointment`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Course`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Listing`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Service`})}),`\n`]})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`8-webhooks`,children:`8. Webhooks`}),`\n`,_jsxs(Accordion,{title:`Webhooks`,icon:`webhook`,iconType:`duotone`,id:`webhooks`,children:[_jsxs(Note,{children:[_jsx(_components.p,{children:`This feature is:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Only available to `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers.`]}),`\n`,_jsxs(_components.li,{children:[`Only relevant to customers using `,_jsx(_components.strong,{children:`App Objects Mode`}),`. If you’re using the legacy `,_jsx(_components.strong,{children:`Custom Objects Mode`}),`, you can configure webhooks directly via native HubSpot features.`]}),`\n`]})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` supports `,_jsx(_components.strong,{children:`Webhook`}),` subscriptions for time tracking sessions. This is an `,_jsx(Tooltip,{tip:`Disabled by default`,children:`optional feature`}),`, controlled via the `,_jsx(_components.strong,{children:_jsx(_components.a,{href:`#app-settings`,children:`Admin App Settings`})})]}),_jsxs(_components.p,{children:[`When enabled, webhook requests are sent to a specified target URL `,_jsx(_components.strong,{children:`when Time Logs are created and when time tracking sessions are submitted`}),`. This makes it possible to build push-based integrations with external systems and build custom automation workflows.`]}),_jsxs(Accordion,{title:`Time Log Creation`,icon:`plus`,iconType:`duotone`,id:`time-log-creation`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When a Time Log is created`}),`, a webhook is triggered, sending a request to the configured target URL with a request body that follows the following structure:`]}),_jsx(Heading,{level:`4`,id:`request-body`,children:`Request Body`}),_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"eventId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1122334455`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the webhook event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subscriptionId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123456789`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the webhook subscription that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"portalId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`11111111`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the HubSpot Portal where the event occurred`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"appId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`552213`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the app that triggered the event (i.e. StopWatch for HubSpot)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"occurredAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1781663476554`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unix timestamp in milliseconds representing when the event occurred`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subscriptionType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"object.creation\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// type of event that triggered the webhook`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attemptNumber\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// number of attempts made to deliver the webhook (starts at 0 for the first attempt)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"objectId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`9988776655`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the Time Log record that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"objectTypeId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1-5233895\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the Time Log object type in HubSpot`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changeFlag\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"CREATED\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// type of change that occurred to trigger the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changeSource\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INTEGRATION\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// source of the change that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sourceId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"552213\"`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // unique identifier for the source of the change`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),_jsxs(Accordion,{title:`Time Tracking Session Submissions`,icon:`arrow-right-to-arc`,iconType:`duotone`,id:`time-tracking-session-submissions`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When a time tracking session is submitted`}),`, a webhook is triggered, sending a request to the configured target URL with a request body that follows the following structure:`]}),_jsx(Heading,{level:`4`,id:`request-body-2`,children:`Request Body`}),_jsx(CodeBlock,{filename:``,numberOfLines:`16`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`16`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"eventId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1122334455`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the webhook event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subscriptionId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123456789`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the webhook subscription that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"portalId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`11111111`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the HubSpot Portal where the event occurred`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"appId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`552213`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the app that triggered the event (i.e. StopWatch for HubSpot)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"occurredAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1781662300785`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unix timestamp in milliseconds representing when the event occurred`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subscriptionType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"object.propertyChange\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// type of event that triggered the webhook`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attemptNumber\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// number of attempts made to deliver the webhook (starts at 0 for the first attempt)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"objectId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`9988776655`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the Time Log record that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"objectTypeId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1-5233895\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the Time Log object type in HubSpot`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"propertyName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"a552213_last_end_date\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// name of the Time Log property that was changed`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"propertyValue\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1781662297005\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// new value of the changed property`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changeSource\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INTEGRATION\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// source of the change that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sourceId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"552213\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the source of the change`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"isSensitive\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // indicates whether the changed property contains sensitive information`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),_jsxs(Accordion,{title:`Time Log Deletion`,icon:`xmark`,iconType:`duotone`,id:`time-log-deletion`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When a Time Log is deleted`}),`, a webhook is triggered, sending a request to the configured target URL with a request body that follows the following structure:`]}),_jsx(Heading,{level:`4`,id:`request-body-3`,children:`Request Body`}),_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"eventId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1122334455`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the webhook event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subscriptionId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`123456789`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the webhook subscription that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"portalId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`11111111`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the HubSpot Portal where the event occurred`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"appId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`552213`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the app that triggered the event (i.e. StopWatch for HubSpot)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"occurredAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1781663476554`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unix timestamp in milliseconds representing when the event occurred`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subscriptionType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"object.deletion\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// type of event that triggered the webhook`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attemptNumber\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// number of attempts made to deliver the webhook (starts at 0 for the first attempt)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"objectId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`9988776655`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the Time Log record that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"objectTypeId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1-5233895\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// unique identifier for the Time Log object type in HubSpot`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changeFlag\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"DELETED\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// type of change that occurred to trigger the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changeSource\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INTEGRATION\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// source of the change that triggered the event`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sourceId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"552213\"`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // unique identifier for the source of the change`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),_jsx(Info,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Return a `,_jsx(_components.code,{children:`2xx`}),` response code`]}),` from your server `,_jsx(_components.strong,{children:`within 15 seconds`}),` to acknowledge successful receipt of the webhook request`]})}),_jsx(Heading,{level:`3`,id:`validating-webhook-requests`,children:`Validating webhook requests`}),_jsxs(_components.p,{children:[`When you enable the `,_jsx(_components.strong,{children:`Webhooks`}),` setting, you’ll be allocated a request `,_jsx(_components.strong,{children:`Signing Secret`}),`. This secret can be used to verify that incoming webhook requests were sent by `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),`.`]}),_jsxs(Accordion,{title:`Webhook Request Headers`,icon:`envelope-open-text`,iconType:`duotone`,id:`webhook-request-headers`,children:[_jsxs(_components.p,{children:[`Each webhook request includes headers you can use to verify that the request came from `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`X-StopWatch-Signature`})}),` e.g. v1=abc123`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`X-StopWatch-Timestamp`})}),` e.g. `,_jsx(Tooltip,{tip:`Unix timestamp in milliseconds`,children:`1781663476554`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`X-StopWatch-Webhook-Id`})}),` e.g. `,_jsx(Tooltip,{tip:`Representing {eventId}-{attemptNumber}`,children:`1122334455-0`})]}),`\n`]})]}),_jsx(Accordion,{title:`Verification Steps`,icon:`shield-check`,iconType:`duotone`,id:`verification-steps`,children:_jsxs(Steps,{children:[_jsx(Step,{title:`Read the raw request body`,children:_jsx(_components.p,{children:`Read the raw request body exactly as received. Do not parse the body as JSON or in any other way before using it to calculate the signature.`})}),_jsx(Step,{title:`Check the timestamp`,children:_jsxs(_components.p,{children:[`Check the `,_jsx(_components.code,{children:`X-StopWatch-Timestamp`}),` header to ensure the request is recent. Reject the request if the timestamp is more than 5 minutes old to prevent replay attacks.`]})}),_jsx(Step,{title:`Create an HMAC-SHA256 signature`,children:_jsxs(_components.p,{children:[`Create an HMAC-SHA256 signature using your Webhook Signing Secret and the raw request body. The signature should be in the format: `,_jsx(_components.code,{children:`v1={hexdigest}`}),`, where `,_jsx(_components.code,{children:`{hexdigest}`}),` is the hexadecimal representation of the HMAC-SHA256 digest.`]})}),_jsx(Step,{title:`Compare signatures`,children:_jsxs(_components.p,{children:[`Compare your calculated signature with the value in the `,_jsx(_components.code,{children:`X-StopWatch-Signature`}),` header. Use a constant-time comparison method to prevent timing attacks.`]})}),_jsx(Step,{title:`Reject invalid requests`,children:_jsx(_components.p,{children:`If the signatures do not match, reject the request with an appropriate HTTP status code (e.g. 401 Unauthorized).`})})]})}),_jsx(Accordion,{title:`Example Webhook Request Validation Code`,icon:`code`,iconType:`regular`,id:`example-webhook-request-validation-code`,children:_jsx(CodeGroup,{dropdown:true,children:_jsx(CodeBlock,{filename:`Example Webhook Request Validation`,numberOfLines:`49`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`49`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hmac`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hashlib`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` time`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` flask `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Flask, request, abort`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`SECRET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your_webhook_signing_secret`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` validate_stopwatch_webhook`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`headers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`raw_body`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`bytes`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) -> `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`bool`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature_header `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` headers.get(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"X-StopWatch-Signature\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` timestamp_header `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` headers.get(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"X-StopWatch-Timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` not`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature_header.startswith(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"v1=\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` False`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` try`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` timestamp_ms `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` int`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(timestamp_header)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` except`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ValueError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` False`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Reject requests older than 5 minutes.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` now_ms `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` int`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(time.time() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` abs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(now_ms `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` timestamp_ms) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 60`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` False`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` received_signature `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature_header.removeprefix(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"v1=\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Use the exact raw request body bytes, not parsed JSON.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` expected_signature `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hmac.new(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` SECRET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.encode(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"utf-8\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` raw_body,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hashlib.sha256,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ).hexdigest()`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hmac.compare_digest(expected_signature, received_signature)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`app `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Flask(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`__name__`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Example endpoint to receive StopWatch for HubSpot webhooks`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@app.post`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/catch-stopwatch-webhook\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` catch_stopwatch_webhook`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`():`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` raw_body `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` request.get_data()`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` not`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` validate_stopwatch_webhook(request.headers, raw_body):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abort(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` event `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` request.get_json()`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Process event here.`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ok\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`})]}),`\n`]})})})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`9-suppress-time-log-ownership-notifications`,children:`9. Suppress Time Log Ownership Notifications`}),`\n`,_jsxs(Accordion,{title:`Suppress Time Log Ownership Notifications`,icon:`bell-slash`,iconType:`regular`,id:`suppress-time-log-ownership-notifications`,children:[_jsxs(_components.p,{children:[`Each `,_jsx(_components.strong,{children:`Time Log`}),` record created via interaction with the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card is automatically assigned a HubSpot “Owner”, reflecting the HubSpot user who is tracking the time. This is also the case for `,_jsx(_components.strong,{children:`Time Logs`}),` created via the app’s Custom Workflow Actions that are not designated as `,_jsx(_components.strong,{children:`Workflow-Managed`}),`.`]}),_jsxs(_components.p,{children:[`The inclusion of this feature within `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` is designed to allow for more powerful reporting and automation when working with `,_jsx(_components.strong,{children:`Time Log`}),` records.`]}),_jsxs(Info,{children:[_jsx(_components.p,{children:`Among other benefits, record ownership of Time Logs allows for:`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Dynamic filtering within reports, and`}),`\n`,_jsx(_components.li,{children:`Subsequent record ownership assignment within workflows`}),`\n`]})]}),_jsxs(_components.p,{children:[`By default, if a record of `,_jsx(Tooltip,{tip:`Including App Objects like 'Time Logs'`,children:`any object type`}),` is assigned an Owner, the relevant HubSpot user is sent an email notification, alerting them to their ownership of the record.`]}),_jsx(_components.p,{children:`This email notification can be managed by users within HubSpot’s settings:`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Navigate to HubSpot Settings`,children:_jsxs(_components.p,{children:[`Open your HubSpot account and click the `,_jsx(Icon,{icon:`gear`}),` icon in the top navigation bar.`]})}),_jsx(Step,{title:`Navigate to User-Specific Notifications`,children:_jsx(_components.p,{children:`Via the left sidebar, navigate to ‘Your Preferences’ > ‘Notifications’`})}),_jsx(Step,{title:`Find 'Custom Objects' and Disable the Notification`,children:_jsx(_components.p,{children:`Locate ‘Custom Objects’ in the centre panel within the ‘Email \u0026 Desktop’ tab. Disable the email notification relating to ‘Custom object assigned to you’.`})})]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-notifications-1.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=7a71d3383c76fcc3485f2e95b2c4f90d`,width:`100%`,\"data-og-width\":`1847`,\"data-og-height\":`882`,\"data-path\":`images/stopwatch/guide-notifications-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-notifications-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=1e2008e8ebbccb8969b065543164177a 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-notifications-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=a8d809cc810b9daea8fe3fc6bf44db4d 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-notifications-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=855517a66b0a6a5fff5cea4be486cf25 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-notifications-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d91f75fd753fbbbaf046d4e3e1f1cded 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-notifications-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=9978449211c98e3be2835a675465a686 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-notifications-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=76afd715558504750f0267c0b97e7002 2500w`})}),_jsx(_components.p,{children:`Unfortunately, this notification can only be managed collectively across all custom objects within a HubSpot account (i.e. it’s not possible to manage this notification granularly, per custom object type). Rather than turning them off in HubSpot, alternatively you could consider configuring your email inbox filters / settings to more selectively “hide” or “delete” these notification emails.`}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#suppressing-time-log-ownership-notifications`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`10-reporting-and-automation`,children:`10. Reporting and Automation`}),`\n`,_jsxs(Accordion,{title:`Reporting \u0026 Automation`,icon:`bolt-lightning`,iconType:`duotone`,id:`reporting-and-automation`,children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`HubSpot `,_jsx(_components.a,{href:`https://knowledge.hubspot.com/reports/create-custom-reports`,children:`Custom Reports`}),` and `,_jsx(_components.a,{href:`https://knowledge.hubspot.com/workflows/create-workflows`,children:`Workflows`}),` are restricted to certain HubSpot subscription levels. Please review the previously linked HubSpot Knowledge Base Articles to confirm whether you have access to these features.`]})}),_jsxs(_components.p,{children:[`Once you have collected some time tracking data in your HubSpot account (in the format of `,_jsx(_components.strong,{children:`Time Log`}),` records), you’re likely going to want to extract some value from it.`]}),_jsx(Heading,{level:`3`,id:`custom-reports`,children:`Custom Reports`}),_jsxs(_components.p,{children:[`You can use your `,_jsx(_components.strong,{children:`Time Logs`}),` as you would any other CRM object type within your HubSpot account. With your `,_jsx(_components.strong,{children:`Time Logs`}),` as the centrepiece, we recommend creating or updating your existing HubSpot reports/dashboards to better understand how your team is collectively spending their time across Deals, Contact, Companies, Tickets, Appointments, Courses, Listings, Services and/or Projects.`]}),_jsxs(_components.p,{children:[`To help get the ball rolling, below are a couple of screenshots of example HubSpot reports leveraging data made available by `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),`.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-1.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=312d4114f976b13135dc53fca43b4e9f`,width:`100%`,\"data-og-width\":`1353`,\"data-og-height\":`889`,\"data-path\":`images/stopwatch/guide-reports-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=0580312f7032168430a2e51dfd10a2d1 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=434ba2d30c9175402ac528b55aae0e2d 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d3760341e8cdf9db03c5bc32f724653e 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=1678a03d35be988b6fc6c20a59169382 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=f975edd09ade35e732915a1c80814424 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d8fdecb0299752be25efd7d3aa207108 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-2.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=371adce8f1be82fd01ce908f4684cd8b`,width:`100%`,\"data-og-width\":`893`,\"data-og-height\":`588`,\"data-path\":`images/stopwatch/guide-reports-2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-2.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=4e52bbf81486c295b2b203dbfce66d9a 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-2.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=9b91a9135df6e8768d8fbcc1796a8d76 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-2.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=f981997e761d67e695771a37c15b7abb 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d412fe8dd3c5c2506fb2e63af5f7327b 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=28a2c9083d341c7b0de691ca9628ed7d 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-reports-2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=a412f81ea46f3a47a0b484d4c93540aa 2500w`})}),_jsx(Heading,{level:`3`,id:`automation-workflows`,children:`Automation Workflows`}),_jsx(Heading,{level:`4`,id:`custom-workflow-actions`,children:`Custom Workflow Actions`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`This feature is available to `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers only`]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers have access to 3 custom workflow actions provided by `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),`. There’s a daily usage cap of 1,000 custom workflow action requests `,_jsx(Tooltip,{tip:`24 hour UTC period`,children:`per day`}),`. Any requests made over this usage cap will be rejected by the app.`]}),_jsxs(_components.p,{children:[`The great majority of requests will be processed within 5 minutes of being received. If you require more requests per day or faster processing times, please submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support request`}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Title`}),_jsx(_components.th,{children:`Detail`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Start Timer`})}),_jsxs(_components.td,{children:[`This custom workflow action starts a `,_jsx(_components.em,{children:`StopWatch for HubSpot`}),` Timer, relevant to the record enrolled in the given workflow. The “Start Timer” action includes an option to tag a Time Log as being `,_jsx(_components.em,{children:`‘Workflow-Managed’`}),`. As a general rule, you should use this feature when the time being tracked does not directly relate to the Owner of the given CRM record.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Stop Timer`})}),_jsxs(_components.td,{children:[`This custom workflow action stops a `,_jsx(_components.em,{children:`StopWatch for HubSpot`}),` Timer, relevant to the record enrolled in the given workflow. If you’ve tagged the corresponding “Start Timer” action as being `,_jsx(_components.em,{children:`‘Workflow-Managed’`}),`, be sure to use the exact same tag within the “Stop Timer” action. Failure to do so could lead to errors relating to the app not being able to find the corresponding Time Log. The “Stop Timer” action also includes an option to exclude out of office hours, with configurable settings including the ability to specify your timezone and the start/end hours of your standard work day. This allows for the support of common sales and service time tracking use cases involving the analysis of how long CRM records spend in a given stage/status, excluding out of office hours.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Stop Timer on Existing Time Log`})}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`[Time Log-based Workflows Only]`}),` This custom workflow action stops the `,_jsx(_components.em,{children:`StopWatch for HubSpot`}),` Timer directly on the Time Log enrolled in the given workflow. Please note, for installs using the app in the legacy `,_jsx(_components.strong,{children:`Custom Objects mode`}),`, this feature can only be made available on a case-by-case basis. If you’d like to request access, please submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support`,children:`support request`})]})]})]})]}),_jsxs(_components.p,{children:[`These custom workflow actions come with settings that offer far greater time tracking flexibility, in comparison to using the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card feature alone. For example, it’s possible to configure workflows that track the time an individual record spends within a given object stage (e.g. Deal Stage, Contact Lifecycle Stage, Ticket Status, Listing Stage, Service Stage), excluding out of office hours.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-1.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=9cebb7c43c5bdaef0c4a57123881c547`,width:`100%`,\"data-og-width\":`1364`,\"data-og-height\":`992`,\"data-path\":`images/stopwatch/guide-workflows-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=2b36aab12563bce6acff1fbf28999ef7 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=662309b88f076345d8bc49ed52ee4c1f 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=496068cc82e527536f8066d5b3e3618a 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=098187e13676d0c63454edc6f4cf1259 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=2a71a127077d1523cc0ccec6a3865cb9 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=cf1f718b45df238cf9775b77defe31cd 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-2.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=57ca8e8ae0a6720fb73cc7853e498bce`,width:`100%`,\"data-og-width\":`2242`,\"data-og-height\":`1800`,\"data-path\":`images/stopwatch/guide-workflows-2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-2.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=7dbb753eafefbac9bc525659b18d4de1 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-2.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=dd1442abd10f707c411e51a558bb869a 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-2.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=9de214199164b64b58b64f7d7e7d8581 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=d3115215f89f553efc6d28d1befcdf2e 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=2a7942e1f3ce35118845daf0937559e2 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=dd97a206198ca3698d1a682cc1ed36c2 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-3.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=ac3d2cc997c99f41a59e9ab99b8b695d`,width:`100%`,\"data-og-width\":`986`,\"data-og-height\":`921`,\"data-path\":`images/stopwatch/guide-workflows-3.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-3.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=945a470d132ee60f8095aac64ec4041b 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-3.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=6de3cbeecc42019fa6de4645f6eb9ef3 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-3.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=e20213a9ce90d953dc43d859defefd98 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-3.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=3094e4792b250b7a0697117ea8688201 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-3.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=338b1363b78f815bcf7948371cb37869 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-workflows-3.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=c045d82f127a7e5d2c186d0e2ea5fae9 2500w`})}),_jsxs(_components.p,{children:[`To learn more about how to use your `,_jsx(_components.strong,{children:`Time Logs`}),` in HubSpot’s `,_jsx(_components.a,{href:`https://knowledge.hubspot.com/reports/create-custom-reports`,children:`custom reporting`}),` and `,_jsx(_components.a,{href:`https://knowledge.hubspot.com/workflows/create-workflows`,children:`automation tools`}),`, please review the previously linked HubSpot Knowledge Base Articles.`]}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#reporting-and-automation`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`11-app-settings`,children:`11. App Settings`}),`\n`,_jsxs(Accordion,{title:`App Settings`,icon:`gear`,iconType:`duotone`,id:`app-settings`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` comes with a number of settings, configurable from within HubSpot.`]}),_jsx(Heading,{level:`4`,id:`user-specific-settings`,children:`User-Specific Settings`}),_jsxs(_components.p,{children:[`By default, user-specific settings can be configured by anyone with `,_jsx(_components.strong,{children:`App Marketplace Access`}),` permissions.`]}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Admins can edit the settings of all users`}),`\n`,_jsx(_components.li,{children:`Non-admins can only edit their own user-specific settings`}),`\n`]}),_jsxs(Info,{children:[`Admins can control which non-admins are able to adjust user-specific settings via the `,_jsx(_components.strong,{children:`Lockdown User Settings`}),` feature.`]}),_jsx(Heading,{level:`4`,id:`account-specific-settings`,children:`Account-Specific Settings`}),_jsx(_components.p,{children:`Only admins can edit the account-specific settings.`}),_jsx(`br`,{}),_jsxs(_components.p,{children:[`To access `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` settings:`]}),_jsxs(Steps,{children:[_jsx(Step,{title:`Navigate to HubSpot Settings`,children:_jsxs(_components.p,{children:[`Open your HubSpot account and click the `,_jsx(Icon,{icon:`gear`}),` icon in the top navigation bar.`]})}),_jsx(Step,{title:`Navigate to Connected Apps`,children:_jsx(_components.p,{children:`Via the left sidebar, navigate to Account Management > Integrations > Connected Apps`})}),_jsx(Step,{title:`Find \u0026 Click 'StopWatch'`,children:_jsxs(_components.p,{children:[`From the list of apps connected to your HubSpot account, find and click `,_jsx(_components.strong,{children:`StopWatch`}),`. Then click through to the `,_jsx(_components.strong,{children:`Settings`}),` tab.`]})})]}),_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Admin`,icon:`user`,iconType:`solid`,id:`admin`,children:[_jsx(_components.p,{children:`Please refer to the below table for an explanation of all the account-specific settings available within the “Admin Settings” tab.`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Nominated Users`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`list`,children:`Primary Admin`})}),_jsxs(_components.td,{children:[`Only visible to our `,_jsx(_components.strong,{children:`🤗 Free`}),` subscribers. A list of up to 3 nominated users with access to app features. User rotation is not supported. Once you successfully nominate 3 users, you will not be able to make further changes.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Web UI Users`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`list`,children:`None`})}),_jsxs(_components.td,{children:[`Only available to our `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers. A list of nominated users with access to our `,_jsx(_components.a,{href:`#web-ui`,children:`Web UI feature`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`StopWatch API Key`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`ellipsis`,children:`None`})}),_jsxs(_components.td,{children:[`Manage your `,_jsx(_components.a,{href:`/apis/stopwatch`,children:_jsx(_components.strong,{children:`StopWatch API`})}),` authentication token. Only available to our `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers and only visible to `,_jsx(_components.strong,{children:`Primary Admins`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Webhooks`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`Subscribe to Time Log creation and time tracking session submission webhook events.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Lockdown User Settings`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`If enabled, prevents non-admins from modifying their own user-specific settings.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Lockdown User Settings Exceptions`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`list`,children:`None`})}),_jsx(_components.td,{children:`Indicates which users should be exempt from the ‘Lockdown User Settings’ restriction (described above). This gives specific non-admins the ability to modify their own user-specific settings, while preventing all other non-admins from doing so. Only available if ‘Lockdown User Settings’ is enabled.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Auto Start Override`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[`When enabled, the `,_jsx(_components.strong,{children:`Auto Start Timer`}),` feature is engaged whenever a user loads a CRM record view containing the StopWatch App Card, provided the timer was last stopped more than 1 minute ago. This removes the default requirement for a prior time tracking session to have been logged against the given CRM record. This makes it possible to use the `,_jsx(_components.strong,{children:`Auto Start Timer`}),` and `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` features concurrently.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`App Events for Time Tracking Sessions`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[`Only available to our `,_jsx(_components.strong,{children:`👥 Team`}),` and `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers. When enabled, `,_jsx(_components.strong,{children:`App Events`}),` are logged within the relevant HubSpot CRM record’s activity timeline for each submitted time tracking session. This makes it possible to build HubSpot Workflows and Reports based on the submission of individual time tracking sessions.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Timesheet Managers`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`list`,children:`None`})}),_jsxs(_components.td,{children:[`Assign the role of `,_jsx(_components.strong,{children:`Timesheet Manager`}),` to individual users. Timesheet Managers can view and edit all users’ Timesheets and submit time tracking sessions on their behalf. App Admins inherently have Timesheet Manager permissions, so they aren’t shown as options in this setting.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Require Time Log Category`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[`Only available to our `,_jsx(_components.strong,{children:`👥 Team`}),` and `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers. When enabled, users with the `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` setting enabled must select a `,_jsx(_components.strong,{children:`Category`}),` when submitting a new time tracking session. This does not apply when editing existing Time Logs or to Time Logs created by custom workflow actions.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Associate Primary Company`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[`Only available to our `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers. In addition to being associated with the CRM record time is tracked against, Time Logs are also associated with that record’s Primary (or only) Associated Company. Applied only when creating Time Logs via StopWatch `,_jsx(Tooltip,{tip:`Excluding StopWatch API`,children:`app features`}),`. Only relevant when tracking time against CRM Object Types other than Company.`]})]})]})]})]}),_jsxs(Tab,{title:`User`,icon:`user`,iconType:`regular`,id:`user`,children:[_jsx(_components.p,{children:`Please refer to the below table for an explanation of all the user-specific settings available within the “User Settings” tab.`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Setting`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Admin User`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[_jsx(Badge,{size:`md`,color:`blue`,children:`Visible to admins only`}),` If enabled, this user is assigned admin privileges. Only existing admins can assign/remove admin privileges to/from other users. The `,_jsx(Tooltip,{tip:`By default, the person who installs the app for the first time`,children:`Primary Admin`}),` cannot have their admin privileges removed within the app settings. To change the Primary Admin user, please submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support request`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`1 Time Log Per Session`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[`If enabled, each time tracking session is represented as its own Time Log record. Enables users to specify custom Time Log ‘Titles’, ‘Categories’ and ‘Descriptions’, unlocking powerful segmentation capabilities for your time tracking data. Also enables analysis relating to `,_jsx(Tooltip,{tip:`Similar to how 'Split Time Logs By Week' and 'Split Time Logs By Month' work`,children:`when time was tracked`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Associate Engagements Option`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[`Only available if the `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` setting is enabled. Enables the selective association between Time Logs and one or more related HubSpot Engagements (e.g. Tasks, Meetings and Calls). This makes it possible to create custom reports displaying time tracked against Engagements.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Split Time Logs By Week`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`Allows for time tracked via the StopWatch App Card and Workflow Actions to be segmented by the week of a given year. This is useful for reporting and automation use cases where tracked time needs to be segmented by individual weeks of a given year (e.g. ‘Last week’).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Split Time Logs By Month`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`Allows for time tracked via the StopWatch App Card and Workflow Actions to be segmented by “Month + Year”. This is useful for reporting and automation use cases where tracked time needs to be segmented by month/year combination (e.g. March 2026).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Auto Start Timer`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsxs(_components.td,{children:[`If enabled, starts the timer automatically when an individual HubSpot CRM record view is loaded, assuming `,_jsx(`u`,{children:`all of the following conditions are met:`}),_jsx(`br`,{}),_jsx(`br`,{}),_jsx(_components.strong,{children:`1. The “StopWatch” App Card is present on the given record view.`}),_jsx(`br`,{}),` `,_jsx(_components.strong,{children:`2. You’ve already tracked time against the given HubSpot CRM record`}),` (excl. `,_jsx(_components.em,{children:`1 Time Log Per Session`}),` records). The first time tracking session per record (and per period, if you’ve enabled either “Split By Week” or “Split By Month”) must be submitted manually. This condition can be bypassed via the `,_jsx(_components.strong,{children:`Auto Start Override`}),` adming setting.`,_jsx(`br`,{}),_jsx(_components.strong,{children:`3. Timer last stopped >1 minute ago.`}),` This is to avoid unintentionally restarting the timer soon after having stopped it. This requirement does not apply if you have enabled both the `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` user setting and `,_jsx(_components.strong,{children:`Auto Start Override`}),` admin setting.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Billable By Default`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`If enabled, all time tracking sessions are flagged as billable by default. If the user has the ‘Billable Time Option’ enabled (see below), they can manually override the billable status for each individual time tracking session.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Billable Time Option`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`Allows for time tracked via the StopWatch App Card to be segmented into the groups “Billable” and “Total”. This is particularly useful for reporting and automating use cases where tracked time needs to be segmented as “Billable”, “Total” or “Non-Billable” (i.e. “Total” minus “Billable”).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Round Up Time Tracking Sessions`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`bars`,children:`Disabled`})}),_jsx(_components.td,{children:`Allows for time tracked via the StopWatch App Card to be rounded up to the nearest 1, 5, 6, 15, 30 or 60 minute interval.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Quick Add Session Increments`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`bars`,children:`Default`})}),_jsx(_components.td,{children:`Configure the duration increments available when submitting a ‘Quick Add’ time tracking session (in ‘Simple’ submission mode).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Show ‘Team Summary Data’ Section`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`If enabled, the aggregated time tracked by all team members and other useful summary data is displayed in the StopWatch App Card (relevant to the CRM record being viewed).`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Show ‘Quick Add’ Feature`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`green`,icon:`toggle-on`,children:`ON`})}),_jsx(_components.td,{children:`Controls whether the ‘Quick Add’ feature is displayed within the StopWatch App Card.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Preferred Date Format`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`bars`,children:`Default`})}),_jsxs(_components.td,{children:[`Customise the date format used in certain app features, including the `,_jsx(_components.strong,{children:`Start Date`}),` Quick Add input field. `,_jsx(_components.strong,{children:`Medium`}),` and `,_jsx(_components.strong,{children:`Long`}),` date format options are `,_jsx(Tooltip,{tip:`For example, depending on your browser settings, the 'Long' date format might be displayed as 'January 10, 2027'`,children:`localised`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Max One Active Timer`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`red`,icon:`toggle-off`,children:`OFF`})}),_jsx(_components.td,{children:`Controls whether only one timer can be active at a time. If enabled, manually starting a timer via the StopWatch App Card will automatically stop any other active timers belonging to the given user.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Weekly Capacity (Hours)`})}),_jsx(_components.td,{children:_jsx(Badge,{size:`lg`,color:`gray`,icon:`hashtag`,children:`0`})}),_jsx(_components.td,{children:`The number of hours this user is available per week (min: 0, max: 168). Used for capacity calculations in the app’s Timesheets feature.`})]})]})]})]}),_jsxs(Tab,{title:`Categories`,icon:`list`,id:`categories`,children:[_jsxs(_components.p,{children:[_jsx(Note,{children:`Time Log Categories can only be selected by users who have the ‘1 Time Log Per Session’ setting enabled (explained in the ‘User Settings’ tab).`}),`\nManage the categories that are available when creating Time Logs. There are a handful of default categories that are automatically available upon installing the app. These categories are customisable — it’s possible to delete existing and create new categories for your team to use when they submit time tracking sessions.`]}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-settings-categories-1.png?fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=3c9e889809d19f59c9c37580b0cd2eaf`,width:`100%`,\"data-og-width\":`2416`,\"data-og-height\":`1656`,\"data-path\":`images/stopwatch/guide-settings-categories-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-settings-categories-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=94473df16bcbf497c8b72a8f1a1a3fa9 280w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-settings-categories-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=592c89f82c26e732289cbf4027a2f7a1 560w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-settings-categories-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=62a936c1beec47ff3d02a1a403d8a354 840w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-settings-categories-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=409b387a5b0c3ae4325a12deac8649c4 1100w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-settings-categories-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=65eda0c0ce8c1efbc6873c26e73601bc 1650w, https://mintcdn.com/threadintegrations/qibh0KFEf_-1zy8L/images/stopwatch/guide-settings-categories-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qibh0KFEf_-1zy8L\u0026q=85\u0026s=a3d33c90e5589c5c04ac0540e54ff7c2 2500w`})})]}),_jsxs(Tab,{title:`Billable Rates`,icon:`money-bill-1-wave`,id:`billable-rates`,children:[_jsxs(_components.p,{children:[_jsxs(Note,{children:[`Billable Rates are only available for `,_jsx(_components.strong,{children:`💫 Unlimited`}),` subscribers`]}),`\nManage the hourly billable rate and hourly cost used by StopWatch when calculating the Time Log `,_jsx(_components.strong,{children:`Billable Amount`}),`, `,_jsx(_components.strong,{children:`Cost Amount`}),` and `,_jsx(_components.strong,{children:`Margin Amount`}),` properties.`]}),_jsx(_components.p,{children:`Admins can choose between:`}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`👤 User-Based`}),`: billable rates are managed per HubSpot User`]}),`\n`]})}),_jsx(Card,{children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`💼 Service-Based`}),`: billable rates are managed per `,_jsx(Tooltip,{tip:`As defined by app admins`,children:`Service`})]}),`\n`]})})]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Service`}),` selector in the `,_jsx(_components.strong,{children:`StopWatch`}),` App Card is only shown when all of the following conditions are true:`]}),_jsx(Card,{children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Billable Rate Type`}),` is set to `,_jsx(_components.strong,{children:`Service-Based`})]}),`\n`,_jsx(_components.li,{children:`At least 1 Service has been configured`}),`\n`,_jsxs(_components.li,{children:[`The user’s `,_jsx(_components.strong,{children:`1 Time Log Per Session`}),` setting is enabled`]}),`\n`]})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-1.png?fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=a6b030a5514b5dc5afe11ebe138aa549`,width:`100%`,\"data-og-width\":`1093`,\"data-og-height\":`870`,\"data-path\":`images/stopwatch/guide-settings-billable-rates-1.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-1.png?w=280\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=44cf9ef486619d37b57b6963e20c2a19 280w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-1.png?w=560\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=64a634bc7659f7bdc237861cab0ba1ea 560w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-1.png?w=840\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=990022b6826227579a3fb5775342b562 840w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-1.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=ae1cce51fd9252485e81b35b3fff92d9 1100w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-1.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=aab30d534e44e6cb4db1e6303ce519c1 1650w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-1.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=e113c341e76b5f46da889f53f85aab61 2500w`})}),_jsx(Frame,{children:_jsx(OptimizedImage,{src:`https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-2.png?fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=120791d84b7be1ee5e631ae87926e5fc`,width:`100%`,\"data-og-width\":`1193`,\"data-og-height\":`870`,\"data-path\":`images/stopwatch/guide-settings-billable-rates-2.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-2.png?w=280\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=7f9b6553bfc78d477b50d151ed8b3261 280w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-2.png?w=560\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=4525a4932bcfea825d038ca4ddd0b0c7 560w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-2.png?w=840\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=0281760714c20f941e5c58b109981167 840w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-2.png?w=1100\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=8d2ec3b213134740de4735db0a37bbef 1100w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-2.png?w=1650\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=dffbca05539b5861e3122493869f2947 1650w, https://mintcdn.com/threadintegrations/dXBQ7DizzN-qMXFX/images/stopwatch/guide-settings-billable-rates-2.png?w=2500\u0026fit=max\u0026auto=format\u0026n=dXBQ7DizzN-qMXFX\u0026q=85\u0026s=d365cded5dfcf046131c6ec1d7b979da 2500w`})})]})]}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#app-settings`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`12-time-zones`,children:`12. Time Zones`}),`\n`,_jsxs(Accordion,{title:`Time Zones`,icon:`earth-americas`,iconType:`regular`,id:`time-zones`,children:[_jsx(Note,{children:_jsxs(_components.p,{children:[`Dates and times are always stored in HubSpot as UTC. However, when displaying dates and times in certain app interfaces, `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` uses your `,_jsx(Tooltip,{tip:`HubSpot Settings > Account Defaults > General > Time zone`,children:`HubSpot Portal’s time zone`}),` by default.`]})}),_jsxs(_components.p,{children:[`By default, when displaying times in certain app interfaces, `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` uses your `,_jsx(Tooltip,{tip:`HubSpot Settings > Account Defaults > General > Time zone`,children:`HubSpot Portal’s time zone`}),`. However, you can override this default behaviour by specifying a preferred time zone per user, as follows:`]}),_jsxs(Steps,{children:[_jsx(Step,{title:`Navigate to HubSpot Settings`,children:_jsxs(_components.p,{children:[`Open your HubSpot account and click the `,_jsx(Icon,{icon:`gear`}),` icon in the top navigation bar.`]})}),_jsx(Step,{title:`Navigate to Users \u0026 Teams`,children:_jsx(_components.p,{children:`Via the left sidebar, navigate to Account Management > Users \u0026 Teams`})}),_jsx(Step,{title:`Click Relevant User`,children:_jsx(_components.p,{children:`From the list of users, click the relevant user’s display name to open their user configuration area.`})}),_jsxs(Step,{title:`Preferences > Time Zone`,children:[_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`Preferences`}),` tab, then scroll down to the `,_jsx(_components.strong,{children:`Time zone`}),` setting. Update the time zone as required, then click `,_jsx(_components.strong,{children:`Save`}),`.`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`Unfortunately, enabling the `,_jsx(_components.em,{children:_jsx(_components.strong,{children:`Update time zone based on device location`})}),` setting is not currently compatible with this feature. For this feature to work, you must select a specific time zone.`]})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`13-uninstall-app`,children:`13. Uninstall App`}),`\n`,_jsxs(Accordion,{title:`Uninstall App`,icon:`trash-can`,iconType:`duotone`,id:`uninstall-app`,children:[_jsxs(_components.p,{children:[`If you need to uninstall the app from your HubSpot account, this can be performed via HubSpot’s `,_jsx(_components.strong,{children:`Connected Apps`}),` settings page.`]}),_jsxs(Steps,{children:[_jsx(Step,{title:`Navigate to HubSpot Settings`,children:_jsxs(_components.p,{children:[`Open your HubSpot account and click the `,_jsx(Icon,{icon:`gear`}),` icon in the top navigation bar.`]})}),_jsx(Step,{title:`Navigate to Connected Apps`,children:_jsx(_components.p,{children:`Via the left sidebar, navigate to Account Management > Integrations > Connected Apps`})}),_jsx(Step,{title:`Find 'StopWatch' and click 'Actions''`,children:_jsxs(_components.p,{children:[`From the list of apps connected to your HubSpot account, find `,_jsx(_components.strong,{children:`StopWatch`}),` and click the `,_jsx(_components.strong,{children:`Actions`}),` dropdown button. Then click `,_jsx(_components.strong,{children:`Uninstall`}),`.`]})})]}),_jsxs(_components.p,{children:[`Once the app is uninstalled, your HubSpot account would no longer be connected to the `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` app. As such, you would no longer be able to use any `,_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` features. However, any existing `,_jsx(Tooltip,{tip:`i.e. Time Log records and associated Time Log Session Details`,children:`time tracking data`}),` will remain stored within your HubSpot account.`]}),_jsxs(_components.p,{children:[`Additionally, any existing HubSpot Workflows leveraging `,_jsxs(Tooltip,{tip:`e.g. Start Timer and/or Stop Timer custom workflow actions`,children:[_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` features`]}),` will be flagged with a `,_jsx(_components.strong,{children:`Changes needed`}),` (or similar) alert. Please note, any such workflow executions occurring after the app has been uninstalled will result in error.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` features and associated data are contained entirely within HubSpot. As such, uninstalling the app is the only action required by you to effectively disconnect your HubSpot account from the app. If you have any questions regarding the disconnection of your HubSpot account with the app, please feel free to submit a `,_jsx(_components.a,{href:`https://www.threadi.au/support?app_name=stopwatch`,children:`support request`}),`.`]}),_jsxs(Columns,{cols:2,children:[_jsx(Card,{icon:`chevron-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#uninstall-app`,children:`Top of section`})})}),_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})]})]}),`\n`,_jsx(`br`,{}),`\n`,_jsx(Columns,{cols:2,children:_jsx(Card,{icon:`chevrons-up`,children:_jsx(_components.p,{children:_jsx(_components.a,{href:`#`,children:`Top of page`})})})}),`\n`,_jsx(`br`,{}),`\n`,_jsx(_components.hr,{}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`StopWatch for HubSpot`}),` is created and managed by `,_jsx(_components.a,{href:`https://www.threadi.au/`,children:`Thread Integrations`}),`, a small Australian business providing expert system integration, software development \u0026 analytics services.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"StopWatch for HubSpot","description":"This **App Usage Guide** aims to help you get up and running with **StopWatch for HubSpot**, an intuitive time tracking app designed specifically for HubSpot.","icon":"timer","tag":"","sidebarTitle":"","href":"/apps/stopwatch"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"App Demo Videos","slug":"app-demo-videos","depth":2,"children":[]},{"title":"1. Installing StopWatch for HubSpot","slug":"1-installing-stopwatch-for-hubspot","depth":2,"children":[]},{"title":"2. Subscriptions and Nominating Users","slug":"2-subscriptions-and-nominating-users","depth":2,"children":[]},{"title":"3. App Cards","slug":"3-app-cards","depth":2,"children":[]},{"title":"4. Time Logs","slug":"4-time-logs","depth":2,"children":[]},{"title":"5. Timesheets","slug":"5-timesheets","depth":2,"children":[]},{"title":"6. Web UI","slug":"6-web-ui","depth":2,"children":[]},{"title":"7. App Events","slug":"7-app-events","depth":2,"children":[]},{"title":"8. Webhooks","slug":"8-webhooks","depth":2,"children":[]},{"title":"9. Suppress Time Log Ownership Notifications","slug":"9-suppress-time-log-ownership-notifications","depth":2,"children":[]},{"title":"10. Reporting and Automation","slug":"10-reporting-and-automation","depth":2,"children":[]},{"title":"11. App Settings","slug":"11-app-settings","depth":2,"children":[]},{"title":"12. Time Zones","slug":"12-time-zones","depth":2,"children":[]},{"title":"13. Uninstall App","slug":"13-uninstall-app","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/threadintegrations/2edf72ac381eda82/main.js"],"dynamicCss":".mint-aspect-video {\n aspect-ratio: 16 / 9\n}\n.mint-w-full {\n width: 100%\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}","subdomain":"threadintegrations","siteName":"Thread Integrations","title":"StopWatch for HubSpot - Thread Integrations","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-19T23:43:23.731Z","originalFileLocation":"apps/stopwatch.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"This App Usage Guide aims to help you get up and running with StopWatch for HubSpot, an intuitive time tracking app designed specifically for HubSpot.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Thread Integrations\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"StopWatch for HubSpot - Thread Integrations\">\u003cmeta data-mint-head property=\"og:description\" content=\"This App Usage Guide aims to help you get up and running with StopWatch for HubSpot, an intuitive time tracking app designed specifically for HubSpot.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Thread Integrations\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.threadi.au/apps/stopwatch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://threadintegrations.mintlify.app/_mintlify/api/og/v2?division=App+Usage+Guides\u0026amp;title=StopWatch+for+HubSpot\u0026amp;description=This+**App+Usage+Guide**+aims+to+help+you+get+up+and+running+with+**StopWatch+for+HubSpot**%2C+an+intuitive+time+tracking+app+designed+specifically+for+HubSpot.\u0026amp;theme=28659fd01fe41f3a18cff93a\u0026amp;signature=13651291e0aeec51b958ba23dc9a039f87535262ad7b732e9ddfacfc6ede15fa\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"StopWatch for HubSpot - Thread Integrations\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"This App Usage Guide aims to help you get up and running with StopWatch for HubSpot, an intuitive time tracking app designed specifically for HubSpot.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://threadintegrations.mintlify.app/_mintlify/api/og/v2?division=App+Usage+Guides\u0026amp;title=StopWatch+for+HubSpot\u0026amp;description=This+**App+Usage+Guide**+aims+to+help+you+get+up+and+running+with+**StopWatch+for+HubSpot**%2C+an+intuitive+time+tracking+app+designed+specifically+for+HubSpot.\u0026amp;theme=28659fd01fe41f3a18cff93a\u0026amp;signature=13651291e0aeec51b958ba23dc9a039f87535262ad7b732e9ddfacfc6ede15fa\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/threadintegrations/5YEdVNvSIFDtFqpH/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Thread Integrations\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6AA850\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.threadi.au/apps/stopwatch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/apps/stopwatch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.threadi.au/#organization\",\"name\":\"Thread Integrations\",\"url\":\"https://docs.threadi.au\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/threadintegrations/-a0yZn5t2jU8z0Uj/logo/light.png?fit=max\u0026auto=format\u0026n=-a0yZn5t2jU8z0Uj\u0026q=85\u0026s=7745351dbee5227c0313fcaf7038580c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.threadi.au#website\",\"name\":\"Thread Integrations\",\"url\":\"https://docs.threadi.au\",\"publisher\":{\"@id\":\"https://docs.threadi.au/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.threadi.au/apps/stopwatch#webpage\",\"url\":\"https://docs.threadi.au/apps/stopwatch\",\"name\":\"StopWatch for HubSpot\",\"description\":\"This App Usage Guide aims to help you get up and running with StopWatch for HubSpot, an intuitive time tracking app designed specifically for HubSpot.\",\"dateModified\":\"2026-08-19T23:43:23.731Z\",\"isPartOf\":{\"@id\":\"https://docs.threadi.au#website\"},\"breadcrumb\":{\"@id\":\"https://docs.threadi.au/apps/stopwatch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.threadi.au/apps/stopwatch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Thread Integrations\",\"item\":\"https://docs.threadi.au\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"StopWatch for HubSpot\",\"item\":\"https://docs.threadi.au/apps/stopwatch\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.threadi.au/apps/stopwatch#article\",\"headline\":\"StopWatch for HubSpot\",\"name\":\"StopWatch for HubSpot\",\"description\":\"This App Usage Guide aims to help you get up and running with StopWatch for HubSpot, an intuitive time tracking app designed specifically for HubSpot.\",\"url\":\"https://docs.threadi.au/apps/stopwatch\",\"mainEntityOfPage\":{\"@id\":\"https://docs.threadi.au/apps/stopwatch#webpage\"},\"dateModified\":\"2026-08-19T23:43:23.731Z\",\"publisher\":{\"@id\":\"https://docs.threadi.au/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.threadi.au#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Thread Integrations\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Thread Integrations","nav":{"global":{"anchors":[{"anchor":"Resources","icon":"book-open-lines","href":"/apps/stopwatch"},{"anchor":"Pricing","icon":"wallet","href":"/pricing"},{"anchor":"Support","icon":"circle-question","href":"https://www.threadi.au/support"},{"anchor":"Reviews","icon":"star","href":"/reviews"},{"anchor":"Manage Subscription","icon":"stripe-s","href":"https://billing.stripe.com/p/login/3csdSc2wP68ybTi144"},{"anchor":"Thread Integrations Website","icon":"globe-pointer","href":"https://www.threadi.au/"}]},"tabs":[{"tab":"Resources","groups":[{"group":"App Usage Guides","pages":[{"title":"StopWatch for HubSpot","icon":"timer","tag":"","sidebarTitle":"","href":"/apps/stopwatch"},{"title":"Utilities for HubSpot","description":"This **App Usage Guide** aims to help you get up and running with **Utilities for HubSpot**, an app providing extra features for your HubSpot account, as [requested by you](https://utilities.threadi.au/feature-request).","icon":"gear","tag":"","sidebarTitle":"","href":"/apps/utilities"}]},{"group":"StopWatch API","pages":[{"title":"Overview","icon":"puzzle-piece","tag":"","sidebarTitle":"Overview","href":"/apis/stopwatch/index"},{"title":"StopWatch Time Log Schema","icon":"brackets-curly","iconType":"regular","tag":"","sidebarTitle":"Time Log Schema","mode":"wide","href":"/apis/stopwatch/time-log-schema"},{"group":"API Reference","pages":[{"title":"List Time Logs","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml get /stopwatch/v1/timelogs","href":"/apis/stopwatch/list-time-logs"},{"title":"Create Time Log","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml post /stopwatch/v1/timelogs","href":"/apis/stopwatch/create-time-log"},{"title":"Get Time Log","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml get /stopwatch/v1/timelogs/{id}","href":"/apis/stopwatch/get-time-log"},{"title":"Update Time Log","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml patch /stopwatch/v1/timelogs/{id}","href":"/apis/stopwatch/update-time-log"},{"title":"Batch Read Time Logs","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml post /stopwatch/v1/timelogs/batch/read","href":"/apis/stopwatch/batch-read-time-logs"},{"title":"List Properties","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml get /stopwatch/v1/timelogs/properties","href":"/apis/stopwatch/list-properties"},{"title":"List Owners","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml get /stopwatch/v1/owners","href":"/apis/stopwatch/list-owners"},{"title":"Search Time Logs","deprecated":null,"version":null,"openapi":"/apis/stopwatch-openapi.yaml post /stopwatch/v1/timelogs/search","href":"/apis/stopwatch/search-time-logs"}]}]},{"group":"Other Resources","pages":[{"title":"Security","icon":"shield-halved","tag":"","sidebarTitle":"Security","href":"/resources/security"},{"title":"Changelog","icon":"code-compare","tag":"","sidebarTitle":"Changelog","href":"/resources/changelog"},{"title":"System Statuses","icon":"circle-exclamation","tag":"","sidebarTitle":"Status","href":"/resources/status"}]}]},{"tab":"Pricing","pages":[{"title":"Pricing","href":"/pricing"}]}]},"title":"StopWatch for HubSpot - Thread Integrations","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["07c022d89b","a74be98ba7","a9bb46feb3"],"chunks":["Frame-BbYRHtLl.js","DynamicMarkdown-DN96a4Ur.js","zoom-image-lightbox-D7yRe3On.js","lightbox-handle-r17bVUz3.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}