Reporting · Integration
Team KPI dashboard from the Jira API
Answering 'what did the team get done this week?' with data instead of words
RoleIT Business Analyst

- automated data source
- Jira API
- Jira issues on the tracked board
- 1,333
- client-reported bugs ticketed the same day (sprint 29)
- 100%
- committed work completed (sprint 33)
- 84%
Client names are withheld; examples and data are simulated. The process, methods and result figures are real.
The problem
The client asked about progress every week. Compiling it by hand from Jira took time and was easy to get wrong because statuses were miscounted. Internally it was also hard to see who was overloaded and which bugs had been open the longest.
- Client asks about progressevery week
- Compiled by hand from Jiraslow, statuses easy to miscount
- Figures nobody trusts
Context and role
- I created 624 of the 1,333 issues on the project board, the most on the team.
- The client did not want to have to open Jira to know the progress.
- My role: agreeing the KPI definitions, pulling the data through the API, building the dashboard and writing reports for the client and management.
- Constraints: the API key is read-only; no personal information is exposed outside the team.
Step 1: Agree the KPI definitions before pulling data
If a KPI is vague, the dashboard is meaningless. Each KPI needs a question it answers, a formula and a data source.
| Question it answers | Formula | |
|---|---|---|
| Sprint completion | How much of what was committed got done this sprint? | Points done divided by points committed |
| Throughput | How many tickets are finished each week? | Number of tickets moved to Done in the week |
| Cycle time | How long does a ticket take from start to finish? | Median time from In Progress to Done |
| Blocked | Is anything stuck? | Tickets flagged as blocked for more than one day |
| Bug age | How many days has the oldest bug been open? | Today minus created date, for open bugs |
| Bug rate | How many bugs per completed story? | New bugs divided by completed stories |
| Outstanding client feedback | Is any feedback still unhandled? | Tickets labelled client feedback that are not Done |
| Workload per person | Who is holding how much work? | Open tickets by assignee |
Step 2: Pulling data through the Jira REST API
GET /rest/api/3/search
jql = project = PRJ AND updated >= -14d
fields = summary, status, issuetype, assignee, created, labels, story points
expand = changelog
- Jiracall page after page until all tickets are retrieved
- Change historywhen a ticket entered In Progress and Done
- Compute KPIsusing the agreed formulas
- Anonymiseassignees become Dev A, Dev B
- Dashboard and weekly report
- Created
- In Progressclock starts
- Donedragged across, no closed date
- cycle time
Step 3: Dashboard and weekly report
A one-page dashboard: a row of KPIs at the top, charts in the middle, detail tables at the bottom. The weekly report is written from the same data.
Step 4: Using the dashboard to make decisions
| Decision | |
|---|---|
| Bug age concentrated in one module | Set time aside to clear bugs before taking on new stories |
| Workload piling up on one person | Redistribute during sprint planning |
| Outstanding client feedback rising steadily | Add a fixed weekly slot to triage feedback |
Step 5: A bug register for the client
The client needed a place to follow bugs without opening Jira. I built a pipeline that pushes bugs from Jira into a Google Sheet with a dashboard and a column tracking recurring bugs, together with an operating SOP.
- Bugs in Jira
- Data export and dashboardruns automatically
- Write into tabs the client edits by handruns only with confirmation
Results
Sprint reports with figures that can be checked:
- The team’s progress and KPIs are reported to the client through a dashboard that takes its data directly from Jira.
- Every KPI has a definition and a formula agreed by the client and management.
- The weekly report no longer depends on compiling figures by hand.
What I learned
- Agree the KPI definitions with the client before pulling data. Otherwise you end up with a good-looking dashboard that nobody trusts.
- In Jira, the status change history is the most reliable data source.
- Putting problems at the top of the report is the fastest way to earn the client’s trust.
- Jira API
- REST API
- KPI
- Dashboard
- Sprint report
