by Nikan Noorafkan
🚀 Channable + Google Ads + Relevance AI: Scalable AI Workflow for Automated Ad Copy Generation & Publishing 🧩 Overview This workflow automates the entire ad creation process for Google Ads by integrating product data, AI-generated copy, compliance checks, and publication into your marketing pipeline. It connects n8n, Relevance AI, Google Sheets, and optionally Channable to: Fetch product data from your catalog Generate Google Text Ad headlines and descriptions using Relevance AI Validate character limits and ensure Google Ads compliance Route non-compliant ads to a Slack review channel Save compliant, ready-to-publish ads in Google Sheets Notify your marketing team automatically after each generation cycle 🧠 Key Benefits ✅ 100% automated ad copy pipeline ✅ AI-generated, human-quality Google Ads text ✅ Built-in compliance verification (Google Ads policy) ✅ Google Sheet integration for team review ✅ Daily automatic schedule (zero manual effort) ✅ Slack alerts for QA and transparency ✅ Modular design — extendable for Shopping and Performance Optimization ✅ Scalable for 10 → 10,000+ product ads ⚙️ System Architecture Tech Stack n8n** – Automation Orchestrator Relevance AI** – AI tools for copy generation and policy compliance Google Sheets** – Data storage and team collaboration Slack** – Real-time alerts and notifications (Optional) Channable – Product feed integration 🧭 Workflow Logic Daily Trigger (00:00) ⬇️ 1️⃣ Get Product Feed (Channable or custom API) ⬇️ 2️⃣ Split Into Batches (50 products each) ⬇️ 3️⃣ Generate Ad Copy (Relevance AI tool → Claude 3.5 prompt) ⬇️ 4️⃣ Validate Character Limits (JS node: max 30 headline / 90 description) ⬇️ 5️⃣ Compliance Check (Relevance AI agent → Google Ads policies) ⬇️ 6️⃣ IF Compliant → CSV / Google Sheets ↳ ❌ Non-Compliant → Slack Alert ⬇️ 7️⃣ Aggregate Batches + Generate CSV ⬇️ 8️⃣ Save to Google Sheets (“Generated Ads” tab) ⬇️ 9️⃣ Slack Notification → Summary Report 📋 Environment Variables Set these in n8n → Settings → Variables → Add Variable Copy-paste from your ENVIRONMENT_VARIABLES_CORRECTED.txt. Includes: ✅ Relevance AI region, API key, tool & agent IDs ✅ Google Ads, Merchant Center, and Sheets credentials ✅ Slack channel name ✅ Optional Channable endpoint Example: RELEVANCE_AI_API_URL=https://api-f1db6c.stack.tryrelevance.com/latest RELEVANCE_TOOL_AD_COPY_ID=bueQG8io04dw RELEVANCE_AGENT_COMPLIANCE_ID=xT29mQ4QKsl GOOGLE_SHEET_ID=1q2w3e4r5t6y7u8i9o0p SLACK_CHANNEL=#google-ads-automation 🏗️ Node-by-Node Breakdown | Node | Description | Endpoint / Logic | | -------------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------- | | 🕓 Schedule Trigger | Runs daily at 00:00 | Cron 0 0 * * * | | 📦 Get Product Feed | Pulls product data from Channable or custom API | GET {{$env.CHANNABLE_API_URL}}/v1/projects/{{$env.PROJECT_ID}}/items | | 🧮 Split Into Batches | Processes 50 products at a time | Avoids rate limits | | ✍️ Generate Ad Copy (Relevance AI) | Calls AI tool for each product | POST {{$env.RELEVANCE_AI_API_URL}}/tools/google_text_ad_copy_generator/run | | 🔍 Validate Character Limits | JS validation (≤30 headline / ≤90 description) | Truncates smartly | | 🧠 Compliance Check Agent | Verifies Google Ads compliance | POST {{$env.RELEVANCE_AI_API_URL}}/agents/google_ads_compliance_checker/run | | ⚖️ IF Compliant | Routes APPROVED vs REJECTED | "contains 'APPROVED'" | | 💾 Format for CSV | Formats compliant ads for export | Maps ID, headline, desc, URLs | | 📊 Aggregate Batches | Combines all results | Merges datasets | | 🧱 Generate CSV File | Converts JSON → CSV | Escaped string-safe format | | 📑 Save to Google Sheets | Saves reviewed ads | Sheet: Generated Ads | | 📢 Slack Notification (Success) | Posts completion summary | Shows ad count, timestamp | | 🚨 Slack Alert (Non-Compliant) | Notifies team for review | Includes issues, category | 🔑 API Authentication Setup 🔹 Relevance AI Create “HTTP Header Auth” credential Header Name: Authorization Header Value: Bearer {{$env.RELEVANCE_AI_API_KEY}} 🔹 Google Sheets Credential type: “Google OAuth2 API” Scopes: https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.file 🔹 Slack Create Slack App → Add Bot Token Scopes → chat:write Paste token in n8n “Slack API” credential. 🔹 (Optional) Channable Header Auth: Bearer {{$env.CHANNABLE_API_TOKEN}} 🧩 Google Sheet Template Sheet name: Generated Ads Columns: | product_id | headline | description | final_url | display_url | generated_at | Optional: Add compliance_status or notes columns for QA. ⚙️ Testing Procedure Manual Trigger: Disable the schedule → click “Execute Workflow”. Batch Size: Start small (3 products). Expected Output: ✅ Ad copy generated ✅ Character limits validated ✅ Slack alerts for rejects ✅ Google Sheet filled Check logs in Executions for errors. Re-enable the cron trigger after successful validation. 🧾 Example Output | product_id | headline | description | final_url | display_url | generated_at | | ---------- | ------------------ | --------------------------------------------- | ------------------------------------------------ | ----------- | -------------------- | | 12243 | “Eco Bamboo Socks” | “Soft, breathable comfort for everyday wear.” | https://shop.com/socks | shop.com | 2025-10-22T00:00:00Z | 📬 Slack Alert Templates ✅ Success Notification ✅ Google Ads Generation Complete 📊 Summary: • Total Ads Generated: 50 • Saved to Google Sheets: Generated Ads • Timestamp: 2025-10-22T00:00:00Z ⚠️ Non-Compliant Alert ⚠️ Non-Compliant Ad Flagged Product: Bamboo Socks Issues: Contains “Free Shipping” Headline too long Timestamp: 2025-10-22T00:00:00Z 🧰 Maintenance & Monitoring | Frequency | Task | | --------- | -------------------------------- | | Daily | Check Slack alerts for rejects | | Weekly | Review ad performance metrics | | Monthly | Update Relevance AI prompts | | Quarterly | Refresh API tokens and variables | 📊 Success Metrics ✅ Compliance approval rate: >85% 🚫 Disapproval rate: <5% 📈 CTR improvement: +15–25% ⏱️ Time saved: 10–15 hours/week 🌐 Scalable: 1,000+ ads/day 🪜 Next Steps Deploy and monitor for 7 days. After 30 days → activate Workflow 2: Performance Optimization Loop. Extend to Shopping Feed Optimization. Add multi-language generation using Relevance AI. Integrate Google Ads API publishing (full automation). 🔗 Resources n8n Docs Relevance AI Docs Google Ads API Merchant API Channable Help 🎉 Conclusion You now have a production-ready, scalable AI-powered ad generation system integrating Channable, Google Ads, and Relevance AI — built entirely on n8n. This delivers: 💡 AI creativity at scale ✅ Google Ads policy compliance ⚙️ Hands-free daily automation 📊 Transparent reporting and collaboration > Start small → validate → scale to 10,000+ ads per day. > Within weeks, you’ll have a self-learning, always-on ad pipeline driving consistent performance.
by Ian Kerins
Overview This n8n template automates the generation of local business leads by scraping Google Maps. It goes beyond basic search results by visiting individual business pages to extract detailed contact information, reviews, and attributes (like LGBTQ+ friendly status). It includes built-in deduplication against a Google Sheet to ensure you only receive alerts for new leads. Who is this for? Marketing Agencies**: Finding local clients for services. Sales Teams**: Building lists of prospects in specific cities. Recruiters**: Finding businesses in specific niches. Researchers**: Gathering data on local business landscapes. What problems it solves Manual Data Entry**: Eliminates the need to copy-paste business details from Maps. Duplicate Leads**: Automatically checks against your database to prevent duplicate entries. Incomplete Data**: Performs a "deep scrape" to get data often missing from list views (websites, full phone numbers, reviews). Delayed Action**: Sends instant alerts via Gmail and Slack so you can act on new leads immediately. How it works Input: Takes a city name via a form (or can be scheduled). Search: Uses ScrapeOps to search Google Maps for your target keyword (e.g., "Dentist"). Deep Extraction: Visits each business profile to scrape phone numbers, websites, ratings, and reviews. Validation: Compares found businesses with your existing Google Sheet database. Action: Saves new leads to the sheet and notifies you via Gmail and Slack. Set up steps (~ 10-15 minutes) ScrapeOps Account: Register for a free API key at ScrapeOps. Google Sheet: Create a new Google Sheet. Add these headers: businessName, phone, website, rating, totalReviews, address, city, category, mapUrl, status, checkedAt, lgbtqFriendly, review1, review2, review3. Or duplicate this Template Sheet. Configure Nodes: Set Google Maps Configuration: Set your keyword (e.g., "dentist", "plumber"). Google Sheets Nodes: Connect your account and select the sheet you created. Gmail & Slack Nodes: Update with your email address and Slack channel. Pre-conditions An n8n instance (Cloud or Self-hosted). A ScrapeOps API Key (Free tier available). Google Cloud Console project with Gmail and Sheets APIs enabled (for credentials). Disclaimer This template uses ScrapeOps as a community node. You are responsible for complying with Google's Terms of Use, robots directives, and applicable laws in your jurisdiction. Scraping targets may change at any time; adjust render/scroll/wait settings and parsers as needed. Use responsibly for legitimate business purposes. Key Features The ScrapeOps n8n node provides access to three main APIs: 1. Proxy API Access to ScrapeOps' proxy aggregator for reliable web scraping: Smart proxy rotation across multiple providers JavaScript rendering support Anti-bot bypass capabilities Geo-targeting options Mobile and residential proxy support Full Documentation: n8n Proxy API Aggregator 2. Parser API Extract structured data from popular websites without maintaining your own parsers: Supported Sites:** Amazon, eBay, Walmart, Indeed, Redfin Page Types:** Product pages, search results, reviews, categories Returns clean, structured JSON data Full Documentation: n8n Parser API 3. Data API Direct access to structured data endpoints: Amazon Product API:** Get product details by ASIN or URL Amazon Search API:** Search products and get structured results Full Documentation: n8n Data APIs
by masahiro hanawa
Who is this for? This template is ideal for event organizers, conference managers, and community teams who need an automated participant management system. Perfect for workshops, conferences, meetups, or any event requiring registration and check-in tracking. What this workflow does This workflow provides end-to-end event management with two main flows: Registration Flow: ⦁ Receives participant registration via webhook ⦁ Generates unique ticket ID and stores in Google Sheets ⦁ Creates QR code using the QR Code node ⦁ Sends confirmation email with QR code attached Check-in Flow: ⦁ Scans and decodes QR code at venue entrance ⦁ Validates ticket against participant database ⦁ Blocks duplicate check-ins with clear error messages ⦁ Sends Slack notification for VIP arrivals ⦁ Returns real-time attendance statistics Setup Create a Google Sheet with columns: Ticket ID, Event ID, Name, Email, Ticket Type, Registered At, Checked In, Check-in Time Connect your Google Sheets and Gmail credentials Configure Slack for VIP notifications Set up the webhook URLs in your registration form Requirements ⦁ Google Sheets (participant database) ⦁ Gmail account (confirmation emails) ⦁ Slack workspace (VIP notifications) How to customize ⦁ Add capacity limits by checking row count before registration ⦁ Modify QR code size and format in the QR Code node ⦁ Add additional ticket types beyond VIP/standard ⦁ Integrate with payment systems for paid events
by Rahul Joshi
Description This workflow automatically detects bounced or invalid email addresses from your Gmail inbox and updates their status in Google Sheets. It fetches bounce notifications, extracts failed email addresses, and matches them against your contact list to update each record’s status as “Not Found” (bounced) or “Not Sent” (no bounce). Additionally, it runs a daily scheduled summary that sends bounce statistics to Slack, helping marketing or sales teams maintain clean, up-to-date mailing lists. What This Template Does (Step-by-Step) 📬 Fetch Bounce Notifications from Gmail Retrieves bounce messages automatically filtered by sender mailer-daemon@googlemail.com. 🔢 Get Latest 5 Bounces Sorts all bounce emails by date and limits processing to the five most recent to keep performance fast and focused. 🔍 Parse Bounced Email Addresses Extracts failed email addresses from Gmail message snippets using regex pattern matching. 📋 Fetch All Email Contacts from Google Sheets Loads all contact records from your “Fraud Email” sheet, including columns like Name, Email, Status, and Last Updated. 🔗 Combine Bounce Data with Contact List Merges parsed bounce results with your existing contact data to prepare for status updates. ✅ Match & Update Contact Status Marks “Not Found” for bounced emails. Marks “Not Sent” for valid but inactive ones. Updates “Last Updated” timestamp for all. 💾 Write Updated Status Back to Sheet Pushes updated contact information (Status and Last Updated) back into Google Sheets, ensuring centralized record accuracy. ⏰ Daily 7PM Trigger Automatically starts the summary workflow every evening at 7:00 PM. 🧮 Calculate Summary Statistics Counts total invalid emails (“Not Found”) and inactive ones (“Not Sent”). 💬 Send Slack Daily Summary Sends a formatted report to your #email-cleanup Slack channel showing: 📧 Invalid email count 📭 No activity count ✅ Reminder to maintain list hygiene Prerequisites Gmail account connected with n8n Google Sheet (Fraud Email) with contact data Slack workspace and channel for daily reports n8n instance (cloud or self-hosted) Step-by-Step Setup Connect Gmail → Fetch bounce notifications. Add Google Sheet → Load and update contact data. Parse bounces → Identify failed email addresses. Merge & update → Sync statuses in Google Sheet. Enable daily trigger → Schedule Slack summaries. Customization Ideas 🎯 Expand bounce limit beyond 5 recent messages. 📢 Add a Gmail label like “Bounced” after processing. 📚 Integrate with HubSpot or Airtable for CRM sync. 💡 Include timestamps or sender domains in Slack summary. Key Benefits ✅ Keeps mailing lists accurate and deliverable ✅ Saves hours of manual bounce management ✅ Automates email hygiene with zero supervision ✅ Provides transparent daily Slack reports ✅ 100% automated, efficient, and scalable Perfect For 👥 Marketing and outreach teams managing bulk campaigns 🏢 Businesses maintaining verified contact databases 📊 Sales teams using Gmail and Google Sheets ⚙️ Agencies ensuring top-tier email deliverability
by ben daamer
Who it's for Legal, Procurement, and Compliance teams at mid-size companies. ESN and agencies selling AI-powered contract review as a service. How it works Upload a contract PDF through a rich form (with metadata: contract type, counterparty, department, submitter). The workflow first checks Supabase for duplicates to avoid re-analyzing the same contract. Then it runs a two-pass AI analysis: Pass 1 classifies the contract (type, parties, dates, jurisdiction), Pass 2 performs deep risk analysis (clause-by-clause risk levels, missing clauses, obligations, negotiation points, compliance flags). Results are scored 0–100 with risk levels (CRITICAL / HIGH / MEDIUM / LOW). A structured report is generated as both Slack Block Kit (rich formatting) and HTML email. High-risk contracts trigger a Slack alert with full blocks and an email report to the submitter. Low-risk contracts get a summary Slack notification. All analyses are stored in Supabase with full metadata for audit. An Error Trigger sends admin notifications to a dedicated Slack channel. How to set up Run the SQL from the "Supabase Schema" sticky note in Supabase SQL Editor. Set environment variables: SUPABASE_URL, SUPABASE_SERVICE_KEY. Add credentials in n8n: OpenAI (Header Auth), Supabase, Slack, Gmail (optional). Configure the Config node: RISK_THRESHOLD, SLACK_CHANNEL, ADMIN_SLACK_CHANNEL, AI_MODEL, ALERT_EMAIL, ENABLE_EMAIL, CONTRACT_LANG. Activate the workflow and share the Form URL with your team.
by Daniel Shashko
How it Works This workflow automatically monitors your Gmail support inbox every minute for new unread messages, instantly sending each email to OpenAI for intelligent analysis. The AI engine evaluates sentiment (Positive/Neutral/Negative/Critical), urgency level (Low/Medium/High/Critical), and categorizes requests into Technical, Billing, Feature Request, Bug Report, or General Inquiry, while extracting key issues and generating professional response templates. The system calculates a priority score (0-110 points) by combining urgency weight (25 points per level) with sentiment impact (10 points per level), automatically flagging any Critical urgency or Critical sentiment tickets for immediate attention. Critical issues trigger instant Slack alerts with full context, suggested responses, and 30-minute SLA reminders, while routine tickets route to monitoring channels for standard processing. Every ticket is logged to Airtable with complete analysis data and thread tracking, then simultaneously posted to a Google Sheets analytics dashboard for real-time metrics. A secondary AI pass generates strategic insights including trend identification, risk assessment, and actionable recommendations for the support team, storing these insights back in Airtable linked to the original ticket. The entire process takes seconds from email arrival to team notification, eliminating manual triage and ensuring critical customer issues receive immediate attention while building a searchable knowledge base of support patterns. Who is this for? Customer support teams drowning in high email volumes needing automated prioritization SaaS companies tracking support metrics and response times for customer satisfaction Startups with lean support teams requiring intelligent ticket routing and escalation E-commerce businesses managing technical support, returns, and billing inquiries simultaneously Support managers needing data-driven insights into customer pain points and support trends Setup Steps Setup time: Approx. 20-30 minutes (OpenAI API, Gmail connection, database setup) Requirements: Gmail account with support email access OpenAI API account with API key Airtable account with workspace access Google Sheets for analytics dashboard Slack workspace with incoming webhooks Sign up for OpenAI and obtain your API key for the AI analysis nodes. Create an Airtable base with two tables: "tblSupportTickets" (main records) and "tblInsights" (AI insights) with matching column names. Create a Google Sheet with columns for Date, Time, Customer, Email, Subject, Sentiment, Urgency, Category, Priority, Critical, Status. Set up these nodes: Monitor Support Emails: Connect Gmail account, configure to check INBOX label for unread messages. AI Analysis Engine: Add OpenAI credentials and API key, system prompt pre-configured. Parse & Enrich Data: JavaScript code automatically extracts and scores data (no changes needed). Route by Urgency: Configure routing rules to split critical vs. routine tickets. Slack Alert Nodes: Set up webhook URLs for critical alerts channel and routine monitoring channel. Log to Airtable Database: Connect Airtable, select base and table, map all data fields. Update Analytics Dashboard: Connect Google Sheets and select target sheet/range. Generate Insights & Store AI Insights: OpenAI credentials already set, Airtable connection for storage. Replace placeholder IDs: Airtable base ID (appXXXXXXXXXXXXXX), table names, Google Sheet document ID (1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX). Credentials must be entered into their respective nodes for successful execution. Customization Guidance Priority Scoring Formula:** Adjust urgency multiplier (currently 25) and sentiment weight (currently 10) in the Code node to match your SLA requirements. Urgency Thresholds:** Modify critical routing logic—currently any "Critical" urgency or sentiment triggers immediate alerts. AI Analysis Temperature:** Lower OpenAI temperature (0.1-0.2) for more consistent categorization, or raise (0.4-0.5) for nuanced sentiment detection. Polling Frequency:** Change Gmail trigger from every minute to every 5/15/30 minutes based on support volume and urgency needs. Email Filters:** Add sender whitelist/blacklist, specific label filters, or date ranges to focus on particular customer segments. Category Customization:** Modify AI system prompt to add industry-specific categories like "Compliance," "Integration," "Onboarding," etc. Multi-Language Support:** Add language detection and translation steps before AI analysis for international support teams. Auto-Response:** Insert Gmail send node after AI analysis to automatically send suggested responses for low-priority inquiries. Escalation Rules:** Add additional routing for VIP customers, enterprise accounts, or tickets mentioning "cancel/refund." Dashboard Enhancements:** Connect to Data Studio, Tableau, or Power BI for advanced support analytics and team performance tracking. Once configured, this workflow transforms your support inbox into an intelligent triage system that never misses critical issues, provides instant team visibility, and builds actionable customer insights—all while your team focuses on solving problems instead of sorting emails. Built by Daniel Shashko Connect on LinkedIn
by Ucartz Online
Improve your chess automatically — get a personalized AI coaching report delivered. This workflow connects to the free Chess.com public API, fetches your most recent game, and sends it to an AI language model that acts as your personal chess coach. Within minutes, you receive a structured HTML email covering everything from critical turning points to a personalized training plan. 🔧 How It Works Trigger — Runs on a daily schedule or manually on demand Config Node — Set your Chess.com username and email address (one-time setup) Fetch Games — Pulls your current month's games from Chess.com's public API (no API key required) Sort & Enrich — Identifies your color, result (Win/Loss/Draw), opponent details, ratings, and ECO opening code AI Analysis — Sends the full PGN and game context to your chosen LLM with a structured coaching prompt Email Report — Delivers a clean HTML coaching report directly to your inbox via Gmail 📊 What's in the Coaching Report Game Summary — Opening, middlegame, and endgame narrative Critical Moments — 3–5 turning points with explanations of what happened and what should have been played Mistake Categories — Tactical oversights, positional errors, opening issues, endgame technique, time management What Went Well — Genuine strengths recognized and reinforced Five Key Lessons — Specific, memorable takeaways tied to your actual game Training Plan — Targeted drills and study resources based on your weaknesses Closing Motivation — Encouraging next step to keep you improving ⚙️ Setup (Under 5 Minutes) Import the workflow into n8n Open the Config node and enter your Chess.com username and target email address Connect your Gmail OAuth2 credential Connect your preferred LLM credential (Google Gemini is pre-wired; swap for OpenAI or Claude if preferred) Activate the workflow — done! 🤖 Supported AI Models The quality of the results depends on the model you choose. You can start with the free Gemini models and compare the output with your expected results. The LLM node is plug-and-play, allowing you to switch between different models with a single click. Google Gemini 2.5 Flash (pre-configured) OpenAI GPT-4o — Best overall chess analysis quality Anthropic Claude Sonnet — Excellent at explanations and coaching tone Mistral / Llama — Self-hosted options for privacy-conscious users 💡 Stronger models produce better analysis. GPT-4o or Claude Sonnet are recommended for players rated 1000+. 📬 Extend the Workflow After the email step, you can easily add nodes to also send the report via: Telegram — instant mobile notifications Slack — post to a personal or team channel Notion — build a game review database Google Drive — archive reports as files Discord — share with your chess study group ✅ Requirements n8n (self-hosted or cloud) A Chess.com account with at least one game this month Gmail OAuth2 credential Any supported LLM API credential (Google Gemini, OpenAI, Anthropic, etc.)
by Feras Dabour
Who is this for Content creators, solopreneurs, and marketing teams who produce long-form content (podcasts, newsletters, interviews, scripts) and want to automatically turn it into multiple social media assets -- Instagram carousels, LinkedIn carousels, LinkedIn text posts, and LinkedIn media posts -- with human-in-the-loop approval via Microsoft Teams. What this workflow does This workflow takes a long-form content file sent via email, extracts strategic content pillars using AI, then fans out into four parallel branches -- each producing a different social media format. Every draft is reviewed and approved in Microsoft Teams before images are generated, assets are saved to Google Drive, and posts are published via Blotato. How it works Email trigger -- A Gmail Trigger watches for emails with a specific subject line (e.g. "Content Repurposing"). The email contains a text attachment (podcast transcript, newsletter, etc.) and optionally a link to the original content. File extraction & storage -- The attachment is extracted, saved as a Google Doc in a timestamped project subfolder on Google Drive, and the source URL is parsed from the email body. AI content strategist -- The Repurpose Strategist agent (OpenAI) analyzes the full text and extracts 5 strategic content pillars, each with a hook headline, core insight, virality factor, and relevant quote. Results are logged in Google Sheets. Four parallel content branches -- The 5 pillars feed into four specialized AI agents that each produce a different format: Instagram/YouTube carousel -- 5 punchy one-liners (max 25 words each) + a social media caption LinkedIn carousel -- 5 slide texts with hooks + a companion caption, plus a styled PDF carousel via HTML-to-PDF LinkedIn text post -- A single strong LinkedIn post (max 100 words) LinkedIn media post -- A post with a guiding statement rendered as an image Human review loop -- Each branch sends its draft to Microsoft Teams for approval via a custom form (approve/reject with feedback). If rejected, feedback is routed back to the AI agent for targeted revisions. Asset generation & storage -- On approval, carousel images are generated via APITemplate.io, all assets (images, post texts, PDFs) are saved to organized Google Drive subfolders, and results are logged back to Google Sheets. Publishing -- Approved posts are published to Instagram and LinkedIn via Blotato, with status monitoring and Teams notifications on success or failure. Setup steps Gmail -- Create OAuth2 credentials. The trigger watches for emails with "Content Repurposing" in the subject. You can customize this filter. Google Drive & Docs -- Create OAuth2 credentials. Set the target folder ID in the Google Drive Trigger node where project subfolders will be created. Google Sheets -- Create a spreadsheet to serve as the content tracker. It will store pillars, carousel texts, post texts, and metadata. Update the Sheet ID in all Google Sheets nodes. OpenAI -- Add your API key. Used by 5 AI agents (strategist + 4 content specialists). Microsoft Teams -- Create OAuth2 credentials. Set the Teams chat ID in the 4 review nodes to route drafts to your approval channel. APITemplate.io -- Create an account and design carousel slide templates. Set the template ID in the image generation nodes. Blotato -- Connect your Instagram and LinkedIn accounts. Add the Blotato API credential and update account IDs in the publishing nodes. HTML-to-PDF -- Install the community node n8n-nodes-htmlcsstopdf (self-hosted only). Customize the carousel slide HTML/CSS template with your branding (logo, colors, profile photo). Requirements Community nodes:** @blotato/n8n-nodes-blotato n8n-nodes-htmlcsstopdf Self-hosted n8n only** (due to community nodes) Gmail OAuth2 credentials Google Drive, Docs & Sheets OAuth2 credentials OpenAI API key Microsoft Teams OAuth2 credentials APITemplate.io account and template Blotato account with connected Instagram and LinkedIn profiles How to customize AI prompts** -- Each of the 5 AI agents has a detailed system prompt you can adjust for tone, word count, language, or output structure. Carousel design** -- Edit the HTML/CSS in the "HTML to PDF" node to match your brand (colors, fonts, logo, profile photo). Update the APITemplate.io template IDs for Instagram-style slides. Platforms** -- Add or remove publishing branches. Currently supports Instagram (via Blotato) and LinkedIn (text post, carousel, media post). Review channel** -- Change the Teams chat ID to route to different teams or channels. Trigger** -- Swap Gmail for another trigger (e.g. Google Drive, webhook, or manual) depending on your content intake workflow. Feedback loop** -- Each branch supports unlimited revision cycles. The AI applies feedback minimally without rewriting from scratch.
by Yassin Zehar
Description Execute email actions directly from Notion. Set an email’s status to Responded, Delegated, Routed, or Archived, and this workflow handles the Gmail action, Slack notification, or Jira routing automatically. Context This is the action layer for the Inbox Zero Engine. When you set an email’s status in Notion, the workflow executes the appropriate action: • Responded: sends the draft reply via Gmail thread • Delegated: forwards the email + sends a Slack DM to the delegate • Routed: creates items in Jira, RICE+ backlog, or customer health • Archived: applies Gmail labels After each action, the entry is marked as “Processed” in Notion. Who is this for? • PMs using Notion as their command center • Anyone who wants to process email without leaving Notion • Teams that delegate and route emails frequently Requirements • Notion account with Email Intelligence database • Gmail OAuth2 • Slack Bot token How it works Trigger Watches Email Intelligence in Notion for status changes. Action Router 4-way switch: Responded sends reply, Delegated forwards + DMs, Routed creates tickets, Archived labels in Gmail. Closed Loop Updates each entry to “Processed” with timestamp and reference. What you get • One-click email actions from Notion • Automatic Gmail replies, forwards, and archiving • Slack notifications for delegated emails • Full audit trail in Notion About me : I’m Yassin a Product Manager Scaling tech products with data-driven project management. 📬 Feel free to connect with me on Linkedin
by Poghos Adamyan
How it works Connects to your n8n instance via API and fetches all credentials you have set up Maps each credential type to its real service name (supports 40+ services: OpenAI, Slack, Notion, Airtable, Google, Stripe, and more) Sends the full list to Claude AI, which researches current pricing tiers, free limits, and API rate limits for every service Builds a colour-coded HTML email report sorted by tier: 🟢 Free · 🟡 Freemium · 🔴 Paid only Includes: free quota, paid plan starting price, API rate limit, and key notes for each service Set up steps Create an HTTP Header Auth credential named n8n API Key — Header Name: X-N8N-API-KEY, Header Value: your n8n API key (Settings → API → Create API Key) Connect your Anthropic account credential for Claude AI pricing research Connect your Gmail OAuth2 credential for the report email Open the Configuration node and set your n8n instance URL and notification email address Run manually or add a Schedule trigger for automated weekly reports
by Jitesh Dugar
Customer Onboarding Email Verification Automated email verification and welcome email workflow that validates new user signups, prevents fake emails, and creates a seamless onboarding experience with real-time team notifications. Features ✅ Real-time email validation with VerifiEmail API ✅ Automatic data sanitization (lowercase, trim whitespace) ✅ Smart typo detection and correction suggestions ✅ Disposable email domain blocking ✅ Professional HTML welcome emails with responsive design ✅ Automatic duplicate prevention in Google Sheets logging ✅ Real-time Slack notifications for sales/marketing teams ✅ MX record and SMTP deliverability checks What You Need Required Accounts/APIs: VerifiEmail API - For email validation (verifi.email) Gmail account (or SMTP server) - For sending welcome emails Google Sheets - For logging verified users Slack workspace - For team notifications (optional but recommended) Setup Instructions Create Google Sheet Create new spreadsheet named "Verified Users" Add headers: Name | Email | Status | Verified At | Original Email | Validation Score Connect Credentials Add VerifiEmail API key in n8n credentials Connect Gmail via OAuth2 (enable 2FA, generate app password if needed) Connect Google Sheets via OAuth2 Connect Slack workspace via OAuth2 Customize Email Template Open "Personalize Welcome Email" node Replace "Your Company" with your brand name (appears 3 times) Update CTA URLs: yourapp.com/dashboard → Your actual dashboard URL yourapp.com/getting-started → Your docs/guide URL yourapp.com/support → Your support page URL Modify colors: Purple gradient #667eea to #764ba2 (line 37) Configure Slack Channel Create #new-signup channel in Slack (or use existing) Update channel in "Team Notification" node Test Workflow Activate workflow Copy webhook URL from Webhook node Test with: curl -X POST [webhook-url] -H "Content-Type: application/json" -d '{"name":"Test User","email":"test@gmail.com"}' Integrate with Your Signup Form Point form submission to webhook URL Ensure payload includes name and email fields Input Format Send POST request to webhook with this JSON: { "name": "John Doe", "email": "johndoe@gmail.com" } The workflow handles various input formats (nested in body field, query params, etc.) and sanitizes automatically. Output After execution, you'll get: Email validated via VerifiEmail API with deliverability score Welcome email sent to user with personalized greeting and CTAs User logged to Google Sheets with timestamp and validation details Slack notification sent to team with user details and status Invalid emails blocked with typo correction suggestions prepared For Valid Emails (~85-90%): Professional HTML welcome email delivered Entry added to "Verified Users" sheet Real-time Slack alert to #new-signup channel For Invalid Emails (~10-15%): Workflow stops with error message No email sent (prevents bounces) Typo suggestion prepared (e.g., gmial.com → gmail.com) Customization Change Email Design: Edit the "Personalize Welcome Email" node HTML: Colors**: Change gradient in line 37: background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) Logo**: Add `` tag in header section Buttons**: Modify CTA text and links in lines 45-65 Footer**: Update copyright year and company name Modify Validation Rules: In "Prepare Correction Email" node, add more typo patterns: const commonTypos = { 'gmial': 'gmail', 'gmai': 'gmail', // Add your custom patterns: 'yourdomain': 'yourcorrectdomain' } Enable Correction Email Sending: Replace "Stop and Error" node with Gmail "Send Email" node: Connect from "Prepare Correction Email" Use {{ $json.email }} as recipient Use {{ $json.emailBody }} as message User receives helpful correction suggestion instead of silent failure Add More Notification Channels: After "Log Valid Users" node, add: Discord webhook for team notifications Microsoft Teams connector Email to sales@ or support@ Custom webhook to your CRM Log Invalid Attempts: Add Google Sheets node after "Prepare Correction Email": Create "Invalid Attempts" tab in same spreadsheet Log: Name, Email, Reason, Suggestion, Timestamp Analyze patterns weekly for form improvements Troubleshooting "undefined" error in Data Sanitization: Check webhook payload structure Verify name and email fields are present Test with the debug code provided in sticky notes All emails marked as invalid: Verify VerifiEmail API key is active Test API directly at verifi.email dashboard Welcome emails not sending: Confirm Gmail OAuth2 is connected (check for expired tokens) Verify sending limits not exceeded Check spam folder if testing with personal email Review Gmail "Sent" folder for delivery confirmation No Slack notifications: Verify OAuth2 connection is active Check bot has permission to post in #new-signup channel Confirm channel ID is correct Test Slack credentials in n8n Duplicate entries in Google Sheets: Verify "Email" is set as matching column Confirm operation is "Append or Update" not just "Append" Check Sheet1 has the exact column names expected High validation failure rate: Review invalid emails in execution logs Check for form submission issues (bots, testing) Verify VerifiEmail API is not blocking legitimate domains Performance Optimization For high-volume signups (>100/day): Switch Slack notifications to hourly digest Implement rate limiting on webhook Consider caching frequent domain validations Use Google Workspace for higher email sending limits Maintenance Weekly: Check VerifiEmail API usage and quota Review Slack notifications for anomalies Scan Google Sheets for data quality Test with sample signup Monthly: Archive old Google Sheets data (>90 days) Review invalid email patterns Update email template if needed Audit credential security Support For issues or questions, visit the n8n community forum.
by WeblineIndia
Job post expiry & refresh reminders from Google Sheets using HTTP Last‑Modified checks This workflow checks each job URL in your Google Sheet and identifies listings that look stale based on the page’s Last‑Modified date. At 10:00 Asia/Kolkata every day, it requests each URL (HEAD, then GET if needed), calculates the age in days, and sends a polite email reminder to the recruiter when age ≥ a configurable threshold (default 30 days). It includes a DRY_RUN mode to preview who would be emailed, and conservative rate limits for both HTTP requests and email sends. Who’s it for Recruitment teams maintaining job links on external boards/career sites. Coordinators who want a daily, hands‑off nudge to refresh or unlist outdated posts. Teams using Google Sheets to store job URLs and owner contacts. How it works Cron (10:00 IST) triggers daily. Google Sheets reads the Job Posts tab (job_url, recruiter_name, recruiter_email). Validate rows (URL + email format, weekend rule via config). HTTP HEAD to fetch headers; if Last-Modified missing, HTTP GET and parse common meta tags (article:modified_time, og:updated_time, lastmod, dateModified). Compute age (days since last modified in your configured timezone). If age_days ≥ THRESHOLD_DAYS, prepare a personalized email using templates. DRY_RUN? If true, output a preview; if false, rate‑limit and send emails via SMTP. How to set up Create the Sheet Tab name: Job Posts Columns: job_url, recruiter_name, recruiter_email Credentials in n8n Google Sheets (OAuth) SMTP (Gmail) (use an app password if 2FA) Open “Set: Config” and set: SPREADSHEET_ID = your Sheet ID SOURCE_SHEET = Job Posts TIMEZONE = Asia/Kolkata THRESHOLD_DAYS = 30 (change if needed) USER_AGENT = n8n-job-checker/1.0 HTTP_TIMEOUT_SECONDS = 10 HTTP_RETRIES = 2 RATE_LIMIT_HTTP_SECONDS = 5 RATE_LIMIT_EMAIL_SECONDS = 2 SMTP_FROM = sender email (e.g., hiring-ops@company.com) SUBJECT_TEMPLATE, HTML_TEMPLATE, TEXT_TEMPLATE (placeholders: {{recruiter_name}}, {{job_url}}, {{age_days}}, {{last_modified}}) INCLUDE_WEEKENDS = true DRY_RUN = false (set true to preview) Activate the workflow. Requirements Google Sheet with Job Posts tab and required columns. SMTP (Gmail) account to send emails. n8n (cloud or self‑hosted) with Google Sheets + SMTP credentials. How to customize Threshold:** Change THRESHOLD_DAYS (e.g., 15, 45). Schedule:** Adjust the Cron time from 10:00 IST to your preferred hour. Templates:** Edit SUBJECT_TEMPLATE, HTML_TEMPLATE, and TEXT_TEMPLATE. Rate limits:** Tune RATE_LIMIT_HTTP_SECONDS and RATE_LIMIT_EMAIL_SECONDS for your environment. Weekend behavior:** Toggle INCLUDE_WEEKENDS. Preview runs:** Use DRY_RUN=true to check recipients before real sends. Add‑ons Helper columns:** Write back last_modified_http, age_days, reminder_sent_at, last_checked_at, notes to the sheet. Per‑row override:** Add threshold_days column to override the global threshold per job. Slack notifications:** DM the recruiter or a channel in addition to (or instead of) email. One‑time reminders:** Email only once until the page updates (track reminder_sent_at). Robots/backoff:** Respect robots.txt or add exponential backoff for high‑traffic sites. Use Case Examples Career site posts** that haven’t been updated in 30+ days. Remind owners to refresh copy or close the listing. Third‑party boards** (e.g., niche communities) where Last‑Modified is available — automate hygiene checks. Agency partnership links** — ensure outdated roles aren’t left live, protecting brand experience. Common troubleshooting | Issue | Possible Cause | Solution | | --- | --- | --- | | No emails sent | DRY_RUN is true | Set DRY_RUN=false to actually send. | | Rows skipped | Invalid/missing job_url or recruiter_email | Fix the row values; ensure valid URL and email. | | “Stale” not detected | Page has no Last-Modified header and no recognizable meta tags | Add manual review; consider the Helper columns add‑on to log missing dates, or track first_seen_at. | | Wrong time math | Timezone mismatch | Confirm TIMEZONE=Asia/Kolkata (or your TZ) in Set: Config. | | Too many requests | Sites rate‑limit frequent checks | Increase RATE_LIMIT_HTTP_SECONDS; consider running less frequently. | | Emails fail to send | SMTP auth or quota issues | Verify SMTP credentials, sender address, and provider limits; try a different sender or schedule. | Need Help? If you’d like help tailoring the templates, adding Slack notifications or writing back helper columns for audit, just message us at WeblineIndia and we will be happy to help you get this running smoothly.