AutomationFlowsSlack & Telegram › Onboard Employees From Google Forms with Slack, Jira, and Github Access

Onboard Employees From Google Forms with Slack, Jira, and Github Access

ByNatnail Getachew @itan on n8n.io

New Google Form response triggers the workflow Checks if employee was already onboarded (prevents duplicates) Adds user to department-specific Slack channel If in Software department, grants GitHub repo access Invites user to Jira and creates an onboarding task Updates Google…

Event trigger★★★★☆ complexity13 nodesGoogle Sheets TriggerSlackHTTP RequestJiraGoogle Sheets
Slack & Telegram Trigger: Event Nodes: 13 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #14221 — we link there as the canonical source.

This workflow follows the Google Sheets → Googlesheetstrigger 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 →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "297e6687-be2f-41b2-9829-f3c82da3369f",
      "name": "Workflow Explanation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2656,
        -256
      ],
      "parameters": {
        "width": 723,
        "height": 1214,
        "content": "## Overview\nThis workflow automates employee onboarding using data submitted through a Google Form. Based on the employee's department and role, it provisions access to Slack, Jira, and GitHub, and tracks onboarding status.\n\n## Who's it for\n- HR teams managing employee onboarding\n- IT administrators handling access provisioning\n- Companies using Google Forms for new hire intake\n- Teams using Slack, Jira, and GitHub for collaboration\n\n## How it works\n1. A new response is submitted via Google Forms\n2. The workflow checks if the employee has already been processed\n3. If already completed, the admin is notified\n4. If not:\n   - User is added to the appropriate Slack channel\n   - If in the Software department, GitHub access is granted\n   - User is invited to Jira\n   - A Jira onboarding task is created\n5. The Google Sheet is updated to mark onboarding as completed\n\n## Setup Steps\n1. **Google Sheets**: Connect your account and update `YOUR_GOOGLE_SHEET_ID_HERE` in both the trigger and update nodes\n2. **Slack**: Connect your account and update:\n   - Department channel IDs in the Code node config\n   - Admin user ID in \"Notify admin\" node\n3. **Jira**: Connect your account and update:\n   - Project keys in the Code node config\n   - Component IDs in the Code node config\n   - Your site URL in the \"Invite user to Jira\" node\n4. **GitHub**: Connect your account and update:\n   - Organization name in the HTTP node URL\n   - Repository names in the Code node config\n\n## Requirements\n- Google Sheets with form responses\n- Slack workspace with appropriate channels\n- Jira Software Cloud instance\n- GitHub organization with repositories\n\n## Customization\n- Modify department mappings in the Code node to match your org structure\n- Update Slack channel IDs for each department\n- Adjust GitHub repository names for each team\n- Configure Jira component IDs for different roles"
      },
      "typeVersion": 1
    },
    {
      "id": "117f0260-e835-4f4e-be3a-d36a995e22d1",
      "name": "Group: Sorting Office",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1840,
        -80
      ],
      "parameters": {
        "color": 4,
        "width": 992,
        "height": 544,
        "content": "### Data processing and validation\nProcesses form input and checks if onboarding was already completed."
      },
      "typeVersion": 1
    },
    {
      "id": "177cf43c-e5fa-4ae3-8c6b-67ed68fd1dd7",
      "name": "Group: Digital Onboarding",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -80
      ],
      "parameters": {
        "color": 5,
        "width": 1312,
        "height": 544,
        "content": "### User provisioning and onboarding\nCreates accounts, assigns access, and sets up onboarding tasks."
      },
      "typeVersion": 1
    },
    {
      "id": "04ca7110-16d4-42b6-8d08-07b7cb5f589c",
      "name": "New Google Form Response",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -1792,
        224
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": "Form Responses 1",
        "documentId": "YOUR_GOOGLE_SHEET_ID_HERE"
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "bca088fc-bb7d-4655-96e4-91ee6fb4d2af",
      "name": "Map department and team configuration",
      "type": "n8n-nodes-base.code",
      "position": [
        -1536,
        224
      ],
      "parameters": {
        "jsCode": "const config = {\n  departments: {\n    \"Software\": { slack: \"YOUR_SOFTWARE_SLACK_CHANNEL_ID\", jira: \"YOUR_SOFTWARE_JIRA_PROJECT_KEY\" },\n    \"Marketing\": { slack: \"YOUR_MARKETING_SLACK_CHANNEL_ID\", jira: \"YOUR_MKT_JIRA_PROJECT_KEY\" },\n    \"Finance\": { slack: \"YOUR_FINANCE_SLACK_CHANNEL_ID\", jira: \"YOUR_FIN_JIRA_PROJECT_KEY\" },\n    \"Project\": { slack: \"YOUR_PROJECT_SLACK_CHANNEL_ID\", jira: \"YOUR_PROJ_JIRA_PROJECT_KEY\" }\n  },\n  componentMap: {\n    \"FrontEnd\": \"YOUR_FRONTEND_COMPONENT_ID\",\n    \"BackEnd\": \"YOUR_BACKEND_COMPONENT_ID\",\n    \"Mobile\": \"YOUR_MOBILE_COMPONENT_ID\",\n    \"UI/UX\": \"YOUR_UIUX_COMPONENT_ID\",\n    \"Tester\": \"YOUR_TESTER_COMPONENT_ID\",\n    \"Project Manager\": \"YOUR_PM_COMPONENT_ID\",\n    \"Business Analyst\": \"YOUR_BA_COMPONENT_ID\",\n    \"Scrum Master\": \"YOUR_SM_COMPONENT_ID\"\n  },\n  teams: {\n    \"FrontEnd\": \"your-frontend-repo-name\",\n    \"BackEnd\": \"your-backend-repo-name\",\n    \"Mobile\": \"your-mobile-repo-name\",\n    \"UI/UX\": \"your-design-repo-name\",\n    \"Tester\": \"your-qa-repo-name\"\n  }\n};\n\nconst item = $input.item.json;\n\nconst deptConfig = config.departments[item.Department] || { slack: \"YOUR_GENERAL_SLACK_CHANNEL_ID\", jira: \"YOUR_DEFAULT_JIRA_PROJECT_KEY\" };\nconst selectedComponentId = config.componentMap[item.Team];\n\nreturn {\n  ...item,\n  targetSlack: deptConfig.slack,\n  targetJira: deptConfig.jira,\n  targetComponentIds: selectedComponentId ? [selectedComponentId] : [],\n  targetRepo: config.teams[item.Team] || \"your-general-repo-name\",\n  targetGithubUser: item[\"GitHub Username\"],\n  isSoftware: item.Department === \"Software\"\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "d0a68a09-da0a-499f-b0f4-168cf5c9369e",
      "name": "Check if onboarding already completed",
      "type": "n8n-nodes-base.if",
      "position": [
        -1280,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "633b8d07-5da8-44ea-b949-614ebf7bff8b",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Status }}",
              "rightValue": "Completed"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f7a4dbfa-7254-40e9-a10a-8843e4bbe55d",
      "name": "Notify admin if already processed",
      "type": "n8n-nodes-base.slack",
      "position": [
        -1040,
        0
      ],
      "parameters": {
        "text": "=Admin notice: User {{ $('Map department and team configuration').item.json['Full Name'] }} ({{ $('Map department and team configuration').item.json.Email }}) was already processed (Status = Completed)",
        "user": "YOUR_SLACK_ADMIN_USER_ID_HERE",
        "select": "user",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "3d0c824f-6f2f-4740-85de-39c68155a425",
      "name": "Add user to department Slack channel",
      "type": "n8n-nodes-base.slack",
      "onError": "continueRegularOutput",
      "position": [
        -704,
        240
      ],
      "parameters": {
        "resource": "channel",
        "channelId": "={{ $json.targetSlack }}",
        "operation": "join"
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "30cf8687-8dbd-4919-805f-8244ab8c5f0c",
      "name": "Check if department is software",
      "type": "n8n-nodes-base.if",
      "position": [
        -432,
        240
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "a3432154-31aa-411c-9fd5-ecbe8b80b453",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $('Map department and team configuration').item.json.isSoftware }}",
              "rightValue": "true"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f80d43da-5874-448a-a9ba-70216f7d9998",
      "name": "Add user to GitHub repository",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -192,
        64
      ],
      "parameters": {
        "url": "=https://api.github.com/repos/YOUR_ORG_NAME/{{ $('Map department and team configuration').item.json.targetRepo }}/collaborators/{{ $('Map department and team configuration').item.json['GitHub Username'] }}",
        "method": "PUT",
        "options": {},
        "sendBody": true,
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "permission",
              "value": "push"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/vnd.github.v3+json"
            }
          ]
        },
        "nodeCredentialType": "githubApi"
      },
      "credentials": {
        "githubApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "0112a746-6924-4744-9589-28349e18831f",
      "name": "Create onboarding task in Jira",
      "type": "n8n-nodes-base.jira",
      "position": [
        352,
        256
      ],
      "parameters": {
        "project": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Map department and team configuration').item.json.targetJira }}"
        },
        "summary": "=Onboarding: {{ $('Map department and team configuration').item.json.Email }}",
        "issueType": {
          "__rl": true,
          "mode": "list",
          "value": "10014",
          "cachedResultName": "Task"
        },
        "additionalFields": {
          "description": "=Please complete onboarding for new hire in department: {{ $('Map department and team configuration').item.json.Department }}",
          "componentIds": "={{ [$('Map department and team configuration').item.json.targetComponentIds[0]] }}"
        }
      },
      "credentials": {
        "jiraSoftwareCloudApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2683b5ee-e914-4c2a-8585-14f9944ee1dc",
      "name": "Invite user to Jira",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        64,
        256
      ],
      "parameters": {
        "url": "https://YOUR_SITE.atlassian.net",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"emailAddress\": \"{{ $('Map department and team configuration').item.json.Email }}\",\n  \"products\": [\"jira-software\"]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "jiraSoftwareCloudApi"
      },
      "credentials": {
        "jiraSoftwareCloudApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "971b0df6-44b4-45cf-acf9-9d8e0da728a4",
      "name": "Update Google Sheet status to completed",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        656,
        256
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $('Map department and team configuration').item.json.Email }}",
            "Status": "Completed"
          },
          "schema": [
            {
              "id": "Email",
              "type": "string",
              "displayName": "Email",
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "displayName": "Status",
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": "Form Responses 1",
        "documentId": "YOUR_GOOGLE_SHEET_ID_HERE"
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "connections": {
    "Invite user to Jira": {
      "main": [
        [
          {
            "node": "Create onboarding task in Jira",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New Google Form Response": {
      "main": [
        [
          {
            "node": "Map department and team configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add user to GitHub repository": {
      "main": [
        [
          {
            "node": "Invite user to Jira",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create onboarding task in Jira": {
      "main": [
        [
          {
            "node": "Update Google Sheet status to completed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if department is software": {
      "main": [
        [
          {
            "node": "Add user to GitHub repository",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Invite user to Jira",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add user to department Slack channel": {
      "main": [
        [
          {
            "node": "Check if department is software",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if onboarding already completed": {
      "main": [
        [
          {
            "node": "Notify admin if already processed",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Add user to department Slack channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Map department and team configuration": {
      "main": [
        [
          {
            "node": "Check if onboarding already completed",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

New Google Form response triggers the workflow Checks if employee was already onboarded (prevents duplicates) Adds user to department-specific Slack channel If in Software department, grants GitHub repo access Invites user to Jira and creates an onboarding task Updates Google…

Source: https://n8n.io/workflows/14221/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

This workflow is an AI-powered roto matte generation and first-pass compositing pipeline designed for VFX production. It transforms structured roto requests into multiple high-precision matte passes u

HTTP Request, Slack, Error Trigger +4
Slack & Telegram

Google Sheets CRM Enrichment. Uses googleSheetsTrigger, httpRequest, googleSheets, slack. Event-driven trigger; 15 nodes.

Google Sheets Trigger, HTTP Request, Google Sheets +2
Slack & Telegram

Splitout Code. Uses googleSheetsTrigger, httpRequest, splitInBatches, googleSheets. Event-driven trigger; 35 nodes.

Google Sheets Trigger, HTTP Request, Google Sheets +2
Slack & Telegram

Transform your lead list into an AI-powered calling machine. This workflow automates your entire cold calling process using Vapi's conversational AI to initiate calls, qualify leads, capture detailed

Google Sheets, HTTP Request, Slack
Slack & Telegram

Type in Slack. Walk away. Get a professional PDF report and a structured Excel fix sheet delivered to Google Drive and posted back in your Slack thread — fully automated, zero manual work.

Compression, HTTP Request, Google Drive +3