by Ranjan Dailata
This workflow automates competitor keyword research using OpenAI LLM and Decodo for intelligent web scraping. Who this is for SEO specialists, content strategists, and growth marketers who want to automate keyword research and competitive intelligence. Marketing analysts managing multiple clients or websites who need consistent SEO tracking without manual data pulls. Agencies or automation engineers using Google Sheets as an SEO data dashboard for keyword monitoring and reporting. What problem this workflow solves Tracking competitor keywords manually is slow and inconsistent. Most SEO tools provide limited API access or lack contextual keyword analysis. This workflow solves that by: Automatically scraping any competitor’s webpage with Decodo. Using OpenAI GPT-4.1-mini to interpret keyword intent, density, and semantic focus. Storing structured keyword insights directly in Google Sheets for ongoing tracking and trend analysis. What this workflow does Trigger — Manually start the workflow or schedule it to run periodically. Input Setup — Define the website URL and target country (e.g., https://dev.to, france). Data Scraping (Decodo) — Fetch competitor web content and metadata. Keyword Analysis (OpenAI GPT-4.1-mini) Extract primary and secondary keywords. Identify focus topics and semantic entities. Generate a keyword density summary and SEO strength score. Recommend optimization and internal linking opportunities. Data Structuring — Clean and convert GPT output into JSON format. Data Storage (Google Sheets) — Append structured keyword data to a Google Sheet for long-term tracking. Setup Prerequisites n8n account with workflow editor access Decodo API credentials OpenAI API key Google Sheets account connected via OAuth2 Make sure to install the Decodo Community node. Create a Google Sheet Add columns for: primary_keywords, seo_strength_score, keyword_density_summary, etc. Share with your n8n Google account. Connect Credentials Add credentials for: Decodo API credentials - You need to register, login and obtain the Basic Authentication Token via Decodo Dashboard OpenAI API (for GPT-4o-mini) Google Sheets OAuth2 Configure Input Fields Edit the “Set Input Fields” node to set your target site and region. Run the Workflow Click Execute Workflow in n8n. View structured results in your connected Google Sheet. How to customize this workflow Track Multiple Competitors** → Use a Google Sheet or CSV list of URLs; loop through them using the Split In Batches node. Add Language Detection** → Add a Gemini or GPT node before keyword analysis to detect content language and adjust prompts. Enhance the SEO Report** → Expand the GPT prompt to include backlink insights, metadata optimization, or readability checks. Integrate Visualization** → Connect your Google Sheet to Looker Studio for SEO performance dashboards. Schedule Auto-Runs** → Use the Cron Node to run weekly or monthly for competitor keyword refreshes. Summary This workflow automates competitor keyword research using: Decodo** for intelligent web scraping OpenAI GPT-4.1-mini** for keyword and SEO analysis Google Sheets** for live tracking and reporting It’s a complete AI-powered SEO intelligence pipeline ideal for teams that want actionable insights on keyword gaps, optimization opportunities, and content focus trends, without relying on expensive SEO SaaS tools.
by Ronnie Craig
Healthcare Email Autoresponder - Daily Outreach 📧 A production-ready n8n workflow for automated healthcare email marketing with AI-powered personalization. 🎯 What This Workflow Does This automated email system sends daily personalized healthcare-themed emails to your contact list. Perfect for: Healthcare professionals building patient relationships Medical practices maintaining client engagement Wellness coaches staying connected with clients Health educators sharing daily motivation ✨ Key Features AI-Powered Personalization**: Uses OpenAI to customize each email with recipient's name Smart Rate Limiting**: Random 2-5 minute delays between emails to avoid spam filters Batch Processing**: Limits to 10 emails per run for better deliverability Email Tracking**: Updates Google Sheets to prevent duplicates and track progress Professional Templates**: Healthcare-themed content with customizable signatures Automated Scheduling**: Runs daily at 1 PM (customizable) 🛠️ Setup Instructions Prerequisites n8n instance (cloud or self-hosted) Gmail account for sending emails Google Sheets for contact management OpenAI API key Step 1: Import the Workflow Download the Healthcare_Email_Autoresponder_Community_Template.json file In n8n, go to Templates and click "Import from File" Select the downloaded JSON file The workflow will be imported as inactive Step 2: Configure Credentials Gmail OAuth2 Setup: Click on the "Send Email" node Create new Gmail OAuth2 credential Follow n8n's Gmail setup guide Test the connection Google Sheets Setup: Click on the "Healthcare_Contact_List" node Create new Google Sheets OAuth2 credential Replace YOUR_GOOGLE_SHEET_ID_HERE with your actual sheet ID Ensure your sheet has these columns: First Name Email Emailed (for tracking timestamps) OpenAI API Setup: Click on the "OpenAI Chat Model" node Create new OpenAI credential Add your OpenAI API key Select your preferred model (gpt-4o-mini recommended for cost efficiency) Step 3: Customize Your Email Template Click on the "AI Email Generator" node Edit the system message to include your details: Replace [YOUR NAME HERE] with your actual name Replace [YOUR TITLE HERE] with your professional title Replace [YOUR COMPANY HERE] with your company name Replace [YOUR PHONE NUMBER] with your phone number Replace [YOUR EMAIL] with your email address Replace [YOUR WEBSITE] with your website URL Step 4: Prepare Your Contact List Create a Google Sheet with the following structure: | First Name | Email | Emailed | |------------|-------------------|------------| | John | john@example.com | | | Jane | jane@example.com | | Important Notes: Leave the "Emailed" column empty initially The workflow will populate timestamps as emails are sent Only contacts with empty "Emailed" cells will receive emails Step 5: Test and Activate Test the workflow with a few sample contacts Check that emails are being generated and sent correctly Verify that Google Sheets is being updated with timestamps Once satisfied, activate the workflow 📊 Google Sheets Structure Your contact sheet should include these columns: First Name** (required): Used for personalization Email** (required): Recipient email address Emailed** (required): Timestamp tracking (leave empty initially) Optional columns you can add: Last Name Company Phone Notes ⚙️ Customization Options Change Email Frequency Edit the "Daily Trigger (1 PM)" node Modify the schedule (hourly, daily, weekly) Set preferred time zones Adjust Batch Size Edit the "Limit to 10 Contacts" node Change maxItems value (recommend staying under 50) Modify Wait Times Edit the "Random Wait (2-5min)" node Adjust the random delay formula Current: {{ Math.floor(Math.random() * 4) + 2 }} (2-5 minutes) Update Email Content Edit the system message in "AI Email Generator" node Change the joke, signature, or entire email structure Add seasonal content or special promotions 🔧 Troubleshooting Common Issues: Emails not sending Verify Gmail credentials are active Check email quota limits Ensure recipient emails are valid Google Sheets not updating Confirm sheet ID is correct Check column names match exactly Verify Google Sheets credentials AI not generating content Validate OpenAI API key Check API quota and billing Test with different model if needed Rate limiting issues Increase wait times between emails Reduce batch size Check Gmail sending limits 📈 Best Practices Start Small: Begin with 5-10 contacts to test deliverability Monitor Metrics: Track open rates and responses Respect Privacy: Include unsubscribe options Stay Relevant: Update content regularly Follow Regulations: Comply with CAN-SPAM and GDPR 🤝 Contributing to the Community This template is designed to be: Easy to understand**: Clear node names and documentation Production ready**: Includes error handling and rate limiting Customizable**: Template placeholders for personalization Well documented**: Comprehensive setup instructions Feel free to adapt this workflow for your specific healthcare niche! 📄 License This workflow template is provided free to the n8n community under MIT License. 🆘 Support For questions or issues: Check the n8n community forum Review n8n's official documentation Test each node individually to isolate problems Made with ❤️ for the n8n community
by Rahul Joshi
Description Synchronize OKRs (Objectives and Key Results) between Monday.com and Jira to automatically calculate progress variance, update dashboards, and share variance reports via Slack and Outlook. This workflow ensures teams have accurate, real-time visibility into performance metrics and project alignment — without manual reconciliation. 🎯📈💬 What This Template Does Step 1: Triggers daily at a scheduled time to fetch the latest OKRs from Monday.com. ⏰ Step 2: Extracts Key Results and their linked Jira epic keys from the OKR board. 🔗 Step 3: Fetches corresponding Jira epic details such as status, assignee, and last updated date. 🧩 Step 4: Merges Monday.com KR data with Jira epic progress through SQL-style joins. 📋 Step 5: Calculates real-time progress and variance against target goals. 📊 Step 6: Updates Monday.com KR items with actual progress, variance percentage, and status (“On Track”, “At Risk”, or “Ahead”). 🔄 Step 7: Aggregates all KR data into a consolidated report for communication. 📦 Step 8: Sends formatted variance reports to Slack and Outlook, with summaries of owner, progress, and variance metrics. 📢 Key Benefits ✅ Automates end-to-end OKR and Jira synchronization ✅ Eliminates manual progress tracking errors ✅ Provides daily visibility on team and project health ✅ Enables proactive risk detection via variance thresholds ✅ Keeps all stakeholders updated via Slack and Outlook ✅ Centralizes OKR performance metrics for reporting Features Daily scheduled trigger for automatic OKR sync Monday.com → Jira data integration via API Real-time variance computation logic Automatic updates of OKR fields in Monday.com SQL-style data merging and aggregation Slack notification with variance summaries Outlook email digest with formatted HTML tables Requirements Monday.com API credentials with board access Jira API credentials with permission to view epics Slack Bot token with chat:write permissions Microsoft Outlook OAuth2 credentials for sending emails Environment variables for board, channel, and recipient configuration Target Audience Product and engineering teams managing OKRs across platforms 🎯 Project managers tracking cross-tool performance metrics 📋 Leadership teams needing automated OKR reporting 💼 Operations and strategy teams monitoring execution health 🧭 Step-by-Step Setup Instructions Connect your Monday.com, Jira, Slack, and Outlook credentials in n8n. 🔑 Replace MONDAY_BOARD_ID, GROUP_ID, and column identifiers with your own. 🧩 Set environment variables for SLACK_CHANNEL_ID and REPORT_RECIPIENT_EMAIL. 💬 Adjust the cron expression to define your sync frequency (e.g., daily at 9 AM). ⏰ Test the workflow with a single OKR item to confirm successful synchronization. 🧠 Enable the workflow to automate daily OKR variance tracking and reporting. ✅
by Haruki Kuwai
Title (suggested): Extract business card data from Telegram to Google Sheets Who’s it for Teams that receive business cards digitally (sales, marketing, back-office) and want a plug-and-play way to capture contacts into a sheet without manual typing. What it does / How it works This workflow ingests a business card sent to your Telegram bot, detects whether the message contains an image or text, extracts key fields with an AI Vision Agent (company, full name, department, job title, postal code, address, phone, mobile, fax, email, website), and appends or updates a contact row in Google Sheets automatically. How to set up Connect Telegram (bot token) and enable file download. Connect your AI provider (OpenRouter or equivalent) used by the AI Vision Agent. Connect Google Sheets and select your spreadsheet + sheet tab. Rename nodes clearly and keep sticky notes: one overview note (this description) + step notes. Test by sending a sample card image to your bot and verify the row is appended/updated. Requirements Telegram Bot API credential AI chat/vision credential Google Sheets OAuth credential and an accessible spreadsheet How to customize the workflow Map fields to your sheet headers (add/remove columns as needed). Adjust the system prompt to prefer your locale or specific field formats. Change the matching key for update logic (e.g., company name or email). Add downstream steps (CRM push, dedupe rules, notifications). Security note: Do not hardcode API keys or include real IDs/emails. Use credentials and environment configs only. JSON [ { "company_name": "Example Company Ltd.", "department": "Sales", "job_title": "Sales Manager", "full_name": "Taro Yamada", "postal_code": "100-0001", "address": "1-1-1 Marunouchi, Chiyoda-ku, Tokyo", "phone_number": "+81-3-0000-0000", "mobile_phone_number": "+81-90-0000-0000", "fax_number": "+81-3-1111-1111", "email": "example@company.com", "website_url": "https://example.com" } ] Troubleshooting Nothing appears in Google Sheets Solution: Verify that your Google Sheets credentials are correctly authorized. Confirm the Spreadsheet ID and Sheet Name in the node match your target file. Make sure the Google Sheets node is connected downstream of the AI Vision Agent. If the workflow runs successfully but nothing is added, check whether the matching column (company_name) already exists — in appendOrUpdate mode it will only update that row. AI returns incomplete or invalid data Solution: Review the system prompt in the AI Vision Agent to ensure it instructs the model to return a structured JSON object with all required fields (company name, full name, department, job title, address, etc.). If the result is partial, verify the image quality of the uploaded business card — low contrast or skewed images can reduce OCR accuracy. You can reduce temperature in the AI node to make output more deterministic. Workflow doesn’t start automatically Solution: Check that the workflow is activated (toggle is ON in the top right of n8n). Verify the Webhook URL is correctly registered in Telegram’s bot settings. Run manually once to ensure all credentials and nodes are configured correctly.
by Florent
Restore workflows & credentials from FTP - Remote Backup Solution This n8n template provides a safe and intelligent restore solution for self-hosted n8n instances, allowing you to restore workflows and credentials from FTP remote backups. Perfect for disaster recovery or migrating between environments, this workflow automatically identifies your most recent FTP backup and provides a manual restore capability that intelligently excludes the current workflow to prevent conflicts. Works seamlessly with date-organized backup folders stored on any FTP/SFTP server. Good to know This workflow uses n8n's native import commands (n8n import:workflow and n8n import:credentials) Works with date-formatted backup folders (YYYY-MM-DD) stored on FTP servers The restore process intelligently excludes the current workflow to prevent overwriting itself Requires FTP/SFTP server access and proper Docker volume configuration All downloaded files are temporarily stored server-side before import Compatible with backups created by n8n's export commands and uploaded to FTP Supports selective restoration: restore only credentials, only workflows, or both How it works Restore Process (Manual) Manual trigger with configurable pinned data options (credentials: true/false, worflows: true/false) The Init node sets up all necessary paths, timestamps, and configuration variables using your environment settings The workflow connects to your FTP server and scans for available backup dates Automatically identifies the most recent backup folder (latest YYYY-MM-DD date) Creates temporary restore folders on your local server for downloaded files If restoring credentials: Lists all credential files from FTP backup folder Downloads credential files to temporary local folder Writes files to disk using "Read/Write Files from Disk" node Direct import using n8n's import command Credentials are imported with their encrypted format intact If restoring workflows: Lists all workflow JSON files from FTP backup folder Downloads workflow files to temporary local folder Filters out the credentials subfolder to prevent importing it as a workflow Writes workflow files to disk Intelligently excludes the current restore workflow to prevent conflicts Imports all other workflows using n8n's import command Optional email notifications provide detailed restore summaries with command outputs Temporary files remain on server for verification (manual cleanup recommended) How to use Prerequisites Existing n8n backups on FTP server in date-organized folder structure (format: /ftp-backup-folder/YYYY-MM-DD/) Workflow backups as JSON files in the date folder Credentials backups in subfolder: /ftp-backup-folder/YYYY-MM-DD/n8n-credentials/ FTP/SFTP access credentials configured in n8n For new environments: N8N_ENCRYPTION_KEY from source environment (see dedicated section below) Initial Setup Configure your environment variables: N8N_ADMIN_EMAIL: Your email for notifications (optional) FTP_BACKUP_FOLDER: FTP path where backups are stored (e.g., /n8n-backups) N8N_PROJECTS_DIR: Projects root directory (e.g., /files/n8n-projects-data) GENERIC_TIMEZONE: Your local timezone (e.g., Europe/Paris) N8N_ENCRYPTION_KEY: Required if restoring credentials to a new environment (see dedicated section below) Create your FTP credential in n8n: Add a new FTP/SFTP credential Configure host, port, username, and password/key Test the connection Update the Init node: (Optional) Configure your email here: const N8N_ADMIN_EMAIL = $env.N8N_ADMIN_EMAIL || 'youremail@world.com'; Set PROJECT_FOLDER_NAME to "Workflow-backups" (or your preferred name) Set FTP_BACKUP_FOLDER to match your FTP backup path (default: /n8n-backups) Set credentials to "n8n-credentials" (or your backup credentials folder name) Set FTPName to a descriptive name for your FTP server (used in notifications) Configure FTP credentials in nodes: Update the FTP credential in "List Credentials Folders" node Verify all FTP nodes use the same credential Test connection by executing "List Credentials Folders" node Optional: Configure SMTP for email notifications: Add SMTP credential in n8n Activate "SUCCESS email Credentials" and "SUCCESS email Workflows" nodes Or remove email nodes if not needed Performing a Restore Open the workflow and locate the "Start Restore" manual trigger node Edit the pinned data to choose what to restore: { "credentials": true, "worflows": true } credentials: true - Restore credentials from FTP worflows: true - Restore workflows from FTP (note: typo preserved from original) Set both to true to restore everything Update the node's notes to reflect your choice (for documentation) Click "Execute workflow" on the "Start Restore" node The workflow will: Connect to FTP and find the most recent backup Download selected files to temporary local folders Import credentials and/or workflows Send success email with detailed operation logs Check the console logs or email for detailed restore summary Important Notes The workflow automatically excludes itself during restore to prevent conflicts Credentials are restored with their encryption intact. If restoring to a new environment, you must configure the N8N_ENCRYPTION_KEY from the source environment (see dedicated section below) Existing workflows/credentials with the same names will be overwritten Temporary folders are created with date prefix (e.g., 2025-01-15-restore-credentials) Test in a non-production environment first if unsure Critical: N8N_ENCRYPTION_KEY Configuration Why this is critical: n8n generates an encryption key automatically on first launch and saves it in the ~/.n8n/config file. However, if this file is lost (for example, due to missing Docker volume persistence), n8n will generate a NEW key, making all previously encrypted credentials inaccessible. When you need to configure N8N_ENCRYPTION_KEY: Restoring to a new n8n instance When your data directory is not persisted between container recreations Migrating from one server to another As a best practice to ensure key persistence across updates How credentials encryption works: Credentials are encrypted with a specific key unique to each n8n instance This key is auto-generated on first launch and stored in /home/node/.n8n/config When you backup credentials, they remain encrypted but the key is NOT included If the key file is lost or a new key is generated, restored credentials cannot be decrypted Setting N8N_ENCRYPTION_KEY explicitly ensures the key remains consistent Solution: Retrieve and configure the encryption key Step 1: Get the key from your source environment Check if the key is defined in environment variables docker-compose exec n8n printenv N8N_ENCRYPTION_KEY If this command returns nothing, the key is auto-generated and stored in n8n's data volume: Enter the container docker-compose exec n8n sh Check configuration file cat /home/node/.n8n/config Exit container exit Step 2: Configure the key in your target environment Option A: Using .env file (recommended for security) Add to your .env file N8N_ENCRYPTION_KEY=your_retrieved_key_here Then reference it in docker-compose.yml: services: n8n: environment: N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY} Option B: Directly in docker-compose.yml (less secure) services: n8n: environment: N8N_ENCRYPTION_KEY=your_retrieved_key_here Step 3: Restart n8n docker-compose restart n8n Step 4: Now restore your credentials Only after configuring the encryption key, run the restore workflow with credentials: true. Best practice for future backups: Always save your N8N_ENCRYPTION_KEY in a secure location alongside your backups Consider storing it in a password manager or secure vault Document it in your disaster recovery procedures Requirements FTP Server FTP or SFTP server with existing n8n backups Read access to backup folder structure Network connectivity from n8n instance to FTP server Existing Backups on FTP Date-organized backup folders (YYYY-MM-DD format) Backup files created by n8n's export commands or compatible format Credentials in subfolder structure: YYYY-MM-DD/n8n-credentials/ Environment Self-hosted n8n instance (Docker recommended) Docker volumes mounted with write access to project folder Access to n8n CLI commands (n8n import:credentials and n8n import:workflow) Proper file system permissions for temporary folder creation Credentials FTP/SFTP credential configured in n8n Optional: SMTP credentials for email notifications Technical Notes FTP Connection and Download Process Uses n8n's built-in FTP node for all remote operations Supports both FTP and SFTP protocols Downloads files as binary data before writing to disk Temporary local storage required for import process Smart Workflow Exclusion During workflow restore, the current workflow's name is cleaned and matched against backup files This prevents the restore workflow from overwriting itself The exclusion logic handles special characters and spaces in workflow names A bash command removes the current workflow from the temporary restore folder before import Credentials Subfolder Filtering The "Filter out Credentials sub-folder" node checks for binary data presence Only items with binary data (actual files) proceed to disk write Prevents the credentials subfolder from being imported as a workflow Timezone Handling All timestamps use UTC for technical operations Display times use local timezone for user-friendly readability FTP backup folder scanning works with YYYY-MM-DD format regardless of timezone Security FTP connections should use SFTP or FTPS for encrypted transmission Credentials are imported in n8n's encrypted format (encryption preserved) Temporary files stored in project-specific folders Consider access controls for who can trigger restore operations No sensitive credential data is logged in console output Troubleshooting Common Issues FTP connection fails: Verify FTP credentials are correctly configured and server is accessible No backups found: Ensure the FTP_BACKUP_FOLDER path is correct and contains date-formatted folders (YYYY-MM-DD) Permission errors: Ensure Docker user has write access to N8N_PROJECTS_DIR for temporary folders Path not found: Verify all volume mounts in docker-compose.yml match your project folder location Import fails: Check that backup files are in valid n8n export format Download errors: Verify FTP path structure matches expected format (date folder / credentials subfolder / files) Workflow conflicts: The workflow automatically excludes itself, but ensure backup files are properly named Credentials not restored: Verify the FTP backup contains a n8n-credentials subfolder with credential files Credentials decrypt error: Ensure N8N_ENCRYPTION_KEY matches the source environment Error Handling "Find Last Backup" node has error output configured to catch FTP listing issues "Download Workflow Files" node continues on error to handle presence of credentials subfolder All critical nodes log detailed error information to console Email notifications include stdout and stderr from import commands Version Compatibility Tested with n8n version 1.113.3 Compatible with Docker-based n8n installations Requires n8n CLI access (available in official Docker images) Works with any FTP/SFTP server (Synology NAS, dedicated FTP servers, cloud FTP services) This workflow is designed for FTP/SFTP remote backup restoration. For local disk backups, see the companion workflow "n8n Restore from Disk". Works best with backups from: "Automated n8n Workflows & Credentials Backup to Local/Server Disk & FTP"
by Cheng Siong Chin
Introduction Upload invoices via Telegram, receive structured data instantly. Perfect for accountants and finance teams. How It Works Telegram bot receives invoices, downloads files, extracts data using OpenAI, then returns analysis. Workflow Template Telegram Trigger → Document Check → Get File → HTTP Download → AI Extract → Format Response → Send to Telegram Workflow Steps Telegram Trigger: Listens for uploads. Document Check: Validates files; routes errors. Get File: Retrieves metadata. HTTP Download: Fetches content. AI Extract: OpenAI parses invoice fields. Format Response: Structures data. Send Analysis: Delivers to chat. Setup Instructions Telegram Bot: Create via BotFather, add credentials. OpenAI Agent: Add API key and extraction prompt. HTTP Node: Set authentication. Parser: Define invoice schema. Error Handling: Configure fallbacks. Prerequisites n8n instance Telegram Bot Token OpenAI API key Customization Database storage Accounting software integration Benefits Eliminates manual entry Reduces errors
by Ali Amin
🎯 Accounting Alerts Automation Purpose: Automatically track Companies House filing deadlines for UK accounting firms and prevent costly penalties (£150-£1,500 per missed deadline). How it works: Daily automated checks pull live deadline data from Companies House API Color-coded email alerts (Red/Orange/Yellow/Green) prioritize urgent deadlines Interactive "Yes/No" buttons let recipients confirm completion status All data syncs back to Google Sheets for complete audit trail Value: Saves 2-3 hours/week per firm while eliminating manual tracking errors. ⚙️ Daily Deadline Check & Alert System Runs: Every weekday at 5 PM (Mon-Fri) What happens: Read Company Database - Fetches all tracked companies from Google Sheets Get Company Data - Pulls live filing deadlines from Companies House API for each company Update Due Dates - Syncs latest deadline data back to the tracking sheet Build Interactive Email - Creates HTML email with: Color-coded urgency indicators (days remaining) Sortable table by due date Clickable Yes/No confirmation buttons for each company Send via Gmail - Delivers consolidated report to accounting team Why automated: Manual deadline checking across 10-50+ companies is time-consuming and error-prone. This ensures nothing falls through the cracks. ✅ Email Response Handler (Webhook Flow) Triggered when: Recipient clicks "Yes" or "No" button in the alert email What happens: Webhook - Receives confirmation status (company_number, company_name, yes/no) Process Data - Extracts response details from the webhook payload Update Sheet - Records confirmation status in Google Sheets with timestamp Confirmation Page - Displays success message to user Why this matters: Provides instant feedback to the user and creates an audit trail of who confirmed what and when. No separate tracking system needed—everything updates automatically in the same spreadsheet. Result: Accountability without administrative burden. 📋 Setup Requirements Google Sheets Database Structure: Create a sheet with these columns: company_number (manually entered) company_name (manually entered) accounts_due (auto-updated) confirmation_due (auto-updated) confirmation_submitted (updated via email clicks) last_updated (auto-timestamp) Required Credentials: Google Sheets OAuth (for reading/writing data) Companies House API key (free from api.company-information.service.gov.uk) Gmail OAuth (for sending alerts) Webhook Configuration: Update webhook URL in "Build Interactive Email" node to match your n8n instance. Time to Setup: ~15 minutes once credentials are configured.
by Rahul Joshi
Description Automate your AI-powered outreach and follow-up pipeline end-to-end with GPT-4o, Gmail, and Google Sheets. 🤖📬 This workflow personalizes emails for each lead, manages follow-ups automatically, tracks client replies, and updates CRM records in real time — all from a single Google Sheet. Ideal for sales and growth teams looking to convert leads faster without manual effort. ⚙️🚀 What This Template Does 1️⃣ Starts manually when you click “Execute workflow.” 🕹️ 2️⃣ Fetches all leads from the Google Sheet (sample_leads_50). 📊 3️⃣ Validates email format and filters only active (unbooked) leads. 🔍 4️⃣ Uses Azure OpenAI GPT-4o to generate short, personalized outreach emails in HTML. ✉️ 5️⃣ Cleans and parses the AI output (subject + HTML body). 🧠 6️⃣ Sends the first outreach email via Gmail and stores its thread ID. 📤 7️⃣ Waits 24 hours, then checks for a client reply in the Gmail thread. ⏱️ 8️⃣ If a positive reply is found → marks lead as BOOKED and updates in Sheets. ✅ 9️⃣ If no reply → triggers a polite follow-up email, waits again 24 hours, and checks the thread a second time. 🔁 🔟 If a second reply is found → marks BOOKED and logs the client message. 1️⃣1️⃣ If still no response → updates status to Declined in Google Sheets. ❌ 1️⃣2️⃣ Logs invalid or incomplete leads to a separate sheet for data cleanup. 🧾 Key Benefits ✅ Eliminates manual outreach and follow-up effort. ✅ Produces personalized, context-aware AI emails for every lead. ✅ Auto-tracks replies and updates CRM status with zero input. ✅ Prevents duplicate or repeated contact with booked clients. ✅ Keeps lead database synchronized and audit-ready. Features Google Sheets integration for dynamic lead retrieval and updates. Regex-based email validation for clean data pipelines. Azure OpenAI GPT-4o for contextual email writing. Two-stage Gmail automation (initial + follow-up). JavaScript parsing for AI output and Gmail thread analysis. Automated 24-hour wait and recheck logic. Conditional branches for Booked / Declined / Invalid outcomes. End-to-end CRM synchronization without manual review. Requirements Google Sheets OAuth2 credentials with read/write access. Azure OpenAI API key for GPT-4o model access. Gmail OAuth2 credentials with send, read, modify permissions. Environment Variables GOOGLE_SHEET_LEADS_ID GOOGLE_SHEET_OUTREACH_TAB_ID AZURE_OPENAI_API_KEY GMAIL_OAUTH_CLIENT_ID GMAIL_OAUTH_SECRET Target Audience 💼 Sales and Business Development teams automating outreach. 📈 Marketing and Growth teams running re-engagement campaigns. 🤖 Automation and RevOps teams integrating AI lead workflows. 💬 Freelancers and agencies managing large prospect lists. 📊 Operations teams maintaining CRM cleanliness and tracking. Step-by-Step Setup Instructions 1️⃣ Connect your Google Sheets, Azure OpenAI, and Gmail credentials. 2️⃣ Set your Google Sheet ID and tab name (outreach automation). 3️⃣ Update the GPT-4o system prompt to match your tone and signature. 4️⃣ Verify column headers (Company Name, Email, Booking Status, etc.). 5️⃣ Test the email validation branch with sample data. 6️⃣ Run once manually to confirm Gmail thread creation and reply detection. 7️⃣ Confirm successful CRM updates in Google Sheets. 8️⃣ Activate for continuous lead outreach and follow-up automation. ✅
by takuma
Who’s it for This template is for individuals or households who want to: Easily digitize and track their spending from physical receipts. Automate budget management and financial reporting. Get quick insights into their spending habits on a daily and monthly basis. Stay informed about their remaining budget through Slack notifications. What it does This workflow automates your household budget tracking in several steps: Receipt Photo Upload: You upload a photo of your receipt to a webhook. Parse Receipt: An AI agent extracts the date, store name, purchased items, and total amount from the receipt text. Add to Budget Sheet: The extracted data is then appended to your designated Google Sheet. Daily Budget Report: After each receipt entry, the workflow calculates your current month's spending, remaining budget, and sends a summary to Slack. Monthly Budget Report: Once a day (triggered by a cron job), it reads all budget data for the current month from Google Sheets, performs an analysis (total spending, daily average, top stores, items, and spending days), and sends a comprehensive report to Slack. How to set up Requirements n8n Account**: Self-hosted or Cloud. Google Sheets**: A Google Sheet set up with columns for "Date", "Store", "Items", and "Amount". Slack Workspace**: A Slack channel where you want to receive budget updates. OpenRouter Account**: An API key for OpenRouter to use their chat models. Steps Google Sheets Setup: Create a new Google Sheet (or use an existing one) and name it "Household Budget". In the first sheet (e.g., "Sheet1"), set up the following headers in the first row: "Date", "Store", "Items", "Amount". Share the Google Sheet with the service account email associated with your n8n Google Sheets credentials, granting "Editor" access. In the 'Add to Budget Sheet' and 'Get Budget Sheet (Daily)' nodes, select your Google Sheet and the appropriate sheet name. OpenRouter Credentials: Sign up or log in to OpenRouter (https://openrouter.ai/). Generate an API key. In n8n, create a new "OpenRouter" credential using your API key. Apply this credential to the 'OpenRouter Chat Model1', 'OpenRouter Chat Model2', and 'OpenRouter Chat Model' nodes. Slack Credentials: In n8n, create a new "Slack" credential. Follow the instructions to connect your Slack workspace. In the 'Send a message' and 'Send monthly report' nodes, select the Slack channel where you want to receive messages. Make sure the Slack app has permission to post to the selected channels. Webhook URLs: After activating the workflow, the 'Receipt Photo Upload' node will generate a webhook URL. Copy this URL. You will use this URL to send receipt text (e.g., from a mobile app that scans text). Monthly Budget Adjustment: In the 'Code in JavaScript2' node, locate the line const budget = 30000; and change 30000 to your desired monthly budget in JPY. How to customize the workflow Daily Report Trigger The 'Daily Report Trigger' node is set to run once a day. You can modify its schedule to trigger more or less frequently by adjusting its cron settings. AI Model You can change the AI models used in the 'OpenRouter Chat Model' nodes to any other large language model supported by n8n, such as OpenAI, Anthropic, or custom hosted models, by updating the credentials and model names. Output Formatting The Slack messages generated by the 'Report Budget' and 'Monthly Report' nodes can be customized by editing the systemMessage and text parameters in those nodes to change the tone, content, or language of the reports. Additional Integrations You can extend this workflow by adding more nodes: Integrate with other accounting software. Send notifications to different platforms (e.g., email, Discord, Telegram). Add sentiment analysis to your spending habits. Categorize expenses automatically based on items or stores using another AI node.
by Oneclick AI Squad
This automated workflow monitors your website's keyword rankings daily and sends instant alerts to your team when significant ranking drops occur. It fetches current ranking positions, compares them with historical data, and triggers notifications through Slack and email when keywords drop beyond your defined threshold. Good to know The workflow uses SERP API for accurate ranking data; API costs apply based on your usage volume Ranking checks are performed daily to avoid overwhelming search engines with requests The system tracks ranking changes over time and maintains historical data for trend analysis Slack integration requires workspace permissions and proper bot configuration False positives may occur due to personalized search results or data center variations How it works Daily SEO Check Trigger** initiates the workflow on a scheduled basis Get Keywords Database** retrieves your keyword list and current ranking data Filter Active Keywords Only** processes only keywords marked as active for monitoring Fetch Google Rankings via SERP API** gets current ranking positions for each keyword Wait For Response** Wait for gets current ranking positions Parse Rankings & Detect Changes** compares new rankings with historical data and identifies significant drops Filter Significant Ranking Drops** isolates keywords that dropped beyond your threshold (e.g., 5+ positions) Send Slack Ranking Alert** notifies your team channel about ranking drops Send Email Ranking Alert** sends detailed email reports to stakeholders Update Rankings in Google Sheet** saves new ranking data for historical tracking Generate SEO Monitoring Summary** creates a comprehensive report of all ranking changes How to use Import the workflow into n8n and configure your SERP API credentials Set up your Google Sheet with the required keyword database structure Configure Slack webhook URL and email SMTP settings Define your ranking drop threshold (recommended: 5+ position drops) Test the workflow with a small keyword set before full deployment Schedule the workflow to run daily during off-peak hours Requirements SERP API account** with sufficient credits for daily keyword checks Google Sheets access** for keyword database and ranking storage Slack workspace** with webhook permissions for team notifications Email service** (SMTP or API) for stakeholder alerts Keywords database** properly formatted in Google Sheets Database/Sheet Columns Required Google Sheet: "Keywords Database" Create a Google Sheet with the following columns: | Column Name | Description | Example | |-------------|-------------|---------| | keyword | Target keyword to monitor | "best seo tools" | | domain | Your website domain | "yourwebsite.com" | | current_rank | Latest ranking position | 5 | | previous_rank | Previous day's ranking | 3 | | status | Monitoring status | "active" | | target_url | Expected ranking URL | "/best-seo-tools-guide" | | search_volume | Monthly search volume | 1200 | | difficulty | Keyword difficulty score | 65 | | date_added | When keyword was added | "2025-01-15" | | last_checked | Last monitoring date | "2025-07-30" | | drop_threshold | Custom drop alert threshold | 5 | | category | Keyword grouping | "Product Pages" | Customising this workflow Modify ranking thresholds** in the "Filter Significant Ranking Drops" node to adjust sensitivity (e.g., 3+ positions vs 10+ positions) Add competitor monitoring** by duplicating the SERP API node and tracking competitor rankings for the same keywords Customize alert messages** in Slack and email nodes to include your brand voice and specific stakeholder information Extend to multiple search engines** by adding Bing or Yahoo ranking checks alongside Google Implement ranking improvement alerts** to celebrate when keywords move up significantly Add mobile vs desktop tracking** by configuring separate SERP API calls for different device types
by Anatoly
AI-Powered Voice Appointment Booking with ElevenLabs Transform your appointment scheduling with this production-ready workflow that connects ElevenLabs voice AI to your Google Calendar. Patients can call and book appointments naturally through conversation, while the system handles real-time availability checking, calendar management, and automated confirmations—completely hands-free. 🎯 What It Does: Voice-Activated Booking: Patients speak naturally to book appointments via ElevenLabs AI agent Real-Time Availability: Instantly checks calendar conflicts and returns available time slots Smart Scheduling: Automatically generates available 30-minute slots across business hours for the next 30 days Calendar Sync: Creates Google Calendar events with all appointment details, locations, and attendees Email Confirmations: Sends personalized HTML confirmation emails with appointment details and preparation instructions Dual Functionality: Handles both "check availability" queries and "book appointment" requests through a single webhook 💼 Perfect For: Medical/dental clinics • Beauty salons • Spas • Consulting services • Legal offices • Fitness studios • Therapy practices • Any appointment-based business seeking 24/7 automated scheduling Real conversation example: Voice version: https://drive.google.com/file/d/1CjhyjICTtLioA737SOkpbgcdLdUpVCr3/view Text version: ++AI Voice Assistant++ (00:00) Hello, I'm Ella from Evergreen Clinic. How can I assist you today? ++Patient++ (00:05) Hello Ella, I wanted to book an appointment for Botox treatment. ++AI Voice Assistant++ (00:11) I'd be happy to help you schedule a Botox appointment. Our Botox treatments take about 20 minutes and are performed by Dr. Sava or our nurse injector Sarah. Would you prefer our Zurich or Bern location? ++Patient++ (00:24) I prefer Zurich. ++AI Voice Assistant++ (00:28) great Zurich it is. Do you have a specific date in mind for your Botox appointment? ++Patient++ (00:32) Yeah, October the 7th and let's say 5 p.m. ++AI Voice Assistant++ (00:47) I have the 5 p.m. slot available on October 7th in Zurich. May I have your first name to proceed with the booking? ++Patient++ (00:54) Yes, my first name Anatoly, surname Sava. ++AI Voice Assistant++ (01:02) Thank you, Anatoly Sava. Could you please provide your email address for the appointment confirmation? Please spell it out slowly. ++Patient++ (01:08) [Your Email] ++AI Voice Assistant++ (01:19) Thank you. Just to confirm, your email is [Your Email] correct? ++Patient++ (01:29) Yes. ++AI Voice Assistant++ (01:34) Perfect. Lastly, may I have your phone number to complete the booking? ++Patient++ (01:39) My phone number is [Your Number] ++AI Voice Assistant++ (01:51) Thank you for the details, Anatoly. I will now book your Botox appointment in Zurich on October 7th at 5 p.m. Perfect. I've booked your Botox appointment at our Zurich clinic on October 7th at 5 p.m. A confirmation email will be sent to [Your Email]. Thank you for choosing Evergreen Clinic. If you have any questions before your appointment, please don't hesitate to call us back. Have a wonderful day. ++Patient++ (02:19) Perfect. You too. ++AI Voice Assistant++ (02:22) Thank you, take care and have a great day ahead. 🔧 Technical Features: Intelligent routing logic distinguishes between availability checks and booking requests Custom JavaScript algorithm calculates conflict-free time slots Timezone-aware date/time handling (customizable for any timezone) Configurable business hours, appointment duration, and look-ahead period Natural language date formatting for voice responses Webhook-based architecture for seamless ElevenLabs integration 📋 Requirements: ElevenLabs account (for voice agent) Google Calendar Gmail address for confirmations ⚡ Quick Setup: Step 1: n8n Configuration Connect your Google Calendar, customize business hours in the code node, update clinic details in the email template. Includes pinned test data for easy testing before going live. Step 2: ElevenLabs Agent Setup 1) Create a new Conversational AI Italicagent in ElevenLabs 2) Configure two tools into ElevenLabs with webhook URL pointing to this workflow: check_availability(date, time, appointmentType, location) book_appointment(fullName, email, phone, date, time, appointmentType, location) Create a detailed system prompt defining your agent's identity, personality, tone of voice, and conversation behavior This is a chunk of a system prompt (the full version is too long): IDENTITY You are Ella, an appointment scheduling voice assistant for Evergreen Clinic, which specializes in plastic surgery procedures. Your primary purpose is to efficiently schedule, confirm, reschedule, or cancel appointments while providing accurate information about services from your knowledge files only. VOICE & STYLE Use a friendly, professional yet warm tone suitable for a plastic surgery clinic Keep all your responses short and simple. Use casual language, phrases like "Umm..", "Well...", and "I mean" are preferred. NEVER interrupt a patient if they start talking This is a voice conversation, so keep your responses short, like in a real conversation. Don't ramble for too long. Keep responses concise (8-15 words per sentence ideal) Use natural speech patterns with occasional phrases like "I understand" and "Of course..." Insert brief pauses between information chunks to sound natural Show empathy and sensitivity appropriate for plastic surgery clients Never rush the caller, but keep the conversation focused Maintain a reassuring tone when discussing procedures Zürich — pronounce /ˈtsyːʁɪç/. In plain terms: start with “ts”, the ü is like French u in tu (rounded front, not “oo”), stress the first syllable, and the final “ch” is the soft German sound as in ich (not “k”). Avoid saying “ZOO-rich.” Bern — pronounce /bɛrn/. Short e like in bet, single r (not American “urn”), no extra vowel at the end. Avoid saying “BURN.” Full ElevenLabs set up guide: https://youtu.be/kbiWe93nFMk?si=_bQYIoq1cjXKO5kl 🎁 What You Get: Complete end-to-end automation with detailed sticky note documentation, live conversation example, video tutorial, system prompt template, customization guides, troubleshooting tips, and security best practices.
by Dahiana
Send personalized pet care tips from Google Sheets with AI Automate weekly pet wellness emails with AI-generated, location and age-specific advice. Who's it for Pet care businesses, veterinary clinics, pet subscription services, and animal shelters sending regular wellness content to pet owners. How it works Loads pets data from Google Sheets Filters pets who haven't received email in 7+ days Calculates age from birthdate (formats as "2 years and 3 months") AI generates tip - GPT-4o-mini creates climate-aware, veterinary-aligned advice based on pet type, age, and location Sends email via Gmail or SendGrid Updates timestamp in sheet to prevent duplicates Logs activity to tracking sheet Requirements APIs: Google Sheets, Airtable, Typeform or similar OpenAI (GPT-4o-mini) Gmail OAuth2 OR SendGrid, you can use Brevo, Mailchimp or any other. Google Sheet Structure: Sheet 1: Pets | Email | Owner_Name | Pet_Name | Pet_Type | Date_of_Birth | Country (ISO) | Status | Last_Email_Sent | |-------|------------|----------|----------|---------------|---------------|--------|-----------------| Sheet 2: Email_Log | Timestamp | Parent_Email | Pet_Name | Tip_Category | Status | |-----------|--------------|----------|--------------|--------| How to set up Create Google Sheet with structure above, add 2-3 test pets. Import workflow and add credentials. Update nodes: "Load Pet Info": Set your Sheet ID "Update Last_Email_Sent Date": Set Sheet ID "Log to Email_Log Sheet": Set Sheet ID Test manually with 1 active pet Enable schedule (default: Mondays 9am) How to customize Switch email provider: Enable "Send via SendGrid" node Disable "Send Health Tip using Gmail" node Update template ID Modify AI prompt: Edit "Generate Personalized Tip" node Adjust temperature Add/remove categories Use cases beyond pets Same workflow works for: Plant care** (growth stage tips) Baby milestones** (age-based parenting advice) Fitness coaching** (experience level workouts) Language learning** (study streak motivation) Just update sheet columns and AI prompt. Notes Choose only one mailing service. Country codes use ISO format (US, UK, AU, CA, etc.) AI considers location for seasonal advice.