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.csv

In 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

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.