How to export Jira worklogs to Excel or CSV

By Kayabyte · Updated 5 November 2026

Short answer: A Jira work item export gives you total time per work item, not who logged what on which day. For individual worklogs on Jira Cloud, call the REST API for each work item, or use a script that does. The free jira-worklog-export script writes them to a CSV you can open in Excel. A Marketplace app is the alternative if you need this every month.

Disclosure: I make that script and Burnrate, a Jira cost app, mentioned at the end. The script is free and MIT-licensed and doesn’t need the app. I ran everything here on a Jira Cloud test site on 5 November 2026: the script returned 125 worklogs and 303.00 hours for a project, the same total Jira gives in Time spent.

What Jira’s export gives you

Exporting from work item search gives you a row per work item. That’s enough if you only need Time spent per item. It isn’t enough for hours by person, by day or by month, because a work item with five people logging time is still one row.

Option 1: the script

You need Node.js 22 or newer and an API token.

git clone https://github.com/kayabyte-2/atlassian-admin-scripts.git
cd atlassian-admin-scripts
export ATLASSIAN_SITE=your-site.atlassian.net
export ATLASSIAN_EMAIL=you@example.com
export ATLASSIAN_API_TOKEN=your-token
node src/jira-worklog-export.js --jql "project = APP" --from 2026-10-01 --to 2026-10-31 --out worklogs.csv

You get one row per worklog:

key summary author accountId started hours seconds comment

Any JQL works, so --jql "parent = APP-12" gives you one epic’s children, without the epic itself. The dates are inclusive days in UTC and match when the work was started, not when it was logged.

In Excel, a pivot table on author and hours gives hours per person. To put money on them, see how to track project cost from worklogs.

Option 2: the API calls yourself

There’s no call that returns all worklogs for a project. The usual route has two steps:

  1. Find the work items: POST /rest/api/3/search/jql with JQL such as project = APP AND timespent > 0.
  2. For each one: GET /rest/api/3/issue/{key}/worklog. Pass startedAfter and startedBefore in milliseconds to limit the dates.

Two traps:

For keeping a copy in sync, GET /rest/api/3/worklog/updated?since= lists worklog IDs changed since a time, and POST /rest/api/3/worklog/list fetches them. In my test that returned 1,000 IDs per page. It lists all the worklogs you can see, so you filter afterwards.

If you use Tempo

On Cloud, worklogs logged through Tempo Timesheets are written to Jira under Tempo’s app account. Everything above then shows that account as the author, not the person. Use Tempo’s own Raw Data report or API for real authors. See what happens to your worklogs when you leave Tempo.

Before you send the file

If you export every month to get cost

If the spreadsheet is really a monthly cost report, Burnrate is the app I make for that. It prices native Jira worklogs with dated rates and shows reports by project, epic, person, month or work item, with CSV export.

It’s on the Atlassian Marketplace.

FAQ

Can I export worklogs from Jira without an app? Yes, with the REST API or a script. Jira’s own work item export only gives totals per work item.

Why does my export have no per-person hours? The export has one row per work item. Individual worklogs need the worklog API.

Why do I only get 20 worklogs per work item? You’re probably reading them from a search result. Use GET /rest/api/3/issue/{key}/worklog.

How do I export worklogs for one month? Pass --from and --to to the script, or startedAfter and startedBefore to the API.

Can I export worklogs for an epic? Yes. Use JQL such as parent = APP-12. Sub-tasks need their own condition, and worklogs on the epic itself need key = APP-12 added with OR.

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.