Tim Time Tracker Help
Using Tim
Tim is not showing in the menu bar
macOS hides menu bar items when there isn't enough space. Quit some other menu bar apps, or move Tim further right: hold Command (⌘) and drag its icon.
Can I import data from another time tracking app?
Tim imports its own JSON format. Some open source tools can convert data from other apps. See Third-Party Integrations.
How do I change the date format and the first day of the week?
Tim uses the settings of your Mac. Choose Apple menu > System Settings > General > Language & Region.
Where are backup files located?
In Tim, choose Settings > Backups > View Backups.
Default location:
~/Library/Containers/neat.software.Tim/Data/Documents/BackupsWhere is the live data file located?
~/Library/Containers/neat.software.Tim/Data/Library/Preferences/neat.software.Tim.plistThe file is encrypted. Contact us if you need a copy that you can import.
Where can I find crash reports?
Crash reports are in
~/Library/Logs/DiagnosticReports. To find and show the most recent Tim report, enter this command in Terminal:f=$(ls -t ~/Library/Logs/DiagnosticReports/Tim-*.ips 2>/dev/null | head -1); [ -f "$f" ] && open -R "$f" || printf "\nNo Crash Reports Found\n"Can I export data from the command line?
Yes. This command saves all of your data to a file:
osascript -e 'tell application "Tim" to export' > data.jsonSee Scripting & Automation for more commands.
Purchases
See the Pro page.
Where do I enter my license key?
You don't have to enter it. If you bought Tim directly from our website, your download already has all Pro features.
Keep the key in a safe place. We use it to find your purchase if you need help or a new copy of the app.
I can't restore my App Store purchase
Make sure that you are signed in to the App Store with the Apple Account that you used to buy Tim.
Purchases made before version 7.0 (October 2022) can't be restored in the app. Tim was a paid app at that time. Now Tim is free and Pro is an in-app purchase, which is a different product SKU. Contact us with your receipt and we will send you a promo code.
- Open the upgrade screen in Tim.
- Click More in the bottom-right corner, then click Redeem Code.
- Enter the code in the App Store window that opens.
Tim upgrades to Pro when the App Store accepts the code.
You can try Tim for free before you upgrade, so we don't usually give refunds. If you bought Pro through the App Store, you can ask Apple for a refund. Apple decides whether to give it.
Yes. Go to Student App Centre. It checks that you are a student and gives you a discount code.
Scripting & Automation
You can control Tim with AppleScript, JavaScript, Shortcuts and URLs. Some actions need Pro, for example importing data or making more than 3 tasks.
AppleScript
To see all commands and their parameters, open Script Editor, choose File > Open Dictionary, then select Tim.
Commands that make a task, group or record return the ID of the new item as text. Most other commands take an ID.
Find items
-- Get the ID of a task from its title
tell application "Tim" to getTask "Task A"
--> "D43FA035-6406-495D-9ADD-46721986040F"
-- Get the ID of the running task. This gives an error if no timer is running.
tell application "Tim" to getActiveTask
Make tasks, groups and records
-- A task with only a title
tell application "Tim" to createTask title "Task B"
-- A task with notes, a group ID and tags (tag IDs or titles)
tell application "Tim" to createTask title "Task B" notes "Follow up Monday" group "9C1E5A80-2B77-4F0E-A0E1-1D7B6E2A9F31" tags {"Billed", "Urgent"}
-- A group
tell application "Tim" to createGroup title "Client X"
tell application "Tim" to createGroup title "Client X" notes "Retainer work"
-- A time record. Only the task is necessary. Without a start and end, Tim uses default times.
-- The date text must use the date format of your Mac.
tell application "Tim" to createRecord task "345287FA-CCF3-43E9-BC25-7AA68F7B88E7" ¬
start date "10/25/24 9:00:00 AM" end date "10/25/24 10:15:30 AM" ¬
notes "Worked" tags {"Billed"}
Control the timer
-- Start the timer for a task
tell application "Tim" to startTask "D43FA035-6406-495D-9ADD-46721986040F"
-- Stop the timer. This returns the ID of the new record.
-- It returns "" if Tim discarded the record because it was shorter than the minimum duration.
tell application "Tim" to stopTimer
-- Start or stop the timer. This returns the task ID.
tell application "Tim" to toggleTimer
-- Start the task that has the title "Task A"
tell application "Tim"
set taskId to getTask "Task A"
startTask taskId
end tell
Delete and archive
-- Delete a task and all of its records
tell application "Tim" to deleteTask "D43FA035-6406-495D-9ADD-46721986040F"
-- Delete a group, its tasks and all of their records
tell application "Tim" to deleteGroup "9C1E5A80-2B77-4F0E-A0E1-1D7B6E2A9F31"
-- Archive or unarchive a task or group.
-- An unarchived item moves to the top level of the list.
tell application "Tim" to archive "D43FA035-6406-495D-9ADD-46721986040F"
tell application "Tim" to unarchive "D43FA035-6406-495D-9ADD-46721986040F"
Import and export
-- Return all data as JSON text
tell application "Tim" to export
-- Replace all data with the data in a file
tell application "Tim" to import POSIX file "/path/to/file.json"
-- Add the data in a file to your current data. Returns true if the import worked.
tell application "Tim" to import POSIX file "/path/to/file.json" with merge
Open windows
tell application "Tim" to openTaskManager
tell application "Tim" to openNewTask
tell application "Tim" to openNavigator
tell application "Tim" to openActiveRecord
JavaScript for Automation
The same commands work in JavaScript. Use the command names in lowercase.
const tim = Application("Tim");
const data = tim.export();
tim.createtask({ title: "Task A" });
tim.createtask({ title: "Task B", tags: ["Billed"] });
const taskId = tim.gettask("Task A");
tim.createrecord({ task: taskId, start: new Date(), notes: "Worked" });
Command Line
Use osascript to send commands from Terminal or a shell script.
# Save all data to a file
osascript -e 'tell application "Tim" to export' > data.json
# Make a task with a tag
osascript -e 'tell application "Tim" to createTask title "Task B" tags {"Billed"}'
Shortcuts
Open the Shortcuts app, then select Tim in the Apps list. Tim has actions to make, find, archive and delete tasks and groups. There are also actions to start, stop and toggle the timer, make time records, and import or export your data.
Deep Links
tim://opens Tim.tim://[id]shows a task, group or record. To copy an ID, open the task or group editor and click the Info button.tim://[id]?action=start¬es=My%20Notesstarts the timer for a task. Thenotesvalue is optional. Tim adds it to the new record.tim://?action=stopstops the running timer.tim://create?type=task&title=My%20Title¬es=My%20Notesmakes a task. Thetitleandnotesvalues are optional.tim://create?type=group&title=My%20Titlemakes a group.tim://create?type=record&task=[task id]&start=2024-11-01T18:00:00Z&end=2024-11-01T20:00:00Z¬es=My%20Notesmakes a time record. Thestartandendvalues are necessary and use the ISO 8601 format.tim://settingsopens Settings.tim://exportopens the export window.tim://upgradeopens the upgrade screen.
We consider the create deep links deprecated and suggestion using AppleScript or Shortcuts.
x-callback-url
Tim supports the x-callback-url standard. The getCurrentUrl action gets the deep link of the item that is selected in Tim. Tim then opens your x-success URL, with the deep link in the url parameter and the item's name in the title parameter.
tim://x-callback-url/getCurrentUrl?x-success=https://example.com
Third-Party Integrations
Other developers made these tools.
- Raycast: control Tim from Raycast.
- Toggl: convert Toggl CSV exports into Tim backups.
- Caato+: move your data from Caato to Tim.
- Hammerspoon: get a reminder to start a timer.