This workflow corresponds to n8n.io template #12238 — we link there as the canonical source.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "HNMs2YUJprU39JuY",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Scan Confluence pages for inactive page owners",
"tags": [
{
"id": "0FRymMOqi6UCCYTI",
"name": "free",
"createdAt": "2025-12-25T11:06:36.527Z",
"updatedAt": "2025-12-25T11:06:36.527Z"
},
{
"id": "ks1tninGT7ZLrbrc",
"name": "template",
"createdAt": "2025-12-31T15:16:19.399Z",
"updatedAt": "2025-12-31T15:16:19.399Z"
}
],
"nodes": [
{
"id": "c086fcf0-432b-40cf-977b-2047e3cc22fe",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-576,
368
],
"parameters": {},
"typeVersion": 1
},
{
"id": "88f7adf4-ac0a-436b-b694-660c284d5219",
"name": "Set Variables",
"type": "n8n-nodes-base.set",
"position": [
-352,
368
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0d1afc81-e801-46dc-b23e-a6a2b00e69e3",
"name": "atlassianDomain",
"type": "string",
"value": "https://yourDomain.atlassian.net"
},
{
"id": "67cd8d60-6c1b-4913-be82-866f80dbea3b",
"name": "spaceKeys",
"type": "string",
"value": "space1, space2"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "12fd5670-dddb-4339-9106-9e128bd38255",
"name": "Confluence - Get Spaces",
"type": "n8n-nodes-base.httpRequest",
"position": [
-128,
368
],
"parameters": {
"url": "={{ $json.atlassianDomain }}/wiki/api/v2/spaces",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"queryParameters": {
"parameters": [
{
"name": "keys",
"value": "={{ $json.spaceKeys }}"
},
{
"name": "type",
"value": "=global"
}
]
}
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "005cc50a-f0a0-4d38-8be3-75cb38db6522",
"name": "Format Space Ids",
"type": "n8n-nodes-base.set",
"position": [
96,
368
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4599d31e-0fe3-4a62-a731-3f97d12548ac",
"name": "spaceIds",
"type": "array",
"value": "={{ $json.results.map(item => item.id) }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3a05c1bf-b9cb-4968-98cf-1b95f44eda2d",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-624,
192
],
"parameters": {
"width": 416,
"height": 128,
"content": "## Confluence API Reference\n* [V2 Get Spaces](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-space/#api-spaces-get)\n* [V2 Get Pages](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-page/#api-pages-get)\n* [V2 Create bulk user lookup using id](https://developer.atlassian.com/cloud/confluence/rest/v2/api-group-user/#api-users-bulk-post)"
},
"typeVersion": 1
},
{
"id": "15570967-a2a8-4c45-82e5-8b09fd3f7b46",
"name": "Confluence - Get Pages",
"type": "n8n-nodes-base.httpRequest",
"position": [
320,
368
],
"parameters": {
"url": "={{ $('Set Variables').item.json.atlassianDomain }}/wiki/api/v2/pages",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth",
"queryParameters": {
"parameters": [
{
"name": "space-id",
"value": "={{ $json.spaceIds.join(\", \") }}"
},
{
"name": "limit",
"value": "50"
}
]
}
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "6659d1bf-73d9-4055-a6a3-56928cda0d61",
"name": "Confluence - Bulk User Lookup",
"type": "n8n-nodes-base.httpRequest",
"position": [
768,
272
],
"parameters": {
"url": "={{ $('Set Variables').item.json.atlassianDomain }}/wiki/api/v2/users-bulk",
"method": "POST",
"options": {},
"jsonBody": "={\n \"accountIds\": {{ $json.ownerIds }}\n} ",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpBasicAuth"
},
"credentials": {
"httpBasicAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "e3fba098-2711-48b1-930f-e42a5fc0bd91",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
1440,
368
],
"parameters": {
"mode": "combine",
"options": {},
"advanced": true,
"joinMode": "enrichInput2",
"mergeByFields": {
"values": [
{
"field1": "accountId",
"field2": "ownerId"
}
]
}
},
"typeVersion": 3.2
},
{
"id": "a3f1c5d8-c3c7-4ffd-b3ea-c203e384f74b",
"name": "Filter Inactive Owners",
"type": "n8n-nodes-base.filter",
"position": [
1216,
272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ae8f2e74-f705-4ee2-997f-d5b2c9f585be",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.accountStatus }}",
"rightValue": "active"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "0dcd521a-ea61-4153-9973-78a275c2d159",
"name": "Split Out Users",
"type": "n8n-nodes-base.splitOut",
"position": [
992,
272
],
"parameters": {
"options": {},
"fieldToSplitOut": "results"
},
"typeVersion": 1
},
{
"id": "a17b4b53-c16e-4d3a-a583-23f0e69348c7",
"name": "Split Out Pages",
"type": "n8n-nodes-base.splitOut",
"position": [
1216,
464
],
"parameters": {
"options": {},
"fieldToSplitOut": "results"
},
"typeVersion": 1
},
{
"id": "fd7b5f06-90b1-4041-9468-56ba49859a7f",
"name": "Format unique ownerIds",
"type": "n8n-nodes-base.set",
"position": [
544,
272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "52fd284a-4e7e-46ef-8cb3-079ac59d5dd3",
"name": "ownerIds",
"type": "string",
"value": "={{ [...new Set($json.results.map(item => item.ownerId))] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "730b5eec-ffcd-40e7-b1f0-f20a110ca55e",
"name": "Filter Inactive Pages",
"type": "n8n-nodes-base.filter",
"position": [
1664,
368
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "077915e8-f579-491b-9121-5a0195198b37",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.accountStatus }}",
"rightValue": "=active"
}
]
}
},
"typeVersion": 2.3,
"alwaysOutputData": true
},
{
"id": "febbb559-a41e-46df-93cb-0942d318206e",
"name": "Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
2112,
368
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "pagesWithInactiveOwner"
},
"typeVersion": 1
},
{
"id": "6825f1be-d9a5-493d-a023-861689bef4a9",
"name": "Set Report Data",
"type": "n8n-nodes-base.set",
"position": [
1888,
368
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "dce1e9a4-ea8f-447c-b39c-19a50f3bd293",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "6f647d56-6713-49ce-a16e-afdf6318e086",
"name": "ownerStatus",
"type": "string",
"value": "={{ $json.accountStatus }}"
},
{
"id": "84e8fe80-783f-44c4-8dac-561b2130426a",
"name": "ownerEmail",
"type": "string",
"value": "={{ $json.email }}"
},
{
"id": "d7a67733-d9c8-47dd-a9ab-e419ec7c8b94",
"name": "lastUpdated",
"type": "string",
"value": "={{ $json.version.createdAt }}"
},
{
"id": "61f63211-2438-4ccd-ae0f-35b9af0b00d6",
"name": "url",
"type": "string",
"value": "={{ $('Set Variables').first().json.atlassianDomain }}/wiki{{ $json._links.webui }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "194c5474-6f34-4000-8e2f-5bd192761bb1",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
208
],
"parameters": {
"color": 7,
"width": 880,
"height": 240,
"content": "## Find inactive users"
},
"typeVersion": 1
},
{
"id": "e2313f81-30ad-45cc-9c8d-956995b25b87",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1392,
720
],
"parameters": {
"color": 6,
"width": 752,
"height": 144,
"content": "### Notes\n- Requires Confluence permissions to read spaces, pages and users.\n- Pages are considered problematic if `accountStatus !== active`.\n- Current page fetch limit is `50` items per request.\n- Need help? \u2709\ufe0f **office@sus-tech.at**"
},
"typeVersion": 1
},
{
"id": "015bd1d1-9f4b-48e5-a40a-8658f50af782",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-192,
304
],
"parameters": {
"color": 7,
"width": 656,
"height": 240,
"content": "## Get Confluence pages"
},
"typeVersion": 1
},
{
"id": "f4c1ab5e-069a-4f25-a711-f382a0a38747",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1584,
288
],
"parameters": {
"color": 7,
"width": 704,
"height": 240,
"content": "## Filter pages with inactive owner"
},
"typeVersion": 1
},
{
"id": "48b137b5-8d65-4d2a-89c5-7e7d67c03e41",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1392,
192
],
"parameters": {
"width": 752,
"height": 512,
"content": "## How it works\nThis workflow finds Confluence pages whose owners are no longer active. A **Set Variables** node defines the Atlassian domain and the space keys to scan.\n\nUsing the **Confluence API v2**, the workflow first retrieves the selected spaces and extracts their space IDs. It then fetches all pages from those spaces. From there, the workflow splits into two coordinated paths: one processes individual page items, while the other collects all unique page owner IDs. These owner IDs are resolved in bulk using a user lookup call.\n\nThe page data and user data are then merged, matching each page\u2019s `ownerId` with the corresponding user account information. Pages whose owners are marked as inactive are filtered and kept for the output report.\n\n## Setup steps\n1. Open the **Set Variables** node and configure:\n - `atlassianDomain`: Your Confluence base URL \n - `spaceKeys`: Comma-separated space keys (for example `ENG,HR`) \n2. Create an **HTTP Basic Auth** credential in n8n using your Atlassian email address and API token.\n3. Assign this credential to all Confluence HTTP Request nodes.\n4. (Optional) Extend the workflow with email, Slack or CSV export nodes using the `pagesWithInactiveOwner` output.\n"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "7bcce14c-7d8e-4ce0-858a-4a60ca33bc41",
"connections": {
"Merge": {
"main": [
[
{
"node": "Filter Inactive Pages",
"type": "main",
"index": 0
}
]
]
},
"Set Variables": {
"main": [
[
{
"node": "Confluence - Get Spaces",
"type": "main",
"index": 0
}
]
]
},
"Set Report Data": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Split Out Pages": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Split Out Users": {
"main": [
[
{
"node": "Filter Inactive Owners",
"type": "main",
"index": 0
}
]
]
},
"Format Space Ids": {
"main": [
[
{
"node": "Confluence - Get Pages",
"type": "main",
"index": 0
}
]
]
},
"Filter Inactive Pages": {
"main": [
[
{
"node": "Set Report Data",
"type": "main",
"index": 0
}
]
]
},
"Confluence - Get Pages": {
"main": [
[
{
"node": "Format unique ownerIds",
"type": "main",
"index": 0
},
{
"node": "Split Out Pages",
"type": "main",
"index": 0
}
]
]
},
"Filter Inactive Owners": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Format unique ownerIds": {
"main": [
[
{
"node": "Confluence - Bulk User Lookup",
"type": "main",
"index": 0
}
]
]
},
"Confluence - Get Spaces": {
"main": [
[
{
"node": "Format Space Ids",
"type": "main",
"index": 0
}
]
]
},
"Confluence - Bulk User Lookup": {
"main": [
[
{
"node": "Split Out Users",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Set Variables",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
httpBasicAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow scans selected Confluence spaces, resolves page ownership and filters pages with inactive owners, helping teams maintain clear ownership and prevent orphaned documentation. Scans Confluence pages across selected spaces. Resolves page owners and checks their account…
Source: https://n8n.io/workflows/12238/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t
[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.
[](https://youtu.be/c7yCZhmMjtI)
This automation organizes your n8n workflows files into categorizes (Active, Template, Done, Archived) and uploads them directly to a categorized Google Drive folders. It is designed to help users man
Create Animated Stories using GPT-4o-mini, Midjourney, Kling and Creatomate API. Uses httpRequest. Event-driven trigger; 51 nodes.