tree: 0772043f4d5ed65f016e2a9ae20dc150aac8a2b3
  1. api/
  2. impl/
  3. models/
  4. tasks/
  5. clickup.go
  6. README.md
backend/plugins/clickup/README.md

ClickUp

The ClickUp plugin collects issues, boards, and sprints from ClickUp so they feed DevLake's issue-tracking and DORA/velocity metrics, modeled on the Jira and Linear connectors.

Authentication

ClickUp authenticates with a personal API token (ClickUp → Settings → Apps → API Token, starts with pk_). The token is sent verbatim in the Authorization header. OAuth is not yet supported.

Create a connection with:

  • Endpointhttps://api.clickup.com/api/v2/
  • Token — your pk_... personal token

Data scope: the folder is the board

Unlike a raw list, the scope you select is a ClickUp folder (e.g. a team's Dev Team / Sprint Folder). This mirrors a Jira board: selecting the folder collects every list inside it on each sync, so rolling and archived sprint lists never need to be re-scoped.

Domain mapping:

ClickUpDevLake domain
Folderboard
Sprint list (name-matched)sprint + board_sprint
Taskissue + board_issue
Task in a sprint listsprint_issue
Folder memberaccount

Sprints

A list is treated as a sprint when its name matches the sprint name pattern (default (?i)sprint\s*\d+, e.g. v4.3.0 Sprint 40 (7/6/26 - 7/19/26)). The start/end dates are parsed from the parenthesised date span in the name; M/D/YY vs D/M/YY ordering is disambiguated automatically (a component > 12 must be the day). Lists that don't match are collected as plain board issues. Archived sprint lists are collected too, so historical velocity is retained.

Story points

Story points default to ClickUp's native sprint points field. To read them from a custom field instead (e.g. a Fibonacci “LOE” field), set Story point field in the scope config to the custom-field name.

Incidents (DORA Change Failure Rate / MTTR)

ClickUp tasks have no universal “type” field, so incidents are modeled by scope: add the folder that holds incidents (e.g. a “Security Incidents” folder) as its own board and set the scope config's Force issue type to INCIDENT. Every issue on that board is then classified as an incident.

Scope configuration (transformation)

Per board, the scope config lets you override:

  • Sprint name pattern — which lists are sprints.
  • Story point field — native points (blank) or a custom field name.
  • Force issue type — flag the whole board as REQUIREMENT / BUG / INCIDENT (leave blank to detect per task).
  • Issue type patterns — RegExes matched against a task's type; precedence is INCIDENT > BUG > REQUIREMENT.
  • Status mapping — ClickUp statuses are auto-mapped by their type (open/unstartedTODO, customIN_PROGRESS, done/closedDONE); list raw status names to override where a team's workflow differs.

Metrics

A branded ClickUp Grafana dashboard (grafana/dashboards/{mysql,postgresql}/ClickUp.json) renders issue throughput and lead-time metrics; DORA and sprint/velocity metrics are computed from the source-agnostic domain layer.