by Yves Tkaczyk
Use cases Ensure that the calls to the workflow's webhook are (a) originating from the correct GitHub repository and (b) haven't been tampered with. How it works When a secret is provided in a GitHub webhook configuration, a x-hub-signature-256 header is added to the webhook. Compute HMAC256 computes the HMAC256 signature similarly to how it was computed by GitHub. Validate HMAC256 tests for the equality of the computed value and the value provided by the header. If the values are equal then 200 is returned to GitHub and the workflow continues If the values are NOT equal then 401 is returned and the workflow ends. Note: The Stop and Error step is optional and can be removed. Removing it means that the workflow completes successfully while still returning 401 to GitHub. This means that you will not be able to easily track malicious or incorrect calls to your webhook from n8n. How to use Add the steps (1) and (2) of the workflow to your current workflow receiving webhook calls from GitHub. Update the Secret field in the Compute HMAC256 node with the same value as the secret stored in the Secret field in the GitHub webhook definition. Requirements GitHub account and repository. GitHub webhook setup with a Secret key. Key can be of any length and should be generated with a key or password generator. Who’s it for Developers or DevOps engineers who want to ensure secure webhook communication between GitHub and n8n. How to customize the workflow This is a building block for your own workflow. If you use this workflow as a base, replace step (3) with your own business logic. You can modify the Stop and Error node to log unauthorized requests or trigger alerts. ⚠️ Warning The secret is stored in plain text in the workflow. You should take this into consideration if the workflow is committed to source control or shared in any other way. Need Help? Reach out on LinkedIn or Ask in the Forum!
by Trung Tran
AWS Certificate Manager (ACM) Auto-Renew with Slack notify & approval Who’s it for SRE/DevOps teams managing many ACM certs. Cloud ops who want hands-off renewals with an approval step in Slack. MSPs that need auditable reminders and renewals on schedule. How it works / What it does Schedule Trigger – runs daily (or your cadence). Get many certificates – fetches ACM certs (paginate if needed). Filter: expiring in next 7 days – keeps items where: NotAfter before today + 7d NotBefore before today (already valid) Send message and wait for response (Slack) – posts a certificate summary and pauses until Approve/Reject. Renew a certificate – on Approve, calls the renew action for the item. How to set up Credentials AWS in n8n with permissions to list/read/renew certs. Slack OAuth (bot in the target channel). Schedule Trigger Set to run once per day (e.g., 09:00 local). Get many certificates Region: your ACM region(s). If you have several regions, loop regions or run multiple branches. Filter (IF / Filter node) Add these two conditions (AND): {{ $json.NotAfter.toDateTime('s') }} is before {{ $today.plus(7,'days') }} {{ $json.NotBefore.toDateTime('s') }} is before {{ $today }} Slack → Send & Wait Message (text input): :warning: ACM Certificate Expiry Alert :warning: Domain: {{ $json.DomainName }} SANs: {{ $json.SubjectAlternativeNameSummaries }} ARN: {{ $json.CertificateArn }} Algo: {{ $json.KeyAlgorithm }} Status: {{ $json.Status }} Issued: {{ $json.IssuedAt | toDate | formatDate("YYYY-MM-DD HH:mm") }} Expires: {{ $json.NotAfter | toDate | formatDate("YYYY-MM-DD HH:mm") }} Approve to start renewal. Add two buttons: Approve / Reject (the node will output which was clicked). Renew a certificate Map the CertificateArn from the Slack Approved branch. Requirements n8n (current version with Slack Send & Wait). AWS IAM permissions (read + renew ACM), e.g.: acm:ListCertificates, acm:DescribeCertificate, acm:RenewCertificate (plus region access). Slack bot with permission to post & use interactivity in the target channel. How to customize the workflow Window size:** change 7 to 14 or 30 days in the filter. Catch expired: add an OR path {{ $json.NotAfter.toDateTime('s') }} is before {{ $today }} → send a **red Slack alert. Auto-renew w/o approval:** bypass Slack and renew directly for low-risk domains. Multiple regions/accounts:** iterate over a list of regions or assume roles per account. Logging:** add a Google Sheet/DB append after Slack click with user, time, result. Escalation:** if no Slack response after N hours, ping @oncall or open a ticket. Notes The Slack node pauses execution until a button is clicked—perfect for change control. Time conversions above assume NotAfter/IssuedAt are Unix seconds ('s'). Adjust if your data differs.
by Ossian Madisson
This n8n template makes it easy to perform DNS lookups directly within your n8n workflow using dns.google, without any API credentials. Use Cases Track changes:** Schedule execution and log DNS answers to track changes to records over time. Monitoring and alerts:** Schedule execution for DNS monitoring to detect misconfiguration and to trigger immediate alerts. Prerequisite checks:** Use in more extensive workflows to ensure DNS resolves correctly before running a website crawl or other sensitive tasks. Good to Know Requires no API credentials. You do not need to sign up for any third party service for DNS resolution. Can easily be modified to use with a webhook instead of the default Forms node for external triggering. By default performs lookup for: A CNAME AAAA MX TXT NS How It Works The workflow checks the input for a specified DNS type. If none is found, it uses all types in a predefined list. It splits the data into separate items for each DNS type. It loops through all items and executes DNS resolution via the highly reliable dns.google service. It aggregates all results into a single, easy-to-use output structure. How to Use Import the template and execute the workflow to enter the domain you want to look up in the Form interface. Connect the final output node to your specific use case (logging, alerting, subsequent workflow steps, etc.).
by Singgi Aditya
Attendance Telegram App with Google Sheets Manage employee attendance directly through Telegram with seamless Google Sheets integration. Employees can check in, check out, and view their daily attendance status from a Telegram bot. All records are stored in Google Sheets for easy tracking and reporting. 👉 Includes a Google Sheets template to get started quickly. ✨ Features 🕘 Check-in & Check-out via Telegram bot 📊 View daily attendance status (Check-in/Check-out done or not) 🔒 Employee validation – only registered employees can log attendance ⚠️ Duplicate prevention – prevents multiple check-ins/outs on the same day 📂 Google Sheets integration – easy to manage, export, and share data 🛠 Requirements n8n (Cloud or Self-hosted) A Telegram Bot (create via BotFather) Google Sheets account 🚀 Setup Instructions 1. Import Workflow Download and import Attendance Telegram App.json into n8n. Configure your Telegram API credentials. Configure your Google Sheets credentials. 2. Use Provided Google Sheets Template We provide a template with two sheets: Employee** → List of registered employees (id_employee, full_name, username_telegram) Attendance** → Attendance logs (date, time, attendance_type, etc.) 👉 Copy the Google Sheets Template Update the Employee sheet with your employee data before running the workflow. 3. Configure Telegram Bot Create a bot with BotFather on Telegram. Copy the API token. Add it into n8n’s Telegram credentials. 4. Run the Workflow Start the workflow. Open your Telegram bot and type /start or /menu. Available options: ✅ Check-in (⏰) 🚪 Check-out (🏁) 📊 View Today’s Attendance Status 📋 Example Flow User types /menu in Telegram. Bot displays menu with Check-in/Check-out and Today’s Attendance Status. If user taps Check-in: Workflow validates if they are a registered employee. Checks if attendance already exists for today. If valid → record in Google Sheets. Bot replies: “Check-in recorded. ⏰”
by System Admin
Tagged with: , , , ,
by Evoort Solutions
Automated SEO Competitor Analysis with Google Sheets Logging Description: This n8n workflow automates SEO competitor analysis by integrating the Competitor Analysis API. It captures website domains via a simple user form, sends them to the API to retrieve competitor data, and logs the results directly into Google Sheets. The workflow intelligently handles empty or missing data and incorporates a wait node to respect API rate limits, making your competitor tracking seamless and reliable. Node-by-Node Explanation On Form Submission Triggers the workflow when a user submits a website domain. Global Storage Stores the submitted website domain for use in subsequent nodes. Competitor Analysis Request Sends a POST request to the Competitor Analysis API to fetch organic competitors, pages, and keyword data. If (Condition Check) Verifies that the API response contains valid, non-empty data. Google Sheets (Insert Success Data) Appends the fetched competitor data to a specified Google Sheet. Wait Node Adds a 5-second delay to avoid exceeding API rate limits. Google Sheets (Insert 'Not Found' Record) Logs a “Not data found.” entry into Google Sheets if the API response lacks relevant data. Use Cases & Benefits SEO Professionals:** Automate competitor insights collection for efficient SEO research. Marketing Teams:** Maintain consistent, automated logs of competitor data across multiple websites. Agencies:** Manage organic search competitor tracking for many clients effortlessly. Reliability:** Conditional checks and wait nodes ensure smooth API interaction and data integrity. Scalable & User-Friendly:** Simple form input and Google Sheets integration enable easy adoption and scalability. 🔐 How to Get Your API Key for the Competitor Keyword Analysis API Go to 👉 Competitor Keyword Analysis API Click "Subscribe to Test" (you may need to sign up or log in). Choose a pricing plan (there’s a free tier for testing). After subscribing, click on the "Endpoints" tab. Your API Key will be visible in the "x-rapidapi-key" header. 🔑 Copy and paste this key into the httpRequest node in your workflow. Create your free n8n account and set up the workflow in just a few minutes using the link below: 👉 Start Automating with n8n
by Evoort Solutions
🔍 SERP Keyword Ranking Checker with RapidAPI & Google Sheets Automate keyword SERP ranking lookups and log the data into Google Sheets using this no-code n8n workflow. Perfect for SEO professionals, digital marketers, or anyone tracking keyword visibility across regions. 🧰 Tools Used SERP Keyword Ranking Checker API – Fetch real-time keyword SERP data Google Sheets** – Log keyword data for tracking, analysis, or client reporting 📌 Workflow Overview User submits a keyword and country code via an n8n form Workflow sends a request to the SERP Keyword Ranking Checker API API response is checked: If valid data is found, it is logged to Google Sheets If no results are found, a fallback message is saved instead Optional delays added to space out operations ⚙️ Node-by-Node Breakdown 1. 🟢 Form Trigger: On form submission Accepts user input for: keyword (e.g. "labubu") country (e.g. "us") 2. 📦 Set Node: Global Storage Stores form input into variables (keyword, country) for use in API requests and logging. 3. 🌐 HTTP Request: SERP Keyword Ranking Checker Sends a POST request to the SERP Keyword Ranking Checker API with: keyword country Includes headers: x-rapidapi-host: serp-keyword-ranking-checker.p.rapidapi.com x-rapidapi-key: YOUR_RAPIDAPI_KEY 4. ⚖️ If Node: Condition Checking Checks whether the serpResults array returned by the API is non-empty. ✅ True Branch: Proceeds if valid SERP data is available. ❌ False Branch: Proceeds if no SERP data is returned (e.g., empty result). 5. ⏳ Wait Node: 5-Second Delay Adds a 5-second delay before proceeding to Google Sheets insertion. This helps control execution pace and ensures API rate limits or spreadsheet latency is handled smoothly. Used on both True and False branches for consistency. 6. 📊 Google Sheets (Success Path) Appends a new row into the selected Google Sheet with: Keyword – the submitted keyword Country – selected country code Json data – full serpResults JSON array returned by the API 💡 Ideal for tracking keyword rankings over time or populating live dashboards. 7. 📊 Google Sheets (Failure Path) Appends a fallback message into the Google Sheet when no SERP results are found. Keyword – the submitted keyword Country – selected country code Json data – "No result found. Please try another keyword..." 🔍 Helps maintain a log of unsuccessful queries for debugging or auditing. 💡 Use Cases SEO Audits** Automate keyword performance snapshots across different markets to identify opportunities and gaps. Competitor Analysis** Track keyword rankings of rival brands in real time to stay ahead of competition. Client Reporting** Feed live SERP data into dashboards or reports for transparent, real-time agency deliverables. Content Strategy** Discover which keywords surface top-ranking pages to guide content creation and optimization efforts. 🔑 How to Obtain Your API Key for SERP Keyword Ranking Checker API Sign Up or Log In Visit RapidAPI and create a free account using your email or social login. Go to the API Page Navigate to the SERP Keyword Ranking Checker APi. Subscribe to the API Click Subscribe to Test, then choose a pricing plan that fits your needs (Free, Basic, Pro). Get Your API Key After subscribing, go to the Security tab on the API page to find your X-RapidAPI-Key. Use Your API Key Add the API key to your HTTP request headers: X-RapidAPI-Key: YOUR_API_KEY Create your free n8n account and set up the workflow in just a few minutes using the link below: 👉 Start Automating with n8n
by WeblineIndia
This workflow sends a “Join in 10” Slack ping to each interviewer shortly before their interview starts. It checks the Interviews Google Calendar every minute, finds interviews starting in the next LEAD_MINUTES (default 10), and sends a Slack DM with the candidate name, role, local start time, meeting link, and any CV: / Notes: links present in the event description. If the Slack user can’t be found by email, it posts to a fallback channel (default #recruiting-alerts) with an @‑style email mention. A Data Store prevents duplicate pings for the same event + attendee. Who’s It For Interviewers who prefer a timely Slack nudge instead of calendar alerts. Recruiting coordinators who want consistent reminders without manual follow‑ups. Teams that include links directly in the calendar event description. How It Works Cron (every minute) polls near‑term events so pings arrive about 10 minutes before start. Google Calendar (Interviews) fetches upcoming events. Prepare pings filters interviews starting in ≤ LEAD_MINUTES, creates one item per internal attendee (company domain), and extracts meeting/CV/Notes links. Data Store checks a ledger to avoid re‑notifying the same event+attendee. Slack looks up the user by email and sends a DM with Block Kit buttons; otherwise posts to the fallback channel. Data Store records that the ping was sent. Attendees marked declined are skipped; accepted, tentative, and needsAction are included. How To Set Up Ensure interviews are on the Interviews Google Calendar and that interviewers are added as attendees. In each event’s description, optionally add lines like CV: https://... and Notes: https://.... Import the workflow and add credentials: Google Calendar (OAuth) Slack OAuth2 with users:read.email, chat:write, and im:write Open Set: Config and confirm: CALENDAR_NAME = Interviews COMPANY_DOMAIN = weblineindia.com TIMEZONE = Asia/Kolkata LEAD_MINUTES = 10 FALLBACK_CHANNEL = #recruiting-alerts Activate the workflow. It will begin checking every minute. Requirements Google Workspace calendar access for Interviews. Slack workspace + an app with the scopes: users:read.email, chat:write, im:write. n8n (cloud or self‑hosted) with access to both services. How to Customize the Workflow Lead time:* Change LEAD_MINUTES in *Set: Config** (e.g., 5, 15). Audience:** Modify attendee filters to include/exclude tentative or needsAction. Message format:** Tweak the Block Kit text/buttons (e.g., hide CV/Notes buttons). Fallback policy:** Switch the fallback from channel post to “skip and log” if needed. Time windows:** Add logic to silence pings at night or only during business hours. Calendar name:* Update CALENDAR_NAME in *Set: Config** if you use a different calendar. Add-Ons to level up the Workflow with additional nodes Conflict detector:** Warn if an interviewer is double‑booked in the next hour. Escalation:** If no DM can be sent (no Slack user), also notify a coordinator channel. Logging:** Append each ping to Google Sheets/Airtable for audit. Weekday rules:** Auto‑mute on specific days or holidays via a calendar/lookup table. Follow‑up:** Send a post‑interview Slack message with the feedback form link. Common Troubleshooting No pings:** Ensure events actually start within the next LEAD_MINUTES and that attendees include internal emails (@weblineindia.com). Wrong recipients:** Verify interviewer emails on the event match Slack emails; otherwise it will post to the fallback channel. Duplicate pings:* Confirm the *Data Store** is configured and the workflow isn’t duplicated. Missing meeting link:** Add a proper meeting URL to the event description or rely on Google Meet/Zoom links detected in the event. Time mismatch:** Make sure TIMEZONE is Asia/Kolkata (or your local TZ) and calendar times are correct. Need Help ? If you’d like a hand adjusting filters, message formatting or permissions, feel free to reach out we'll be happy to help you get this running smoothly.
by Soumya Sahu
This workflow automatically syncs engagement metrics (Likes, Reposts, Replies) from BlueSky back to your content calendar in Google Sheets. It ensures your reporting is always up to date without manual data entry. Who is this for Great for social media managers, agencies, and creators who need to report on content performance or analyze which post topics are driving the most engagement. What it does The workflow uses a smart "Active Window" strategy to save API calls and ensure stability: Fetch:** Pulls rows from your Google Sheet that are marked as "Posted." Smart Filter:** Only processes posts published in the last 14 days (catching viral spikes while ignoring old archived content). Safe Updates:** Queries the BlueSky API for the latest stats. If a post has been deleted, it handles the error gracefully instead of breaking the workflow. Sync:** Updates the Like Count, Repost Count, and Reply Count columns in your sheet. How to set up Google Sheet: Ensure your sheet has these columns: Post Link, Posted At, Like Count, Repost Count, Reply Count. (A sample Google Sheet link is provided inside the workflow notes). Credentials: Enter your BlueSky Handle and App Password in the "Configuration" node. Select Sheet: In both the "Get row(s)" and "Update row" nodes, select your specific Google Sheet. Schedule: Set the trigger to run once daily (e.g., at 9 AM). 🚀 The BlueSky Growth Suite This workflow is part of a 3-part automation suite designed to help you grow on BlueSky: Part 1: Post Scheduler** (Manage content from Google Sheets) Part 2: Analytics Tracker** (This template) Part 3: Lead Magnet Bot** (Auto-DM users who reply to your posts)
by Avkash Kakdiya
How it works This workflow synchronizes support tickets in Freshdesk with issues in Linear, enabling smooth collaboration between support and development teams. It triggers on new or updated Freshdesk tickets, maps fields to Linear’s format, and creates linked issues through Linear’s API. Reverse synchronization is also supported, so changes in Linear update the corresponding Freshdesk tickets. Comprehensive logging ensures success and error events are always tracked. Step-by-step 1. Trigger the workflow New Ticket Webhook** – Captures new Freshdesk tickets for issue creation. Update Ticket Webhook** – Detects changes in existing tickets. Linear Issue Updated Webhook** – Listens for updates from Linear. 2. Transform and map data Map Freshdesk Fields to Linear** – Converts priority, status, title, and description for Linear. Map Linear to Freshdesk Fields** – Converts Linear state, priority, and extracts ticket ID for Freshdesk updates. 3. Perform API operations Create Linear Issue** – Sends GraphQL mutation to Linear API. Check Linear Creation Success** – Validates issue creation before linking. Link Freshdesk with Linear ID** – Updates Freshdesk with Linear reference. Update Freshdesk Ticket** – Pushes Linear updates back to Freshdesk. 4. Manage logging and errors Log Linear Creation Success** – Records successful ticket-to-issue sync. Log Linear Creation Error** – Captures and logs issue creation failures. Log Freshdesk Update Success** – Confirms successful reverse sync. Log Missing Ticket ID Error** – Handles missing ticket reference errors. Why use this? Keep support and development teams aligned with real-time updates. Eliminate manual ticket-to-issue handoffs, saving time and reducing errors. Maintain full visibility with detailed success and error logs. Enable bidirectional sync between Freshdesk and Linear for true collaboration. Improve response times by ensuring both teams always work on the latest data.
by Geoffroy
Meta long-lived user tokens typically expire after ~60 days. If a token expires, any workflows that rely on it start failing. Manual renewal is easy to forget and time consuming. This template monitors the token you store in an n8n Data Table and refreshes it automatically before expiration, so your social automations keep running without surprises or late-night fire drills. Who’s it for Agencies, marketing team, creators managing Meta apps or scheduled social automations Anyone tired of “token expired” errors breaking flows at 2 a.m. How it works / What it does Triggers: scheduled every 10 days, plus a Manual Trigger for testing. Reads: pulls the current token row from your "Meta credential" Data Table (fields: token and expires_at). Decides: IF the token expires in ≤ 15 days, proceed to renewal; otherwise do nothing. Calls the Graph API to get a new access token Updates: computes the new ISO expires_at from expires_in and writes the fresh token + expires_at back to the Data Table. Note: Meta typically issues ~60-day long-lived tokens; confirm for your app. Requirements A Meta app with an initial (short-lived or long-lived) user access token n8n Data Tables enabled (you might need to update your instance to see the option) and a table named "Meta credential" with: ** token (string) ** expires_at (datetime) How to set up Create the data table: name it "Meta credential" with columns "token" and "expires_at". Insert one row with your current token and its expiration date. Configure the IF node "Needs renewal?": keep (or tweak) the 15-day threshold logic. Run once with the Manual Trigger to validate, then enable the Schedule Trigger (10-day cadence by default). How to customize the workflow Change the Schedule Trigger interval and hour. Notify on renewal: Add a Slack/Email node after "Update Record" to alert on token refreshes.
by KlickTipp
> ⚠️ Community Node Disclaimer > This workflow uses KlickTipp community nodes and works only on self-hosted n8n instances. Introduction Automate attendance tracking for Eventbrite events and sync participation data to KlickTipp. Every 15 minutes, this workflow retrieves attendees, checks who attended, and applies the right segmentation tags. Perfect for event marketers who want real-time post-event segmentation—no manual exports needed. Who’s it for For event organizers, digital marketers, and KlickTipp users who already sync Eventbrite registrants and want to automatically track attendance and update CRM tags. > 💡 Prerequisite: Contacts must exist in KlickTipp. > Use the related workflow “Subscribe Eventbrite orders to KlickTipp” to import registrants first. How it works Schedule Trigger runs every 15 min. Eventbrite API fetches the latest attendees. Split Out processes each record. Switch (Attendance Check) evaluates checked_in: ✅ Checked in → Eventbrite | Participated ❌ Not checked in → Eventbrite | Not participated KlickTipp Nodes apply tags automatically. Segmentation in KlickTipp updates instantly. Requirements Self-hosted n8n (community node support) Eventbrite account (OAuth2) KlickTipp account (API access) Tags in KlickTipp: Eventbrite | Participated Eventbrite | Not participated How to set up Connect accounts: Eventbrite (OAuth2) & KlickTipp (API). Set Event ID: edit Eventbrite node URL → /events/{event_id}/attendees/. Update Tag IDs: replace with your KlickTipp IDs. Test: run manually or wait for trigger; verify correct tags. > ⚠️ Important: Eventbrite must record check-ins via the Organizer App or barcode scan for accurate tagging. How to customize Adjust trigger frequency (e.g., 5 min during event). Duplicate for multiple events. Extend logic for ticket type, VIP, or refunds. Combine with Eventbrite Order Sync for a full funnel: Registration → Participation → Refund. Campaign expansion ideas Refund tagging:** detect refunded: true and tag accordingly. Post-event automation:** Participated → thank-you or upsell sequence. Not participated → replay or follow-up invite. Performance insights:** use tags for segmentation analytics and ROI tracking.