by Trung Tran
Automated SSL/TLS Certificate Expiry Report for AWS > Automatically generates a weekly report of all AWS ACM certificates, including status, expiry dates, and renewal eligibility. The workflow formats the data into both Markdown (for PDF export to Slack) and HTML (for email summary), helping teams stay on top of certificate compliance and expiration risks. Who’s it for This workflow is designed for DevOps engineers, cloud administrators, and compliance teams who manage AWS infrastructure and need automated weekly visibility into the status of their SSL/TLS certificates in AWS Certificate Manager (ACM). It's ideal for teams that want to reduce the risk of expired certs, track renewal eligibility, and maintain reporting for audit or operational purposes. How it works / What it does This n8n workflow performs the following actions on a weekly schedule: Trigger: Automatically runs once a week using the Weekly schedule trigger. Fetch Certificates: Uses Get many certificates action from AWS Certificate Manager to retrieve all certificate records. Parse Data: Processes and reformats certificate data (dates, booleans, SANs, etc.) into a clean JSON object. Generate Reports: 📄 Markdown Report: Uses the Certificate Summary Markdown Agent (OpenAI) to generate a Markdown report for PDF export. 🌐 HTML Report: Uses the Certificate Summary HTML Agent to generate a styled HTML report for email. Deliver Reports: Converts Markdown to PDF and sends it to Slack as a file. Sends HTML content as a formatted email. How to set up Configure AWS Credentials in n8n to allow access to AWS ACM. Create a new workflow and use the following nodes in sequence: Schedule Trigger: Weekly (e.g., every Monday at 08:00 UTC) AWS ACM → Get many certificates Function Node → Parse ACM Data: Converts and summarizes certificate metadata OpenAI Chat Node (Markdown Agent) with a system/user prompt to generate Markdown Configure Metadata → Define file name and MIME type (.md) Create document file → Converts Markdown to document stream Convert to PDF Slack Node → Upload the PDF to a channel (Optional) Add a second OpenAI Chat Node for generating HTML and sending it via email Connect Output: Markdown report → Slack file upload HTML report → Email node with embedded HTML Requirements 🟩 n8n instance (self-hosted or cloud) 🟦 AWS account with access to ACM 🟨 OpenAI API key (for ChatGPT Agent) 🟥 Slack webhook or OAuth credentials (for file upload) 📧 Email integration (e.g., SMTP or SendGrid) 📝 Permissions to write documents (Google Drive / file node) How to customize the workflow Change report frequency**: Adjust the Weekly schedule trigger to daily or monthly as needed. Filter certificates**: Modify the function node to only include EXPIRED, IN_USE, or INELIGIBLE certs. Add tags or domains to include/exclude. Add visuals**: Enhance the HTML version with colored rows, icons, or company branding. Change delivery channels**: Replace Slack with Microsoft Teams, Discord, or Telegram. Send Markdown as email attachment instead of PDF. Integrate ticketing**: Create a JIRA/GitHub issue for each certificate that is EXPIRED or INELIGIBLE.
by Raymond Camden
How It Works This N8N template demonstrates using Foxit's Extraction API to get information from an incoming document and then using Diffbot's APIs to turn the text into a list of organizations mentioned in the document and create a summary. How it works Listen for a new file added to a Google Drive folder. When executed, the bits are downloaded. Upload the bits to Foxit. Call the Extract API to get the text contents of the document. Poll the API to see if it's done, and when it is, grab the text. Send the text to Diffbot API to get a list of entities mentioned in the doc as well as the summary. Use a code step to filter the entities returned from Diffbot to ones that are organizations, as well as filtering to a high confidence score. Use another code step to make an HTML string from the previous data. Email it using the GMail node. Requirements A Google account for Google Drive and GMail Foxit developer account (https://developer-api.foxit.com) Diffbot developer account (https://app.diffbot.com/get-started) Next Steps This workflow assumes PDF input, but Foxit has APIs to convert Office docs to PDF and that flow could be added before the Extract API is called. Diffbot returns an incredible set of information and more could be used in the email. Instead of emailing, you could sort documents by organizations into new folders.
by Alex
This workflow contains community nodes that are only compatible with the self-hosted version of n8n. This n8n template automatically parses bank transaction emails (HDFC, Indian Bank, Indian Overseas Bank, UPI apps like Google pay, Paytm, etc.) - The from email(bank name/UPI apps) is changable, classifies them using Gemini AI, and logs them into a structured Google Sheets budget tracker. It helps you consolidate expenses, compare against monthly budgets, and get real-time alerts when limits are exceeded. 📝 Problem Statement Tracking expenses manually from different bank emails and UPI apps is frustrating, time-consuming, and error-prone. Small transactions often slip through, making budget control difficult. This workflow solves that by: Automatically extracting financial data from Gmail. Categorizing expenses using AI parsing. Saving all data into Google Sheets in a structured way. Comparing with monthly budgets and raising alerts. Target Audience: Individuals who want personal budget automation. Families managing shared household spending. Small teams looking for a lightweight financial log. ⚙️ Setup Prerequisites An n8n instance (self-hosted or cloud). A Google account with Gmail + Google Sheets enabled. Pre-created Google Sheets file with 2 tabs: Expenses Budgets A configured Gemini API connection in n8n. 📊 Google Sheets Template Expenses Tab (columns in order): Timestamp | Date | Account | From | To | Type | Category | Description | Amount | Currency | Source | MessageId | Status Budget Tab (columns in order): Month | Category | Budget Amount | Notes | UpdatedAt Yearly Summary Tab (auto-calculated): Year | Month | Category | Total Expense | Budget | Variance | Alert Variance = Budget - Total Expense Alert = ⚠️ Over Budget when spending > budget 🚀 How It Works Gmail: Gmail Trigger captures new bank/UPI emails. Gemini AI Parser extracts structured details (date, amount, category, etc.). Filter Node ensures only valid financial transactions are logged. Information extractor will extract the information like Date, account, transaction type(Credit/Debit), description, currency, status, messageId, from email, to email, category -> checks if the transaction is 'Credit' or 'Debit' then appends the details to the respective google sheet Budget Validator checks against monthly allocations. If the expense is above the budget is raises an alert and will send a email to the connected account. For sending email I wrote a Google Sheet App script: var ss = SpreadsheetApp.getActiveSpreadsheet(); var monthly = ss.getSheetByName("MonthlySummary"); var yearly = ss.getSheetByName("YearlySummary"); // Get values from Monthly Summary var totalExpense = monthly.getRange("D2").getValue(); var budget = monthly.getRange("E2").getValue(); // Get current date info var now = new Date(); var month = Utilities.formatDate(now, "GMT+5:30", "MM"); var year = Utilities.formatDate(now, "GMT+5:30", "yyyy"); var status = (totalExpense > budget) ? "Alert" : ""; // Append to Yearly Summary yearly.appendRow([year, month, totalExpense, status]); // If budget exceeded, send alert email if (status === "Alert") { var emailAddress = "YOUR EMAIL"; var subject = "⚠️ Budget Exceeded - " + month + "/" + year; var body = "Your total expenses this month (" + totalExpense + ") have exceeded your budget of " + budget + ".\n\n" + "Please review your spending."; MailApp.sendEmail(emailAddress, subject, body); } // 🔄 Reset Monthly Summary var lastRow = monthly.getLastRow(); if (lastRow > 3) { // assuming headers in first 2-3 rows monthly.getRange("A4:C" + lastRow).clearContent(); } // Reset total in D2 monthly.getRange("D2").setValue(0); } Monthly summary auto-calculates the expense and updates the expense for every month and budgets(sum all budgets if there are more than 1 budgets). Yearly Summary auto-updates and raises over-budget alerts. Telegram: Takes input from a telegram bot which is connected to the n8n workflow telegram trigger. Gemini AI Parser extracts structured details (date, amount, category, etc.). Then it checks, whether the manually specified details is 'budget' or 'expense', then splits the data -> parse the data -> then again check whether it is 'Budget' or 'Expense' then appends the structured data to the respective google sheet. Monthly summary auto-calculates the expense and updates the expense for every month and budgets(sum all budgets if there are more than 1 budgets). Yearly Summary auto-updates and raises over-budget alerts. 🔧 Customization Add support for more banks/UPI apps by extending the parser schema. const senderEmail = $input.first().json.From || ""; // Account detection let account = ""; // you can modify the bank names and UPI names here if (/alerts@hdfcbank\.net/i.test(senderEmail)) account = "HDFC Bank"; // you can modify the bank names and UPI names here else if (/ealerts@iobnet\.co\.in/i.test(senderEmail)) account = "Indian Overseas Bank"; else if (/alerts@indianbank\.in/i.test(senderEmail)) account = "Indian Bank"; else if (/@upi|@okhdfcbank|@okaxis|@okicici/i.test(emailBody)) { if (/gpay|google pay/i.test(emailBody)) account = "Google Pay"; else if (/phonepe/i.test(emailBody)) account = "PhonePe"; else if (/paytm/i.test(emailBody)) account = "Paytm"; else account = "UPI"; } else { account = "Other"; } // If account is "Other", skip output if (account === "Other") { return []; } // Output return [{ account, from: senderEmail, // exact Gmail "From" metadata snippet: emailBody, messageId: $input.first().json.id || "" }]; Create custom categories (e.g., Travel, Groceries, Subscriptions). Send real-time alerts via Telegram/Slack/Email using n8n nodes. Share the Google Sheet with family or team for collaborative use. 📌 Usage The workflow runs automatically on every new Gmail transaction email and financial input on the telegram bot. At the end of each month, totals are calculated in the Yearly Summary tab. Users only need to maintain the Budget tab with updated monthly allocations.
by WeblineIndia
Zoho CRM → AI‑Generated Competitive Battle Card This workflow automatically analyzes competitor websites, which inseted in description field and generates a clean, structured AI‑powered Battle Card for every new Zoho CRM deal. It reads the competitor URL from the deal Description, scrapes the site, runs an AI analysis pipeline and updates the deal with pricing, differentiators, pros/cons and a concise sales battle summary — all fully automated. Quick Implementation Steps Add Zoho CRM + Gmail OAuth2 + AI API credentials. Import workflow into n8n. create a new deal in zoho CRM. While creating Deal,Add a competitor URL inside the Zoho deal Description. Activate the workflow. Wait 5 minutes → Deal updates with AI‑generated Battle Card. What It Does This workflow removes the manual effort of researching competitors during a sales cycle. Every time a new deal is created, it checks the Description field for a competitor name and website. After validating both, it automatically fetches the competitor webpage and feeds the content into an AI analysis pipeline powered by LangChain. The AI transforms the messy, unstructured webpage HTML into a readable, structured and ready‑to‑use Battle Card — including pricing overview, differentiating features, advantages, disadvantages and a compact sales battle summary. This data is pushed directly into the Deal Description and emailed to the sales team. No web research, no copy‑pasting, no manual formatting — the AI does everything. Who’s It For Sales teams wanting fast competitor intelligence. SDR/BDR teams prepping before first calls. Pre‑sales engineers making pitch notes. Founders/Product teams monitoring competitor positioning. Agencies building automation for CRM users. Requirements n8n instance Zoho CRM OAuth2 credentials Gmail OAuth2 credentials AI model provider API key (Gemini / OpenAI / Claude — interchangeable) Deals containing a competitor name + competitor URL [Must Have] How It Works & Setup Step 1 — Cron Trigger Runs every 5 minutes → pulls newly created deals and last run time. Step 2 — Fetch Deals Retrieves deals sorted by Created_Time. Step 3 — Identify New Deals Filters deals created after the last workflow run. Step 4 — Validate Deal Description Ensures the Description has: Competitor name Competitor website URL Step 5 — Extract Competitor Info Regex identifies and extracts the name + first valid URL in the Description. Step 6 — Scrape Competitor Website HTTP Request downloads the competitor webpage’s HTML. Step 7 — AI‑Generated Battle Card Creation The AI pipeline (LangChain + your chosen LLM) transforms HTML into a structured JSON output containing: Pricing Summary Key Features Pros Cons Battle Summary Competitor Name Step 8 — Update Zoho Deal The script saves the formatted AI Battle Card directly into the Deal Description. Step 9 — Notify Sales Gmail node sends a summary email to the sales team. How to Customize Nodes Change the AI Output Edit LangChain prompt to: Add SWOT Include pricing tiers Include objections Add competitor positioning Add risk scoring Change Where Battle Card Is Stored Modify the Zoho Update node to store data in: Notes Custom fields Attachments Tags Tasks Email Customization Update subject, body, recipients, etc. Filtering Logic Modify filters to: Only process specific deal stages Only process certain pipelines Ignore internal test deals Add‑Ons (Optional Enhancements) Auto‑generate a PDF Battle Card and attach it to the deal. Send Battle Cards to Slack, Teams, or a WhatsApp bot. Store all Battle Cards in Notion, Airtable, or Google Sheets. Add a competitor scoring system (price, features, risk level). Build a weekly digest of all competitors analyzed. Use Case Examples Instant competitor breakdown when a new lead or deal is created. Rapid sales call preparation with AI summarizing the competition. Automated enrichment of CRM records with meaningful intelligence. Internal competitive intelligence dashboards fed by AI outputs. Pitch deck automation where Battle Cards update slides automatically. There are many more possible use cases depending on your CRM setup and AI strategy. Troubleshooting Guide | Issue | Possible Cause | Solution | |-------|----------------|----------| | No Battle Card generated | No URL found in Description | Add valid http/https competitor URL | | Deal skipped | Time filtering excluded it | Adjust lookback window in code | | AI output incomplete | HTML unreadable or blocked | Try different competitor URL | | Zoho update fails | OAuth scope missing | Reconnect Zoho with full CRM access | | Email not sent | Gmail OAuth expired | Reconnect Gmail | | AI output wrong format | Prompt mismatched | Update output schema and prompt | Need Help? If you need help customizing prompts, enhancing automations or building full‑scale AI workflows, then our n8n automation developers at WeblineIndia can support: AI automations LangChain pipelines CRM integrations n8n workflow development Competitive intelligence tooling And so much more.
by Atharva
🧾 AI Proposal Generator Engine An n8n-based automation that generates client proposals from a form, lets you review everything in one place, and sends the proposal only when you approve it. ⚙️ What It Does The AI Proposal Generator Engine creates proposals directly from an n8n Form. All proposal content and a draft email are generated automatically using OpenAI. Google Sheets is used only as a database, where you: Review the generated proposal Review the draft email Control when the proposal is sent by updating the status No proposal is sent until it is manually marked as READY. 💡 Use Cases | Use Case | Description | | --------------------- | ---------------------------------------------------------- | | Sales Calls | Generate proposals immediately after a call using the form | | Freelancers | Create clean, repeatable proposals without manual writing | | Agencies | Standardize proposals while keeping them client-specific | | Approval Flow | Review proposal and email before sending | | Fast Turnaround Deals | Reduce proposal creation time from hours to minutes | | Team Workflows | Use Sheets as a simple approval and tracking layer | 🔧 Setup 1️⃣ Google Credentials Go to Google Cloud Console and create a Web App (OAuth). Enable these APIs: Google Sheets Google Drive Gmail In n8n, select this Google credential inside: Google Sheets nodes Google Drive nodes Gmail nodes Use the same credential everywhere. 2️⃣ Google Drive Structure Create this folder setup in Google Drive. You can use the provided templates or your own. Proposal Generator Engine/ ├── Template 1 (Slides) ├── Template 2 (Slides) ├── Template 3 (Slides) ├── Proposal Generation Tracker (Sheets) └── Generated Proposals/ 3️⃣ Google Sheets Node Open the Proposal Generation Tracker and copy the Sheet ID from the URL. Paste this ID into the Google Sheets node in n8n. This sheet is used only to: Store generated proposal links Store email drafts Control send status 4️⃣ Slides and Drive Nodes Copy the Slides template ID you want to use and paste it into the Copy Template node. Copy the folder ID of Generated Proposals and paste it into the Move File / Folder field. 5️⃣ OpenAI Key Create an OpenAI credential in n8n using your API key. Select this credential in all GPT nodes. You can edit prompts to match your proposal style and tone. 🔁 Workflow Summary Proposal details are collected using an n8n Form OpenAI generates structured proposal content A Google Slides template is copied and filled A proposal email draft is generated Proposal link and email draft are saved in Google Sheets with status WAITING You review the proposal and email Status is changed to READY Proposal is converted to PDF and sent via Gmail Proposal is stored in Google Drive and status is updated to SENT 📞 Support & Contact 📧 Email: atharvapj5@gmail.com 🔗 LinkedIn: https://www.linkedin.com/in/atharva-jaiswal/ 📅 Book a support call: https://calendly.com/atharvapj5/30min
by Oneclick AI Squad
This workflow ingests student profiles from a form submission or CRM, loads the active scholarship catalogue, uses Claude AI to score each student's eligibility against every available scholarship, filters strong matches, and automatically notifies eligible candidates with personalised application guidance. How it works Trigger — Form submission webhook or nightly scheduled batch run Load Student Profile — Fetches or normalises the student's academic and personal data Load Scholarship Catalogue — Pulls active scholarships from Airtable / Google Sheets Pair Students × Scholarships — Builds evaluation pairs for AI scoring AI Eligibility Scoring — Claude AI scores fit, flags eligibility, ranks scholarships Parse & Rank Results — Extracts structured scores, sorts by match strength Filter Qualified Matches — Keeps scholarships above configurable match threshold Check Deadline Urgency — Flags scholarships closing within 14 days Personalise Notification — Builds tailored email per student with top matches Send Student Email — Dispatches personalised scholarship digest Notify Advisor on Slack — Alerts academic advisor for high-value matches Update CRM Record — Writes matched scholarships back to Airtable student record Log to Audit Sheet — Appends full match report to Google Sheets Return API Response — Returns structured match results to caller Setup Steps Import workflow into n8n Configure credentials: Anthropic API — Claude AI for eligibility scoring Airtable — Student profiles and scholarship catalogue Google Sheets — Audit and match history log Slack OAuth — Academic advisor notifications SendGrid / SMTP — Student notification emails Set your Airtable base ID and table names for students and scholarships Configure match threshold (default: 70) in filter node Set urgency window (default: 14 days) in deadline check node Add your Slack advisor channel ID Activate the workflow Sample Webhook Payload { "studentId": "STU-2025-4821", "firstName": "Priya", "lastName": "Sharma", "email": "priya.sharma@university.edu", "gpa": 3.8, "major": "Computer Science", "yearOfStudy": 2, "nationality": "Indian", "residencyStatus": "International", "financialNeed": true, "extracurriculars": ["Robotics Club", "Volunteer Tutor"], "achievements": ["Dean's List 2024", "Hackathon Winner"], "intendedCareer": "AI Research", "disabilities": false, "firstGenStudent": true } Scholarship Criteria Evaluated by Claude AI Academic Merit** — GPA, honours, academic awards Field of Study** — Major/discipline alignment Financial Need** — Demonstrated need indicators Demographic Eligibility** — Nationality, residency, gender, Indigenous status Year of Study** — Undergraduate, postgraduate, PhD level Extracurricular Profile** — Leadership, community service, sports Career Alignment** — Intended career path vs scholarship mission Special Circumstances** — First-gen, disability support, regional background Features Batch processing of entire student cohort nightly AI-powered multi-criteria eligibility scoring (0–100) Deadline urgency detection and priority flagging Personalised email with ranked scholarship list and tips Academic advisor Slack digest for high-value matches Full audit trail in Google Sheets Airtable CRM auto-update with matched scholarships Explore More Automation: Contact us to design AI-powered content engagement, and multi-platform reply workflows tailored to your growth strategy.
by Davide
This workflow automates the process of receiving a post-call audio file and transcription from ElevenLabs, processing them, and generating a financial risk report. Key Advantages 1. ✅ End-to-End Automation The workflow fully automates the process from raw input (audio/transcript) to final delivery (email report), eliminating manual intervention. 2. ✅ AI-Powered Decision Making It leverages language models to: Analyze qualitative interview responses Convert them into quantitative scores Produce consistent and objective evaluations 3. ✅ Structured Data Extraction Automatically extracts critical business information, reducing human error and ensuring standardized outputs. 4. ✅ Scalability The webhook-based architecture allows the system to handle large volumes of interviews in parallel without additional effort. 5. ✅ Modular & Extensible Design Each step (audio processing, extraction, scoring, reporting) is modular, making it easy to: Replace models Add new analysis layers Integrate additional services 6. ✅ Professional Output Generation Generates clean, ready-to-send HTML reports compatible with email clients, improving communication with stakeholders. 7. ✅ Data Traceability & Storage Audio files are stored in Google Drive, ensuring: Auditability Easy retrieval of original data 8. ✅ Consistency & Standardization The evaluation logic ensures that all interviews are assessed using the same criteria, reducing subjective bias. How it works Receiving and Routing Data: The workflow starts with a Webhook that listens for incoming data from ElevenLabs. A Switch node then routes the data based on the body.type field. Post Call Audio: If the type is post_call_audio, the workflow processes the audio. Post Call Transcription: If the type is post_call_transcription, the workflow processes the transcription. Audio Processing Path: For an audio file, a Code node extracts the Base64 audio data and the conversation_id from the webhook payload. It converts the Base64 string into a binary audio buffer (MP3). This binary data is then passed to a Google Drive node, which uploads the file to a specified folder (the user's root folder). Transcription Processing Path: For a transcription, a Set node extracts the transcript array from the payload. A subsequent Code node processes this array, combining all messages from the conversation into a single, readable full text string, prefixed by the speaker's role. Data Enrichment and Analysis: The full transcript text is then used by two nodes in parallel: Information Extractor: This LangChain node uses an OpenAI model (gpt-5-mini) to extract structured data from the text, specifically the company_name, the CEO's name, the address, and the vat_number. Calculate Rating: This LangChain node uses another OpenAI model to perform a quantitative evaluation. It follows a provided system prompt to assign a numerical score, a final verdict (POSITIVE/NEUTRAL/NEGATIVE), and a reason based on the interviewee's responses. Its output is parsed by a Structured Output Parser to ensure it is valid JSON. Report Generation and Delivery: The outputs from the Information Extractor and Calculate Rating nodes are merged into a single data object. This object is passed to the Financial Report Generator, a final LangChain node that acts as a professional analyst. Using the merged data (company details, score, verdict, etc.), it generates a polished, formatted HTML email body. Finally, a Gmail node sends this HTML report as an email to the specified recipient. Set up steps Configure Credentials: OpenAI: Set up an OpenAI API credential for the three language model nodes. Ensure it has access to the gpt-5-mini model. Google Drive: Configure OAuth2 credentials for the "Upload audio" node to allow file uploads. Gmail: Set up OAuth2 credentials for the "Send report" node. Configure Webhook: Note the webhook ID and path. This URL must be configured in ElevenLabs to send post-call data to this n8n instance. Update Node Parameters: Google Drive: Modify the "Upload audio" node if the target folder (folderId) is not the root. Information Extractor: The extraction attributes (company, name, address, VAT) are pre-configured. No changes are needed unless the target data fields change. Gmail: Update the Gmail node with the recipient email address (xxx@xxx.com) and verify the email subject line formatting. Activate Workflow: Once all credentials and parameters are set, toggle the workflow from active: false to active: true in the n8n editor to start listening for webhook calls. 👉 Subscribe to my new YouTube channel. Here I’ll share videos and Shorts with practical tutorials and FREE templates for n8n. Need help customizing? Contact me for consulting and support or add me on Linkedin.
by Dean Pike
LinkedIn URL → Scrape → Match → Screen → Decide, all automated This workflow automatically processes candidate LinkedIn profiles shared via Telegram, intelligently matches them to job descriptions, performs AI-powered screening analysis, and sends actionable summaries to your team in Telegram. Good to know Handles LinkedIn profile scraping via Apify API (extracts full profile data including experience, education, skills) Built-in spam prevention: limits users to 3 LinkedIn profile submissions Two-stage JD matching: prioritizes role mentioned in candidate's Telegram message, falls back to LinkedIn profile analysis if needed Uses Google Gemini API for AI screening (generous free tier and rate limits, typically enough to avoid paying for API requests - check latest pricing at Google AI Pricing and rate limits documentation) Automatic polling mechanism checks Apify extraction status up to 10 times (15-second intervals) Complete audit trail logged in Google Sheets with unique submission IDs Who's it for Hiring teams and recruiters who want to streamline first-round screening for candidates who share LinkedIn profiles directly. Perfect for companies accepting applications via messaging platforms (Telegram, WhatsApp, etc.), especially useful fortech-savvy audiences and remote/global hiring. How it works Telegram bot receives message containing LinkedIn profile URL from candidate Validates URL format and checks spam prevention (max 3 submissions per Telegram username) Sends confirmation message to candidate and notifies internal talent team via Telegram group Extracts clean LinkedIn URL and initiates Apify scraping job Polls Apify API up to 10 times (15-second intervals) until profile extraction completes AI agent matches candidate to best-fit job description by analyzing Telegram message context first (if candidate mentioned a role), or LinkedIn profile content as fallback (selects up to 3 potential JD matches) If multiple JDs matched, second AI agent selects the single best fit based on detailed profile analysis AI recruiter agent analyzes LinkedIn profile against selected JD and generates structured screening report (strengths, weaknesses, risk/reward factors, overall fit score 0-10 with justification) Logs complete analysis to Google Sheets tracker with unique submission ID Sends formatted summary to Telegram group with candidate details, matched JD, and overall fit score Requirements Telegram Bot Token (Create bot via @BotFather) Apify account with API token (Sign up for free tier) Google Drive account (OAuth2) Google Sheets account (OAuth2) Google Gemini API key (Get free key here) Google Drive folder for Job Descriptions (as PDFs or Google Docs) Telegram group for internal talent team notifications How to set up Create Telegram bot and internal Telegram chat group with new bot: Message @BotFather on Telegram Send /newbot and follow instructions to create your bot Save the API token provided Create Telegram group chat and invite your new bot + invite the @GetIDs bot Note down the group chat ID (How to get group chat ID) Setup Apify: Sign up at Apify Get your API token from Settings Note: Free tier includes sufficient scraping credits for testing and production ($0.01 per successful LinkedIn profile enriched, a free monthly limit of $5.00) - LinkedIn profile scraper "actor" details Create Google Sheet: Create new sheet named "LinkedIn Profile AI Candidate Screening" Add columns: Submission ID, Date, LinkedIn Profile URL, First Name, Last Name, Email (if known), Telegram Username, Strengths, Weaknesses, Risk Factor, Reward Factor, JD Match, Overall Fit, Justification Copy the spreadsheet ID from URL Setup Google Drive folder: Create folder named "Job Descriptions" Upload your JD files (PDFs or Google Docs) with clear, descriptive filenames Copy the folder ID from URL Configure workflow nodes: In "Receive Telegram Msg to Recruiter Bot" node: Add Telegram API credentials In "Extract LinkedIn Profile Information" node: Replace YOUR_APIFY_API_TOKEN with your Apify token In "Check LinkedIn Profile Extraction Status" node: Replace YOUR_APIFY_API_TOKEN with your Apify token In "Get Fully Extracted LinkedIn Profile Data" node: Replace YOUR_APIFY_API_TOKEN with your Apify token In "Access JD Files" node: Update folder ID to your "Job Descriptions" folder In "Get All Rows Matching Telegram Username" node: Select your Google Sheet In "Add Candidate Analysis in GSheet" node: Select your Google Sheet and verify column mappings In "Send Msg to Internal Talent Group" node: Update chat ID to your Telegram group chat ID In "Send Review Completed Msg to Talent Group" node: Update chat ID and Google Sheet URL Add your company description: In "JD Matching Agent" system message: Replace company description with your details In "Detailed JD Matching Agent" system message: Replace company description with your details In "Recruiter Scoring Agent" system message: Update company description Test the workflow: Send a LinkedIn profile URL to your bot from Telegram Monitor execution to ensure all nodes run successfully Check Google Sheets for logged results Activate workflow Customizing this workflow Change spam limits: Edit "Spam Check: Sent <4 LinkedIn Profiles?" node to adjust maximum submissions (currently 3) Adjust polling attempts: Edit "Checked 10x for LinkedIn Profile Data?" node to change maximum polling attempts (currently 10) or modify wait time in "Wait for LinkedIn Profile" node (currently 15 seconds) Change JD matching logic: Edit "JD Matching Agent" node prompt to adjust how LinkedIn profiles are matched to roles (e.g., weight current role vs. overall experience) Modify screening criteria: Edit "Recruiter Scoring Agent" node system message to focus on specific qualities (culture fit, leadership potential, technical depth, industry experience, etc.) Add more messaging platforms: Add nodes to support WhatsApp, Discord, or other messaging platforms using similar URL-based triggers Customize Telegram messages: Edit notification nodes to change formatting, add emojis, or include additional candidate data Auto-proceed logic: Add IF node after screening to auto-proceed candidates with fit score above threshold (e.g., 8+/10) and trigger different notification paths Add candidate responses: Connect nodes to automatically message candidates back via Telegram (confirmation, rejection, interview invite) Add interview scheduling: For approved candidates, send Telegram message with Cal.com or Calendly link so they can book their interview Enrich with additional data: Add nodes to cross-reference candidate data with other sources (GitHub, Twitter/X, company websites) Multi-language support: Add translation nodes to support candidates submitting profiles in different languages Add human approval step: Create buttons in Telegram group messages for instant Approve/Reject decisions that update Google Sheets Pro tip: Add your Telegram bot to your company's careers page with instructions like: "Want fast-track screening? Share your LinkedIn profile with our AI recruiter: @YourBotName" Troubleshooting Telegram bot not responding: Ensure bot token is correct in "Receive Telegram Msg to Recruiter Bot" node, and users have sent /start to your bot at least once "LinkedIn profile URL invalid" error: Check that candidates are sending full URLs in format https://www.linkedin.com/in/username (not shortened links or text without URL) Apify extraction failing: Verify Apify API token is correctly set in all three HTTP Request nodes ("Extract LinkedIn Profile Information", "Check LinkedIn Profile Extraction Status", "Get Fully Extracted LinkedIn Profile Data") LinkedIn extraction timeout: Increase polling attempts in "Checked 10x for LinkedIn Profile Data?" node (currently 10) or increase wait time in "Wait for LinkedIn Profile" node (currently 15 seconds) Spam check blocking valid users: Check "Get All Rows Matching Telegram Username" node is pointing to correct Google Sheet, and adjust limit in "Spam Check: Sent <4 LinkedIn Profiles?" node if needed JD matching returns no results: Check "Access JD Files" node folder ID points to your Job Descriptions folder, and JD files are named clearly (e.g., "Marketing Director JD.pdf") JD matching is not relevant for my company: Update the "Company Description" in the System Messages in all three AI agent nodes ("JD Matching Agent", "Detailed JD Matching Agent", "Recruiter Scoring Agent") "Can't find matching JD": Ensure candidate's Telegram message mentions role name OR their LinkedIn profile clearly indicates relevant experience for available JDs Google Sheets errors: Verify sheet name is "LinkedIn Profile AI Candidate Screening" and column headers exactly match workflow expectations (Submission ID, Date, LinkedIn Profile URL, First Name, Last Name, etc.) Telegram group notifications not appearing: Verify chat ID is correct in "Send Msg to Internal Talent Group" and "Send Review Completed Msg to Talent Group" nodes (use negative number for group chats, e.g., -4954246611) Missing candidate data in Google Sheets: LinkedIn profile may be incomplete - verify Apify successfully extracted data by checking "Get Fully Extracted LinkedIn Profile Data" node output Loop counter not working: Check "Restore Loop Counter" code node references correct node names ("Checked 10x for LinkedIn Profile Data?" and "Initialize Loop Counter to Poll for Completion") 401/403 API errors: Re-authorize all OAuth2 credentials (Google Drive, Google Sheets) and verify Apify and Telegram API tokens are valid AI analysis quality issues: Edit system prompts in "JD Matching Agent", "Detailed JD Matching Agent", and "Recruiter Scoring Agent" nodes to refine screening criteria and provide more context about your hiring needs Gemini API rate limit errors: Check your usage at Google AI Studio and consider upgrading to paid tier if exceeding free tier limits (see rate limits documentation) Sample Outputs Google Sheets - LinkedIn AI Candidate Screening - sample Telegram messages between AI recruiter bot and job applicant Telegram messages from AI recruiter bot in internal group chat
by Gracewell
Who Is This For? This workflow is designed for educators, universities, examination departments, and EdTech institutions that need a faster, smarter, and standardized way to prepare exam question papers. What Problem Does This Solve? Creating balanced, outcome-based question papers can take hours or even days of manual effort. Faculty often struggle to: Ensure syllabus coverage across units Maintain Bloom’s Taxonomy alignment Keep a consistent difficulty balance Format papers in institution-specific templates How it works This workflow automatically generates an exam question paper based on syllabus topics submitted via a form and sends it to the entered email address. Here’s the flow in simple steps: Form Submission – A student or faculty fills out a form with subject code, syllabus topics, and their email. AI Question Generation – The workflow passes the syllabus to AI agents (Part A with 2 Marks, Part B with 13 Marks, and Part C with 14 Marks) to create question sets. The marks and the no. of question generated can be customized according to the convenience. Merging Questions – All AI-generated questions are combined into a single structured document. Format into HTML – The questions are formatted into a clean HTML exam paper (can also be extended to PDF). Send by Email– The formatted exam paper is sent to the user’s email (with option to CC/BCC). Set up steps Connect Accounts Connect your OpenAI (or LLM) credentials for AI-powered question generation. Connect your Gmail (or preferred email service) to send emails. Prepare Form Create an n8n form trigger with required fields: Subject with Code Syllabus for Unit 1, 2, 3… Email to receive the paper Customize Question Generation Modify the AI prompts for Parts A, B, and C to fit your syllabus style (e.g., 2-mark, 13-mark, 14-mark). Format the Exam Paper Adjust the HTML template to match your institution’s exam paper layout. Test & Deploy Submit a test form entry. Check the received email to ensure formatting looks good. Deploy the workflow to production for real usage. Need help customizing? ✉️ Contact Me 💼 LinkedIn
by Avkash Kakdiya
Quick Overview This workflow receives an HR offboarding webhook, validates and enriches the employee record, suspends the user in Google Workspace, deactivates the user in Slack, looks up the matching HubSpot contact, logs the event to Notion and Google Sheets, and notifies HR/IT via Gmail and Slack. How it works Receives a POST webhook from the HR system with employee offboarding details. Parses the payload to normalize key fields (name, email, department, manager, last day) and flags invalid requests. Posts an alert to a Slack IT channel when the record is invalid and stops further processing. Enriches valid records with an offboarding ID, risk level, revocation deadline, and an actions summary. Suspends the employee in Google Workspace via the Admin Directory API, deactivates the user in Slack via the Slack API, searches for the contact in HubSpot, and creates an offboarding entry in a Notion database. Combines the revocation results and appends a compliance log row to a Google Sheets “Offboarding Log” tracker. Emails an offboarding completion summary to the manager and HR using Gmail and posts a completion digest to the Slack IT channel. Setup Copy the n8n webhook URL from the HR offboarding webhook trigger and configure your HR system to POST the offboarding payload to it. Provide credentials/tokens for the Google Admin Directory API and Slack API (both used via HTTP requests) and replace the placeholder Bearer tokens in the request headers. Add a HubSpot App Token credential with access to search contacts. Create a Notion database for offboarding logs, add a Notion API integration, and set the Notion database ID and API key in the Notion request. Add Google Sheets OAuth credentials, set your Google Sheet ID, and ensure the “Offboarding Log” sheet contains the columns mapped in the append step. Add a Gmail connection for sending summary emails and set the target Slack channel ID for the invalid-record alert and IT ops digest messages.
by Yassin Zehar
Description This workflow continuously validates data quality using rules stored in Notion, runs anomaly checks against your SQL database, generates AI-powered diagnostics, and alerts your team only when real issues occur. Notion holds all data quality rules (source, field, condition, severity). n8n reads them on schedule, converts them into live SQL queries, and aggregates anomalies into a global run summary. The workflow then scores data health, creates a Notion run record, optionally opens a Jira issue, and sends a Slack/email alert including AI-generated root cause & recommended fixes. Target users Perfect for: DataOps Analytics Product Data BI Compliance ETL/ELT pipelines Platform reliability teams. Workflow steps How it works 1) Notion → Rules Database Each entry defines a check (table, field, condition, severity). 2) n8n → Dynamic Query Execution Rules are converted into SQL and checked automatically. 3) Summary Engine Aggregates anomalies, computes data quality score. 4) AI Diagnostic Layer Root cause analysis + recommended fix plan. 5) Incident Handling Notion Run Page + optional Slack/Email/Jira escalation. Silent exit when no anomaly = zero noise. Setup Instructions Create two Notion databases: Data Quality Rules → source / field / rule / severity / owner Data Quality Runs → run_id / timestamp / score / anomalies / trend / AI summary/recommendation Connect SQL database (Postgres / Supabase / Redshift etc.) Add OpenAI credentials for AI analysis Connect Slack + Gmail + Jira for incident alerts Set your execution schedule (daily/weekly) Expected outcomes Fully automated, rule-based data quality monitoring with minimal maintenance and zero manual checking. When everything is healthy, runs remain silent. When data breaks, the team is notified instantly: with context, root cause insight, and a structured remediation output. Tutorial video Watch the Youtube Tutorial video About me : I’m Yassin a Project & Product Manager Scaling tech products with data-driven project management. 📬 Feel free to connect with me on Linkedin
by PollupAI
Who's it for This template is for Customer Success and Sales teams who use HubSpot. It automates the critical handoff from sales to success, ensuring every new customer gets a fast, personalized welcome. It's perfect for anyone looking to standardize their onboarding process, save time on manual tasks, and improve the new customer experience using AI. What it does This workflow triggers when a deal's "Is closed won" property is set to True in HubSpot. It assigns a Customer Success Manager (CSM) by querying an n8n Data Table to find the 'least busy' CSM (based on a deal count) and fetches the deal's details to find all associated contacts. It then loops to identify the "Champion" contact by checking their "Buying Role" (hs_buying_role). An AI agent (in the AI: Write Welcome Email node) generates a personalized welcome email, which is converted to HTML and sent via Gmail. Finally, the workflow updates the Champion's contact record in HubSpot and updates the CSM's deal count in the Data Table to keep the logic in sync. How to set up Create and Populate Data Table: This template requires an n8n Data Table to manage CSM assignments. Create a Data Table named csm_assignments. Add two columns: csm_id (String) and deal_count (Number). Add one row for each CSM with their HubSpot Owner ID and a starting deal_count of 0. Link Data Table Nodes: Open the Get CSM List and Increment CSM Deal Count nodes and select the csm_assignments table you just created from the Table dropdown. Configure Variables: In the Configure Template Variables node, you must set your sender info (company_name, sender_name, and sender_email). Customize AI Prompt: In the AI: Write Welcome Email node, update the placeholder [Link to Your Video] and [Link to Your Help Doc] links with your own URLs. Check HubSpot Property: This workflow assumes you use the "Buying Role" (hs_buying_role) contact property to identify your "Champion". If you use a different property, you must update the HubSpot: Get Contact Details and If Role is 'Champion' nodes. Requirements Access to n8n Data Tables. HubSpot (Developer API):** A credential for the Trigger: Deal Is 'Closed Won' node. HubSpot (OAuth2):** A credential for all other HubSpot nodes (Get Deal Details, Get Contact Details, Assign Contact Owner). AI Credentials:** (e.g., OpenAI) Credentials for the AI Model node (the node connected to AI: Write Welcome Email). Email Credentials:** (e.g., Gmail) Credentials for the Gmail: Send Welcome Email node. How to customize the workflow You can easily customize this workflow to send different emails based on deal properties. Add an If node after the HubSpot: Get Deal Details node to check for the deal's value, product line, or region. Based on these properties, you can route the flow to different AI: Write Welcome Email nodes with unique prompts. For example, you could check the contact's 'industry' or 'company size' to send them links to different, more relevant 'Getting Started' videos and documentation.