How to track billable and non-billable hours in Jira
By Kayabyte · Updated 5 November 2026
Short answer: Jira Cloud has no billable flag on a worklog. Without an app, mark the work item with a label or field if all its time is one or the other, or put a tag in the worklog comment if a single work item mixes both. Then sum the hours from a worklog export, because a search can find those work items but can’t add up only the tagged hours.
Disclosure: I make Burnrate, a Jira cost app, and a free worklog export script, both mentioned below. Everything before the last section works without the app. I ran the search and export steps on a Jira Cloud test site on 5 November 2026.
Decide what “billable” belongs to
This one choice sets the rest of the work:
| Your situation | Mark it on | Why |
|---|---|---|
| Whole work items are internal, such as training or admin | The work item | One label or field, nothing for people to remember when logging |
| Whole projects are internal | The project | Nothing to mark at all |
| One work item has both client time and internal time | Each worklog | The only level that can split them |
Start at the top row if you can. Marking each worklog depends on everybody typing the tag every time, and a missing tag quietly counts as the wrong kind of time.
Option 1: a label or field on the work item
Add a label such as non-billable, or a select field called Billing type, then search:
project = APP AND labels = non-billable
project = APP AND (labels != non-billable OR labels is EMPTY)
The second search needs the is EMPTY part. Without it, work items that have no labels at all are left out.
Export each search, or add Time spent as a column, for totals per work item. Two limits apply. Time spent is all time ever logged, not one month’s time. And the mark covers the whole work item, so a mixed work item can’t be split.
If you need one month, use the export below with that JQL and --from and --to.
Option 2: a tag in the worklog comment
Agree on a tag that won’t appear by accident, such as NONBILL, and ask people to type it in the comment when they log internal time. You can then find those work items:
worklogComment ~ "NONBILL"
That search returns work items, not hours. A work item with one tagged 15-minute worklog and eight untagged hours comes back the same as one that’s entirely tagged. To get the hours, you need individual worklogs.
The free jira-worklog-export script writes one row per worklog, with a comment column:
node src/jira-worklog-export.js --jql "project = APP" --from 2026-10-01 --to 2026-10-31 --out worklogs.csvIn a spreadsheet, sum hours where comment contains your tag, and subtract that from the total. The worklog export guide has the setup and the API calls.
Check for untagged time before you invoice. Tags can be mistyped, and nothing in Jira enforces them.
What this won’t give you
- No money. All of this produces hours. For amounts you still need rates per person and date, which is covered in the guide to rate changes.
- No partly billable time. A worklog tag is either there or not. To bill 3 hours of a 5-hour worklog, log it as two worklogs.
- No protection from edits. People can change a label or a comment after you’ve invoiced, so keep the exported file you billed from.
When an app is worth it
An app starts to pay off when you run this every month, need amounts rather than hours, or need a per-worklog flag people can’t forget.
Timesheet apps such as Tempo Timesheets store billable hours per worklog. That suits you if a single work item often mixes both kinds of time, but people then log time in that app’s way.
Burnrate works at the first level in the table. You choose which labels mean non-billable in its settings, and work items with those labels, and the work under them, aren’t billed. It prices the rest from Jira’s own worklogs with dated billing rates, or a fixed hourly rate on a budget. It has no billable flag on a single worklog, so it can’t split a mixed work item unless you connect Tempo Timesheets, in which case it uses Tempo’s billable hours. It’s on the Atlassian Marketplace.
FAQ
Does Jira Cloud have a billable field? Not on worklogs. You can add a custom field to work items, but that applies to the whole work item.
Can JQL sum hours by label? No. JQL finds work items. Totals come from an export, a report gadget or an app.
Does worklogComment return only the matching worklogs? No, it returns the work items that have one. The other worklogs on those work items aren’t filtered out.
Should internal projects get their own Jira project? If the whole project is internal, yes, it’s the simplest split: everything in it is non-billable and nobody has to tag anything.
Jira and Atlassian are trademarks of Atlassian. Tempo is a trademark of its owner. Kayabyte is an independent developer and is not affiliated with or endorsed by Atlassian or Tempo.
More guides
- Atlassian Connect end of support: what Jira and Confluence admins should check before 31 January 2027
- How to delete old page versions in Confluence Cloud
- Apps to make a Confluence group watch a space or page, compared
- How to make a Confluence group watch a space or page
- Onboarding in Confluence: make new hires watch the right spaces automatically
- Confluence storage almost full? What counts and how to free it
- Confluence watching but no email? 5 things to check
- How to calculate budget burn rate and run-out date in Jira
- How to count business days between two dates in Jira
- How to see what a Jira epic costs from worklogs
- Make a Jira field read-only after approval or when closed
- Jira project cost and budget apps compared: Tempo Financial Manager alternatives
- How to track project cost and budgets in Jira from worklogs
- How to see project cost from Tempo worklogs in Jira
- How to set a WIP limit per person in Jira
- How to see workload per assignee in Jira
- Add a group as request participants in Jira Service Management
- JSM agent can’t find a customer in Request participants: what to check
- Add or remove request participants with Jira Automation
- CC a whole team on every Jira Service Management request
- Group request participants apps for Jira Service Management compared
- JSM organizations vs request participants: which to use
- Why adding request participants in bulk floods inboxes in Jira Service Management, and how to avoid it
- Stop agents or the reporter ending up as request participants
- How to add public holidays to a JSM SLA calendar
- Kanban WIP limit per person in Jira: beyond column limits
- What happens to your worklogs when you leave Tempo Timesheets (Jira Cloud)