Automated Employee Onboarding from Google Forms to Slack, Jira, and GitHub

Overview

This workflow automates the entire employee onboarding process triggered by a new Google Form submission. When a new hire's details are submitted (name, email, department, role, GitHub username), the workflow automatically provisions access across Slack, Jira, and GitHub based on the employee's department and team. It also tracks the onboarding status in Google Sheets, preventing duplicate processing and notifying an admin if the employee has already been onboarded.

This is particularly useful for HR teams, IT administrators, and growing companies that want to eliminate manual provisioning steps, reduce human error, and ensure every new hire gets consistent access from day one.

Step-by-Step Node Breakdown

  1. New Google Form Response (Google Sheets Trigger — OAuth2) — Polls the specified Google Sheet every minute for new rows added via Google Forms. Configured to watch "Form Responses 1" sheet. Requires the Google Sheet ID to be set in the documentId field.

  2. Map department and team configuration (Code Node — No auth) — A JavaScript code node that contains a configuration object mapping departments (Software, Marketing, Finance, Project) to Slack channel IDs and Jira project keys. It also maps team roles (FrontEnd, BackEnd, Mobile, etc.) to GitHub repository names and Jira component IDs. The code extracts the incoming form data, looks up the correct Slack channel, Jira project, component IDs, and GitHub repo for the employee, and outputs an enriched object with these mappings plus a boolean isSoftware flag.

  3. Check if onboarding already completed (IF Node — No auth) — Checks the Status field from the incoming data. If the status equals "Completed", the workflow branches to notify the admin; otherwise, it proceeds with provisioning.

  4. Notify admin if already processed (Slack Node — OAuth2) — Sends a direct Slack message to a specified admin user ID, informing them that the employee (name and email) was already processed with status "Completed". Requires a Slack connection and the admin's Slack user ID.

  5. Add user to department Slack channel (Slack Node — OAuth2) — Uses the targetSlack value from the mapping node to invite the new employee to the appropriate department Slack channel. The node is configured to "join" the channel. If this fails (e.g., user already in channel), it continues without error.

  6. Check if department is software (IF Node — No auth) — Evaluates the isSoftware boolean from the mapping node. If true, the workflow proceeds to add the user to GitHub; if false, it skips GitHub and goes directly to Jira invitation.

  7. Add user to GitHub repository (HTTP Request Node — API Key auth via GitHub API credential) — Sends a PUT request to the GitHub API to add the employee as a collaborator to their team's repository with "push" permission. The URL dynamically constructs using the organization name (placeholder YOUR_ORG_NAME), the target repo from the mapping node, and the employee's GitHub username. Requires a GitHub API credential.

  8. Invite user to Jira (HTTP Request Node — API Key auth via Jira Software Cloud API credential) — Sends a POST request to the Jira API to invite the employee by email address and assign them the Jira Software product. The URL uses a placeholder YOUR_SITE.atlassian.net. Requires a Jira Software Cloud API credential.

  9. Create onboarding task in Jira (Jira Node — OAuth2) — Creates a new Jira issue (type "Task") in the project mapped to the employee's department. The summary includes the employee's email, and the description includes their department. The issue is assigned the appropriate component ID based on the employee's team role.

  10. Update Google Sheet status to completed (Google Sheets Node — OAuth2) — Updates the Google Sheet row matching the employee's email address, setting the "Status" column to "Completed". This prevents the workflow from reprocessing the same employee in future runs.

Setup Instructions

Required Accounts & Services

  • Google Account — For Google Sheets and Google Forms. You'll need a Google Sheet connected to a Google Form that captures new hire data.
  • Slack Workspace — With appropriate department channels already created. You'll need Slack admin permissions to invite users.
  • Jira Software Cloud — With projects and components set up for each department/team. You'll need admin permissions to invite users and create issues.
  • GitHub Organization — With repositories for each team. You'll need admin permissions to add collaborators.

Credentials to Configure in n8n

  1. Google Sheets OAuth2 — For both the trigger and update nodes. Connect your Google account.
  2. Slack OAuth2 — For sending messages and inviting users to channels. Connect your Slack workspace.
  3. Jira Software Cloud API — For inviting users and creating issues. Create an API token from your Atlassian account.
  4. GitHub API — For adding collaborators. Create a personal access token with repo scope.

Placeholder Values to Replace

  • YOUR_GOOGLE_SHEET_ID_HERE — Found in the Google Sheet URL between /d/ and /edit.
  • YOUR_SLACK_ADMIN_USER_ID_HERE — Your Slack member ID (right-click profile → Copy member ID).
  • YOUR_SOFTWARE_SLACK_CHANNEL_ID etc. — Slack channel IDs (right-click channel → Copy link → extract ID).
  • YOUR_SOFTWARE_JIRA_PROJECT_KEY etc. — Jira project keys (e.g., "DEV", "MKT").
  • YOUR_FRONTEND_COMPONENT_ID etc. — Jira component IDs (from Jira project settings → Components).
  • YOUR_ORG_NAME — Your GitHub organization name.
  • YOUR_SITE — Your Atlassian site name (e.g., "mycompany" from mycompany.atlassian.net).
  • Repository names in the Code node's teams object — Must match actual GitHub repo names.

