by Davide
This workflow automates the entire Calendly onboarding and offboarding process for company users. It relies on form submissions, Google Sheets as a source of truth, AI-generated HR emails, man-in-the-loop approval steps, and direct API interactions with Calendly. Key Advantages ✅ Full Automation of Routine HR Processes The workflow removes the need for HR to manually add or remove Calendly users. It handles data collection, checks eligibility, interacts with Calendly’s API, and updates records automatically. ✅ Centralized Data Management All onboarding/offboarding data is stored and maintained in a Google Sheet, ensuring a single source of truth for user status and activity tracking. ✅ Built-in Human Validation (Man-in-the-Loop) HR receives automated approval emails and must validate each action before a Calendly account is created or removed. This ensures: security accuracy compliance with internal policies ✅ AI-Generated Professional Communication OpenAI generates polished, consistent HTML emails for HR, improving communication quality and reducing manual writing time. ✅ Clean Separation of Onboarding and Offboarding Paths Both processes are independent but structured similarly, making maintenance easier and ensuring consistent logic. ✅ Direct Integration with Calendly’s API The workflow automatically: creates invitations retrieves organization membership deletes users This eliminates manual operations inside Calendly, greatly reducing administrative workload. ✅ Error Reduction & Traceability Since every action is logged in the Google Sheet, HR can easily track: when onboarding/offboarding occurred whether approval was given if Calendly access is active ✅ Improved User Experience The final screens (“Onboarding complete”, “Offboarding complete”, “Not approved”) provide immediate feedback to the requester. The workflow contains two parallel automation paths: 1. Onboarding Workflow How it works User submits the Onboarding Form The form collects first name, last name, and email. User is appended to the Google Sheet A new record is added with date, name, email, and a placeholder for the Calendly status. AI-generated email is prepared OpenAI generates a full HTML email notifying HR about the onboarding request. HR receives an approval request via email Using Gmail’s “send and wait” feature, HR must approve or reject onboarding. If approved: The system calls Calendly’s API to invite the user to the organization. The Google Sheet record is updated (CALENDLY = on). The process ends with a confirmation page. If rejected: The workflow ends with a “Not approved” page. 2. Offboarding Workflow How it works User submits the Offboarding Form Only the email is required. The system checks the Google Sheet It verifies if the email exists and if the user currently has Calendly access. If the user exists, the workflow: Uses AI to generate a professional offboarding request email. Sends an approval prompt to HR. If HR approves: The workflow retrieves the user’s Calendly membership via API. Deletes the user from the Calendly organization. Updates Google Sheets (CALENDLY = off). Ends with a confirmation page. If approval is denied: The workflow ends with a “Not approved” screen. Here's a description of the Calendly Onboarding and Offboarding workflow for n8n: How It Works This workflow automates user onboarding and offboarding processes for Calendly with human approval steps. The system operates through two parallel streams: Onboarding Process: Users submit their information (first name, last name, email) through an onboarding form Data is automatically recorded in a Google Sheets spreadsheet An AI agent generates a professional HTML email notification for HR The email is sent to HR with a double-approval mechanism requiring manual confirmation If approved, the system automatically adds the user to Calendly organization via API The spreadsheet is updated to mark the user as "on" for Calendly access User receives a completion confirmation Offboarding Process: Users submit their email through an offboarding form The system checks Google Sheets to verify the user exists and has Calendly access An AI agent generates an offboarding notification email for HR approval After HR double-approval, the system retrieves the user's Calendly membership via API The user is automatically removed from Calendly organization The spreadsheet is updated to mark Calendly access as "off" User receives offboarding completion confirmation Set Up Steps Prerequisites: Google Sheets spreadsheet with columns: DATE, FIRST NAME, LAST NAME, EMAIL, CALENDLY Calendly organization ID and API access Gmail account for sending approval emails OpenAI API access for email generation Configuration Steps: Google Sheets Setup: Create a spreadsheet with the required column structure Configure Google Sheets OAuth credentials in n8n Update the document ID in all Google Sheets nodes Calendly API Configuration: Replace "XXX" placeholders in HTTP Request nodes with actual Calendly API bearer tokens Set the correct Calendly organization ID in the Set nodes Verify API endpoints match your Calendly organization structure Email System Setup: Configure Gmail OAuth credentials for sending approval emails Update recipient email address from "info@n3w.it" to your HR department's email Adjust approval timeout settings as needed (currently 45 minutes) Form Configuration: Deploy both onboarding and offboarding forms Test form submissions to ensure data flows correctly Customize completion messages for both success and rejection scenarios AI Email Generation: Verify OpenAI API credentials are properly configured Test email template generation for both onboarding and offboarding scenarios Adjust system prompts if different email formatting is required Workflow Activation: Test both onboarding and offboarding flows end-to-end Verify approval emails are received and functional Confirm Google Sheets updates correctly Activate the workflow once testing is complete Need help customizing? Contact me for consulting and support or add me on Linkedin.
by Anoop
📩 Automatically Log Transactions from Gmail into Notion and Get Telegram Alerts Who’s it for This workflow is for individuals or entrepreneurs who receive bank alerts, invoices, and payment emails in Gmail and want them to be automatically organized in Notion — while also receiving quick Telegram notifications for each transaction. If you manage personal or business finances and find it tedious to manually record every debit, credit, or invoice — this automation does it all for you. How it works The workflow acts as an AI-powered Accountant Agent that reads incoming Gmail messages and decides whether each email represents a Debit Transaction, Credit Transaction, Debit Invoice, or Credit Invoice. The Gmail Trigger watches your selected inboxes (like forwarding@bayesian-labs.com, support@bayesian-labs, anoop.karnik@bayesian-labs). The Classifier (GPT-5-nano) determines the correct transaction type. The appropriate Agent (GPT-5) then extracts amount, currency, and description details. The Agent uses Notion API tools to log structured data into your Personal Finance System Notion template (Financial Transactions & Income databases). Finally, a Telegram notification is sent summarizing the entry (From, To, Subject, Snippet). In short: every time your bank emails you — Notion gets updated, and you get notified. How to set up Duplicate the Personal Finance System Notion template into your workspace. Create a Telegram Bot with BotFather → copy the bot token and your chat ID. Generate an OpenRouter API key for GPT-5 / GPT-5-nano. Create a Notion Integration Token and connect it to your duplicated finance databases. Add your Gmail accounts (forwarding@, support@, and/or personal Gmail) under Gmail OAuth2 credentials in n8n. Import the workflow JSON into n8n → fill in the credential names as listed below: n8n_cloud_regular_usage → OpenRouter Notion account → Notion API Accountant AI → Telegram Bot Gmail OAuth2 for each inbox trigger Once active, n8n polls Gmail every minute, classifies emails, updates Notion, and sends Telegram updates. Requirements n8n instance (self-hosted or cloud) Gmail accounts connected via OAuth2 OpenRouter API key Telegram bot token & chat ID Notion integration token Your duplicated Personal Finance System Notion template How to customize the workflow You can extend this workflow to: Track credit card statements, subscriptions, or payroll notifications. Add Slack or WhatsApp alerts alongside Telegram. Include live FX rates for USD→INR conversion using an API node. Connect Google Sheets as a backup ledger or export target. Add error-handling branches to mark Gmail messages as processed or label them “Logged to Notion”.
by Oneclick AI Squad
This enterprise-grade n8n workflow automates the Pharmaceutical Raw Material COA Verification & Vendor Quality Scoring System — from upload to final reporting — using AI-powered document extraction, specification matching, and dynamic vendor scoring. It processes Certificates of Analysis (COAs) to validate compliance, assign quality scores, generate approvals or CAPA requests, and notify stakeholders, ensuring regulatory adherence and vendor accountability with full audit trails and zero manual data entry. Key Features Webhook-triggered COA Upload** for seamless integration with file-sharing systems AI Document Extraction** to parse test results and data from uploaded COAs Automated Specification Analysis** matching against predefined quality standards Weighted Vendor Scoring** based on compliance metrics and historical performance Compliance Decision Engine** with approve/reject branching and CAPA flagging Dynamic Certificate Generation** for approved materials, including digital signatures Vendor Database Synchronization** to update scores and records in real-time Targeted Email Notifications** for QA, production, and executive teams Executive Reporting Dashboard** with summaries, scores, and verification logs Audit-Ready Logging** for all steps, deviations, and decisions Workflow Process | Step | Node | Description | | ---- | ----------------------------------- | -------------------------------------------------------- | | 1 | START: Upload COA | Webhook trigger receives uploaded COA file for verification process | | 2 | EXTRACT: Parse COA | Extracts test results and data from the COA document using AI parsing | | 3 | ANALYZE: Vendor Compliance | Compares extracted data against specifications and flags deviations | | 4 | SCORE: Vendor Quality Rating | Calculates weighted compliance score based on test results and history | | 5 | DECISION: Compliance Route | Evaluates score/status: Branches to approve (green) or reject (red) path | | 6 | APPROVED: Generate Approval Cert (Approved Path) | Creates digital approval certificate for compliant materials | | 7 | Update Vendor Database | Saves verification record, score, and status to vendor database | | 8 | NOTIFY: Email Alert | Sends detailed notifications to QA/production teams | | 9 | REPORT: Final Report | Generates executive summary with COA scores and verifications | | 10 | REJECT: Generate Rejection Report (Reject Path) | Produces rejection report with deviation details | | 11 | Request CAPA | Initiates Corrective and Preventive Action (CAPA) process | | 12 | PATH REJECTED | Terminates rejected branch with audit log entry | Setup Instructions 1. Import Workflow Open n8n → Workflows → Import from Clipboard Paste the JSON workflow 2. Configure Credentials | Integration | Details | | ----------------- | -------------------------------------------------- | | File Storage (e.g., Google Drive/AWS S3) | API key or OAuth for COA upload handling | | AI Extraction (e.g., Claude or OCR Tool) | API key for document parsing (e.g., claude-3-5-sonnet-20241022) | | Database (e.g., PostgreSQL/Airtable) | Connection string for vendor records and specs | | Email (SMTP/Gmail) | SMTP credentials or OAuth for notifications | 3. Update Database/Sheet IDs Ensure your database or Google Sheets include: VendorDatabase for scores and history Specifications for quality standards 4. Set Triggers Webhook:** /coa-verification (for real-time file uploads) Manual/Scheduled:** For batch processing if needed 5. Run a Test Use manual execution to confirm: COA extraction and analysis Score calculation and branching Email notifications and report generation (use sample COA file) Database/Sheets Structure VendorDatabase | vendorId | coaId | score | complianceStatus | lastVerified | deviations | capaRequested | |--------------|-------------|----------|--------------------|--------------------|--------|--------------------|---------------| | VEND-123456 | COA-789012 | 92.5 | Approved | 2025-11-04T14:30:00Z | None | No | Specifications | materialType | testParam | specMin | specMax | weight | |--------------|-------------|----------|--------------------|--------------------|--------|--------------------|---------------|----------| | API Excipient | Purity (%) | 98.0 | 102.0 | 0.4 | System Requirements | Requirement | Version/Access | | --------------------- | ---------------------------------------------- | | n8n | v1.50+ (AI and database integrations supported) | | AI Parsing API | claude-3-5-sonnet-20241022 or equivalent OCR | | Database API | SQL connection or Google Sheets API | | Email API | https://www.googleapis.com/auth/gmail or SMTP | | File Storage | AWS S3 or Google Drive API access | Optional Enhancements Integrate ERP Systems (e.g., SAP) for direct material release Add Regulatory Export to PDF/CSV for FDA audits Implement Historical Trend Analysis for vendor performance dashboards Use Multi-Language Support for global COA extraction Connect Slack/Teams for real-time alerts beyond email Enable Batch Processing for high-volume uploads Add AI Anomaly Detection for predictive non-compliance flagging Build Custom Scoring Models via integrated ML tools Result: A fully automated quality assurance pipeline that verifies COAs, scores vendors, and drives compliance decisions — ensuring pharmaceutical safety and efficiency with AI precision and complete traceability. Explore More AI Workflows: Get in touch with us for custom n8n automation!
by Antonio Gasso
Overview Streamline your entire client onboarding process with a single workflow. When a new client submits the intake form, this automation creates a Monday.com item, generates a complete Google Drive folder structure from your template, updates the Monday item with the folder link, and sends a personalized welcome email—all automatically. What This Workflow Does Displays a professional intake form (client name, email, project type) Creates a new item in your Monday.com board with all details Generates a Google Drive folder for the client Duplicates your template folder structure using Apps Script Updates the Monday.com item with the Google Drive folder link Sends a welcome email to the client with folder access Key Features End-to-end automation** — From form submission to welcome email CRM integration** — All client data captured in Monday.com Organized file storage** — Consistent folder structure for every client Professional onboarding** — Clients receive immediate welcome email with resources Fully customizable** — Add more form fields, notifications, or integrations Prerequisites Monday.com account with API credentials Google Drive account with OAuth2 credentials Gmail account with OAuth2 credentials Google Apps Script deployment (code below) Template folder in Google Drive with {{NAME}} placeholders Setup Step 1: Get your Monday.com IDs Open your Monday.com board Board ID: Check the URL → monday.com/boards/BOARD_ID Group ID: Use Monday API Explorer or browser dev tools Column IDs: Found in column settings or via API Step 2: Create your Drive template folder 📁 {{NAME}} - Client Files ├── 📁 01. Contracts & Agreements ├── 📁 02. {{NAME}} - Assets ├── 📁 03. Deliverables ├── 📁 04. Communications └── 📄 {{NAME}} - Project Brief.gdoc Step 3: Deploy Apps Script Go to script.google.com Create new project → Paste code below Deploy → New deployment → Web app Execute as: Me | Access: Anyone Copy the deployment URL Step 4: Configure the workflow Replace these placeholders: YOUR_BOARD_ID — Monday.com board ID YOUR_GROUP_ID — Monday.com group ID DESTINATION_PARENT_FOLDER_ID — Drive folder for new client folders YOUR_APPS_SCRIPT_URL — Apps Script deployment URL YOUR_TEMPLATE_FOLDER_ID — Template folder to duplicate Step 5: Connect credentials Monday.com API credentials Google Drive OAuth2 Gmail OAuth2 Apps Script Code function doPost(e) { try { var params = e.parameter; var templateFolderId = params.templateFolderId; var name = params.name; var destinationFolderId = params.destinationFolderId; if (!templateFolderId || !name) { return jsonResponse({ success: false, error: 'Missing required parameters: templateFolderId and name are required' }); } var templateFolder = DriveApp.getFolderById(templateFolderId); if (destinationFolderId) { var destinationFolder = DriveApp.getFolderById(destinationFolderId); copyContentsRecursively(templateFolder, destinationFolder, name); return jsonResponse({ success: true, id: destinationFolder.getId(), url: destinationFolder.getUrl(), name: destinationFolder.getName(), mode: 'copied_to_existing', timestamp: new Date().toISOString() }); } else { var parentFolder = templateFolder.getParents().next(); var newFolderName = replacePlaceholders(templateFolder.getName(), name); var newFolder = parentFolder.createFolder(newFolderName); copyContentsRecursively(templateFolder, newFolder, name); return jsonResponse({ success: true, id: newFolder.getId(), url: newFolder.getUrl(), name: newFolder.getName(), mode: 'created_new', timestamp: new Date().toISOString() }); } } catch (error) { return jsonResponse({ success: false, error: error.toString() }); } } function replacePlaceholders(text, name) { var result = text; result = result.replace(/\{\{NAME\}\}/g, name); result = result.replace(/\{\{name\}\}/g, name.toLowerCase()); result = result.replace(/\{\{Name\}\}/g, name); return result; } function copyContentsRecursively(sourceFolder, destinationFolder, name) { var files = sourceFolder.getFiles(); while (files.hasNext()) { try { var file = files.next(); var newFileName = replacePlaceholders(file.getName(), name); file.makeCopy(newFileName, destinationFolder); Utilities.sleep(150); } catch (error) { Logger.log('Error copying file: ' + error.toString()); } } var subfolders = sourceFolder.getFolders(); while (subfolders.hasNext()) { try { var subfolder = subfolders.next(); var newSubfolderName = replacePlaceholders(subfolder.getName(), name); var newSubfolder = destinationFolder.createFolder(newSubfolderName); Utilities.sleep(200); copyContentsRecursively(subfolder, newSubfolder, name); } catch (error) { Logger.log('Error copying subfolder: ' + error.toString()); } } } function jsonResponse(data) { return ContentService .createTextOutput(JSON.stringify(data)) .setMimeType(ContentService.MimeType.JSON); } Use Cases Agencies** — Automate client onboarding with CRM tracking Freelancers** — Professional intake process for new projects Consulting firms** — Standardized client setup workflow Creative studios** — Organize assets and deliverables from day one Service businesses** — Streamline customer setup and communication Customization Ideas Add more form fields: phone, company size, budget, deadline Add Slack notification to alert your team Create tasks in Monday.com sub-items Add to Google Calendar for kickoff meeting Integrate with invoicing (Stripe, QuickBooks) Notes Apps Script may take 30-60 seconds for large folder structures Monday.com column IDs must match your board's actual columns The welcome email can be customized with your branding Test with a single client before full deployment
by Onur
🏨 Hotel Price Comparison Workflow with Scrape.do This template requires a self-hosted n8n instance to run. A complete n8n automation that extracts hotel prices from multiple booking platforms (Booking.com, Hotels.com, Expedia, etc.) using Scrape.do API, compares prices across platforms, and saves structured results into Google Sheets for price monitoring and decision-making. 📋 Overview This workflow provides an automated hotel price comparison solution that monitors hotel rates across different booking platforms for specific destinations and dates. Ideal for travel agencies, price comparison websites, travelers, and hospitality analysts who need real-time pricing insights without manual searching. Who is this for? Travel agencies automating price comparisons Price comparison website operators Budget-conscious travelers tracking best deals Hospitality analysts monitoring market pricing Hotel managers tracking competitor rates Travel bloggers researching accommodation options What problem does this workflow solve? Eliminates manual price checking across multiple sites Processes multiple hotels and date ranges automatically Extracts structured pricing data (price, rating, amenities) Identifies the cheapest option across platforms Automates saving results into Google Sheets Ensures consistent and repeatable price monitoring ⚙️ What this workflow does Manual Trigger → Starts the workflow manually or on schedule Get Search Parameters from Sheet → Reads hotel names, destinations, check-in/check-out dates from Google Sheet URL Encode Parameters → Converts search parameters into URL-safe format Process Hotels in Batches → Handles multiple searches sequentially to avoid rate limits Fetch Hotel Data from Multiple Platforms → Calls Scrape.do API to retrieve pricing from Booking.com, Hotels.com, and Expedia Extract and Structure Price Data → Parses HTML into structured hotel data (name, price, rating, amenities) Compare Prices Across Platforms → Identifies best price and calculates savings Append Results to Sheet → Writes comparison results into Google Sheet 📊 Output Data Points | Field | Description | Example | |-------|-------------|---------| | Hotel Name | Name of the hotel | Hilton Garden Inn Downtown | | Destination | City or location | New York, NY | | Check-in Date | Arrival date | 2025-12-15 | | Check-out Date | Departure date | 2025-12-18 | | Nights | Number of nights | 3 | | Booking.com Price | Price from Booking.com | $450 | | Hotels.com Price | Price from Hotels.com | $425 | | Expedia Price | Price from Expedia | $440 | | Best Price | Lowest price found | $425 | | Best Platform | Platform with lowest price | Hotels.com | | Savings | Difference from highest price | $25 | | Average Rating | Average customer rating | 8.5/10 | | Total Reviews | Number of reviews | 1,247 | | Free Cancellation | Cancellation policy | Yes | | Breakfast Included | Breakfast availability | No | ⚙️ Setup Prerequisites n8n instance (self-hosted) Google account with Sheets access Scrape.do account with API token Google Sheet Structure This workflow uses one Google Sheet with two tabs: Input Tab: "Search Parameters" | Column | Type | Description | Example | |--------|------|-------------|---------| | Hotel Name | Text | Name of hotel (optional) | Hilton Garden Inn | | Destination | Text | City or location | New York, NY | | Check-in Date | Date | Arrival date (YYYY-MM-DD) | 2025-12-15 | | Check-out Date | Date | Departure date (YYYY-MM-DD) | 2025-12-18 | | Guests | Number | Number of guests | 2 | | Rooms | Number | Number of rooms | 1 | Output Tab: "Price Comparison" | Column | Type | Description | Example | |--------|------|-------------|---------| | Search Date | Timestamp | When search was performed | 2025-11-17 10:30:00 | | Hotel Name | Text | Name of the hotel | Hilton Garden Inn Downtown | | Destination | Text | City/location | New York, NY | | Check-in | Date | Arrival date | 2025-12-15 | | Check-out | Date | Departure date | 2025-12-18 | | Nights | Number | Number of nights | 3 | | Booking.com Price | Currency | Price from Booking.com | $450 | | Hotels.com Price | Currency | Price from Hotels.com | $425 | | Expedia Price | Currency | Price from Expedia | $440 | | Best Price | Currency | Lowest price | $425 | | Best Platform | Text | Cheapest platform | Hotels.com | | Savings | Currency | Potential savings | $25 | | Rating | Number | Average rating | 8.5 | | Reviews | Number | Total reviews | 1,247 | 🛠 Step-by-Step Setup Import Workflow: Copy the JSON → n8n → Workflows → + Add → Import from JSON Configure Scrape.do API: Endpoint: https://api.scrape.do/ Parameter: token=YOUR_SCRAPEDO_TOKEN Add render=true for JavaScript-heavy booking sites Add country=US (or target country) for localized results Configure Google Sheets: Create a sheet with two tabs: Search Parameters (input), Price Comparison (output) Set up Google Sheets OAuth2 credentials in n8n Replace placeholders: YOUR_GOOGLE_SHEET_ID and YOUR_GOOGLE_SHEETS_CREDENTIAL_ID Configure Platform URLs: Update base URLs for Booking.com, Hotels.com, Expedia in HTTP Request nodes Customize search parameters based on platform URL structure Run & Test: Add test data in Search Parameters tab Execute workflow → Check results in Price Comparison tab 🧰 How to Customize Add more platforms**: Include Agoda, Trivago, or direct hotel websites by adding new HTTP Request nodes Price alerts**: Add conditional logic to send email/Slack notification when price drops below threshold Historical tracking**: Store daily snapshots to track price trends over time Filtering**: Add filters for amenities (pool, gym, parking) or star ratings Batch Size**: Adjust "Process Hotels in Batches" based on API rate limits Rate Limiting**: Insert Wait nodes (20–30 seconds) between platform requests Currency conversion**: Add currency API integration for multi-currency comparison Scheduling**: Add Schedule Trigger to run automatically (daily/weekly) 📊 Use Cases Travel Planning**: Find the best hotel deals for upcoming trips Price Monitoring**: Track price changes for specific hotels over time Agency Operations**: Automate price research for client bookings Market Analysis**: Monitor competitor pricing in hospitality market Deal Alerts**: Get notified when prices drop below target threshold Budget Planning**: Compare costs across multiple destinations 📈 Performance & Limits Single Hotel (3 platforms)**: ~30–45 seconds (depends on Scrape.do response) Batch of 10 hotels**: 8–12 minutes typical Large Sets (50+ hotels)**: 45–90 minutes depending on API credits & batching API Calls**: 3 Scrape.do requests per hotel (one per platform) Reliability**: 90%+ extraction success, 95%+ price accuracy 🧩 Troubleshooting API error** → Check YOUR_SCRAPEDO_TOKEN and API credits on Scrape.do dashboard No hotels loaded* → Verify Google Sheet ID & tab name = *Search Parameters** Permission denied** → Re-authenticate Google Sheets OAuth2 in n8n Empty prices** → Check if Scrape.do rendered JavaScript (render=true) Parsing errors** → Booking sites change HTML structure; update CSS selectors in Extract nodes Workflow timeout** → Reduce batch size or add more Wait nodes between requests Wrong currency** → Add country parameter to Scrape.do request for localized pricing 🤝 Support & Community n8n Forum**: https://community.n8n.io n8n Docs**: https://docs.n8n.io Scrape.do Dashboard**: https://dashboard.scrape.do Scrape.do Documentation**: https://scrape.do/docs 🎯 Final Notes This workflow provides a powerful foundation for automated hotel price comparison across multiple booking platforms using Scrape.do and Google Sheets. You can extend it with: Real-time price alerts via email/Slack Historical price tracking and trend analysis Integration with travel planning dashboards Automated booking when price threshold is met Multi-destination comparison for trip planning Pro Tip: Schedule this workflow to run daily to catch early-bird discounts and flash sales automatically!
by Jitesh Dugar
Email List Hygiene - Automated Weekly Validator Overview Validates email lists through automated checks, categorizes results as Valid/Invalid/Risky, updates Google Sheets in real-time, and delivers HTML reports. Runs every Friday at 5 PM via cron scheduling. Workflow Architecture Schedule Trigger → Read Google Sheets → Loop (Process Each Email) → Validate API → IF Branch (Valid/Invalid) → Update Google Sheets → Merge → Loop Back → Calculate Statistics → Send Email Report Loop Mechanism Split in Batches processes one email at a time Each email: validate → branch → update sheet → merge → continue Loop accumulates all results internally "Done" output triggers statistics calculation after all emails processed Health Score Formula Score = (Valid% × 100) - (Invalid% × 20) - (Risky% × 10) Bounded: 0-100 Ranges: 80-100: Excellent (green) 60-79: Good (orange) 0-59: Needs Attention (red) Prerequisites Required: Google account with Sheets access Email validation API (VerifiEmail) n8n v1.0+ Google Sheet Structure | Column | Type | Filled By | |--------|------|-----------| | row_number | Number | Auto-generated | | name | Text | You | | email | Text | You | | status | Text | Workflow | | checked_at | Text | Workflow | | notes | Text | Workflow | Only populate first three columns. Setup 1. Import Template Import JSON file to n8n via Workflows → Add workflow → Import from File 2. Configure Credentials Google Sheets OAuth2 (used by 3 nodes): Create credential via any Google Sheets node Grant spreadsheet permissions Apply same credential to all Google Sheets nodes Validation API: Get API key from https://verifi.email Add credential to "Validate Email Address" node Gmail OAuth2: Add credential to "Send Weekly Report" node Grant email sending permissions 3. Connect Google Sheet In all three Google Sheets nodes: Select your spreadsheet from Document dropdown Select sheet tab Verify "Column to Match On" = row_number (for Update nodes) 4. Set Email Recipient In "Send Weekly Report" node: Change "Send To" from placeholder to your email Optional: Add CC/BCC for multiple recipients 5. Test Add 3-5 test emails (mix of valid/invalid) Click "Execute Workflow" Verify sheet updates and email arrives 6. Activate Toggle "Active" switch. Workflow runs automatically every Friday at 5 PM. Customization Change Schedule: Edit "Weekly Schedule" node cron expression: Daily 9 AM: 0 9 * * * Monday 5 PM: 0 17 * * 1 First of month: 0 9 1 * * Email Design: Edit HTML in "Send Weekly Report" message field. Modify colors (search hex codes), text, or add branding. Archive Invalid Emails: Add Google Sheets Append node after "Update Invalid Status" → create "Invalid_Archive" tab → append email, name, reason, date Slack Notifications: Add Slack node after email report → configure channel → use summary text from statistics Rate Limiting: Add Wait node (1-2 seconds) after validation for large lists to prevent API throttling Troubleshooting "Column not found": Verify exact column names in sheet: row_number, name, email, status, checked_at, notes (case-sensitive) Only processes 1 email: Check Google Sheets node Range field is empty or set to include all rows. Verify "Use Header Row" enabled. Wrong statistics: Enable "Execute Once" in Calculate Statistics node settings (gear icon) Email not arriving: Check spam/promotions folder, verify Gmail credential authorized, confirm recipient address correct API errors: Verify API key valid, check quota not exceeded, test with simple email like test@gmail.com Merge node error: Confirm both Update nodes connect to Merge inputs (top and bottom). Check both branches execute successfully. Validation Checks Each email undergoes: RFC 5322 format compliance MX record existence (domain has mail servers) SMTP verification (mailbox exists) Disposable email service detection Catch-all domain detection Categories: Valid: All checks passed Invalid: Critical checks failed Risky: Disposable or catch-all domain Support Check execution logs in n8n Executions tab for errors. Use "Execute Node" on individual nodes to isolate issues. Visit n8n community forum for additional help. Tags email-validation marketing-automation data-cleaning google-sheets scheduled-workflow deliverability list-hygiene
by Avkash Kakdiya
How it works This workflow automates employee expense reimbursements from submission to final resolution. Expenses are captured via a form, reviewed by an AI agent for justification, and routed to managers for approval or clarification. Approved expenses notify employees instantly, while rejected or unclear cases automatically schedule a follow-up discussion. All actions are logged to keep finance records clean and auditable. Step-by-step Step 1: Capture, summarize, and request approval** On Expense Form Submission – Captures structured expense details submitted by employees. Append row in sheet – Stores each expense entry in Google Sheets for tracking. AI Agent – Reviews the expense description and validates whether the full amount is justified. OpenAI Chat Model – Powers the AI reasoning used to analyze the expense. Output Parser – Converts the AI response into a structured decision format. If – Routes the flow based on whether the expense is appropriate or not. Step 2: Manager reviews and responds** Send Email to Manager for Approval – Sends an approval email when the expense is justified. Send Email to Manager for Approval1 – Sends a clarification-required email when justification is unclear. If1 – Checks the manager’s approve or reject response from the email. Step 3: Notify employee or schedule discussion** Send a message – Notifies the employee when the expense is approved. Booking Agent – Automatically finds the next available business-day time slot if the expense is rejected. OpenAI – Interprets availability rules and slot selection logic. Get Events – Fetches existing calendar events for the selected day. Check Availability – Identifies free time slots within working hours. Output Parser1 – Structures the selected meeting time. Send a message2 – Emails the employee with discussion details when clarification is required. Why use this? Enforce consistent expense validation before manager review. Reduce manual back-and-forth between employees, managers, and finance. Keep a centralized, auditable record of all expense submissions. Speed up reimbursements with automated approvals and notifications. Handle rejected expenses professionally with automatic discussion scheduling.
by Harvex AI
Overview This workflow automates the "speed-to-lead" process for insurance agencies. It instantly triggers an AI voice call when a new lead comes in, qualifies their needs via conversation, and automatically generates and emails a personalized insurance proposal (Blueprint) using GPT-4. Who’s it for -Insurance Brokers & Agencies who want to automate the initial outreach and qualification of inbound leads. -Applicable to any type of Insurance (Life, Health, Home, Auto or bundling ) -Sales Teams who want to filter out unqualified leads and receive detailed call summaries for qualified prospects. -Any business willing to have a 24/7 virtual assistant that want to qualify potential customers intent and draft proposals. How it works Lead Ingestion: The workflow starts when a potential client submits an n8n web form (Name, Email, Phone Number). CRM Logging: The lead is immediately created in Airtable . AI Voice Call: The workflow triggers Vapi.ai to call the lead immediately. The AI agent acts as a representative to gather requirements. Analysis & Logic: Once the call ends, Vapi sends the call analysis and transcript back to n8n via a webhook. The workflow checks the "Success Evaluation" and ensures a "Type of Insurance" was identified. Path A: Qualified Lead gets a an insurance blueprint: OpenAI (GPT-4) generates a professional "Insurance Blueprint" email based on the call transcript and client needs (type of insurance the client is seeking). Email Dispatch: The proposal is sent directly to the client via Gmail. CRM Update: The Airtable record is updated to "Qualify" with the call summary. Error Handling: If the email fails to send, a Slack alert is sent to the team with the proposal text for manual follow-up. Path B: Unqualified Lead Notification: The team is alerted via Slack with the reason for disqualification. CRM Update: The Airtable record is updated to "Unqualified." with the call summary. Requirements Vapi.ai Account: For the AI voice telephony (requires a configured Assistant and Phone Number). OpenAI Account: For GPT-4 or any LLM model of your choice analysis used for proposals writing. Make sure to have enough tokens. Airtable Account: For lead management. Gmail Account: To send the proposals. Slack Account: For internal team notifications. How to set up Configure External Services Airtable: Create a base with a table with a name of your choice. Ensure it has the following columns: Name (Single text), Email (Email), Phone number (Phone/Text), Status (Single Select: Qualify, Unqualified), Type of Insurance (Text), and Call summary (Long Text). Vapi: Create an Assistant in Vapi. Give the assistant a system prompt according to what you want it to say during the call. Ensure you enable the "Server URL" in the Vapi dashboard to point to the Production URL of the Post call Webhook node in this workflow. Configure Credentials in n8n Add credentials for Airtable, OpenAI, Gmail, and Slack. In the Vapi call node, use your credentials or add your Vapi Private API Key to the header (Authorization: Bearer <YOUR_KEY>). Update Node Parameters Airtable Nodes: Select your specific Base and Table in both the "Create a record" and "Update record" nodes. Vapi Call Node: Input your assistantId, phoneNumberId in the JSON body with the actual IDs from your Vapi dashboard and change the international dialing code. Slack Nodes: Select the channel where you want notifications sent. How to customize the workflow Change the Persona: Open the Prepare Blueprint (OpenAI) node. Edit the System Message to change the agent's name and Insurance or agency name, tone, or the formatting of the email proposal. Adjust Qualification Logic: Open the Is Qualified? (If) node. You can modify the data Collection by adding more fields to the Form Trigger (e.g., "State," "Age") and map them through to the Airtable nodes and the Vapi assistant prompt context. Switch Communication Channels: Replace the Slack and Gmail nodes with other nodes (e.g., Microsoft Teams, Outlook) depending on your tech stack preferences.
by Chris Rudy
Who's it for Marketing agencies, digital agencies, and freelancers who need to streamline their client onboarding process and create consistent, professional documentation for new clients. Perfect for teams handling multiple client intakes who want to save hours of manual setup work while maintaining quality standards. What it does This workflow automates the entire client onboarding journey from the moment a prospect fills out your Typeform intake questionnaire. It instantly creates a complete Google Drive folder structure with 6 main folders and 15+ subfolders tailored for marketing projects, sends the intake information to your team via Slack, generates an AI-powered marketing research brief using OpenAI, implements an approval workflow with revision capabilities, and delivers a professional welcome email to the client. The system ensures nothing falls through the cracks while maintaining consistent quality across all client projects. How it works Intake Trigger: When a client submits your Typeform intake form, the workflow automatically initiates Folder Creation: Creates a branded client folder in Google Drive with organized subfolders for ads, raw footage, product images, research, drafts, and archives Team Notification: Posts detailed intake responses to your designated Slack channel for immediate team visibility AI Brief Generation: Uses OpenAI to analyze intake responses and generate a comprehensive marketing research document including customer personas, pain points, positioning strategies, and marketing angles Approval Process: Sends the brief for team review with built-in approve/revise functionality Document Creation: Upon approval, creates a Google Doc with the finalized research brief Client Communication: Sends a personalized welcome email to the client confirming their onboarding How to set up Configure the workflow: Start by filling in all values in the "⚙️ Configuration" node: Your Typeform ID from your intake form Google Drive parent folder ID where client folders will be created Slack channel IDs for new client notifications and internal reviews OpenAI model preference (GPT-4 recommended) Welcome email template with your agency branding Connect your accounts: Typeform: Create credentials and connect your account Google: Authenticate with Drive, Docs, and Gmail permissions Slack: Add the n8n bot to your workspace and relevant channels OpenAI: Add your API key for AI content generation Test the workflow: Submit a test entry through your Typeform Verify folder creation in Google Drive Check Slack notifications are posting correctly Confirm the approval process works as expected Requirements Typeform** account with a client intake form created Google Workspace** account with Drive, Docs, and Gmail access Slack** workspace with appropriate channels created OpenAI API** key with credits for content generation n8n** instance (self-hosted or cloud) version 1.0+ How to customize the workflow Folder Structure**: Modify the subfolder nodes to match your agency's project organization needs Intake Fields**: Update the Slack message blocks and AI prompt to match your specific Typeform fields Research Brief Template**: Customize the OpenAI prompt to generate briefs aligned with your agency's format Approval Logic**: Add additional approval stages or skip approval for certain client types Welcome Email**: Personalize the email template with your branding, links, and next steps Notification Channels**: Route different types of notifications to specific Slack channels based on client tier or project type
by Krade1027
Monitor device disconnections from Omada emails to Google Sheets with Pushover alerts Who’s it for This workflow is designed for IT admins, network engineers, or small business owners who need to automatically monitor device connectivity from Omada Controller email alerts. If you want a lightweight, low-cost solution for tracking device uptime without complex monitoring software, this template is for you. How it works The workflow listens for Omada Controller email alerts using Gmail, parses each email, and logs device connection status (connected/disconnected) into Google Sheets. Every 5 minutes, it checks for devices that have been disconnected for more than 30 minutes. If a device has not reconnected, the workflow sends a push notification via Pushover. Old logs are cleared automatically every 2 days to keep the sheet clean. Workflow Overview The workflow is broken into three main parts: 1. Email Processing (Receives Alert -> Append Row in Sheet) Triggered whenever a new email is received. It uses a Code node to parse the raw text of the email, extracting details like device name, MAC address, and connection status. This data is formatted and appended as a new row to Google Sheets, creating a comprehensive log of all connection events. Important: In the Gmail trigger node, make sure to set the search field or filter so that it only matches the subject line used by Omada Controller alert emails. This ensures the workflow only processes the intended alerts and not unrelated emails. 2. Disconnected Device Alerting (Check Every 5 minutes -> Alert User) Runs every 5 minutes. It reads the device log from Google Sheets, identifies the most recent status for each device, and filters for devices currently disconnected. If a device has been disconnected for more than 30 minutes, a high-priority push notification is sent to Pushover account. Once sent, the workflow updates the corresponding row in the Google Sheet to prevent duplicate alerts. 3. Data Maintenance (Clear Rows Every 2 days -> Clear sheet) Runs every two days to clean up the Google Sheet by deleting the oldest rows, keeping the log from growing too large. Services and Dependencies To run this workflow, you’ll need the following services connected to n8n: Google Sheets**: Logs all connection events and tracks device status Gmail**: Acts as the trigger, listening for Omada Controller alerts Pushover**: Sends real-time, high-priority push notifications to mobile devices Setup Instructions 1. Create a Google Sheet Log Create a new Google Sheet in your Google Drive Name it something like Omada Device Log Add these headers in the first row: exact spelling and order is crucial rowId, timestamp, timestampISO, category, severity, mac, name, type, status, checkAfter, alertSent, timeStampFormated 2. Configure Credentials Google Sheets**: Create a new OAuth2 credential in n8n Gmail**: Create a new OAuth2 credential (must receive Omada alerts) Pushover**: Create a new API credential and get user keys for each recipient 3. Import the Workflow Copy the JSON workflow file In n8n: click New → Import from JSON Paste the JSON code 4. Update the Nodes Receives Alert**: Link it to your Gmail credential Append Row in Sheet, Get Row(s) in Sheet, Update Alert, Clear sheet**: Replace YOUR_GOOGLE_SHEET_ID with your Google Sheet’s ID (found in the sheet URL between /d/ and /edit) Alert User**: Replace YOUR_PUSHOVER_USER_KEY with your Pushover user keys Node Breakdown Receives Alert** (Gmail Trigger): Listens for new emails Process Email and Extract** (Code): Parses email and extracts structured data (timestamps, device info, status) Append Row in Sheet** (Google Sheets): Adds a new row to your log Check Every 5 minutes** (Schedule Trigger): Runs regularly to check device status Get Row(s) in Sheet** (Google Sheets): Reads log to get latest status per device Check Device and Notify** (Code): Groups rows by MAC, filters disconnected devices past 30 minutes Alert User** (Pushover): Sends formatted push notification with device details Update Alert** (Google Sheets): Marks the row as alerted to prevent duplicates Clear Rows Every 2 days** (Schedule Trigger): Runs maintenance Clear sheet** (Google Sheets): Deletes old rows, preserves header
by Anir Agram
📊 Google Sheets Leads → 🎲 Random Templates → ✉️ Personalized Emails → 📝 Status Tracking What this workflow does 📊 Reads leads list from Google Sheets (Name, Email, Send Status) 🔍 Filters out already-contacted leads (skips "SENT" status) 🎲 Randomly selects email template from template library ✏️ Personalizes subject and body with lead's name 📧 Sends emails one-by-one with delays between sends ✅ Updates Google Sheet with send status and timestamp 🔁 Loops through all unsent leads automatically Why it's useful ⚡ Automate cold outreach without manual copy-paste 🎯 Avoid duplicate sends—tracks who's been contacted 📝 Rotate email templates for A/B testing and variety 👤 Personalization makes emails feel human, not spammy ⏱️ Built-in delays prevent spam flags and rate limits 📊 Full audit trail of who received what and when How it works 📊 Google Sheets (Leads) → reads Name, Email, Send Status 🚦 IF Node → filters leads where Send Status ≠ "SENT" 🔄 Loop Over Items → processes leads one-by-one 📧 Google Sheets (Templates) → fetches Subject + Body templates 🎲 Code Node → picks random template 🔀 Merge → combines lead data with template ✏️ Edit Fields → replaces [Name] with actual lead name 📨 Send Email → delivers personalized message ⏳ Wait → adds delay between sends (avoids spam flags) ✅ Google Sheets (Update) → marks as "SENT" with timestamp What you'll need 📊 Google Sheet #1: Leads (columns: Name, Email, Send Status, Time) 📧 Google Sheet #2: Templates (columns: Subject, Body) 📬 SMTP credentials (SendGrid, Mailgun, etc.) 🔐 Google Sheets OAuth Setup steps 📊 Create "Leads" sheet with columns: Name | Email | Send Status | Time 📧 Create "Templates" sheet with columns: Subject | Body (use [Name] placeholder) 🔗 Connect Google Sheets OAuth credentials 📬 Add SMTP email credentials 🧭 Update both Google Sheets node IDs to point to your sheets ⚙️ Set "From Email" in Send Email node 🧪 Test with 2-3 test leads first Customization ideas ⏱️ Adjust Wait time (30s-5min) to control send rate 📊 Add click tracking with UTM parameters 🔔 Send Slack/Telegram notification when campaign completes 🎯 Add lead scoring—prioritize high-value leads first 📈 Log opens/replies to separate tracking sheet Who it's for 🧑💻 Freelancers doing cold outreach to agencies 📈 Sales teams running lead generation campaigns 🚀 Startups reaching out to potential customers 🎯 Marketers testing email copy variations 💼 Business developers nurturing prospect lists Quick Setup Guide Before You Start - What You Need: 📊 Google account for Sheets access 📧 SMTP email account (Gmail, custom domain, or email service) 📝 List of leads (names + emails) ✉️ Email templates ready (with [Name] placeholders) Want help customizing? 📧 anirpoke@gmail.com 🔗 LinkedIn
by PollupAI
This n8n workflow enables teams to automate and standardize multi-step onboarding or messaging workflows using Google Sheets, Forms, Gmail, and dynamic logic powered by Code and Switch nodes. It ensures the right email is sent at the right step, tracks progress in Google Sheets, and handles errors or escalations. 🧑💼 Who is this for? HR and PeopleOps teams managing candidate or employee onboarding processes Customer success or onboarding teams handling structured, step-based journeys Any team using Google Sheets as a lightweight CRM or workflow tracker 🧩 What problem is this workflow solving? Coordinating multi-step onboarding or communication flows using spreadsheets and email can quickly become error-prone. This workflow: Dynamically detects the current step and status from a Google Sheet Sends the right message at the right time Updates statuses and creates next steps Handles errors with escalation logic ⚙️ What this workflow does Trigger via Form or Manual Execution Users can fill a web form or run the workflow manually. Read Google Sheets Retrieves step definitions and user progress from two sheets: One for message templates One for user step/status tracking Generate Message Table Uses custom JavaScript to parse and structure message templates based on step and message type (sent, completed, error). Determine User Step A Switch node checks the user’s current step and status. Logic branches into the correct flow for message sending and verification. Send Message Message variables are replaced using a Code node. Final message is sent via Gmail or another workflow (using Execute Workflow). Update Sheets Marks the step as completed or passed. Creates the next step in the sheet with updated status. Handle Errors If the step fails, an error message is sent to the responsible admin. 🛠️ Setup Connect Google Sheets and Gmail: Ensure credentials are configured in n8n. Prepare Sheets: One sheet for messages with steps/types/subjects/content. You can copy the one from here One sheet for tracking users and their current step/status. You can copy the one from here Customize Webform: Use the provided form to capture First Name, Last Name, and Email. Connect to Your Email Templates: Ensure your message structure follows the expected JSON format by step and type. ✏️ How to customize this workflow to your needs Add More Steps**: Expand the Switch logic and template sheet for more steps. Use Different Channels**: Replace Gmail with Slack, Telegram, or another messaging node. Change Form Fields**: Adjust the FormTrigger node to match your onboarding fields. Custom Error Logic**: Customize escalation emails, including admin routing or Slack alerts. Integrate with Databases**: Swap Google Sheets with Airtable, PostgreSQL, or Notion. This workflow is ideal for automating repetitive, step-based processes involving human communication. It’s modular, extensible, and powered by spreadsheet-driven logic.