Workflow: Splitout Code Import

Workflow Details

Download Workflow
{
    "nodes": [
        {
            "id": "58c69358-3d02-41c3-b50c-6e57452523a2",
            "name": "Every day at 06:00",
            "type": "n8n-nodes-base.scheduleTrigger",
            "position": [
                960,
                600
            ],
            "parameters": {
                "rule": {
                    "interval": [
                        {
                            "triggerAtHour": 9
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "0a388351-6aec-45c4-a142-e89b338be155",
            "name": "Get all your team's tickets",
            "type": "n8n-nodes-base.graphql",
            "position": [
                1200,
                600
            ],
            "parameters": {
                "query": "query ($filter: IssueFilter) {\n  issues(filter: $filter, first: 100) {\n    pageInfo {\n      hasNextPage\n      endCursor\n    }\n    nodes {\n      id\n      identifier\n      url\n      title\n      priorityLabel\n      createdAt\n      completedAt\n      state {\n        type\n        name\n      }\n      cycle {\n        number\n      }\n      estimate\n      labels { nodes { name } }\n    }\n  }\n}",
                "endpoint": "https:\/\/api.linear.app\/graphql",
                "variables": "={\n  \"filter\": {\n    \"team\": {\n      \"name\":  {\n        \"eq\": \"Adore\"\n      }\n    }\n  }\n}",
                "requestFormat": "json",
                "authentication": "headerAuth"
            },
            "credentials": {
                "httpHeaderAuth": {
                    "id": "QNQL42DMISvQl50S",
                    "name": "Linear api "
                }
            },
            "typeVersion": 1
        },
        {
            "id": "91f29056-f934-4c15-8e98-2a202753971d",
            "name": "Sticky Note1",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1200,
                460
            ],
            "parameters": {
                "color": 7,
                "width": 256.14371825927645431875134818255901336669921875,
                "height": 100,
                "content": "\ud83d\udc47\ud83c\udffd Set your team name here in the filter. \n(Our team's name is Adore)"
            },
            "typeVersion": 1
        },
        {
            "id": "8efeb08c-fbba-4c07-9ef8-e22afa39f328",
            "name": "if has next page",
            "type": "n8n-nodes-base.if",
            "position": [
                1400,
                780
            ],
            "parameters": {
                "options": [],
                "conditions": {
                    "options": {
                        "leftValue": "",
                        "caseSensitive": true,
                        "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                        {
                            "id": "f5ab21aa-b2e0-4885-9278-6756c2c544f9",
                            "operator": {
                                "type": "boolean",
                                "operation": "true",
                                "singleValue": true
                            },
                            "leftValue": "={{ $json.data.issues.pageInfo.hasNextPage }}",
                            "rightValue": 0
                        }
                    ]
                }
            },
            "typeVersion": 2
        },
        {
            "id": "fdfba048-ae14-45fb-88be-e354d7003fdb",
            "name": "Get end cursor",
            "type": "n8n-nodes-base.set",
            "position": [
                1620,
                920
            ],
            "parameters": {
                "fields": {
                    "values": [
                        {
                            "name": "after",
                            "stringValue": "={{ $json.data.issues.pageInfo.endCursor }}"
                        }
                    ]
                },
                "include": "none",
                "options": []
            },
            "typeVersion": 3.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "db37b327-d939-4a8b-bd5c-ff99c2191a54",
            "name": "Get next page",
            "type": "n8n-nodes-base.graphql",
            "position": [
                1880,
                920
            ],
            "parameters": {
                "query": "=query ($filter: IssueFilter) {\n  issues(filter: $filter, first: 100, after: \"{{ $json.after }}\") {\n    nodes {\n      id\n      identifier\n      url\n      title\n      priorityLabel\n      createdAt\n      completedAt\n      state {\n        type\n        name\n      }\n      cycle {\n        number\n      }\n      estimate\n      labels { nodes { name } }\n    }\n    pageInfo {\n      hasNextPage\n      endCursor\n    }\n  }\n}",
                "endpoint": "https:\/\/api.linear.app\/graphql",
                "variables": "={\n  \"filter\": {\n    \"team\": {\n      \"name\":  {\n        \"eq\": \"Adore\"\n      }\n    }\n  }\n}",
                "requestFormat": "json",
                "authentication": "headerAuth"
            },
            "credentials": {
                "httpHeaderAuth": {
                    "id": "QNQL42DMISvQl50S",
                    "name": "Linear api "
                }
            },
            "typeVersion": 1
        },
        {
            "id": "f7857473-966e-433e-a7d7-9c4e4bdb670a",
            "name": "Sticky Note",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2060,
                940
            ],
            "parameters": {
                "color": 7,
                "width": 256.14371825927645431875134818255901336669921875,
                "height": 100,
                "content": "\ud83d\udc48\ud83c\udffd Set your team name here in the filter. \n(Our team's name is Adore)"
            },
            "typeVersion": 1
        },
        {
            "id": "75365be8-d111-4bc8-9da8-77e8d3a1de6c",
            "name": "Split out the tickets",
            "type": "n8n-nodes-base.splitOut",
            "position": [
                2020,
                600
            ],
            "parameters": {
                "options": [],
                "fieldToSplitOut": "data.issues.nodes"
            },
            "typeVersion": 1
        },
        {
            "id": "691a8299-9c96-4520-a56b-7edf3bee42b5",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2240,
                460
            ],
            "parameters": {
                "color": 7,
                "width": 256.14371825927645431875134818255901336669921875,
                "height": 100,
                "content": "\ud83d\udc47\ud83c\udffd Adjust any custom fields. Here we set labels and default estimate of 1"
            },
            "typeVersion": 1
        },
        {
            "id": "4ff13ada-6534-4171-8704-4917b247727d",
            "name": "Set custom fields",
            "type": "n8n-nodes-base.set",
            "position": [
                2240,
                600
            ],
            "parameters": {
                "fields": {
                    "values": [
                        {
                            "name": "estimate",
                            "type": "numberValue",
                            "numberValue": "={{ $json.estimate ?? 1 }}"
                        },
                        {
                            "name": "labels",
                            "stringValue": "={{ $json.labels.nodes.map((label) => label.name).toString() }}"
                        }
                    ]
                },
                "options": []
            },
            "typeVersion": 3.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "02577d21-656e-425b-9924-37a34c822fe8",
            "name": "Sticky Note3",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                740,
                300
            ],
            "parameters": {
                "color": 5,
                "width": 403.45318928152613580095930956304073333740234375,
                "height": 280.90046755500708286490407772362232208251953125,
                "content": "### \ud83d\udc68\u200d\ud83c\udfa4 Setup\n1. Add Linear API header key\n2. Add Google sheets creds\n3. Update which teams to get tickets from in Graphql Nodes\n4. Update which Google Sheets page to write all the tickets to. \n **You only need to add one column, id. Google Sheets node in automatic mapping mode will handle adding the rest of the columns.**\n5. Set any custom data on each ticket\n6. Activate workflow \ud83d\ude80"
            },
            "typeVersion": 1
        },
        {
            "id": "6344a764-20f0-4f46-bdc8-1599c2f9ba95",
            "name": "Sticky Note4",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2700,
                780
            ],
            "parameters": {
                "color": 7,
                "width": 256.14371825927645431875134818255901336669921875,
                "height": 100,
                "content": "\ud83d\udc46\ud83c\udffd Update which Google sheet to write to"
            },
            "typeVersion": 1
        },
        {
            "id": "ba08e0c7-1607-4bcd-8b37-99a6145b0cba",
            "name": "Write tickets to Sheets",
            "type": "n8n-nodes-base.googleSheets",
            "position": [
                2720,
                600
            ],
            "parameters": {
                "columns": {
                    "value": [],
                    "schema": [
                        {
                            "id": "id",
                            "type": "string",
                            "display": true,
                            "removed": false,
                            "required": false,
                            "displayName": "id",
                            "defaultMatch": true,
                            "canBeUsedToMatch": true
                        }
                    ],
                    "mappingMode": "autoMapInputData",
                    "matchingColumns": [
                        "id"
                    ]
                },
                "options": [],
                "operation": "appendOrUpdate",
                "sheetName": {
                    "__rl": true,
                    "mode": "list",
                    "value": 2072772685,
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1pQxSIZ2dSoA8Fmr3B4EId9VOQXH1hVuOZgCHxcaKN7k\/edit#gid=2072772685",
                    "cachedResultName": "Sheet2"
                },
                "documentId": {
                    "__rl": true,
                    "mode": "list",
                    "value": "1pQxSIZ2dSoA8Fmr3B4EId9VOQXH1hVuOZgCHxcaKN7k",
                    "cachedResultUrl": "https:\/\/docs.google.com\/spreadsheets\/d\/1pQxSIZ2dSoA8Fmr3B4EId9VOQXH1hVuOZgCHxcaKN7k\/edit?usp=drivesdk",
                    "cachedResultName": "Adore tickets"
                }
            },
            "credentials": {
                "googleSheetsOAuth2Api": {
                    "id": "xNiEr671wxZVfjs6",
                    "name": "Google Sheets account 3"
                }
            },
            "retryOnFail": true,
            "typeVersion": 4.20000000000000017763568394002504646778106689453125,
            "waitBetweenTries": 5000
        },
        {
            "id": "df3ae898-1f09-4be3-a96a-f1f9cba58730",
            "name": "Flatten object to have simple fields to filter by",
            "type": "n8n-nodes-base.code",
            "position": [
                2480,
                600
            ],
            "parameters": {
                "mode": "runOnceForEachItem",
                "jsCode": "function flattenObject(ob) {\n    var toReturn = {};\n\n    for (var i in ob) {\n        if (!ob.hasOwnProperty(i)) continue;\n\n        if ((typeof ob[i]) == 'object' && ob[i] !== null) {\n            var flatObject = flattenObject(ob[i]);\n            for (var x in flatObject) {\n                if (!flatObject.hasOwnProperty(x)) continue;\n\n                toReturn[i + '.' + x] = flatObject[x];\n            }\n        } else {\n            toReturn[i] = ob[i];\n        }\n    }\n    return toReturn;\n}\n\nreturn flattenObject($input.item.json);"
            },
            "typeVersion": 2
        }
    ],
    "pinData": [],
    "connections": {
        "Get next page": {
            "main": [
                [
                    {
                        "node": "if has next page",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "Split out the tickets",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get end cursor": {
            "main": [
                [
                    {
                        "node": "Get next page",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "if has next page": {
            "main": [
                [
                    {
                        "node": "Get end cursor",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Set custom fields": {
            "main": [
                [
                    {
                        "node": "Flatten object to have simple fields to filter by",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Every day at 06:00": {
            "main": [
                [
                    {
                        "node": "Get all your team's tickets",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Split out the tickets": {
            "main": [
                [
                    {
                        "node": "Set custom fields",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get all your team's tickets": {
            "main": [
                [
                    {
                        "node": "Split out the tickets",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "if has next page",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Flatten object to have simple fields to filter by": {
            "main": [
                [
                    {
                        "node": "Write tickets to Sheets",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

Autopilot Automate
View
Lemlist Slack Create Webhook
View
Awss3 GoogleDrive Import Triggered
View
GoogleSheets Readbinaryfile Automate
View
Splitout GoogleCalendar Automate Webhook
View
Manual Postgres Automate Triggered
View
Telegram ChatBot with multiple sessions
View
HTTP Schedule Send Scheduled
View
Translate
View
Personalized AI Tech Newsletter Using RSS, OpenAI and Gmail
View