Use Cases & Variations

Primary Use Case

Automated employee onboarding for companies using Google Forms for HR intake, with Slack for communication, Jira for task management, and GitHub for development.

Variations & Adaptations

  • Different HR Systems — Replace the Google Sheets trigger with a webhook from BambooHR, Workday, or any HRIS system.
  • Additional Tools — Add nodes to provision accounts in other services like AWS IAM, Okta, or 1Password.
  • Department-Specific Logic — Modify the Code node to handle more departments, different permission levels, or conditional access to multiple repositories.
  • Notification Enhancements — Add email notifications via Gmail or SendGrid, or send a welcome message to the new hire in Slack.
  • Approval Workflow — Insert a manual approval node (e.g., Slack message with buttons) before provisioning access.
  • Offboarding — Reverse the logic to deprovision access when an employee leaves (triggered by a status change in the sheet).
  • Multi-Cloud — Extend to add users to cloud providers like AWS IAM groups or Azure AD groups based on department.
13 nodesmanual triggerProductivity
Sticky NoteCodeIFSlackHTTP RequestJiraGoogle Sheets

Workflow JSON

{
  "meta": {
    "instanceId": "984de408a5cad88d157768c66d3889d41083cb00b76637dbc690936e2e4bdbf0",
    "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."
// ... truncated (copy to see full JSON)

How to Import This Workflow

  1. 1Copy the workflow JSON above using the Copy Workflow JSON button.
  2. 2Open your n8n instance and go to Workflows.
  3. 3Click Import from JSON and paste the copied workflow.

Don't have an n8n instance? Start your free trial at n8nautomation.cloud

Related Templates

YouTube Video Summarizer with Telegram Notification

High-Level Summary This workflow automatically processes YouTube videos by fetching their transcripts, generating a structured AI-powered summary using OpenAI's GPT-4o-mini, and sending the summary along with video metadata to a Telegram chat. It is triggered via a webhook, making it easy to integrate with other tools or services (e.g., a browser extension, a form, or another automation). The workflow is ideal for content curators, researchers, or teams who want to quickly digest video content without watching the full video. Workflow Steps Webhook — Receives an incoming HTTP POST request containing a YouTube URL in the request body. This is the entry point of the workflow. (No auth) Get YouTube URL (Set node) — Extracts the field from the incoming webhook payload and stores it as a string variable for downstream use. (No auth) YouTube Video ID (Code node) — Runs a JavaScript function that parses the YouTube URL using a regex pattern to extract the 11-character video ID (supports both and formats). (No auth) Get YouTube Video (YouTube node) — Uses the extracted video ID to fetch video metadata (title, description, etc.) from the YouTube Data API v3. (OAuth2 — requires a Google Cloud project with YouTube Data API enabled) YouTube Transcript (Community node: ) — Fetches the transcript/captions for the video. This node requires the video ID (passed from the previous step). (No auth — uses public YouTube captions) Split Out (SplitOut node) — Splits the transcript array into individual items so each text segment can be processed separately. (No auth) Concatenate (Summarize node) — Concatenates all transcript text segments into a single string, separated by spaces, to prepare the full transcript for analysis. (No auth) gpt-4o-mini (OpenAI Chat Model node) — Configures the OpenAI language model (GPT-4o-mini) that will be used for summarization. (API Key auth — requires an OpenAI API key) Summarize & Analyze Transcript (LLM Chain node) — Sends the concatenated transcript to the GPT-4o-mini model with a detailed prompt asking for a structured summary with headers, bullet points, bold terms, and tables. The output is a markdown-formatted analysis. (No auth — uses the model configured in the previous node) Response Object (Set node) — Assembles the final output object containing: - : The AI-generated summary text - : An empty array (placeholder for future use) - : The video title from YouTube metadata - : The video description from YouTube metadata - : The YouTube video ID - : The original YouTube URL from the webhook (No auth) Respond to Webhook — Sends the assembled response object back to the original webhook caller (e.g., a browser extension or app). (No auth) Telegram — Sends a message to a specified Telegram chat containing the video title and the YouTube URL. (API Key auth — requires a Telegram Bot Token and chat ID) Setup Instructions To use this workflow, you will need the following accounts and credentials: OpenAI Account: Create an account at platform.openai.com and generate an API key. Add this as a credential in n8n under "OpenAI". Google Cloud Project: Enable the YouTube Data API v3 in your Google Cloud Console, create OAuth 2.0 credentials (Desktop app type), and add them in n8n under "YouTube OAuth2 API". Telegram Bot: Create a bot via @BotFather on Telegram to get a Bot Token. Find your chat ID (e.g., by messaging your bot and visiting ). Add the token as a credential in n8n under "Telegram API". Webhook URL: After activating the workflow, copy the production webhook URL (e.g., ). You will send POST requests to this URL with a JSON body like . Use Cases and Variations Content Curation: Automatically summarize long conference talks, tutorials, or webinars and share them with your team on Telegram. Research Assistant: Collect video transcripts and AI summaries for later reference or database storage. Browser Extension Integration: Pair this workflow with a browser extension that sends the current YouTube URL to the webhook when clicked. Variations: - Replace Telegram with Slack, Discord, or email notifications. - Store summaries in a Google Sheet or Airtable for a searchable archive. - Add a filter to skip videos shorter than a certain duration. - Use a different LLM (e.g., Claude, Gemini) by swapping the OpenAI node. - Add error handling to notify you if a video has no captions.

12 nodes

Telegram Bot TikTok Video Downloader (No Watermark)

Overview This workflow transforms your Telegram bot into a powerful TikTok video downloader without watermarks. When a user sends a TikTok link to the bot, it automatically validates the URL, fetches the video page, extracts the clean video URL, downloads the file, and sends it back to the user with statistics (views, likes, author). The entire process is handled seamlessly with real-time status updates and robust error handling. This is perfect for content curators, social media managers, or anyone who wants to save TikTok videos without watermarks directly from Telegram. The bot provides a smooth user experience with progress messages and clear error feedback. Workflow Steps Telegram Trigger (No auth) — Listens for incoming messages from Telegram users. Configured to receive only updates. This node requires a Telegram Bot Token set up in n8n credentials. Validate TikTok URL (No auth) — An IF node that checks if the received message contains in the text. Uses string contains operator with loose type validation. Routes valid URLs to the processing path and invalid ones to an error message. Send Invalid URL Message (Telegram API Key auth) — Sends a friendly error message to the user explaining they need to provide a valid TikTok link with examples. Uses the chat ID from the original trigger message. Send Chat Action (Telegram API Key auth) — Sends a "uploading video" chat action to show the user that the bot is processing their request. This provides visual feedback in the Telegram chat. Send Processing Message (Telegram API Key auth) — Sends a status message "⏳ Downloading video... Please wait!" to keep the user informed about the progress. Configure Variables (No auth) — A Set node that stores the video URL (trimmed) and chat ID as named variables for use in subsequent nodes. This ensures data persistence through the workflow. Get TikTok Page HTML (No auth) — An HTTP Request node that fetches the TikTok video page HTML. Uses browser-like headers (User-Agent, Accept, Accept-Language) to mimic a real browser request. Configured with a 30-second timeout and full response capture. On error, it continues to the error handling path. Extract Video URL (No auth) — A Code node running JavaScript that parses the HTML to find the script tag containing video metadata. Extracts the video URL (playAddr or downloadAddr), cookies, description, author, and statistics (plays, likes, comments). On error, it routes to the error handler. Download Video File (No auth) — An HTTP Request node that downloads the actual video file using the extracted URL. Includes cookies from the previous step, proper referrer header, and a 60-second timeout. Configured to return binary file data. On error, it routes to the error handler. Delete Process Notif (Telegram API Key auth) — Deletes the "Processing..." status message to clean up the chat after the video is ready. Uses the message ID from the earlier status message. Send Video to User (Telegram API Key auth) — Sends the downloaded video file to the user with a formatted caption showing the author, view count, and like count. Uses binary data mode for file upload. Format Error (No auth) — A Code node that captures error messages from failed nodes and formats them into a user-friendly error object with the chat ID for response. Send Error Message (Telegram API Key auth) — Sends a detailed error message to the user explaining possible reasons for failure (deleted video, invalid link, maintenance, restrictions) with HTML formatting. Setup Instructions Prerequisites Telegram Bot Token: Create a bot via @BotFather on Telegram and get your API token n8n Instance: Self-hosted or cloud n8n (n8n.io) Configuration Steps Telegram Credentials: In n8n, go to Credentials → New → Telegram API. Enter your bot token from BotFather Webhook Setup: The Telegram Trigger node automatically sets up a webhook URL. Make sure your n8n instance is publicly accessible or use a tunnel (ngrok) Test the Bot: Send any TikTok video link to your bot (e.g., ) Use Cases & Variations Primary Use Case Personal Video Archiving: Save your favorite TikTok videos without watermarks for offline viewing Content Curation: Collect videos for repurposing on other platforms Social Media Management: Download client videos for scheduling tools Possible Adaptations Add Multiple Platforms: Extend the workflow to support Instagram Reels, YouTube Shorts, or Twitter videos by adding additional validation and extraction logic Database Storage: Add a Google Sheets or Airtable node to log downloaded videos with metadata Admin Notifications: Add a second Telegram channel to notify you when someone downloads a video Rate Limiting: Implement user rate limiting using n8n's Wait node or a database Video Processing: Add FFmpeg or other processing nodes to convert formats or add watermarks Multi-language Support: Modify error messages and captions based on user language preferences

23 nodes

Telegram to Email Newsletter Automation using Dumpling AI

High-Level Summary This workflow transforms a simple keyword sent via Telegram into a polished, HTML-formatted email newsletter. It leverages Dumpling AI's APIs for search and scraping, OpenAI's language models for content generation, and Gmail for delivery. The automation is ideal for content creators, marketers, or anyone who wants to quickly curate and distribute news on a specific topic without manual research and formatting. Step-by-Step Node Breakdown Start: Receive Keyword from Telegram (Telegram Trigger) — No auth (uses Telegram bot token configured in n8n credentials). Listens for incoming Telegram messages. When a message is received, it passes the message text (the keyword) to the next node. AI Agent: Expand Keyword & Orchestrate Tools (LangChain Agent) — Uses the connected LLM and tools. The system prompt instructs the agent to first call to expand the keyword into popular search terms, then pass those terms to to fetch recent articles. The agent outputs a structured JSON array of articles. LLM: Language Model (OpenAI Chat Model) — API Key auth (OpenAI API key stored in n8n). Provides the language model (GPT-4o-mini) that powers the AI Agent's reasoning and tool selection. Simple Memory (Memory Buffer Window) — Stores conversation context for the AI Agent using the Telegram user's ID as the session key. Google_autocomplete (HTTP Request Tool) — Header Auth (Dumpling AI API key in header). Calls with a POST request containing the keyword. Returns autocomplete suggestions from Google. Search_news (HTTP Request Tool) — Header Auth (Dumpling AI API key in header). Calls with a POST request containing the autocomplete suggestion. Returns recent news articles. Parser: Format News JSON (Output Parser) — Defines a JSON schema that the AI Agent must follow when outputting the final list of articles (with fields: category, title, url, source, summary, published). Split Articles (Split Out) — Splits the array from the agent into individual items, one per article. Loop: Process Each Article (Split In Batches) — Iterates over each article one at a time. For each article, it triggers the Wait node and then the Scraper. Wait (Wait) — No auth. Adds a small delay (configurable) between scraping requests to avoid rate limiting. Scraper: Clean Article Content (HTTP Request) — Header Auth (Dumpling AI API key in header). Calls with the article URL and to get the article's main content in markdown format. Aggregate: Combine Article Content (Aggregate) — Collects the field from all scraped articles into a single array. Generate Newsletter (OpenAI) — API Key auth (OpenAI API key). Sends the aggregated content to GPT-4.1-mini with a system prompt that instructs it to generate a professional HTML newsletter and a subject line. Outputs JSON with (HTML) and fields. Send Newsletter via Email (Gmail) — OAuth2 (Google account connected via n8n Gmail node). Sends the generated HTML newsletter to a specified email address with the generated subject line. Setup Instructions To use this workflow, you will need accounts and API keys for the following services: Telegram: Create a bot via @BotFather and get the bot token. Configure the Telegram Trigger node with this token. Dumpling AI: Sign up at app.dumplingai.com and generate an API key. This key is used as a header () in the three HTTP Request nodes (Googleautocomplete, Searchnews, Scraper). OpenAI: Sign up at platform.openai.com and create an API key. Use this in the LLM node and the Generate Newsletter node. Gmail: Connect your Google account via OAuth2 in n8n's Gmail node. Ensure the email address you want to send to is authorized (or use your own address for testing). After configuring all credentials, activate the workflow and send a keyword (e.g., "AI in retail") to your Telegram bot. The workflow will run and deliver a newsletter to your inbox. Use Cases and Variations Content Curation for Newsletters: Replace the Telegram trigger with a Schedule trigger to run daily or weekly on predefined keywords (e.g., "tech news", "climate change"). Brand Monitoring: Use the workflow to monitor news about your brand or competitors and send alerts to your team via email or Slack. Personalized Digests: Modify the AI prompt to generate summaries in different languages or tones (e.g., executive brief, casual digest). Multi-Channel Delivery: Instead of Gmail, send the newsletter to Slack, Discord, or a Notion database by swapping the final node. Add Human Review: Insert a manual approval step (e.g., n8n's "Wait" node with webhook) before sending, so you can review and edit the newsletter.

16 nodes

Ready to automate with n8n?

Get affordable managed n8n hosting with 24/7 support.