Automation Pipeline: Auto-Generate Release Notes Drafts from JIRA Sprints
What This Builds
Every time a sprint closes in JIRA, this automation fetches all completed tickets, sends them to Claude for release notes generation, and posts the draft to a Confluence page — all without you lifting a finger. Instead of spending 2 hours on release notes after every sprint, you spend 15 minutes reviewing and publishing a draft that's already 80% done.
Prerequisites
- Comfortable using Claude for release notes generation (Level 3: Building a Fast Release Notes Workflow with Claude)
- JIRA Cloud account (API access required — need an API token)
- n8n account (free self-hosted OR n8n Cloud starting at $20/month)
- Claude API access (Anthropic account with API key — pay-as-you-go, ~$0.02 per sprint run)
- Confluence access (for posting the draft)
- Cost: n8n Cloud $20/month + Claude API ~$0.50-2.00/month (depending on sprint size)
The Concept
This automation is like hiring a documentation assistant who monitors JIRA, does the release notes first draft the moment the sprint closes, and drops it on your desk ready to review. You set it up once; it runs automatically forever.
The workflow chain is: JIRA sprint closes → n8n detects the sprint status change → n8n fetches completed ticket data → sends to Claude API with your release notes prompt → Claude returns formatted draft → n8n posts draft to Confluence → you get a Slack notification that it's ready.
Build It Step by Step
Part 1: Set Up n8n
Option A: n8n Cloud (easier)
- Go to n8n.io → Sign up for cloud account
- You'll get a hosted n8n instance at
yourname.n8n.cloud - No server management required
Option B: Self-hosted n8n (free but requires a server)
- If you have a home server or VPS, run:
npx n8n - Access at
localhost:5678
For this guide, we'll use n8n Cloud.
Part 2: Create API Credentials
JIRA API Token:
- Go to id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token" → name it "n8n automation"
- Copy the token — you won't see it again
- Your JIRA API base URL is
https://yourcompany.atlassian.net/rest/api/3
Claude API Key:
- Go to console.anthropic.com
- Create account and add payment method (pay-as-you-go)
- Go to API Keys → Create Key → name it "release-notes-automation"
- Copy the key
Confluence API Token: Same as JIRA — they share the same Atlassian account API token.
Part 3: Build the n8n Workflow
- In n8n, click New Workflow
- Name it: "Release Notes Generator"
- Add nodes in this sequence:
Node 1: Schedule Trigger
- Click the "+" button → add "Schedule Trigger"
- Set to run every Friday at 5pm (adjust to match your sprint cadence)
- This isn't ideal (you want it on sprint close), but it's the simplest starting point
Node 2: JIRA - Get Completed Tickets
- Add "HTTP Request" node
- Method: GET
- URL:
https://yourcompany.atlassian.net/rest/api/3/search - Authentication: Basic Auth (your email + JIRA API token)
- Query Parameters:
jql:project = YOURPROJECT AND sprint in openSprints() AND status = Done AND updated >= -7dfields:summary,description,issuetype,statusmaxResults:100
Node 3: Format Tickets
- Add "Code" node
- This transforms JIRA's JSON response into a clean ticket list:
const tickets = $input.first().json.issues;
const ticketList = tickets
.map(t => `${t.key}: ${t.fields.summary}`)
.join('\n');
return [{ json: { ticketList } }];
Node 4: Claude API - Generate Release Notes
- Add "HTTP Request" node
- Method: POST
- URL:
https://api.anthropic.com/v1/messages - Headers:
x-api-key: YOUR_CLAUDE_API_KEYanthropic-version:2023-06-01Content-Type:application/json
- Body (JSON):
{
"model": "claude-3-haiku-20240307",
"max_tokens": 2000,
"messages": [{
"role": "user",
"content": "Convert these JIRA tickets into customer-facing release notes. Group by: New Features, Improvements, Bug Fixes. Plain language, no jargon. Skip internal infrastructure tickets. Start each item with 'You can now...' (features) or 'Fixed an issue where...' (bugs).\n\nTickets:\n{{ $json.ticketList }}"
}]
}
Node 5: Create Confluence Page
- Add "HTTP Request" node
- Method: POST
- URL:
https://yourcompany.atlassian.net/wiki/rest/api/content - Authentication: Basic Auth (email + JIRA API token — same token works for Confluence)
- Body (JSON):
{
"type": "page",
"title": "Release Notes Draft - {{ new Date().toISOString().split('T')[0] }}",
"space": { "key": "YOURSPACE" },
"body": {
"storage": {
"value": "<p>⚠️ DRAFT — Please review and edit before publishing</p><p>{{ $json.content[0].text }}</p>",
"representation": "storage"
}
}
}
Node 6: Slack Notification (optional)
- Add "Slack" node
- Channel: your team channel
- Message: "Release notes draft ready for review: [link to Confluence page]"
- Click Save and then Test Workflow to verify each step
Part 4: Test and Refine
- Click "Execute Workflow" to run manually
- Check the Confluence page it creates — is the draft useful?
- Common fixes:
- If Claude includes internal tickets: add "Skip tickets that contain: INFRA, TECH, INTERNAL in their title" to the prompt
- If sections are wrong: add "If a ticket doesn't clearly fit New Features, Improvements, or Bug Fixes, put it in Improvements"
- If language is too casual: add "Professional tone, consistent with enterprise software documentation"
Real Example: Sprint 47 Release Notes
Setup: n8n workflow runs every Friday at 5pm. Your JIRA project is "ACME".
What happens:
- n8n fetches 32 completed JIRA tickets from the sprint
- Formats them as a clean list
- Sends to Claude with your release notes prompt
- Claude returns a 400-word draft with 18 customer-facing items
Input (JIRA tickets, abbreviated):
ACME-234: Fix null pointer on login when session > 24h
ACME-235: Add PDF export to reports screen
ACME-238: DB migration for user preferences table
ACME-241: Update error messages in auth flow
Output (Claude's draft):
## What's New
- You can now export reports as PDF directly from the Reports screen.
## Improvements
- Error messages during login now provide clearer guidance when authentication fails.
## Bug Fixes
- Fixed an issue where users were unexpectedly logged out after extended sessions lasting more than 24 hours.
Time saved: 1.5 hours per sprint → 15 minutes for review and editing.
What to Do When It Breaks
- JIRA API returns no tickets → Check your JQL query. Test it in JIRA's issue search first. Make sure your sprint name or project key is correct.
- Claude returns an error → Check your API key and that you have credits. Claude API errors include a message explaining the issue.
- Confluence page creation fails → Verify the space key is correct (it's the short code in your Confluence URL, e.g., "DOCS" in
/wiki/spaces/DOCS/). - Workflow doesn't trigger → Check n8n's execution log for errors. Free n8n Cloud accounts have execution limits.
Variations
Simpler version: Skip the Confluence posting — have Claude's output go to a Slack message instead. Much easier to set up; you copy-paste from Slack into your docs platform.
Extended version: Add a Google Sheets node between Claude and Confluence that logs each release's notes to a historical record. After 6 months, you have a searchable release history.
What to Do Next
- This week: Build the workflow and run it manually on your last sprint's tickets
- This month: Let it run for 2-3 sprints and refine the Claude prompt based on what you edit
- Advanced: Add a webhook trigger in JIRA to fire when a sprint is marked complete, so the workflow runs immediately rather than on a schedule
Advanced guide for technical writer professionals. These techniques use more sophisticated AI features that may require paid subscriptions.