by Missy Learns AI
Quick overview Track daily mood, energy, sleep, stress, focus, and habits with a simple form, then receive a weekly AI-generated personal analytics report with patterns, best/hardest day comparison, and one small experiment for the next week. The result helps users understand what conditions seem linked with better wellbeing. How it works Receives a daily check-in submission from an n8n Form. Normalizes the submitted fields and calculates daily wellbeing and habit scores, tags, a risk flag, and a small suggestion. Appends the daily entry to a Google Sheets daily_entries tab. Sends a Gmail confirmation email, using a more supportive message when the risk flag indicates needs_support. Runs every week on a schedule trigger and reads all daily entries from Google Sheets. Calculates weekly analytics for the previous Monday–Sunday week (including averages, best/hardest day, and detected patterns) and stops with a “not enough data” Gmail message if fewer than 3 entries exist. Generates a weekly coaching insight with an OpenAI Chat Model (via Groq), parses the returned JSON into email fields, appends the weekly report to a Google Sheets weekly_reports tab, and emails the formatted weekly insights via Gmail. Setup Connect Google Sheets OAuth2 credentials and update the spreadsheet ID and sheet tabs (daily_entries and weekly_reports) used by the Google Sheets nodes. Create the daily_entries and weekly_reports sheets with column names matching the fields the workflow appends (for example wellbeing_score, habit_score, risk_flag, and ai_summary). Connect Gmail OAuth2 credentials and replace YOUR_EMAIL_ADDRESS_PLACEHOLDER with your recipient email address in all Gmail nodes. Add an OpenAI-compatible API credential (configured here as Groq) and ensure the selected chat model is available to the OpenAI Chat Model node. Adjust the weekly schedule trigger (day/time) if you want the report to run at a different time zone or cadence. Test the daily branch and submit the daily form once. Confirm that a row appears in the daily_entries sheet. Confirm that the confirmation email is sent. Test the weekly branch. Add at least 3 daily entries. For a full test, add 7 entries covering Monday through Sunday. Run the weekly branch manually. Confirm that the weekly analytics node returns one weekly summary item. Confirm that the LLM returns valid JSON. Confirm that the final weekly email is rendered correctly. Requirements You need credentials for: Google Sheets, Gmail or Email Send, OpenAI Customization Change the daily questions: Edit the form fields if you want to track different habits. Change the scoring logic: Open the Calculate Daily Scores node to adjust wellbeing score weights, habit score rules, tags, risk flag thresholds and tiny suggestions Change the weekly reporting day: Open the Weekly Report Trigger node Change the LLM prompt: Open the Basic LLM Chain node and redesign the prompt to suit your need. If you change the prompt, keep the JSON structure the same unless you also update the parser and email template. Change the email design: Open the Email Weekly Insights node and update the body HTML format. Additional info This workflow is for personal reflection only. It does not provide medical advice, mental health diagnosis, or crisis support. The wellbeing score and habit score are simple personal analytics scores. They are not clinical scores. The AI-generated insight should be treated as a reflection aid, not as expert advice. If a user feels unsafe or at risk of harm, they should contact local emergency or crisis support.
by vvrr22042026
Reusable Retry Handler with Exponential Backoff, Jitter, Slack/Email Alerts, and Manual Suspend How it works This workflow is a reusable retry and resilience pattern for n8n. It can be called from any workflow using the Execute Workflow node. It runs a transient operation, classifies the result, retries retryable failures using exponential backoff with jitter, and stops retrying after a configurable maximum number of attempts. At a high level, it: • Accepts a generic operation input from another workflow • Runs an HTTP/API operation that can be replaced with any app node • Retries only transient failures such as 408, 409, 425, 429, 500, 502, 503, and 504 • Avoids retrying common permanent errors such as 400, 401, 403, 404, and 422 • Calculates exponential backoff delay with random jitter to reduce retry storms • Sends a Slack message when all retries are completed • Sends an email notification when all retries are completed • Suspends the workflow at a Wait node for manual review • Optionally continues to Stop and Error so your global Error Workflow can capture the final failure This template is useful for production workflows that call third-party APIs, SaaS apps, databases, or internal services that may fail temporarily. Set up steps Setup should take around 10–15 minutes. • Import the workflow JSON into n8n • Configure Slack credentials in the Slack alert node • Configure SMTP credentials in the email alert node • Replace the demo HTTP Request node with your real API/app operation if needed • Set your default max attempts, base delay, max delay, jitter percentage, Slack channel, and email recipient • Call this workflow from other workflows using Execute Workflow • Use n8n credentials or environment variables for secrets; do not hardcode API keys This template implements a generic retry wrapper for n8n workflows: Exponential backoff Random jitter Max attempts Retryable/non-retryable classification Slack alert when retries are exhausted Email alert when retries are exhausted Suspend/wait for manual review after retries are exhausted Optional final Stop and Error so a global Error Workflow can capture the failed execution Default retry policy Retryable by default: 408, 409, 425, 429, 500, 502, 503, 504. Not retried by default: 400, 401, 403, 404, 422. Backoff formula waitSeconds = min(maxDelaySeconds, baseDelaySeconds * 2^(attempt - 1)) finalWait = waitSeconds +/- random(jitterPercent) How to use Import the template into n8n. Configure Slack credentials in the Slack node. Configure SMTP credentials in the Email node. Replace the demo HTTP Request node with your real operation, or pass HTTP inputs into the template. From another workflow, call this workflow using Execute Workflow. Example input { "operationName": "Create customer in CRM", "url": "https://api.example.com/customers", "method": "POST", "headers": { "Authorization": "Bearer {{$env.API_TOKEN}}" }, "body": { "name": "Acme" }, "maxAttempts": 5, "baseDelaySeconds": 30, "maxDelaySeconds": 900, "jitterPercent": 25, "notifyEmail": "ops@example.com", "slackChannel": "#automation-alerts" } Suspended workflow behavior After all retries are completed, the workflow sends Slack and email notifications, then pauses at a Wait node. This keeps the failed execution suspended for manual review. After review, resume the workflow using the Wait node resume URL. It then reaches Stop and Error, allowing your global error workflow to capture the final failure.
by Avkash Kakdiya
How it works This workflow automates candidate screening by receiving application data via a webhook and structuring it for AI evaluation. An AI agent analyzes the candidate profile and assigns a score with reasoning. The score is extracted and evaluated against a threshold to decide if the candidate is shortlisted or rejected. Based on the result, the workflow either stores the candidate in Google Sheets and sends a success email or sends a rejection email. Step-by-step Receive and structure application data** Webhook1 – Receives job and candidate data from external sources. Edit Fields1 – Formats and organizes job and candidate information into structured fields. Evaluate candidate with AI** AI Agent – Sends structured data to AI for scoring and evaluation. Groq Chat Model1 – Provides the language model used for generating candidate score and reasoning. Code in JavaScript – Extracts score and reason from AI response for further processing. Filter, store and notify results** If – Checks if the candidate score meets the defined threshold. Append row in sheet – Stores shortlisted candidate details in Google Sheets. Send a message3 – Sends a shortlisted confirmation email to the candidate. Send a message1 – Sends a rejection email if the candidate does not qualify. Why use this? Automates candidate screening and eliminates manual evaluation Ensures consistent and unbiased scoring using AI Instantly notifies candidates about their application status Maintains a structured shortlist database in Google Sheets Saves time for HR teams and improves hiring efficiency
by Avkash Kakdiya
Quick Overview This workflow receives new Calendly meeting bookings, checks Google Sheets to prevent duplicate briefings, pulls contact and deal context from HubSpot, enriches company data with Clearbit, generates three talking points with OpenAI, then sends a prep pack to the sales rep via Slack and Gmail and logs the send in Google Sheets. How it works Receives a POST webhook from Calendly when a meeting is booked. Validates the Calendly webhook signature and extracts key meeting details like invitee email, meeting time, and assigned rep. Looks up the meeting UUID in Google Sheets and stops if a prep pack was already sent. Retrieves the prospect’s contact record and recent open deals from HubSpot, then enriches the person and company profile via the Clearbit enrichment API. Builds either a full or basic context payload (depending on whether the contact exists in HubSpot) and sends it to OpenAI Chat Completions to generate exactly three personalized talking points. Formats a final prep pack and sends it to the sales rep in Slack and by Gmail. Appends a “Sent” log entry with meeting and prospect details to Google Sheets. Setup Create and connect a Calendly webhook, then add your Calendly signing key in the webhook signature validation code. Connect your Google Sheets credentials and set the duplicate-check Sheet ID and logging Sheet ID, ensuring the target spreadsheet has a “SentLog” sheet with a MeetingUUID column. Connect your HubSpot credentials and confirm the workflow can fetch contacts by email and list deals in your portal. Add Clearbit API credentials for the HTTP Request node (header-based auth) and ensure the enrichment endpoint is accessible. Add an OpenAI API key for the Chat Completions request and adjust the model or token limits if needed. Connect Slack and Gmail credentials, then set the Slack channel ID and ensure the assigned rep email from Calendly can receive messages.
by isaWOW
Description Connect Fireflies and WayinVideo to this workflow once and every recorded sales call automatically generates a set of training clips delivered to your Slack channel. The moment Fireflies finishes transcribing a call, the workflow takes the video recording, submits it to WayinVideo with your custom search query, waits for processing, and logs every matching clip with its timestamp, score, and description to Google Sheets. Your sales team receives a single Slack message with the top clips, ready to review and use for coaching. Built for sales managers and revenue teams who want a consistent stream of real training moments without manually scrubbing through call recordings. What This Workflow Does Triggers automatically when a call ends** — Fireflies fires the workflow the moment transcription completes, so clips are extracted from every call without any manual step Submits the recording to WayinVideo** — Sends the video URL with your natural language query to the WayinVideo Find Moments API to locate matching moments Polls until processing is complete** — Waits 45 seconds then checks WayinVideo's status repeatedly, retrying up to 20 times over approximately 15 minutes before timing out Sorts clips by relevance score** — Ranks all returned clips from highest to lowest score and keeps only your configured maximum number of top clips Converts timestamps to readable format** — Transforms raw millisecond timestamps into MM:SS format so your team can jump straight to the right moment in the recording Logs every clip to Google Sheets** — Appends one row per clip with date, meeting title, clip number, start and end time, duration, score, tags, and description Sends one Slack alert after all clips are saved** — Posts a formatted breakdown to your sales training channel exactly once after all rows are logged, never once per clip Setup Requirements Tools Needed n8n instance (self-hosted or cloud) Fireflies.ai account with webhook access and video recording enabled WayinVideo account with API access Google Sheets (one sheet with a tab named Sales Training Clips) Slack workspace with OAuth2 app configured Credentials Required Fireflies API key (pasted into 2. Set — Config Values) WayinVideo API key (pasted into 2. Set — Config Values) Google Sheets OAuth2 Slack OAuth2 Estimated Setup Time: 15–20 minutes Step-by-Step Setup Import the workflow — Open n8n → Workflows → Import from JSON → paste the workflow JSON → click Import Activate the workflow and copy the webhook URL — Toggle the workflow to Active → click on node 1. Webhook — Fireflies Transcript Done → copy the Production URL shown Register the webhook in Fireflies — Log in to app.fireflies.ai → Settings → Developer Settings → Webhooks → paste the webhook URL → save Get your Fireflies API key — In Fireflies, go to Settings → Integrations → Fireflies API → copy your API key Get your WayinVideo API key — Log in to your WayinVideo account → go to API settings or your account dashboard → copy your API key Fill in Config Values — Open node 2. Set — Config Values → replace all placeholders: | Field | What to enter | |---|---| | YOUR_FIREFLIES_API_KEY | Your Fireflies API key from step 4 | | YOUR_WAYINVIDEO_API_KEY | Your WayinVideo API key from step 5 | | YOUR_GOOGLE_SHEET_ID | The ID from your Google Sheet URL (the string between /d/ and /edit) | | Sales Training Clips | Leave as-is, or change to match your sheet tab name exactly | | #sales-training | Your Slack channel name including the # | | findMomentsQuery | Your natural language search query — default is objection handling and rebuttal moments — change to match what you want to extract (e.g. pricing discussion moments or closing technique moments) | | maxClips | Leave as 3 or change to a higher number to extract more clips per call | > ⚠️ findMomentsQuery should use 4–6 descriptive words for best WayinVideo results — very short queries may return no results. Create your Google Sheet tab — Open your Google Sheet → add a tab named exactly Sales Training Clips → add these 11 column headers in row 1: Date, Meeting Title, Clip #, Clip Title, Start, End, Duration (sec), Score, Tags, Description, Logged At Connect Google Sheets — Open node 14. Google Sheets — Log Training Clips → click the credential dropdown → add Google Sheets OAuth2 → sign in with your Google account → authorize access Connect Slack — Open node 16. Slack — Send Training Clips Alert → click the credential dropdown → connect your Slack workspace via OAuth2 → invite the n8n bot to your sales training channel (/invite @n8n) Activate the workflow — Confirm the workflow is Active — Fireflies will now fire it automatically after every recorded sales call How It Works (Step by Step) Step 1 — Webhook: Fireflies Transcript Done This step listens for a signal from Fireflies. Every time a meeting finishes transcribing, Fireflies sends a request to this webhook URL containing the meeting ID. No manual trigger is needed — it fires automatically after every recorded call. Step 2 — Set: Config Values Your Fireflies API key, WayinVideo API key, Google Sheet ID, sheet tab name, Slack channel, Find Moments query, max clips setting, and the meeting ID from the webhook are all stored here. The meeting ID is extracted automatically from all possible Fireflies payload formats. Step 3 — HTTP: Fetch Transcript A request is sent to the Fireflies API using your API key and the meeting ID. It retrieves the meeting title, date, duration, participants, transcript URL, and — most importantly — the video_url and audio_url fields for the recording. Only metadata is fetched, not full transcript sentences. Step 4 — Code: Extract Video URL This step checks for a video URL first, then falls back to an audio URL if no video is available. If neither is present, the workflow throws an error and stops cleanly — WayinVideo requires a media URL to process. The meeting metadata is also cleaned and formatted here for use in the sheet and Slack message. Step 5 — HTTP: Submit Find Moments Task The recording URL and your natural language query are submitted to the WayinVideo Find Moments API. The project name is set automatically using the meeting title. WayinVideo returns a project ID confirming the job was accepted and processing has started. Step 6 — Code: Save Project ID The project ID returned by WayinVideo is saved along with all the meeting metadata. A poll counter is initialized at zero — this counter tracks how many times the workflow has checked the status and enforces the 20-poll timeout. Step 7 — Wait: 45 Seconds The workflow pauses for 45 seconds before checking the WayinVideo status for the first time. This initial wait gives WayinVideo time to begin processing before the first poll. Step 8 — HTTP: Poll Find Moments Results A GET request is sent to the WayinVideo results endpoint using the project ID. It returns the current processing status and, once complete, the full list of matched clips with their timestamps, scores, titles, descriptions, and tags. Step 9 — Code: Check Status The poll counter is incremented and the status is evaluated. If the status is SUCCEEDED, the isReady flag is set to true and the workflow moves forward. If the status is FAILED, the workflow throws an error with the failure message and stops. If the status is anything else (still processing), the workflow continues to the next check. If the poll counter reaches 20 without a SUCCEEDED status (approximately 15 minutes), the workflow throws a timeout error and stops. Step 10 — IF: Processing Complete? This is the retry gate. If isReady is true (YES path — processing is done), the workflow moves forward to extract and log the clips. If isReady is false (NO path — still processing), the workflow routes to 11. Set — Still Processing which loops back to 7. Wait — 45 Seconds for another cycle. Step 11 — Set: Still Processing This step handles the not-yet-complete case. It sets a brief in-progress message and the loop continues back to the wait step for another 45-second pause before the next poll. Step 12 — Code: Process Clips All clips returned by WayinVideo are sorted by relevance score from highest to lowest. The top clips up to your maxClips limit are kept. Each clip's millisecond timestamps are converted to MM:SS format for easy reading. Sheet rows are assembled for each clip and the full Slack message is built — including meeting title, date, duration, the query used, total clips found, and a numbered clip breakdown with timestamps, duration, score, and a short description. Step 13 — Code: Split Rows for Sheets The clips array is converted into individual items — one per clip — so each can be written to Google Sheets as a separate row. An isLastRow flag is set to true only on the final clip, which controls when the Slack alert fires. Step 14 — Google Sheets: Log Training Clips Each clip is appended as one row to your Sales Training Clips tab. All 11 columns are populated: date, meeting title, clip number, clip title, start time, end time, duration in seconds, relevance score, tags, description, and logged-at timestamp. Step 15 — IF: Last Clip Logged? After each row is written, this check reads the isLastRow flag. If true (YES path — this was the final clip), the Slack alert fires. If false (NO path — more clips still need logging), the workflow routes to 17. Set — More Clips and the loop continues to the next clip row. Step 16 — Slack: Send Training Clips Alert Once all clips are logged, one formatted Slack message is posted to your sales training channel. It shows the meeting title, date, duration, the query used, total clips found, and a numbered breakdown of each clip with timestamps, duration, score, and a short description. Step 17 — Set: More Clips This step handles non-final clips during the logging loop. It sets a brief in-progress message and the loop continues to the next clip. Key Features ✅ Natural language clip search — You describe what you want to find in plain English and WayinVideo locates the matching moments — no manual scrubbing through recordings ✅ Retry loop with hard timeout — The workflow polls every 45 seconds for up to 20 attempts (approximately 15 minutes) before stopping — long calls never hang indefinitely ✅ Clips ranked by relevance score — Results are sorted by WayinVideo's confidence score so your top clip is always the most relevant match to your query ✅ MM:SS timestamps for every clip — Raw millisecond data is converted to human-readable timestamps so anyone on the team can jump straight to the right moment ✅ Slack fires exactly once — The isLastRow flag ensures your sales team receives one clean notification after all clips are logged, never one message per clip ✅ Video URL preferred, audio fallback — The workflow uses the video recording when available and falls back to audio automatically — no manual configuration per meeting type ✅ Per-clip Google Sheets logging — Each clip gets its own row with score, tags, timestamps, and description — your sheet becomes a searchable training library over time ✅ Customizable query per workflow instance — Change findMomentsQuery once in Config Values and every future call is analyzed against your chosen training focus Customisation Options Change the training focus — In node 2. Set — Config Values, update findMomentsQuery to match whatever you want to extract — for example pricing and discount discussions, discovery questions about pain points, or closing and next steps conversations to build different training clip libraries. Increase the number of clips per call — In node 2. Set — Config Values, change maxClips from 3 to 5 or 10 to capture more moments per recording — useful for longer calls or when you want a broader set of examples per session. Reduce the polling wait time for faster calls — In node 7. Wait — 45 Seconds, change the wait duration to 30 for shorter recordings that WayinVideo processes faster, or increase to 60 for very long calls to reduce unnecessary API calls. Add a Slack alert when no clips are found — In node 12. Code — Process Clips, the workflow currently throws an error if clips is empty — instead you can change this to return a noClips: true flag and add an IF check that posts a brief Slack message noting no matching moments were found for this call. Log clips to a different sheet per month — In node 2. Set — Config Values, make sheetName dynamic by appending the current month (e.g. Sales Training Clips — April 2026) so clips are automatically organized into monthly tabs without any manual file management. Troubleshooting Workflow not triggering when a call ends: Confirm the workflow is Active — inactive workflows do not receive Fireflies webhooks Log in to app.fireflies.ai → Settings → Developer Settings → Webhooks → confirm the URL matches the Production URL from node 1. Webhook — Fireflies Transcript Done exactly Fireflies only fires webhooks for meetings where you are the organizer and where the bot was invited to record — calls without the bot will not have a video URL WayinVideo returning no project ID or auth error: Confirm YOUR_WAYINVIDEO_API_KEY in node 2. Set — Config Values is replaced with your actual key — not the placeholder text Check the execution log of node 5. HTTP — Submit Find Moments Task for the exact API error response Confirm the findMomentsQuery uses 4–6 descriptive words — very short single-word queries may be rejected or return empty results Polling loop running too long or timing out: If the loop exceeds 20 polls, it stops with a timeout error — check the WayinVideo dashboard to see if the job is still processing or failed on their end For very long recordings (over 60 minutes), consider increasing the wait in node 7. Wait — 45 Seconds to 90 seconds to reduce the chance of timeout on a tight poll budget Check node 9. Code — Check Status execution log to see the current status value returned on each poll Google Sheets not logging rows: Confirm the Google Sheets OAuth2 credential in node 14. Google Sheets — Log Training Clips is connected and not expired Check that YOUR_GOOGLE_SHEET_ID in node 2. Set — Config Values is the ID from the sheet URL, not the full URL Confirm the tab is named Sales Training Clips exactly — capitalization must match sheetName in Config Values Verify all 11 column headers in row 1 match exactly: Date, Meeting Title, Clip #, Clip Title, Start, End, Duration (sec), Score, Tags, Description, Logged At Slack alert not arriving after clips are logged: Confirm the Slack OAuth2 credential in node 16. Slack — Send Training Clips Alert is connected and authorized Check that #sales-training in node 2. Set — Config Values includes the # prefix and matches your channel name exactly Type /invite @n8n in the channel to ensure the bot has posting permission Check the isLastRow value in the execution log of node 15. IF — Last Clip Logged? — if it never reaches true, the clips array may have had only one clip that was not marked as last correctly Support Need help setting this up or want a custom version built for your team or agency? 📧 Email: info@isawow.com 🌐 Website: https://isawow.com/
by Ruth Aju
Who it's for SaaS founders and developers who want to automate their customer onboarding experience from payment to welcome email, without any manual work. How it works A Stripe Trigger listens for successful payment events. The payment amount is converted and used to identify the subscription tier. Customer details are extracted from the Stripe payload. The AI Agent queries Pinecone to retrieve the correct plan details and generates a personalised HTML welcome email with the renewal date calculated automatically. The email is parsed and sent via Gmail. Customer details and subscription info are logged to Google Sheets for renewal tracking. Set up steps Connect your Stripe account and point it to listen for checkout.session.completed events. Store your tier information as chunks in Pinecone. Add your OpenAI credentials for the AI Agent and Embeddings nodes. Connect Gmail as your sending account. Create a Google Sheet with columns: Name, Email, Amount, Tier, Renewal Date, Status. Requirements Stripe account Pinecone account with tier knowledge base uploaded OpenAI account Gmail account Google Sheets
by Dinakar Selvakumar
Automate LinkedIn lead discovery, enrichment, and email follow-ups using Apify and Google Sheets What this template demonstrates End-to-end lead pipeline (discovery → enrichment → outreach) Google Search–based LinkedIn discovery (safe approach) Batch processing with controlled loops AI-generated cold emails and follow-ups Google Sheets as a structured lead database Use cases B2B outbound lead generation Recruitment sourcing workflows Founder-led sales outreach Building verified prospect lists Automated follow-up systems How it works Reads role + location inputs from Google Sheets Uses Apify to find LinkedIn profiles via Google Search Stores raw leads and filters valid profiles Enriches profiles with additional data Generates personalized email sequences using AI Sends emails and tracks responses Updates lead status to prevent duplicates How to use Add {{APIFY_API_TOKEN}} Connect Google Sheets and Gmail Prepare input sheet (Keyword, Location) Run workflow in test mode Verify outputs in Google Sheets Activate workflow Requirements n8n (cloud or self-hosted) Apify account Google Sheets Gemini / LLM API key Good to know No direct LinkedIn automation (safe and compliant) Email follow-ups include response tracking Uses batching to handle large datasets Google Sheets acts as the system state Customising this workflow Change target roles and locations Improve AI prompts for personalization Add email verification tools Replace Sheets with a database Add retry logic and rate limits What this template demonstrates Multi-step automation architecture API orchestration using HTTP nodes AI integration in workflows Conditional logic and batching Scalable lead processing design
by Milo Bravo
Email Lead Router: Gmail → Gemini → Salesforce Pipeline Who is this for? Event sales teams & conference organizers processing 100+ sponsor/partner emails weekly who need instant lead qualification, Salesforce automation, & pipeline analytics. What problem is this workflow solving? Event email chaos kills revenue: 200+ sponsor emails/week → manual Salesforce entry No sentiment/intent scoring = missed $ opps 10+ hours/week routing + logging Fragmented pipeline visibility Zero-drop AI qualification → auto-Salesforce → team routing. What this workflow does Gmail Trigger captures event inbox emails Gemini #1 scores sentiment (Positive/Neutral/Negative + confidence) Gemini #2 extracts topic, intent, urgency (1-10), org, budget signals Upserts Salesforce Lead (deduped by email) w/ 9 custom fields: Sentiment__c, Urgency_Score__c, etc. Hot leads (Positive + urgency ≥7) → auto Salesforce Opportunity Creates Salesforce Task w/ AI-suggested follow-up action Logs to email_analytics Data Table + Google Sheets (Looker Studio dashboard) Routes: Positive → Hot email + Slack #hot-leads (2h); Neutral → Follow-up + #follow-ups (24h); Negative → Insights + #insights Setup (8 minutes): Gmail OAuth2 (event inbox) Google Gemini API Salesforce OAuth2* + *9 custom Lead fields** (Sentiment__c, Urgency_Score__c, etc.) Slack OAuth2 + channels (#hot-leads, #follow-ups, #insights) email_analytics Data Table ID Update Send Email recipients Test w/ Evaluation Dataset How to customize: Tune urgency threshold (7→8) Add event keywords (webinar/tradeshow) Swap Slack → Teams; Salesforce → HubSpot Multi-inbox territory routing ROI: 100% Salesforce coverage** (no manual entry) 8x faster qualification** (2min vs 16h/week) 30% opp velocity** (auto opps/tasks) Live Looker dashboard** → data-driven decisions Need help customizing?: Contact me for consulting and support: LinkedIn / Message Keywords: event sales leads, Salesforce automation, Gemini lead scoring, email sentiment, sales pipeline n8n, AI sales routing
by Davide
This Chatbot automates the process of discovering job openings and generating tailored job application emails. It combines AI agents, web scraping, and email drafting to streamline job applications. This workflow transforms job applications from a manual, repetitive process into an intelligent AI-assisted automation system that: Saves time Improves email quality Reduces errors Maintains human oversight Scales across multiple job postings It represents a strong example of combining conversational AI, external data tools, structured parsing, and workflow automation into a production-ready solution. How it works User starts a chat – The workflow begins when a user sends a message via the chat trigger. PredictLeads Agent processes the request – A LangChain agent determines the user's intent. If the request involves company research, it first queries Context7, then optionally PredictLeads for deeper data. Response parser – The agent's output is cleaned and parsed into a structured JSON format with list (boolean) and output fields. List check – If list is true (e.g., a list of job URLs), the workflow extracts links and passes them to the next stage. If false, the agent responds directly to the user. Link extraction – The Links Extractor node uses OpenAI to extract job posting URLs from the user's input. Loop through each link – Each URL is processed individually using a Loop Over Items node. Scrape job details – The Scrape Job node (powered by ScrapegraphAI) extracts: Email address to send the application to Job position title Full job description text Email presence check – If an email is found, the workflow proceeds to generate an application email. If not, it informs the user that no email is available and provides the job link. Job Application Agent – A Gemini-powered agent generates a professional email using: Candidate's personal info (name, location, skills) Job position and description A tool (Create email) to format the subject and body Send email tool – The agent triggers the Send email workflow, which: Fetches the CV from a public URL Creates a draft in Gmail with the CV attached User response – The final output is sent back to the user via chat, confirming the draft creation or notifying them of missing information. Setup steps To use this workflow, you need to configure the following credentials and nodes: 1. Chat Trigger No setup required. This is the entry point for user messages. 2. OpenAI Chat Model Add your OpenAI API key. 3. Google Gemini Chat Model Add your Google AI API key. 4. Context7 MCP Tool Credential**: Context7 Add your API key as a header (e.g., Authorization: Bearer XXX). 5. PredictLeads MCP Tool Credential**: Multiple Headers PredictLeads Add required headers (e.g., X-API-Key or similar). 6. ScrapegraphAI Add your ScrapegraphAI API key. 7. Gmail Authorize access to Gmail (OAuth2) to create drafts. 8. HTTP Request (Get CV) Ensure the CV is publicly accessible at the URL in the node (https://XXX/cv.pdf) or update it with your own. 9. Simple Memory No setup needed. Used to maintain conversation context. 10. Agent Prompt Customization (Optional) Review the system prompts in the PredictLeads Agent and Job application Agent nodes. Update candidate personal information (name, location, etc.) in the Job application Agent prompt. 11. Workflow ID for "Send email" The Send email tool calls another workflow by ID . Ensure this ID matches the current workflow (it should be self-referential). Key Advantages 1. ✅ End-to-End Automation It automates the entire job application lifecycle: Job discovery Job data extraction Email writing CV attachment Draft preparation No manual copy-paste required. 2. ✅ AI-Orchestrated Tool Usage The system intelligently decides when to use: Company research tools (Context7) PredictLeads data Scraping services Email drafting workflows This makes it dynamic and adaptable rather than static. 3. ✅ Structured & Reliable Data Handling Uses JSON schema validation Cleans malformed AI outputs Ensures consistent structured results Reduces errors in automation flows 4. ✅ Human-in-the-Loop Safety Before sending any email: The system requires double approval The email is saved as a draft, not automatically sent This prevents accidental or incorrect applications. 5. ✅ Personalized & Tailored Applications Each application is: Context-aware Position-specific Professionally formatted Generated using candidate-specific data This increases response quality compared to generic templates. 6. ✅ Scalability Because of: Split-in-batches logic Looping over multiple job listings Structured parsing The workflow can process multiple job opportunities efficiently. 7. ✅ Modular Architecture The workflow is cleanly modular: AI agents Scraper Parser Email tool CV fetcher 👉 Subscribe to my new YouTube channel. Here I’ll share videos and Shorts with practical tutorials and FREE templates for n8n. Need help customizing? Contact me for consulting and support or add me on Linkedin.
by BytezTech
AI appointment bot with Google Calendar, Gmail and Sheets 📌 Overview This workflow automates end-to-end appointment scheduling for your business using an AI-powered chatbot. Clients can book, reschedule, or cancel meetings through a simple chat interface — no manual coordination needed. Two independent flows run in parallel. The AI Chat Flow handles real-time client conversations using Groq LLaMA 4 Scout, managing calendar availability, event creation, updates, and Gmail confirmations automatically. The Daily Sync Flow runs every morning to refresh your Google Sheet with the day's appointments and email an admin summary report. All times are handled in IST (GMT+05:30) with full ISO 8601 formatting. ⚙️ How it works AI Chat Flow Client sends a message to the bot AI Agent collects name, email, purpose, date, time, and duration Checks Google Calendar for availability Creates, updates, or deletes calendar events based on request Sends Gmail confirmation or cancellation email to the attendee Daily Sync Flow Triggers every morning at 9:30 AM IST Clears previous rows from Google Sheets (keeps header) Fetches all of today's Google Calendar events Formats and inserts each event into the sheet Emails the admin a summary report with total meeting count and sheet link 🛠️ Setup steps Import this workflow into n8n Add a Google Calendar OAuth2 credential and set your calendar email Add a Gmail OAuth2 credential for the agent and admin report Add Google Sheets OAuth2 (for Clear node) and Service Account (for Insert node) Add your Groq API key for the LLaMA 4 Scout model Update your admin email, calendar email, and Google Sheet ID in the workflow Activate the workflow — both flows run independently 🚀 Features AI-powered scheduling Books, reschedules, and cancels appointments via chat Checks real-time calendar availability before confirming Suggests 3 alternative slots if the requested time is unavailable Sends automatic Gmail confirmations to attendees Maintains conversation memory across the session (last 50 messages) Daily reporting Auto-clears and refreshes the Google Sheet every morning Syncs all calendar events with full details (name, email, time, duration) Emails admin a daily count summary with a direct sheet link 📋 Requirements n8n (cloud or self-hosted) Google Calendar, Gmail, and Google Sheets access Groq API key (free tier supported) 🎯 Benefits Zero manual appointment coordination Clients self-serve via chat 24/7 Admin always has a fresh daily schedule in Google Sheets Automatic email confirmations build client trust IST timezone enforced consistently across all events 👨💻 Author BytezTech Pvt Ltd
by Rahul Joshi
📊 Description Every company has documents sitting in Google Drive that nobody reads. HR policies, sales playbooks, product FAQs, financial guidelines — all written once, never found again. This workflow turns all of those documents into a live, searchable AI knowledge base that any team member can query instantly via a simple API call. Ask it anything. It finds the right document, pulls the exact relevant section, and answers in plain english — with the source cited so you always know where the answer came from. No hallucinations, no guessing, no manual searching. Built for founders, ops teams, and automation agencies who want company knowledge to be instantly accessible without building a custom RAG system from scratch. What This Workflow Does 📂 Reads all Google Docs from your Knowledge Base folder in Google Drive automatically ✂️ Splits each document into semantic chunks with overlap for better context retrieval 🤖 Converts every chunk into vector embeddings using OpenAI text-embedding-3-small 📌 Stores all embeddings in Pinecone with document metadata for fast semantic search 🌐 Accepts any question via webhook — from Slack, a form, or any internal tool 🔍 Searches Pinecone for the 5 most semantically relevant chunks to the question 🧠 Sends retrieved context to GPT-4o which answers using only what's in your documents 📝 Logs every question, answer, source, and confidence score to Google Sheets 🔄 Every Sunday checks Drive for new or updated documents and re-ingests them automatically 📧 Sends a weekly knowledge base digest showing what's current, new, or updated Key Benefits ✅ Zero hallucinations — GPT-4o only answers from your actual documents ✅ Always cites the source document so answers are verifiable ✅ Semantic search finds relevant content even if exact words don't match ✅ Knowledge base stays fresh automatically every Sunday ✅ Every Q&A logged to Google Sheets for full audit trail ✅ Works with any Google Docs — just drop them in the folder and run SW1 How It Works The workflow runs across 3 sub-workflows — one for ingestion, one for answering, one for maintenance. SW1 — Document Ingestion Pipeline (Run manually) You point it at your Google Drive Knowledge Base folder. It downloads every Google Doc as plain text, splits each one into 500-character chunks with 100-character overlap so context is preserved across boundaries. Each chunk gets converted into a 1536-dimension vector embedding using OpenAI's text-embedding-3-small model and stored in Pinecone with the document name as metadata. Every ingested document is logged to your Document Registry sheet with the ingestion date. Run this once when setting up, then SW3 handles updates automatically. SW2 — Question & Answer Agent (Always active via webhook) Someone sends a POST request with a question and their email. The question gets converted to an embedding using the same model used during ingestion. Pinecone finds the 5 most semantically similar chunks — ranked by cosine similarity score. Chunks scoring below 0.3 are filtered out to avoid irrelevant results. The remaining context gets sent to GPT-4o with strict instructions to only answer from what's provided. If the answer isn't in the knowledge base, it says so clearly instead of making something up. The response includes the answer, source document, confidence level, and whether it was found in the knowledge base. Everything is logged to your Q&A Log sheet. SW3 — Knowledge Base Manager (Every Sunday 11AM) Pulls your current Drive folder contents and compares every document ID against your Document Registry. New documents get flagged for ingestion. Existing documents get checked — if the file was modified after the last ingestion date, it gets re-ingested automatically. You get a weekly digest email showing what's current, what was updated, and what's new. No manual monitoring needed. Features Manual ingestion trigger for initial setup Google Drive folder monitoring for new and updated docs Recursive character text splitting with configurable chunk size and overlap OpenAI text-embedding-3-small for high quality 1536-dimension embeddings Pinecone vector database for fast cosine similarity search Relevance score filtering — only chunks above 0.3 score are used GPT-4o grounded answering with strict no-hallucination prompt Source citation in every answer Confidence scoring — high, medium, or low per response Full Q&A audit log in Google Sheets Weekly automated document registry sync Weekly KB digest email with full status report Modular 3-stage architecture — easy to extend with Slack or Teams integration Requirements OpenAI API key (text-embedding-3-small + GPT-4o access) Pinecone account — free tier works (index: dimensions 1536, metric cosine) Google Drive OAuth2 connection Google Sheets OAuth2 connection Gmail OAuth2 connection A Google Drive folder with your company documents as Google Docs A configured Google Sheet with 2 sheets: Q&A Log and Document Registry Setup Steps Create a Pinecone account at pinecone.io — free tier is enough Create a Pinecone index with dimensions 1536 and metric cosine Create a Google Drive folder called "Knowledge Base" Add your company documents as Google Docs inside that folder Copy the Google Sheet template and grab your Sheet ID Add all credentials — Pinecone, OpenAI, Google Drive, Google Sheets, Gmail Paste your Knowledge Base folder ID into both Google Drive nodes Paste your Sheet ID into all Google Sheets nodes Test by sending a POST request to the webhook with a question from your docs Target Audience 🧠 Founders who want instant answers from company documents without digging through Drive 📋 Ops and HR teams tired of answering the same internal questions repeatedly 💼 Sales teams who need instant access to product, pricing, and competitor information 🤖 Automation agencies building internal AI tools and knowledge systems for clients
by Incrementors
Description Add your approved SEO Q&A pairs to a Google Sheet, activate the workflow, and share the chat URL with your team or clients. The chatbot reads your entire knowledge base on every question and answers strictly from your own content — never from outside sources. Every conversation is automatically logged to a second sheet so you can track common questions and improve your knowledge base over time. Built for SEO agencies, consultants, and marketing teams who want a branded AI assistant without hallucinated or off-brand answers. What This Workflow Does Reads your knowledge base live** — Pulls all Q&A rows from your Google Sheet on every question so answers always reflect your latest approved content Answers strictly from your content** — GPT-4o-mini is instructed to never use outside knowledge, keeping every response on-brand and accurate Delivers an honest fallback** — If a question is not covered in your sheet, the bot tells the user directly and points them to your support team instead of guessing Maintains conversation memory** — Users can ask follow-up questions naturally without repeating context, just like a real chat Logs every exchange automatically** — Appends each session ID, timestamp, question, and answer to a Chat Log sheet for analytics and gap identification Returns the reply in real time** — The answer is sent back to the chat interface instantly at the same time as it is being logged Setup Requirements Tools Needed n8n instance (self-hosted or cloud) OpenAI account with GPT-4o-mini API access Google account with two Google Sheets (one for the knowledge base, one for the chat log) Credentials Required OpenAI API key Google Sheets OAuth2 (used in two steps — read and log) > ⚠️ Google Sheets OAuth2 appears in 2 steps — connect it in both 3. Google Sheets — Read Knowledge Base and 9. Google Sheets — Log Chat Estimated Setup Time: 15–20 minutes Step-by-Step Setup Import the workflow — Open n8n → Workflows → Import from JSON → paste the workflow JSON → click Import Create your Knowledge Base sheet — Open Google Sheets → create a new sheet → add a tab named exactly SEO FAQ → add these four column headers in row 1: Question, Answer, Category, Last Updated → fill in at least 5–10 Q&A rows before testing Create your Chat Log sheet — In the same Google Sheet or a separate one → add a tab named exactly Chat Log → add these four column headers in row 1: Session ID, Timestamp, User Question, Bot Answer Fill in Config Values — Open node 2. Set — Config Values → replace all placeholders: | Field | What to enter | |---|---| | YOUR_KNOWLEDGE_BASE_SHEET_ID | The ID from your Knowledge Base sheet URL (the string between /d/ and /edit) | | SEO FAQ | Leave as-is, or change to match your tab name exactly | | YOUR_CHAT_LOG_SHEET_ID | The ID from your Chat Log sheet URL (same method) | | Chat Log | Leave as-is, or change to match your log tab name exactly | | YOUR COMPANY NAME | Your agency or business name | | botPersona | Edit the persona description to match your brand voice | Connect Google Sheets for reading — Open node 3. Google Sheets — Read Knowledge Base → click the credential dropdown → add Google Sheets OAuth2 → sign in with your Google account → authorize access Connect OpenAI — Open node 6. OpenAI — GPT-4o-mini Model → click the credential dropdown → add your OpenAI API key → test the connection Connect Google Sheets for logging — Open node 9. Google Sheets — Log Chat → click the credential dropdown → select the same Google Sheets OAuth2 credential you connected in step 5 Activate the workflow — Toggle the workflow to Active → click on node 1. Chat Message Received → copy the Chat URL shown → share this URL with your team or embed it in your site How It Works (Step by Step) Step 1 — Chat Trigger: Receive User Question This step creates a public chat interface at a shareable URL. Every time a user types a message and hits send, that message is passed to the next step automatically. No credentials are needed for this step — it works as soon as the workflow is active. Step 2 — Set: Config Values Your knowledge base Sheet ID, log Sheet ID, tab names, company name, and bot persona are stored here as named variables. A unique session ID is also generated automatically for each new conversation so chats can be tracked individually in the log. Step 3 — Google Sheets: Read Knowledge Base The full contents of your SEO FAQ tab are read from Google Sheets every time a question comes in. This means you can add, edit, or remove Q&A rows at any time and the chatbot will reflect your changes immediately — no redeployment needed. Step 4 — Code: Build Knowledge Base Text All the rows from your sheet are formatted into a numbered Q&A text block grouped by category. The user's question is also pulled from the chat trigger here. If the sheet is empty, a clear fallback message is used instead of crashing the workflow. Everything is assembled into one clean package for the AI step. Step 5 — AI Agent: SEO Consultant GPT-4o-mini receives your bot persona, the full knowledge base text, and the user's question. It searches the knowledge base for a matching answer and responds in plain, friendly language. If the question is not covered, it returns exactly: "I do not have information about this topic in my current knowledge base. Please contact [your company name] support directly for help with this." Answers are kept under 150 words and contain no markdown formatting. Step 6 — OpenAI: GPT-4o-mini Model This is the language model powering the AI step. It runs at temperature 0.3 for factual, consistent answers and is capped at 400 tokens to keep responses concise and costs low per conversation. Step 7 — Memory: Conversation Buffer This step stores the conversation history for the current session. It allows users to ask follow-up questions naturally — for example, asking "Can you explain that in more detail?" — without the bot losing context from earlier in the same chat. Step 8 — Set: Prepare Log Fields The bot's answer, the user's original question, the session ID, and the timestamp are all assembled here into a clean set of fields ready for logging and for returning to the chat interface. Step 9 — Google Sheets: Log Chat A new row is appended to your Chat Log tab with four fields: session ID, timestamp, user question, and bot answer. This runs at the same time as the reply is sent back to the user. Over time this log shows you which questions are being asked most and where your knowledge base has gaps. Step 10 — Set: Return Answer to Chat The bot answer is sent back to the chat interface so the user sees the reply immediately. This step runs simultaneously with the logging step so there is no delay in the response. The final result: the user sees a clean, on-brand answer in the chat window within seconds, and the exchange is permanently recorded in your Google Sheet. Key Features ✅ Live knowledge base sync — Edit your Google Sheet and the chatbot reflects your changes on the very next question — no redeployment ✅ Hallucination-free by design — GPT-4o-mini is explicitly instructed to answer only from your sheet, never from its own training data ✅ Honest fallback built in — Unknown questions get a clear, branded fallback message instead of a confabulated answer that damages trust ✅ Multi-turn conversation support — Conversation memory lets users ask follow-up questions in the same session without losing context ✅ Automatic chat logging — Every exchange is saved to Google Sheets with session ID and timestamp — no manual export needed ✅ Category-organized knowledge base — Q&A rows include a Category column so the AI receives structured, scannable content per topic ✅ Zero-cost trigger — The chat interface is built into n8n with no third-party chat platform required ✅ Token-efficient responses — Answers are capped at 400 tokens and 150 words, keeping GPT costs predictable even at high chat volume Customisation Options Expand the knowledge base to other topics — In node 2. Set — Config Values, edit the botPersona field to change the bot's scope from SEO-only to any topic your team needs (e.g. HR policies, product FAQs, onboarding guides) — then populate your sheet accordingly. Increase answer length for complex topics — In node 6. OpenAI — GPT-4o-mini Model, raise maxTokens from 400 to 700 and change the 150-word limit in the prompt inside node 5. AI Agent — SEO Consultant to allow longer, more detailed answers for technical subjects. Use two separate Google Sheets — If you want your knowledge base and chat log in different files, paste different Sheet IDs into knowledgeBaseSheetId and logSheetId in node 2. Set — Config Values — the workflow handles both independently. Add a Slack notification for unanswered questions — After node 9. Google Sheets — Log Chat, add a Slack node that checks if the bot answer contains the fallback phrase and posts an alert to a #kb-gaps channel so your team knows which topics to add next. Track question frequency in sheets — Add a Google Sheets step after logging that searches the Chat Log for the same question and increments a count in a separate Frequency tab — helping you prioritize which knowledge base gaps to fill first. Troubleshooting Chat not responding after activation: Make sure the workflow is toggled to Active — inactive workflows do not respond to chat messages Click on node 1. Chat Message Received and confirm the Chat URL is visible — copy it fresh after activating Send a test message and check the n8n execution log for which step failed OpenAI credential not working: Confirm the API key is connected in node 6. OpenAI — GPT-4o-mini Model specifically Check that your OpenAI account has available credits — a depleted account silently fails Verify the key has access to gpt-4o-mini — some restricted keys block specific models Knowledge base returning empty or wrong answers: Open node 3. Google Sheets — Read Knowledge Base and confirm the Google Sheets OAuth2 credential is connected Check that knowledgeBaseSheetId in node 2. Set — Config Values exactly matches the ID in your Google Sheet URL Confirm the tab is named SEO FAQ exactly — spelling and capitalization must match knowledgeBaseSheetName Chat Log not saving rows: Open node 9. Google Sheets — Log Chat and confirm the Google Sheets OAuth2 credential is connected (this is a separate connection from the read step) Check that logSheetId in node 2. Set — Config Values is correct and the tab is named Chat Log exactly Confirm your Chat Log sheet has the four column headers in row 1: Session ID, Timestamp, User Question, Bot Answer Bot answering from outside the knowledge base: The prompt in node 5. AI Agent — SEO Consultant explicitly restricts answers to the knowledge base — if the bot strays, check that the full prompt text is intact and has not been accidentally edited Lower the temperature in node 6. OpenAI — GPT-4o-mini Model from 0.3 to 0.1 for stricter, more literal responses Support Need help setting this up or want a custom version built for your team or agency? 📧 Email:info@incrementors.com 🌐 Website: https://www.incrementors.com/