This workflow corresponds to n8n.io template #16121 — we link there as the canonical source.
This workflow follows the Agent → Airtable recipe pattern — see all workflows that pair these two integrations.
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": "zrsPOb731gv3AsWx",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Jira AI Agent \u2014 Automatic Issue Assignment",
"tags": [],
"nodes": [
{
"id": "a797cc14-8dc9-4148-a39d-5298c583f582",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
3856,
3792
],
"parameters": {
"color": 7,
"width": 608,
"height": 320,
"content": "## Combine initial data\n\nMerges the unassigned Jira issues with Airtable member data, aggregates the combined payload, and decides whether all issues are already assigned."
},
"typeVersion": 1
},
{
"id": "aadfb7b1-509b-4c44-8c60-320a177b022a",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
3920,
4336
],
"parameters": {
"color": 7,
"width": 560,
"height": 768,
"content": "## Prepare assignment loop\n\nBuilds the per-ticket data set, joins loop inputs, and batches unassigned issues so each ticket can be assigned one at a time."
},
"typeVersion": 1
},
{
"id": "68797dc5-8e25-4807-8f56-3d74f20bd170",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
4512,
4592
],
"parameters": {
"color": 7,
"width": 816,
"height": 528,
"content": "## Collect workload history\n\nPrepares member data, retrieves related Jira issues for workload context, extracts issue fields, and aggregates member and issue-history inputs."
},
"typeVersion": 1
},
{
"id": "0aa87443-29aa-4a55-b698-e792a2e338c3",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
4960,
5168
],
"parameters": {
"color": 7,
"width": 672,
"height": 304,
"content": "## Assemble agent context\n\nMerges member and issue aggregates, creates a final combined structure, and sets the fields that will be passed to the AI assignment agent."
},
"typeVersion": 1
},
{
"id": "0993b8f7-92bf-4fcf-9afa-c4f5cc082e31",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
4992,
3856
],
"parameters": {
"color": 7,
"width": 736,
"height": 480,
"content": "## Run assignment agent\n\nUses the AI agent, OpenRouter model, Jira tool, and structured parser to determine the best assignee for the current ticket."
},
"typeVersion": 1
},
{
"id": "8d416095-2158-4e33-adb4-12eec2ef3d34",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
5824,
3952
],
"parameters": {
"color": 7,
"height": 368,
"content": "## Update Jira issue\n\nApplies the AI-selected assignment back to the Jira issue, then returns control to the batch loop for the next ticket."
},
"typeVersion": 1
},
{
"id": "e1051d72-1d98-4428-8270-03f3f6de4a18",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
3984,
3424
],
"parameters": {
"color": 7,
"height": 336,
"content": "## No issues exit\n\nStops the workflow cleanly when the initial Jira search finds no candidate issues to process."
},
"typeVersion": 1
},
{
"id": "248d05b5-6f67-47be-93ac-58a2db45b2e5",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
4720,
3728
],
"parameters": {
"color": 7,
"height": 368,
"content": "## Finish workflow path\n\nRepresents the final no-operation endpoint used when assignment processing is complete or no unassigned issues remain."
},
"typeVersion": 1
},
{
"id": "45c0ac4b-c419-4e70-8e1c-5066da2785a7",
"name": "Extract Unassigned Issues",
"type": "n8n-nodes-base.code",
"position": [
3664,
3936
],
"parameters": {
"jsCode": "const assignees_list = $input.all().map((e) => {\n const new_obj = {\n key:e.json.key,\n assigne:e.json.fields.assignee\n }\n return (\n new_obj\n )\n})\n\nconst assignees_filter = assignees_list.filter((e) => {\n return (e.assigne == null)\n})\n\n// const teams_infos\n\nreturn (\n [\n {\n json:\n {\n assignees_filter\n }\n }\n ]\n);"
},
"typeVersion": 2
},
{
"id": "47b5a475-617c-4f33-ba74-1711375413f2",
"name": "Update Issue in Jira",
"type": "n8n-nodes-base.jira",
"position": [
5872,
4160
],
"parameters": {
"issueKey": "={{ $json.output.jira_issue_key }}",
"operation": "update",
"updateFields": {
"assignee": {
"__rl": true,
"mode": "id",
"value": "={{ $json.output.choosen_assignee_accountId }}"
}
}
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "51c3c01f-ec9c-41dc-b47e-e80f6a451789",
"name": "Fetch AIBAP Issues",
"type": "n8n-nodes-base.jira",
"position": [
3264,
3920
],
"parameters": {
"options": {
"jql": "=Project = {{ $json.JIRA_PROJECT_KEY }}"
},
"operation": "getAll",
"returnAll": true
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "e829310c-556e-4caf-b24c-1d846615f944",
"name": "Complete Process",
"type": "n8n-nodes-base.noOp",
"position": [
4768,
3936
],
"parameters": {},
"typeVersion": 1
},
{
"id": "1ca0009e-a090-4f7b-8df5-d3e3fe845ae5",
"name": "Aggregate Issue Data",
"type": "n8n-nodes-base.aggregate",
"position": [
4080,
3952
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "4cdfee52-f5c0-440c-91d9-8272b2f74954",
"name": "Process Issues in Batches",
"type": "n8n-nodes-base.splitInBatches",
"position": [
4336,
4496
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "c03b5114-f6b4-45ca-824c-3a7a69b9ea31",
"name": "Extract Unassigned Ticket Data",
"type": "n8n-nodes-base.code",
"position": [
3968,
4496
],
"parameters": {
"jsCode": "return (\n [\n ...$input.first().json.data.at(0).assignees_filter\n]\n)"
},
"typeVersion": 2
},
{
"id": "e3ed0a23-8bd0-4311-b4d1-f67fba6eed62",
"name": "Extract Member Data",
"type": "n8n-nodes-base.code",
"position": [
4560,
4944
],
"parameters": {
"jsCode": "return (\n [\n ...$input.last().json.data.at(1).members_data.members\n]\n)"
},
"typeVersion": 2
},
{
"id": "32e42a4e-d2eb-4725-9a12-ef7394983c46",
"name": "Retrieve Multiple Issues",
"type": "n8n-nodes-base.jira",
"position": [
4800,
4944
],
"parameters": {
"options": {
"jql": "=Project = {{ $json.Jira_Project_Key }} AND assignee = {{ $json.Jira_Account_Id }} AND status != DONE",
"fields": "*navigable"
},
"operation": "getAll",
"returnAll": true
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "399fccd9-41a5-4afa-af0f-e30a6659c168",
"name": "Merge Issue and Member Data",
"type": "n8n-nodes-base.merge",
"position": [
5008,
5296
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "5fdc6ca7-e34b-40e8-b2f0-06607c72dcf7",
"name": "Aggregate Member Data",
"type": "n8n-nodes-base.aggregate",
"position": [
4992,
4720
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "members_data"
},
"typeVersion": 1
},
{
"id": "190b8b9a-b3e4-411a-90de-b4e74ce8221d",
"name": "Aggregate Issue Fields",
"type": "n8n-nodes-base.aggregate",
"position": [
5184,
4944
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "issues_data"
},
"typeVersion": 1
},
{
"id": "1ba826a6-8b7c-4d35-a6dd-aff08d45542e",
"name": "Aggregate All Data",
"type": "n8n-nodes-base.aggregate",
"position": [
5216,
5296
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "85beb176-78fd-46d4-b3a7-ea740d6bec33",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
5040,
3984
],
"parameters": {
"model": "x-ai/grok-4.1-fast",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "c4fe70c6-2084-42c3-8e9d-4feb317ed8c7",
"name": "Merge Extracted Data",
"type": "n8n-nodes-base.merge",
"position": [
3968,
4944
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "29826084-018f-4a04-bd99-465e19c3d03a",
"name": "Fetch Jira Issue",
"type": "n8n-nodes-base.jiraTool",
"position": [
5440,
3984
],
"parameters": {
"issueKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Issue_Key', ``, 'string') }}",
"operation": "get",
"simplifyOutput": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Simplify', ``, 'boolean') }}",
"additionalFields": {}
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "6e5e3b79-5c5c-488a-9ea3-6e530fc5e595",
"name": "Parse Structured Output",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
5600,
3984
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"jira_issue_key\": \"string\",\n \"choosen_assignee_accountId\": \"string\",\n \"reason\": \"string\"\n}"
},
"typeVersion": 1.3
},
{
"id": "becbdf19-2e89-4f61-82bf-ae6f559a4349",
"name": "Set Jira Project Key",
"type": "n8n-nodes-base.set",
"position": [
2912,
4080
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "3f20520d-fa27-4d4e-8a36-5f7303231d3f",
"name": "JIRA_PROJECT_KEY",
"type": "string",
"value": "AIBAP"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6c90432d-8eb6-40cd-ba30-20875df03091",
"name": "Prepare AI Agent Data",
"type": "n8n-nodes-base.set",
"position": [
5488,
5296
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2b449f11-9880-4f8a-91b1-3bef6197dd7d",
"name": "members_data",
"type": "array",
"value": "={{ $json.data[0].members_data }}"
},
{
"id": "25e60532-7075-44f5-a2c9-3fca856dcaed",
"name": "issues_data",
"type": "array",
"value": "={{ $json.data[1].issues_data }}"
},
{
"id": "b011748a-921e-475e-a960-4ba345242510",
"name": "jira_issue_key",
"type": "string",
"value": "={{ $('Merge Extracted Data').first().json.key }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "22eb422f-5152-4a2c-b980-418d213452c2",
"name": "Search Airtable Records",
"type": "n8n-nodes-base.airtable",
"position": [
3264,
4256
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appAOQOgMlWgcmPzQ",
"cachedResultUrl": "https://airtable.com/appAOQOgMlWgcmPzQ",
"cachedResultName": "main-test - jira-project-teams.csv"
},
"sort": {
"property": []
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblOKxTp4mkPh3DJF",
"cachedResultUrl": "https://airtable.com/appAOQOgMlWgcmPzQ/tblOKxTp4mkPh3DJF",
"cachedResultName": "jira_teams_table"
},
"options": {},
"operation": "search",
"filterByFormula": "=Jira_Project_Key = '{{ $json.JIRA_PROJECT_KEY }}'"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.2
},
{
"id": "4e0492b4-7b89-4169-a86f-9d476806d256",
"name": "Extract Issue Details",
"type": "n8n-nodes-base.code",
"position": [
4992,
4944
],
"parameters": {
"jsCode": "return items.map(item => {\n const f = item.json.fields;\n \n return {\n json: {\n // Basic Identifiers\n key: item.json.key,\n \n // Core Content\n summary: f.summary,\n description: f.description || \"\",\n type: f.issuetype?.name,\n priority: f.priority?.name,\n \n // Status & Progress\n status: f.status?.name,\n status_category: f.status?.statusCategory?.name, // e.g., \"To Do\", \"In Progress\", \"Done\"\n \n // People\n assignee: f.assignee?.displayName || \"Unassigned\",\n reporter: f.reporter?.displayName,\n creator: f.creator?.displayName,\n\n // Organization\n project_name: f.project?.name,\n labels: f.labels || [], // Returns an array of tags\n \n // Timestamps (Converted to readable format if needed)\n created_at: f.created,\n updated_at: f.updated,\n due_date: f.duedate || \"None\",\n \n // Metadata\n subtask_count: f.subtasks?.length || 0\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "be0a51a6-4bd0-4018-8284-e13a443066c9",
"name": "Extract Airtable Fields",
"type": "n8n-nodes-base.code",
"position": [
3600,
4256
],
"parameters": {
"jsCode": "const fields = $input.all().map((i) => {\n return i.json.fields\n})\n\nconst members_data = {\n members: [\n ...fields\n ]\n}\n\nreturn (\n [\n {\n json: {\n members_data\n }\n }\n ]\n)"
},
"typeVersion": 2
},
{
"id": "ea9bfddf-098a-40fd-a237-57486b0777e5",
"name": "Merge Airtable and Issue Data",
"type": "n8n-nodes-base.merge",
"position": [
3904,
3952
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "1fbd4c9c-8bd8-4d1b-aad1-711b9bf0028f",
"name": "Automatic Assignment Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
5344,
4160
],
"parameters": {
"text": "=I need the right team member for this jira issue, this is the key of the issue {{ $json.jira_issue_key }}, use jira tools to look up for issue's details.",
"options": {
"systemMessage": "=## Role\nYou're a Jira expert project manager, your role is direct and needs attention. Each ticket that doesn't have an assignee, your unique role is to choose the right team member.\n\n## Objective\nBased on {{ JSON.stringify($input.first().json) }} data, you have all what you need to get the right assignee for a specific issue with no assignee. You need to analyze carefully {{ JSON.stringify($input.first().json.members_data) }} to understand team stucture for the project, and {{ JSON.stringify($input.first().json.issues_data) }} to get an idea about tasks distrubution across members which you need to take into account before choosing the right team member for the issue.\n\n## Tools\n**JIRA ISSUE**: get specific jira issue details by key. e.g: \"AIBAP-01\";\n\n## Output format\nAs output I only need jira accountId for the assignee you've choosed, the reason why you choosed the assignee, and the jira's issue key. So output is JSON format as follow:\n{\n jira_issue_key: \"<string>\"\n choosen_assignee_accountId: \"<string>\",\n reason: \"<string>\"\n}\n\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "cc5c107b-8a26-434d-b84a-33f8970f1ac2",
"name": "When Jira Event Triggered",
"type": "n8n-nodes-base.jiraTrigger",
"position": [
2432,
4080
],
"parameters": {
"events": [
"jira:issue_created",
"jira:issue_updated"
],
"additionalFields": {}
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "b9c19339-c898-4d5e-b3c6-1443c6ecaf42",
"name": "Handle No Issues Found",
"type": "n8n-nodes-base.noOp",
"position": [
4032,
3600
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f350f5fc-faad-4084-8153-d8128fa143c1",
"name": "Check for No Issues",
"type": "n8n-nodes-base.if",
"position": [
3472,
3920
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "3573aec4-d09e-4793-a351-4d639f580f81",
"operator": {
"type": "object",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $input.last().json }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "a9281a26-5624-4ac1-b149-94fcb265fe36",
"name": "Check All Issues Assigned",
"type": "n8n-nodes-base.if",
"position": [
4320,
3952
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2d68cf33-cd14-49cf-b177-31bd0de52eef",
"operator": {
"type": "array",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json.data[0].assignees_filter }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "e7e7a52a-988c-412e-a3d0-f5b06feb0740",
"name": "Sticky Note13",
"type": "n8n-nodes-base.stickyNote",
"position": [
1872,
3424
],
"parameters": {
"width": 480,
"height": 816,
"content": "## Jira AI Agent \u2014 Automatic Issue Assignment\n\n### How it works\n\nThis workflow reacts to Jira activity, sets a target project key, and retrieves candidate issues together with team/member assignment data from Airtable. It filters for unassigned tickets, loops through each one, gathers current workload/context for potential assignees, and prepares a structured payload for an AI assignment agent. The agent uses an OpenRouter chat model plus Jira tooling to choose an assignee, then updates the Jira issue and repeats until all items are processed.\n\n### Setup steps\n\n- Configure Jira credentials for the trigger, issue search/read operations, Jira tool access, and issue update permissions.\n- Configure the Jira Trigger to watch the desired project/events, and set the `JIRA_PROJECT_KEY` value in the SET PROJECT KEY node.\n- Configure Airtable credentials, base, table, and field mappings so member/assignee records can be searched and extracted correctly.\n- Configure OpenRouter credentials and select the chat model used by the Auto-Assignment Agent.\n- Verify the Jira issue fields used for assignee updates and the Airtable/Jira field names referenced in the custom code nodes.\n\n### Customization\n\nAdjust the project key, Jira search/JQL criteria, Airtable member schema, workload aggregation logic, AI agent prompt/model, and Jira update fields to match your assignment rules."
},
"typeVersion": 1
},
{
"id": "095010d3-0c70-4ce5-8e3e-ce0c37f9f92f",
"name": "Sticky Note14",
"type": "n8n-nodes-base.stickyNote",
"position": [
2384,
3904
],
"parameters": {
"color": 7,
"height": 336,
"content": "## Receive Jira event\n\nStarts the automation when the configured Jira trigger receives a matching issue event."
},
"typeVersion": 1
},
{
"id": "9dbaf1ed-dc43-4703-b160-ea7d97a9aaff",
"name": "Sticky Note15",
"type": "n8n-nodes-base.stickyNote",
"position": [
2864,
3904
],
"parameters": {
"color": 7,
"height": 336,
"content": "## Set project key\n\nDefines the Jira project key that drives both Jira issue lookup and Airtable member lookup."
},
"typeVersion": 1
},
{
"id": "d5d5510b-41a1-46af-8496-815a9432fe2d",
"name": "Sticky Note16",
"type": "n8n-nodes-base.stickyNote",
"position": [
3216,
3760
],
"parameters": {
"color": 7,
"width": 592,
"height": 336,
"content": "## Discover candidate issues\n\nFetches issues from the target Jira project, checks whether any exist, and extracts the unassigned issue candidates for later processing."
},
"typeVersion": 1
},
{
"id": "83d502c3-66f3-48ba-8550-727a684c95d0",
"name": "Sticky Note17",
"type": "n8n-nodes-base.stickyNote",
"position": [
3216,
4128
],
"parameters": {
"color": 7,
"width": 528,
"height": 304,
"content": "## Load member records\n\nSearches Airtable for project/member records and normalizes the relevant fields for assignment decisions."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "885d15d1-5b70-4faa-8985-1ad87564bd19",
"connections": {
"Fetch Jira Issue": {
"ai_tool": [
[
{
"node": "Automatic Assignment Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Automatic Assignment Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Aggregate All Data": {
"main": [
[
{
"node": "Prepare AI Agent Data",
"type": "main",
"index": 0
}
]
]
},
"Fetch AIBAP Issues": {
"main": [
[
{
"node": "Check for No Issues",
"type": "main",
"index": 0
}
]
]
},
"Check for No Issues": {
"main": [
[
{
"node": "Handle No Issues Found",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract Unassigned Issues",
"type": "main",
"index": 0
}
]
]
},
"Extract Member Data": {
"main": [
[
{
"node": "Retrieve Multiple Issues",
"type": "main",
"index": 0
},
{
"node": "Aggregate Member Data",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Issue Data": {
"main": [
[
{
"node": "Check All Issues Assigned",
"type": "main",
"index": 0
}
]
]
},
"Merge Extracted Data": {
"main": [
[
{
"node": "Extract Member Data",
"type": "main",
"index": 0
}
]
]
},
"Set Jira Project Key": {
"main": [
[
{
"node": "Fetch AIBAP Issues",
"type": "main",
"index": 0
},
{
"node": "Search Airtable Records",
"type": "main",
"index": 0
}
]
]
},
"Update Issue in Jira": {
"main": [
[
{
"node": "Process Issues in Batches",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Member Data": {
"main": [
[
{
"node": "Merge Issue and Member Data",
"type": "main",
"index": 0
}
]
]
},
"Extract Issue Details": {
"main": [
[
{
"node": "Aggregate Issue Fields",
"type": "main",
"index": 0
}
]
]
},
"Prepare AI Agent Data": {
"main": [
[
{
"node": "Automatic Assignment Agent",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Issue Fields": {
"main": [
[
{
"node": "Merge Issue and Member Data",
"type": "main",
"index": 1
}
]
]
},
"Extract Airtable Fields": {
"main": [
[
{
"node": "Merge Airtable and Issue Data",
"type": "main",
"index": 1
}
]
]
},
"Parse Structured Output": {
"ai_outputParser": [
[
{
"node": "Automatic Assignment Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Search Airtable Records": {
"main": [
[
{
"node": "Extract Airtable Fields",
"type": "main",
"index": 0
}
]
]
},
"Retrieve Multiple Issues": {
"main": [
[
{
"node": "Extract Issue Details",
"type": "main",
"index": 0
}
]
]
},
"Check All Issues Assigned": {
"main": [
[
{
"node": "Complete Process",
"type": "main",
"index": 0
}
],
[
{
"node": "Extract Unassigned Ticket Data",
"type": "main",
"index": 0
},
{
"node": "Merge Extracted Data",
"type": "main",
"index": 1
}
]
]
},
"Extract Unassigned Issues": {
"main": [
[
{
"node": "Merge Airtable and Issue Data",
"type": "main",
"index": 0
}
]
]
},
"Process Issues in Batches": {
"main": [
[
{
"node": "Complete Process",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge Extracted Data",
"type": "main",
"index": 0
}
]
]
},
"When Jira Event Triggered": {
"main": [
[
{
"node": "Set Jira Project Key",
"type": "main",
"index": 0
}
]
]
},
"Automatic Assignment Agent": {
"main": [
[
{
"node": "Update Issue in Jira",
"type": "main",
"index": 0
}
]
]
},
"Merge Issue and Member Data": {
"main": [
[
{
"node": "Aggregate All Data",
"type": "main",
"index": 0
}
]
]
},
"Merge Airtable and Issue Data": {
"main": [
[
{
"node": "Aggregate Issue Data",
"type": "main",
"index": 0
}
]
]
},
"Extract Unassigned Ticket Data": {
"main": [
[
{
"node": "Process Issues in Batches",
"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.
airtableTokenApijiraSoftwareCloudApiopenRouterApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow listens for Jira issue create/update events, finds unassigned issues in a target project, pulls team member data from Airtable plus each member’s open Jira workload, and uses an OpenRouter-powered AI agent to choose an assignee and update the Jira issue. Triggers…
Source: https://n8n.io/workflows/16121/ — 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.
The AI-Powered Shopify SEO Content Automation is an enterprise-grade workflow that transforms product content creation for e-commerce stores. This sophisticated multi-agent system integrates GPT-4o, C
Automating Venue Research as a Musician. Uses airtable, @brightdata/n8n-nodes-brightdata, agent, outputParserStructured. Event-driven trigger; 63 nodes.
ContentCalendar. Uses airtableTrigger, lmChatOpenRouter, airtable, outputParserStructured. Event-driven trigger; 41 nodes.
RAG CHATBOT Main. Uses telegram, telegramTrigger, lmChatOpenAi, n8n-nodes-mcp. Event-driven trigger; 87 nodes.
Deep Research new (fr). Uses outputParserStructured, formTrigger, chainLlm, form. Event-driven trigger; 82 nodes.