For people who track time inTopTrackerand manage the work inJira

Gets your TopTracker time into Jira.

A small Mac menu-bar app. It watches TopTracker, finds the Jira issue in each session, and posts the worklogs you confirm. Nothing posts on its own.

macOS 12.0+ · 0.7.2 · native AppKit app · no Electron, no bundled browser

Wi-Fi100%14:26

Worklogs

Tracking DEMO-42

DayLast 7 DaysCustom Range
PostJira IssueTitleTrackedJira Status
DEMO-42Checkout fails on an expired card6h 12m4 sessions
1h 46mTracked
2h 5mTracked
1h 40mTracked
41mTracked
OTHER-7Migrate billing webhooks1h 22mTracked
OTHER-12Retry queue alerts3h 10m2 sessions
Unassigned1h 4mIgnored for Jira

8 sessions · Tracked 11h 48m

Select Worklogs to Post

Why I built this

I'm a contractor. The company I work for tracks time in TopTracker — their rule, not mine. The actual work lives in Jira.

So every week I'd open TopTracker, copy the sessions into a spreadsheet, clean out the duplicates, add up the hours per ticket, and type the totals into Jira one by one. Then do the invoice on Sunday.

And I kept forgetting to log things. Those hours were just gone.

TopTracker had recorded all of it the whole time. It just never got to Jira. So I built the bit in between.

Konstantin Zotov · Spain

How it works

Capture is automatic. Posting is not.

The tracker runs unattended in the menu bar. The write to Jira waits for you — because a timer interval is not a billable total, and nobody enjoys un-posting a worklog.
It follows TopTracker
Reads the app's log and SQLite database read-only, WAL included. File events coalesce at 250 ms; a 15-second metadata check catches anything a watcher missed, including a replaced file.
It finds the issue key
A session described DEMO-42 Checkout sweep maps to DEMO-42. A Jira URL works too. Anything without a key stays Unassigned — never guessed at. Assign it yourself, and make it a rule if that description comes back every week. Recognised keys are shown with the issue's own title, fetched from Jira and cached for a day.
You confirm the day
Worklogs checks your own Jira worklogs for the day as it opens. Everything that can post is already ticked. Fix an issue, trim the time to post or add a comment in the row, untick what should wait, confirm the count. Only then does it write.

Worklogs · Day

A preview you can argue with before Jira sees it.

One row per session. An issue you came back to becomes a group that says what Jira will get: one worklog per issue per day, rounded once. Everything postable is ticked; untick what should wait.

Worklogs

Tracking DEMO-42

DayLast 7 DaysCustom Range
Date‹4 Mar 2026›Today
PostJira IssueTitleTrackedLoggedTo PostEstimateJira RemainingJira Status
DEMO-42Checkout fails on an expired card1h 13m0m1h 13m4h2h 30mPosts as 1 worklog · 1h 13m
41m0m41m4h2h 30mPart of 1h 13m worklog
31m0m31m4h2h 30mPart of 1h 13m worklog
<1m0m<1m4h2h 30mPart of 1h 13m worklog
OTHER-7Migrate billing webhooks1h 22m30m30m——Ready
OTHER-12Retry queue alerts25m0m25m6h3h 10mPossible manual worklog — confirm match or review
OTHER-3Rotate staging certificates18m18m0m1h0mComplete
Unassigned1h 4m0m0mAssign issue / at least 1m, at most 24h

Tracked 4h 22m · Logged 48m · Not logged 3h 34m

Post 3 Worklogs · 2h 8m…

It checks

Only yours, by itself. Your own Jira worklogs for that day, checked as Worklogs opens, after an edit, and on ⌘R.

One row per session. An issue tracked more than once becomes a group that says what Jira will get.

Logged by hand? Pin it. Only the matched minutes count as done.

It posts

Pre-ticked, you confirm. Everything postable is selected. Untick, then confirm the count.

One issue, one worklog a day. 4m, 3m and 10m on DEMO-42 post as a single 17m worklog.

Part of a day is fine. Lower To Post; the rest stays for another issue.

It holds back

Never twice. A private Jira property marks what was posted, even from another Mac.

Estimates untouched. Jira's estimate is shown, not reduced, unless you turn that on.

Under a minute? Folded in. It counts toward that issue's worklog for the day, and never posts alone.

Reminders, columns, ⌘R and the rest of the small print: how Worklogs decides.

Invoice week

The figure you have to retype somewhere else.

Tracking a week is one job. Getting its total and its activity list into whatever pays you is another one, and it is the part that used to mean a spreadsheet.
Drop it on the icon
Drag the invoice PDF onto TopTrack in the menu bar — the icon lights up while a file is over it. Also File → Read Invoice…, the Finder, or --invoice <file>.
Two fields, two buttons
The week's billed total, and the activity descriptions with duplicates removed and the rest sorted. A copy button beside each, because both are going into a form on another site.
It refuses to guess
The parsed rows must add up to the total the invoice itself states. When they do not, nothing is shown — a wrong figure on a payment submission is worse than no figure. The file is read locally and discarded; nothing is stored or sent.
What it touches

Local session history. Clear connections to Jira.

It reads
  • TopTracker's application.log
  • TopTracker.db — read-only, WAL included
It never reads
  • TopTracker authentication tokens
  • TopTracker settings
  • Screenshots
  • Keyboard and mouse counters
It stores
Session history in Application Support. The Mac App Store build uses its sandbox container; the direct build uses ~/Library/Application Support/TopTrack. Jira credentials go to the macOS Keychain, never to a file the app writes.
It sends
Confirmed worklogs to your Jira site, and nothing before you press Post. Sign-in codes to the authorization server, which keeps nothing. A currency pair to a rates service, only if you turn conversion on. An update check to toptrack.app, only if you allow it. That is the whole list — no analytics, no telemetry, no account. This website counts visits only if you allow it when asked. Every destination, explained.
Before you install

What it does not do yet.

A utility, not a system of record. The honest list, so nothing surprises you on day one.

Durations are estimates

Displayed time is the interval between source timestamps, not an authoritative billed total.

No mappings out of the box

No company or project rules ship with it. A description carries the key, or you assign the issue yourself — and write your own rule if it repeats.

Jira needs a setup step

First launch walks through the TopTracker folder and Jira, but connecting still needs a registered Atlassian integration and an authorization service — the hosted default, or your own HTTPS origin.

Earnings are an estimate

Hours at your current rate, converted at a cached reference rate. Not an invoice, and not a statement of what anyone owes you.

It cannot track while quit

No tracking while the app is quit or the Mac is asleep. Launch at login is not implemented yet.

A missing stop is not a running timer

Starts recovered after a crash or a log rotation are labelled last-reported, never assumed live. TopTracker's once-a-minute heartbeat confirms one within about ninety seconds.

Tied to TopTracker's shape

Log and schema strings were read on TopTracker 1.7.8. An upgrade there may need an update here.

Stop retyping your week into Jira.

Install it, open Worklogs on Friday, tick the day, confirm. That is the whole routine.

Download 0.7.2 for macOS

macOS 12.0 or newer
Apple silicon and Intel
Requires TopTracker installed
Updates itself from toptrack.app · Settings → About
2.0 MB · released 6 October 2026

Release notes for 0.7.2