by Jitesh Dugar
Dynamic Email Signature Creator (PDF + HTML) Create gorgeous, branded, professional email signatures automatically — from a simple POST request. This workflow turns user details into a premium HTML signature, converts it into PDF, and delivers it instantly via Gmail, along with a clean JSON response. ✨ What This Template Does This workflow automatically: Receives user details (name, role, email, phone, links) via Webhook Extracts & validates inputs Generates a modern, premium HTML signature with icons + layout Converts HTML → high-quality PDF using HTMLCSS → PDF service Emails both the HTML signature preview + PDF attachment to the user Returns a clean JSON success response with the pdf_url Works 100% automated — no manual designing needed Perfect for: HR onboarding Corporate identity management Personal branding Team signature standardization Automated client signature setup 🔥 Features Beautiful modern design** Clean branding layout with icons (LinkedIn, Instagram, Website) Professional color palette + typography Auto-generated PDF (print-ready) Mobile-friendly & email-safe HTML Supports any social links Extremely easy to integrate with forms, portals, CRMs Fast: Signature generated in < 3 seconds 🧩 How It Works Webhook receives user information Input extractor formats the fields HTML template dynamically inserts user values HTML → PDF generator creates high-resolution output Email node sends signature + PDF Workflow responds with JSON (pdf_url, status, etc.) ⚙️ Setup Needed Connect these credentials in n8n: HTML → PDF** (PDFMunk account) Gmail** (for sending the final signature email) Update inside the HTML template: Brand colors Logo URL (optional) Social icon colors / links (optional) That’s it — your automated signature generator is live. 🏷️ Tags email-signature, branding, pdf-generator, html-template, gmail, automation, onboarding, corporate
by Madame AI
Track AI search rankings from Perplexity to Google Sheets and Slack This workflow automates Generative Engine Optimization (GEO) tracking by monitoring how your company appears in AI search results. It generates strategic queries, simulates searches on AI engines like Perplexity via BrowserAct, logs the responses for historical tracking, and delivers a graded performance report to Slack. Target Audience SEO specialists, brand managers, marketing directors, and growth teams focusing on AI visibility and reputation management. How it works Initialize Tracking: The workflow runs on a schedule, creates a new dated tab in your Google Sheet, and fetches your company details (Name and Category). Generate Strategy: An AI Agent (using OpenRouter/Gemini) generates three specific search queries: Discovery: Broad category search (e.g., "Best CRM for startups"). Comparison: Direct competitor face-off (e.g., "Pipedrive vs Salesforce"). Validation: Specific fact-checking (e.g., "Is Pipedrive good for visual pipelines?"). Simulate Searches: BrowserAct executes these queries on an AI answer engine (like Perplexity) to capture the real-time AI response. Log Data: The workflow loops through the results and saves the raw AI answers to the daily Google Sheet. Analyze & Report: A second AI Agent reviews the saved data, grades the visibility (Green/Yellow/Red), and sends a summarized "GEO Scorecard" to Slack. How to set up Configure Credentials: Connect your Google Sheets, Slack, BrowserAct, and OpenRouter accounts in n8n. Prepare BrowserAct: Ensure the GEO Results & Rank Tracking template is saved in your BrowserAct account. Setup Google Sheet: Create a Google Sheet with a tab named Main Sheet. Add headers: Company name and Worknig category. Fill in row 2 with your details. Select Spreadsheet: Open the Create sheet, add headers, Get Company data, Retrieve Stored Data, and Store Extracted Data nodes to select your specific spreadsheet. Configure Notification: Open the Send Message to Team on Slack node and select your target Slack channel. Google Sheet Headers Tab 1: Main Sheet (Input) Company name Working Category Tab 2+: [Date] (Generated automatically by the workflow) Search Result Requirements BrowserAct* account with the *GEO Results & Rank Tracking** template. Google Sheets** account. Slack** account. OpenRouter** account (or compatible LLM credentials). How to customize the workflow Change the AI Engine: Modify the BrowserAct template to search on ChatGPT or Google Gemini instead of Perplexity. Adjust Grading Logic: Update the system prompt in the Company data analyzer node to change how the AI scores the results (e.g., focus more on sentiment than ranking). Expand Reporting: Add an Email node to send a weekly summary of the Google Sheet data to stakeholders. Need Help? How to Find Your BrowserAct API Key & Workflow ID How to Connect n8n to BrowserAct How to Use & Customize BrowserAct Templates Workflow Guidance and Showcase Video Master GEO: Track Your AI Search Rankings with n8n & Perplexity 🌍
by WeblineIndia
Webhook → OpenAI → Jira “Bug Suspicion” → Slack QA Escalation This workflow ingests bug reports via a webhook, uses OpenAI to triage and tag them, creates a Jira Bug in project APP with AI-driven labels and alerts QA in Slack. Import the JSON, add OpenAI + Jira + Slack credentials, set the webhook path, choose your Slack channels and activate. Quick Start – Implement in 60 Seconds Import the JSON into n8n. Add credentials to AI Bug Analysis (OpenAI), Create Jira nodes and both Slack Alert nodes. Set webhook path advanced-bug-triage; test with a POST body containing priority, summary and category. Adjust Slack channels qa-alerts-high and qa-general if needed. Activate and verify a test POST flows through Jira and Slack. That’s it. Jira issue gets created and Slack gets notified instantly. What It Does The workflow acts as an AI-assisted bug triage bridge. A webhook receives incoming bug suspicions, which are then analyzed by OpenAI to determine priority and category. Based on the AI output, the flow routes to the appropriate Jira creation path and applies standardized labels for consistent reporting. After creating the Jira Bug in project APP, the workflow escalates to Slack: high-priority items go to qa-alerts-high, while normal items go to qa-general. The result is a fast, low-friction path from external bug signals to actionable Jira issues with immediate QA visibility. Who’s It For QA teams wanting automated Jira escalation. Developers integrating external systems with Jira. Product teams capturing automated “bug suspicion” signals. Monitoring or Sentry-like pipelines. Companies wanting lightweight reporting without building custom infrastructure. Pre-Requisites n8n (cloud or self-hosted). Jira account with permission to create Bug issues. Jira project key: APP (or customize). OpenAI credentials (for AI Bug Analysis) Slack Workspace + Bot token. Ability to send POST request to n8n Webhook endpoint. How It Works & Setup Instructions Webhook Trigger** (advanced-bug-triage): Accepts POST payloads (e.g., summary, description, priority, category). AI Bug Analysis** (OpenAI): Analyzes the payload for sentiment/priority/category (configure your prompt/fields as needed). Priority Switch**: Routes items to the correct Jira creation path (High/Medium/Low). Create Jira (High/Medium/Low)**: Creates Bug issues in project APP, labeling with ai-triaged and the AI-detected category. Slack Alert (High / Normal)**: Notifies QA with the Jira key; high priority goes to qa-alerts-high, others to qa-general. Step 1: Configure Webhook Node Method: POST Path: bug-suspicion Endpoint example: https://YOUR-N8N-URL/webhook/bug-suspicion Step 2: Add OpenAI Credentials Open OpenAI node Select credentials Modify the prompts as needed Step 3: Add Jira Credentials Open Create Jira Bug node Select credentials Ensure access to project APP Ensure permission to create Bug issue type Step 4: Add Slack Credentials Open Slack QA Escalation node Choose Slack Bot credentials Set QA channel Slack message uses: Issue is created in jira for this key <ISSUE-KEY> Step 5: Test Webhook { "title": "Login button unresponsive" } Step 6: Activate Workflow Enable Active toggle. How to Customize Nodes Webhook Trigger Add API keys, tokens or Basic Auth Add JSON validation Jira Node You may add: "additionalFields": { "labels": "bug-suspicion,auto-detected", "description": "={{$json["details"]}}" } Slack Node Customize formatting, attachments, mentions or channels. AI Node for Bug Analysis Tune the prompt, map input fields or adjust model parameters for stricter/looser triage. Priority Switch Modify routing thresholds, add more branches or change default fallback. Add-ons (Optional Enhancements) Email alerts. Severity scoring using AI. Push bug data to Notion or Google Sheets. Add screenshots/logs. Multi-channel notifications. Auto-assign Jira issues based on category or component. Add a fallback email notification for high-priority tickets. Push payloads to a data store (e.g., Sheets/DB) for analytics. Add a secondary Slack DM to on-call for P1. Enrich tickets with logs/links/screenshots from the payload. Use Case Examples Automated QA test failures → Jira + Slack. Monitoring system detects abnormal activity. Browser extension for internal bug reporting. CI/CD pipeline error → instant QA alert. External scripts or tools triggering bug reports. Monitoring alerts auto-create Jira bugs with AI-prioritized severity and Slack escalation. Customer support form pushes suspected bugs directly into Jira with category labels. QA automation failures stream into Jira with priority-based Slack alerts. SRE on-call receives P1 Slack alerts while lower priorities route to the general QA channel. Product beta feedback is categorized by AI and logged as Jira bugs for triage. Troubleshooting Guide | Issue | Cause | Solution | |-------|--------|-----------| | Webhook not receiving data | Wrong URL/method | Use POST + correct path | | Jira issue not created | Wrong credentials/project | Verify Jira credentials + APP project | | Slack message not sent | Bot not allowed in channel | Invite bot to channel | | Jira fields empty | Missing JSON field | Ensure payload includes "title" | | Slack shows undefined | Jira response changed | Add Debug node to inspect output | | Workflow not running | Not activated | Turn ON "Active" | Need Help? If you want help customizing this workflow or building similar n8n workflow automations, the WeblineIndia team can assist with: Jira integrations Slack automation API-based bug pipelines DevOps automation AI-driven severity scoring And so much more. Reach out anytime for implementation or enhancements.
by Patrik Schick
How it works Every hour, the workflow checks the RSS feed https://www.artificialintelligence-news.com/feed/ for new articles. For each new item, it extracts the title, snippet, and full content, then sends them to an AI model to summarize and optionally translate. The processed summary is passed to another AI model (with a personalized “Patrik” assistant tone) to generate a newsletter-style text. Finally, the result is saved as a draft email in Gmail, ready to review and send. How to use Set your preferred language in the Information Extractor system prompt. Update the RSS feed URL if you want to pull articles from a different source. Customize the assistant tone in the Message a model node for your newsletter style. Connect your Gmail account to the Create a draft node. Activate the workflow — every hour it will fetch new articles, generate newsletter content, and save them as Gmail drafts. Customising this workflow Change the source: Replace the RSS feed URL in the RSS Feed Trigger node. Language & length: Edit the system prompt in the Information Extractor to set your preferred language and summary style. Tone & format: Adjust the Message a model node to define the assistant’s personality, structure (headlines, bullets, CTA), or output as HTML. Email settings: Change the subject, sender, or draft folder in the Create a draft node. Frequency: Modify the trigger schedule to run daily, weekly, or at custom intervals.
by Yassin Zehar
Description This workflow sends a summary of your meeting minutes via Gmail, directly from the notes stored in your Google Sheet. Context Taking notes during meetings is important, but sharing them with the team can be time-consuming. This workflow makes it simple: just write down your meeting minutes in a Google Sheets, and n8n will automatically send them by email after each meeting. Who is this for? Perfect for anyone who: Uses Google Sheets to keep track of meeting notes. Wants to automatically share minutes with teammates or stakeholders. Values speed, productivity, and automation. Requirements Google account. Google Sheets (with your meeting minutes). You will need to setup the required columns first : Topic, Status, Owner, Next Step. Gmail. How it works ⏰ Trigger starts after a new row is added in your Google Sheet. 📑 The meeting minutes are retrieved from the sheet. 📨 Gmail automatically sends the minutes to the configured recipients. Steps 🗒️ Use the sticky notes in the n8n canvas to: Add your Google credentials (Sheets + Gmail). Define your sheet and recipient email addresses. Test the workflow to check if the minutes are sent. You’ll get this: An email containing your full meeting minutes, straight from your notes. Tutorial video Watch the Youtube Tutorial video About me : I'm Yassin, IT Project Manager, Agile & Data specialist. Scaling tech products with data-driven project management. 📬 Feel free to connect with me on Linkedin
by David Olusola
Overview This n8n workflow automates the process of sending a daily weather report for a specified city directly to your email inbox. It's a simple yet effective way to stay informed about the weather without manually checking. How It Works This workflow operates in four main steps: Daily Schedule Trigger: The workflow begins with a Cron node, which acts as a scheduler. It's configured to trigger the workflow automatically at a specific time each day (e.g., every morning at 8:00 AM). Fetch Weather Data: Next, an HTTP Request node is used to interact with the OpenWeatherMap API. This node constructs a URL to query the API for current weather conditions in a specified city (e.g., "London"). It includes parameters like units=metric (for Celsius temperatures) and your unique appid (API key) for authentication with OpenWeatherMap. Format Weather Report: A Code node receives the raw JSON weather data from the OpenWeatherMap API. Inside this node, JavaScript code extracts relevant information such as city name, weather description, temperature (current and "feels like"), humidity, and wind speed. It then formats this information into a human-readable text string, creating the actual weather report message. Send Email Report: Finally, a Gmail node takes the formatted weather report from the Code node. It uses your configured Gmail credentials to send an email to your specified recipient address. The email's subject line dynamically includes the city name, and the body contains the full formatted weather report. Setup Steps To get this workflow up and running, follow these instructions: Step 1: Get Your OpenWeatherMap API Key Go to the OpenWeatherMap website. Sign up for a free account if you don't already have one. Once logged in, navigate to the "API keys" section of your profile. Copy your unique API key. You will need this in Step 4. Step 2: Create Gmail Credentials in n8n In your n8n instance, click on Credentials in the left sidebar. Click New Credential. Search for and select "Gmail OAuth2 API" or "Gmail API" (OAuth2 is generally preferred). Follow the on-screen instructions to connect your Gmail account. This usually involves clicking an "Authenticate with Google" button and granting n8n the necessary permissions. Save the credential. Make note of the Credential Name (e.g., "My Gmail Account").
by Robert Breen
This n8n automation notifies you whenever someone books a meeting with you via Calendly. It sends a customized email via Outlook and a Slack message using details from the event. 📌 What This Workflow Does Listens for new Calendly meeting bookings (invitee.created). Extracts key details (name, email, reason for meeting, start time). Uses an AI agent to generate both: A HTML email sent to you via Outlook. A Slack message sent to your chosen channel. ⚙️ Step-by-Step Setup Instructions 1. 🔗 Calendly API Setup In n8n: Go to Credentials → Add Credential → Calendly API. Connect your account with the personal access token. In the Calendly Trigger node, set event to invitee.created. 2. 📧 Microsoft Outlook Credential Add Microsoft Outlook credentials via OAuth2 in n8n → Credentials. Select it in the "Send a message" node. 3. 💬 Slack Setup Add Slack OAuth2 credentials. Select your Slack workspace and choose the channel (e.g., #leads). 4. 🧠 Configure the AI Agent (OpenAI) Provide your OpenAI API key under Credentials → OpenAI API. The AI Agent node is pre-configured to: Format a custom Slack message Format a custom Outlook HTML email 5. 🛠 Node Details Calendly Event** (Trigger): Listens for new bookings Edit Fields**: Extracts values like name, email, start time, and form answers Email Generator** (AI Agent): Creates formatted email + Slack message Send a message** (Outlook): Sends the formatted email to your inbox Slack Message**: Sends the AI-generated Slack alert 🧪 Example Output Slack Message:
by Matt Chong
Who is this for? Teams using Gmail and Slack who want to streamline email handling. Customer support, sales, and operations teams that want emails sorted by topic and priority automatically. Anyone tired of manually triaging customer emails. What does it solve? Stops important messages from slipping through the cracks. Automatically identifies the nature and urgency of incoming emails. Routes emails to the right Slack channel with a clear, AI-generated summary. How it works The workflow watches for unread emails in your Gmail inbox. It fetches the full email content and passes it to OpenAI for classification. The AI returns structured JSON with the email’s category, priority, summary, and sender. Based on the AI result, it assigns a label and Slack channel. A message is sent to the right Slack channel with the details. How to setup? Connect credentials: Gmail (OAuth2) Slack (OAuth2) OpenAI (API Key) Adjust email polling: Open the Gmail Trigger node and set how frequently it should check for new emails. Verify routing settings: In the “Routing Map” node, update Slack channel IDs for each category if needed. Customize AI behavior (optional): Tweak the AI Agent prompt to better match your internal categorization rules. How to customize this workflow to your needs Add more categories:** Update the AI prompt and the schema in the “Structured Output Parser.” Change Slack formatting:** Modify the message text in the Slack node to include links, emojis, or mentions. Use different routing logic:** Expand the Routing Map to assign based on keywords, domains, or even sentiment. Add escalation workflows:** Trigger follow-up actions for high-priority or complaint emails.
by Mohammad
Telegram ticket intake and status tracking with Postgres Who’s it for Anyone running support requests through Telegram, Email, Webhooks, and so on who needs a lightweight ticketing system without paying Zendesk prices. Ideal for small teams, freelancers, or businesses that want tickets logged in a structured database (Postgres) and tracked automatically. I'm using Telegram since it's the most convenient one. How it works / What it does This workflow turns (Telegram) into a support desk: Receives new requests via a Telegram bot command. Creates a ticket in a Postgres database with a correlation ID, requester details, and status. Auto-confirms back to the requester with the ticket ID. Provides ticket updates (status changes, resolutions) when queried. Keeps data clean using dedupe keys and controlled input handling. How to set up Create a Telegram bot using @BotFather and grab the token. Connect your Postgres database to n8n and create a tickets table: CREATE TABLE tickets ( id BIGSERIAL PRIMARY KEY, correlation_id UUID, source TEXT, external_id TEXT, requester_name TEXT, requester_email TEXT, requester_phone TEXT, subject TEXT, description TEXT, status TEXT, priority TEXT, dedupe_key TEXT, chat_id TEXT, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); Add your Telegram and Postgres credentials in n8n (via the Credentials tab, not hardcoded). Import the workflow JSON and replace the placeholder credentials with yours. Test by sending /new in Telegram and follow the prompts. Requirements n8n (latest version recommended) Telegram bot token Postgres instance (local, Docker, or cloud) How to customize the workflow Change database fields if you need more requester info. Tweak the Switch node and Comands for multiple status types. Extend with Slack, Discord, or email nodes for broader notifications. Integrate with external systems (CRM, project management) by adding more branches.
by Hans Wilhelm Radam
Description: This workflow automates personalized email outreach to a list of hospitals. It uses a chat-based interface to accept a region and a list of hospital names, looks up their specific contact details from a structured Google Sheet, and sends a tailored email via Gmail. Who’s it for This template is perfect for healthcare startups, medical device sales representatives, or IT consultants who need to conduct targeted outreach to hospital administrators. It's designed for anyone looking to automate a personalized, region-specific email campaign without manual data entry. How it works Trigger: You provide input via a chat message. The first line is the region (e.g., LUZON), and each subsequent line is a hospital name. Parsing: A Code node splits your message into a structured list of items for processing. Batching: The workflow processes each hospital one by one for reliable execution. Data Lookup: Based on the region, the workflow queries the corresponding sheet in a Google Sheets document to find the hospital's specific contact details. Email Delivery: A personalized email is sent to the hospital's email address using Gmail, pulling data from the spreadsheet to customize the message. How to set up Credentials: Set up n8n credentials for Google Sheets and Gmail (using OAuth2 recommended). Google Sheet: Duplicate the provided template Sheet structure. Your sheet must have columns like Hospital Name and Main Email. Workflow Configuration: Replace the placeholder Google Sheet ID in the Set Configuration node with the ID of your own sheet. Requirements An n8n instance (cloud or self-hosted). A Google account with access to Google Sheets and Gmail. The provided Google Sheets template structure. How to customize Email Template:* Modify the email subject and body in the *Send Gmail Message** node. Use placeholders like {{ $json["Your Field"] }} to insert data from your Google Sheet. Data Source:** Replace the Google Sheets node with another data source (e.g., Airtable, PostgreSQL) by ensuring it outputs data in a similar JSON format. Output:** Instead of Gmail, use the SendBlue node to send an SMS or the Slack node to send a DM.
by Vlad Arbatov
Summary Every day at a set time, this workflow fetches yesterday’s newsletters from Gmail, summarizes each email into concise topics with an LLM, merges all topics, renders a clean HTML digest, and emails it to your inbox. What this workflow does Triggers on a daily schedule (default 16:00, server time) Fetches Gmail messages since yesterday using a custom search query with optional sender filters Retrieves and decodes each email’s HTML, subject, sender name, and date Prompts an LLM (GPT‑4.1‑mini) to produce a consistent JSON summary of topics per email Merges topics from all emails into a single list Renders a styled HTML email with enumerated items Sends the HTML digest to a specified recipient via Gmail Apps and credentials Gmail OAuth2: Gmail account (read and send) OpenAI: OpenAi account Typical use cases Daily/weekly newsletter rollups delivered as one email Curated digests from specific media or authors Team briefings that are easy to read and forward How it works (node-by-node) Schedule Trigger Fires at the configured hour (default 16:00). Get many messages (Gmail → getAll, returnAll: true) Uses a filter like: =(from:@.com) OR (from:@.com) OR (from:@.com -"__") after:{{ $now.minus({ days: 1 }).toFormat('yyyy/MM/dd') }} Returns a list of message IDs from the past day. Loop Over Items (Split in Batches) Iterates through each message ID. Get a message (Gmail → get) Retrieves the full message/payload for the current email. Get message data (Code) Extracts HTML from Gmail’s MIME parts. Normalizes the sender to just the display name. Formats the date as DD.MM.YYYY. Passes html, subject, from, date forward. Clean (Code) Converts DD.MM.YYYY → MM.DD (for prompt brevity). Passes html, subject, from, date to the LLM. Message a model (OpenAI, model: gpt‑4.1‑mini, JSON output) Prompt instructs: Produce JSON: { "topics": [ { "title", "descr", "subject", "from", "date" } ] } Split multi-news blocks into separate topics Combine or ignore specific blocks for particular senders (placeholders __) Keep subject untranslated; other values in __ language Injects subject/from/date/html from the current email Loop Over Items (continues) Processes all emails for the time window. Merge (Code) Flattens the topics arrays from all processed emails into one combined topics list. Create template (Code) Builds a complete HTML email: Enumerated items with title, one-line description Original subject and “from — date” Safely escapes HTML and preserves line breaks Inline, email-friendly styles Send a message (Gmail → send) Sends the final HTML to your recipient with a custom subject. Node map | Node | Type | Purpose | |---|---|---| | Schedule Trigger | Trigger | Run at a specific time each day | | Get many messages | Gmail (getAll) | Search emails since yesterday with filters | | Loop Over Items | Split in Batches | Iterate messages one-by-one | | Get a message | Gmail (get) | Fetch full message payload | | Get message data | Code | Extract HTML/subject/from/date; normalize sender and date | | Clean | Code | Reformat date and forward fields to LLM | | Message a model | OpenAI | Summarize email into JSON topics | | Merge | Code | Merge topics from all emails | | Create template | Code | Render a styled HTML email digest | | Send a message | Gmail (send) | Deliver the digest email | Before you start Connect Gmail OAuth2 in n8n (ensure it has both read and send permissions) Add your OpenAI API key Import the provided workflow JSON into n8n Setup instructions 1) Schedule Schedule Trigger node: Set your preferred hour (server time). Default is 16:00. 2) Gmail Get many messages: Adjust filters.q to your senders/labels and window: Example: =(from:news@publisher.com) OR (from:briefs@media.com -"promo") after:{{ $now.minus({ days: 1 }).toFormat('yyyy/MM/dd') }} You can use label: or category: to narrow scope. Send a message: sendTo = your email subject = your subject line message = set to {{ $json.htmlBody }} (already produced by Create template) The HTML body uses inline styles for broad email client support. 3) OpenAI Message a model: Model: gpt‑4.1‑mini (swap to gpt‑4o‑mini or your preferred) Update prompt placeholders: __ language → your target language __ sender rules → special cases (combine blocks, ignore sections) How to use The workflow runs daily at the scheduled time, compiling a digest from yesterday’s emails. You’ll receive one HTML email with all topics neatly listed. Adjust the time window or filters to change what gets included. Customization ideas Time window control: after: {{ $now.minus({ days: X }) }} and/or add before: Filter by labels: q = label:Newsletters after:{{ $now.minus({ days: 1 }).toFormat('yyyy/MM/dd') }} Language: Set the __ language in the LLM prompt Template: Edit “Create template” to add a header, footer, hero section, logo/branding Include links parsed from HTML (add an HTML parser step in “Get message data”) Subject line: Make dynamic, e.g., “Digest for {{ $now.toFormat('dd.MM.yyyy') }}” Sender: Use a dedicated Gmail account or alias for deliverability and separation Limits and notes Gmail size limit for outgoing emails is ~25 MB; large digests may need pruning LLM usage incurs cost and latency proportional to email size and count HTML rendering varies across clients; inline styles are used for compatibility Schedule uses the n8n server’s timezone; adjust if your server runs in a different TZ Privacy and safety Emails are sent to OpenAI for summarization—ensure this aligns with your data policies Limit the Gmail search scope to only the newsletters you want processed Avoid including sensitive emails in the search window Sample output (email body) Title 1 One-sentence description Original Subject → Sender — DD.MM.YYYY Title 2 One-sentence description Original Subject → Sender — DD.MM.YYYY Tips and troubleshooting No emails found? Check filters.q and the time window (after:) Model returns empty JSON? Simplify the prompt or try another model Odd characters in output? The template escapes HTML and preserves line breaks; verify your input encoding Delivery issues? Use a verified sender, set a clear subject, and avoid spammy keywords Tags gmail, openai, llm, newsletters, digest, summarization, email, automation Changelog v1: Initial release with scheduled time window, sender filters, LLM summarization, topic merging, and HTML email template rendering
by Avkash Kakdiya
How it works This workflow sends WhatsApp messages and emails in bulk using contact data stored in Google Sheets. Contacts are processed in small batches to control throughput and avoid API rate limits. WhatsApp and email are treated as independent channels and are sent only when their status is marked as pending. All success and failure results are written back to Google Sheets to enable tracking, retries, and safe re-runs. Step-by-step Step 1: Fetch contacts & batch processing** Manual Trigger – Starts the workflow manually. Get Contacts – Reads contact data from Google Sheets. Split In Batches – Processes contacts in controlled batch sizes. Step 2: Email preparation & sending** Has Email Address – Checks whether the contact has an email address. IF Mail Pending – Ensures the email is still marked as pending. PrepareEmail email – Loads the selected InboxPlus email template. Build HTML Email – Builds the final HTML email body. Fetch Email Image – Downloads images for inline or attachment usage. Send Gmail – Sends the email via Gmail. Delivered – Confirms successful email delivery. Step 3: WhatsApp message sending** Has Phone Number – Checks whether the contact has a phone number. IF WhatsApp Pending – Ensures the WhatsApp message is still pending. Send template – Sends the approved WhatsApp template message. Sent – Confirms message acceptance by WhatsApp. Step 4: Delivery status updates** Update Sheet – Writes successful delivery results back to Google Sheets. Mail Failure – Updates Google Sheets if email delivery fails. Whatsapp Failure – Updates Google Sheets if WhatsApp delivery fails. Why use this? Prevents duplicate messages with channel-level pending checks Handles WhatsApp and email independently in one workflow Supports safe retries without resending completed messages Keeps Google Sheets as the single source of truth Scales bulk outreach safely using batch-based execution