# ClickUp CSV Import Format

The export step writes a CSV that ClickUp can import directly
(**Settings → Import/Export → CSV**, or per-List **+ → Import → CSV**).

## Columns

| Column | Source | Notes |
|--------|--------|-------|
| `Task Name` | Feature / ticket name | Required, one line. |
| `Description` | The brief body (Markdown) | ClickUp renders Markdown. May span many lines — the exporter quotes it correctly. |
| `Tags` | Workstream grouping | Comma-separated; see convention below. |
| `Due Date` | Per ticket | ISO 8601 `YYYY-MM-DD`. ClickUp also accepts `MM/DD/YYYY`; prefer ISO. |
| `Status` | Workflow state | Left empty when omitted, so ClickUp applies the target List's own default. Any value given must match a status that exists in that List. |

## Tag / workstream convention

Tags group tickets by workstream and sub-stream. Two tags per ticket:

```
WS<n>, WS<n> NN - <Sub-stream name>
```

Example: `WS3, WS3 01 - RevenueCat Mart Layer`

- `WS<n>` — the umbrella workstream (e.g. `WS3`)
- `WS<n> NN - <name>` — the zero-padded sub-stream within it (`WS3 01 - ...`)

This lets you filter ClickUp by the whole workstream *or* a single sub-stream.

## JSON input schema (for `clickup_export.py`)

```json
{
  "project_name": "WS3 Phase 2",
  "tickets": [
    {
      "task_name": "KPI definition session: ARR, Renewal Rate, GRR, Paid CAC v1",
      "description": "## 🎯 Goal\n...\n## ✅ Acceptance Criteria\n- ...",
      "tags": "WS3, WS3 01 - RevenueCat Mart Layer",
      "due_date": "2026-05-06"
    }
  ]
}
```

- `project_name` → used only for the output filename `clickup_import_<project_name>.csv`.
- `tickets[].status` is optional. Omit it unless the user asked for a specific
  starting status: the script then writes an empty cell and ClickUp falls back to
  the List's default. Lists use `Open` or `Backlog` as often as `To Do`, and a
  status the List does not define makes the import fail.
- `description` may contain Markdown with commas and newlines — pass it as a normal JSON string; the script handles CSV quoting.

## Description depth

The `description` field can hold:

- **Condensed** (default) — Goal + Acceptance Criteria + Definition of Done. Keeps a bulk import readable.
- **Full brief** — the complete 10-section ticket from the skill, when each task warrants the depth.

Pick per export based on how substantial the tickets are.

## Importing into ClickUp

1. Open the target Space/List → **Import → CSV**.
2. Map columns (ClickUp auto-matches `Task Name`, `Description`, `Tags`, `Due Date`, `Status`).
3. Confirm the target List's statuses include any `Status` values used. Rows with an empty `Status` take the List's default.
4. Import. Tags are created on the fly if they don't exist.
