Workflows
Browse 12,955 Workflows
Workflows are deterministic, multi-step pipelines that chain models, tools and agents in a fixed order — the predictable counterpart to an autonomous agent. Each entry records its platform and complexity, so the setup cost is visible before you import it.
253–264 of 12,955
By HasData
Quick overview This workflow evaluates a proposed content topic by crawling a sitemap-scoped set of your pages with HasData, comparing it with live Google SERP evidence, and using OpenAI to recommend whether to update an existing page, create a new one, or request review, storing results in Google Sheets. How it works Runs manually and loads the configured site, sitemap scope, query, limits, and Google Sheets spreadsheet ID. Reads the “Review queue” tab in Google Sheets to prevent re-analyzing ideas that already have an approval decision or an existing brief. Fetches the XML sitemap (and up to the configured number of same-host child sitemaps), filters URLs by the path prefix, and selects up to the configured number of pages to inspect. Uses HasData to scrape each selected page and extracts the main text content from the configured CSS selector. Uses HasData to fetch Google organic SERP results (and related questions where available) for the same query and normalizes the evidence. Sends the page excerpts and SERP evidence to OpenAI to produce a structured decision with supporting evidence and next actions, then validates that evidence links and quotes are consistent. Appends or updates the matching row in Google Sheets with the decision, rationale, gaps, and a compact JSON evidence payload, or (in brief mode after approval) generates an OpenAI editorial brief and saves it back to the same row. Setup Add HasData API credentials (including the HasData community node) and OpenAI API credentials in n8n. Add Google Sheets OAuth credentials and create a spreadsheet with a “Review queue” tab using the headers referenced by the template. In the Settings values, set your site URL, same-host XML sitemap URL, path prefix, content selector, query, and replace REPLACE_WITH_SPREADSHEET_ID with your spreadsheet ID. Run in analyze mode first, then review the saved row in Google Sheets and set approval to APPROVED with decision create_new or update_existing before rerunning in brief mode. An n8n automation workflow template by HasData.
- 4 nodes
- Automation
By Joey Townsend
Quick overview This workflow runs every morning, reads multiple RSS feeds plus the CISA Known Exploited Vulnerabilities JSON feed, deduplicates and ranks recent items, then uses local Ollama models to classify and summarize the top stories before sending a formatted briefing to Gmail (SMTP) and Discord. How it works Runs daily at 6:30 AM (or manually for testing) to start the briefing run. Fetches recent items from a configured list of RSS/Atom feeds and downloads the CISA Known Exploited Vulnerabilities JSON feed. Normalizes titles, links, sources, and timestamps, keeps only items from the last 72 hours, and generates stable dedupe keys. Removes items already stored in the n8n Data Table history and optionally performs semantic near-duplicate removal by embedding titles with Ollama and comparing cosine similarity. Uses Ollama chat to classify each remaining story into a category and priority, filters excluded topics, scores items with keyword/freshness boosts, and selects the top stories plus capped category sections. Uses Ollama chat again to write “What happened / Why it matters / Personal relevance” summaries for each top story and formats the full briefing as email HTML/text and Discord-sized message chunks. Sends the briefing via SMTP email, posts it to Discord via webhook, and saves the processed story keys and metadata back into the n8n Data Table for future deduplication. Setup Install and run Ollama, pull the models you want to use (embed/classify/write), and set the Ollama base URL and model names in the Build Config values. Create (or select) an n8n Data Table named tech_briefing_history and ensure it has columns for dedupe_key, url, title, source, category, published_at, and first_seen used by the history read/write steps. Add an SMTP credential for the Email Send node (for Gmail SMTP or another provider) and set the recipient and sender addresses in Build Config. Create a Discord incoming webhook, paste its URL into Build Config, and ensure the target channel allows webhook posts. Review and update the RSS feed list, scoring thresholds (hours window, similarity threshold, top counts), and the reader profile text used for writing summaries in the workflow’s configuration/code. Requirements Self-hosted n8n with network access to an Ollama instance Ollama with an embedding model, a fast classification model and a writing model (defaults: nomic-embed-text, qwen3:8b, gemma4:12b-it-qat) About 16 GB of RAM for the default models An SMTP account (Gmail or other) and/or a Discord incoming webhook An n8n Data Table named tech_briefing_history Customization Add or remove RSS/Atom feeds in Build Config Swap in larger or smaller Ollama models, or change the hours window, similarity threshold and top-story count in Build Config Edit the boost keywords in Select And Bucket to favor topics you care about Rewrite the reader profile in Build Write Requests so the "For you" line matches your role Enable the two disabled archive nodes to save each briefing to Obsidian via its Local REST API plugin Additional info The language models only classify headlines and write summaries from fetched text. Collection, deduplication, scoring and delivery are plain code, so the briefing stays grounded and predictable, and nothing leaves your network except the email and Discord posts. Several Code nodes reference other nodes by name with $('Node Name'). If you rename Build Config, Normalize Stories, Dedup Against History, Build Classify Requests, Select And Bucket, Build Write Requests or Validate And Format, update those references too. An n8n automation workflow template by Joey Townsend.
- 3 nodes
- Automation
By Michael Matthews
Quick overview This workflow runs every 30 minutes to check NOAA Storm Prediction Center hail/wind reports and National Weather Service alerts, matches them to your past customers by location, and texts you a consolidated summary via Twilio, with an optional handoff to a separate outreach webhook. How it works Runs every 30 minutes on a schedule. Loads your business settings and customer list, validates phone numbers/time zone, and determines which customer addresses still need to be geocoded. For new addresses, looks up latitude/longitude via the US Census Geocoder and retrieves the corresponding National Weather Service forecast zone and county from api.weather.gov. Builds a set of checks by downloading NOAA Storm Prediction Center hail and wind report CSVs (today and yesterday, or a replay date) and active National Weather Service alerts for the states your customers are in. Matches reports and alerts to located customers within your configured radius and thresholds, suppresses repeat notifications using workflow static data, and formats a single summary message (holding messages during quiet hours and retrying previously failed sends). Texts you what it found: names, phone numbers, distance, size and local time. If outreach_url is set, each group goes to the companion outreach workflow instead, which asks for your approval before any customer is texted. If that handoff fails, the list is texted to you on the next check. Setup Add a Twilio credential and select it on Find your Twilio account and Text you. The Twilio number must be able to text your cell (A2P 10DLC or a verified toll-free number in the US). Update “Your settings” with your Twilio number, your cell number, your time zone, and a contact email to include in the National Weather Service User-Agent header. Add your customers (name, address, and optional phone/email/ok_to_text plus optional lat/lon) in “Your customers” or replace it with a Google Sheets/database node that outputs the same fields. Adjust monitoring options such as radius, hail/wind thresholds, warning types, and quiet hours to fit your use case. Then publish the workflow. It remembers located addresses and who it has already named in workflow static data, which n8n keeps only for published workflows. (Optional) Import and configure the companion outreach workflow, then set outreach_url and outreach_key to its webhook URL and shared key to enable handoff for approval-based customer texting. Requirements A Twilio number that can text your own cell, and a Twilio credential in n8n US customer addresses. The Census geocoder and the National Weather Service cover the United States only No accounts or keys for the weather data or address lookups, no database and no AI model Customization radius_miles (default 3) for how close a storm report must be to a customer hail_min_inches (default 1), wind_min_mph (default 58) and wind_damage_reports for reports with no speed warnings: the Weather Service warning names to watch, for example only Hard Freeze Warning for a plumber quiet_start and quiet_end, and max_names per group Swap Your customers for a Google Sheets or database node that returns name, phone, email, address, ok_to_text, and optionally lat and lon hail_message, wind_message and warning_message for the customer text handed to the outreach workflow replay_spc_day to test against a past storm day, for example 250519 Additional info Tested live on n8n Cloud against the real NOAA, Census and Weather Service feeds with a real Twilio number, plus 49 automated checks. Storm reports are points where hail or wind was reported, not radar swaths, so treat a match as a reason to check, not proof of damage. Test notes and the texts it sends: https://github.com/mikematthewsai/n8n-weather-watch-past-customers. An n8n automation workflow template by Michael Matthews.
- 2 nodes
- Automation
By WeblineIndia
Quick overview This workflow receives failed-payment webhooks, logs retryable failures to a Google Sheets queue with reason-based retry timing, retries due payments on a 15-minute schedule via an HTTP payment API call, and notifies customers through Gmail when action is required, a payment succeeds, or retries are exhausted. How it works Receives a POST webhook event for a failed payment and normalizes the payload into consistent fields. Checks Google Sheets (RetryQueue tab) for an existing row with the same event_id and stops if the event was already processed. Classifies the failure reason to either schedule an automatic retry (with delay and max retries) or mark it as customer action required. Appends the result to the Google Sheets RetryQueue and, for customer-action cases, sends a Gmail email asking the customer to update their payment method. Runs every 15 minutes, loads the Google Sheets RetryQueue, and filters to rows that are SCHEDULED, due now, and still below the max retry limit. Calls the payment provider’s retry endpoint via HTTP for each due row and interprets the response to determine success or failure. Updates the same Google Sheets row to SUCCESS and emails the customer on success, or schedules the next retry time (or marks MAX_RETRIES_REACHED) and emails the customer when retries are exhausted. Setup Create a Google Sheet with a RetryQueue tab and column headers that match the fields used in the Google Sheets nodes (for example: id, event_id, transaction_id, payment_id, amount, currency, status, retry_count, max_retries, next_retry_at, last_retry_at, customer_email, failure_reason, failure_message). Add Google Sheets credentials in n8n and update each Google Sheets node to point to your spreadsheet (replace any YOUR_GOOGLE_SHEET_ID placeholders and select the correct document and sheet). Add a Gmail credential in n8n and confirm the “Notify Customer”, “Email Customer — Payment Successful”, and “Email Customer — Payment Failed” nodes use the correct sender and content for your use case. Set the HTTP Request node to your real payment retry endpoint (URL and authentication via headers/credentials) and verify the request/response fields align with how “Read Retry Result” detects success. Copy the “Receive Failed Payment” webhook URL from n8n and configure your payment system to POST failed payment events to it using the expected fields (event_id, transaction_id, customer_email, amount, currency, failure_reason/failure_code). Additional info Troubleshooting Guide | Issue | Possible Cause | Solution | |---|---|---| | Google Sheets Operation lookup shows red error | Your n8n version removed/renamed Lookup | Use Get Row(s) + filter on event_id | | Sheets node returns no data / fails | Still using YOUR_GOOGLE_SHEET_ID | Replace with real Sheet ID and connect credential | | Duplicate always true | Demo row already has same event_id | Use a new event_id or clear the matching row | | Auto-retry IF never goes false | failure_reason is still retryable (e.g. insufficient_funds) | Send expired_card / invalid_card / authentication_required | | Schedule finds no due rows | next_retry_at is in the future or status not SCHEDULED | Backdate next_retry_at and set status=SCHEDULED | | HTTP retry fails immediately | Placeholder payment URL / missing auth | Point to mock (e.g. httpbin) or real provider + credential | | Success IF unexpected with httpbin | httpbin echoes request; not a real payment status | Use a mock that returns {"status":"succeeded"} or {"status":"failed"} | | Gmail not received | Wrong email / missing Gmail credential | Use your real customer_email and reconnect Gmail | | Webhook 404 | Workflow inactive or wrong path | Activate workflow; POST to /webhook/payment-failed (or test URL while listening) | | Card data concerns | Payload includes sensitive fields | Send only payment IDs/tokens — never PAN/CVV | Need Help? If you need help customizing or extending this workflow, for ex. adding provider-specific retry APIs, CRM sync, Slack alerts, fraud checks or production hardening then WeblineIndia's n8n team can assist you with advanced automation. Learn more: Everything in n8n Automation | Offshore Workflow Experts. An n8n automation workflow template by WeblineIndia.
- 4 nodes
- Automation
By WeblineIndia
Quick overview This workflow receives procurement questions via n8n Chat or a webhook, looks up role and procurement records in Google Sheets, and uses Groq-hosted LLM agents to generate a role-restricted, sheets-grounded answer with suggested next actions. How it works Receives a question from n8n Chat or a POST request to the procurement-copilot webhook and normalizes the request fields (user identity hints, object ID, and confidence threshold). Loads a Users Google Sheet to resolve the requester’s role and RBAC rules, and returns an access-limited response if the role is unknown. Uses a Groq LLM agent to classify the intent and extract entity IDs (requisition, PO, invoice, supplier, contract), then validates/fills missing entities from the question text. Loads matching procurement data from Google Sheets tabs (Requisitions, Approvals, Suppliers, Contracts, and Invoices) and assembles a single context object. Filters the context by role (allowed entities) and redacts denied fields before sending only the allowed context to a second Groq LLM agent. Generates a grounded JSON answer, removes any suggested actions not permitted for the user’s role, and routes either a confident response or a clarification message based on the confidence threshold. Returns the final result as JSON to the webhook caller or as chat text back to n8n Chat. Setup Create and connect Google Sheets credentials, and ensure the spreadsheet includes the Users, Requisitions, Approvals, Suppliers, Contracts, and Invoices tabs with the expected columns (IDs like REQ-…, PO-…, INV-…, CTR-…). Add a Groq API credential and select it for both the intent and answer LLM model nodes. Populate the Users sheet with each caller’s email and a valid role (buyer, approver, requisitioner, category_manager, ap_analyst, supplier_manager) to enable access. If using the webhook entry point, copy the production webhook URL for procurement-copilot and configure your portal/application to POST questions (and optional userEmail, roleHint, objectId, and confidenceThreshold). Additional info How To Customize Nodes Adjusting Confidence Thresholds:** By default, the workflow routes to a "clarification" response if the AI's confidence is below 0.55[cite: 1]. You can modify this threshold in the JavaScript code of the Normalize Request node[cite: 1]. Customizing RBAC Permissions:** Open the Resolve Identity and Role code node[cite: 1]. Here, you can edit the JSON object to add new roles or modify the allowedEntities, allowedActions, and deniedFields arrays to suit your company's security policies[cite: 1]. Updating Entity ID Formats:** If your company uses different prefixes for purchase orders or invoices, update the Regular Expressions inside the Validate Extraction code node (e.g., modifying /\\bPO[- ]?(\\d{3,})\\b/i)[cite: 1]. Swapping AI Models:** You can replace the Groq Intent Model and Groq Answer Model nodes with alternative n8n LangChain chat models (like OpenAI or Anthropic) if you prefer a different AI provider[cite: 1]. Add‑ons Slack/Microsoft Teams Integration:** Replace the Webhook triggers and responses with Slack or Teams nodes to allow employees to query the copilot directly from their company messaging apps. Live ERP Integration:** Swap out the Google Sheets nodes for HTTP Request nodes or native integrations (like SAP, NetSuite, or QuickBooks) to pull real-time procurement data directly from your system of record. ServiceNow/Jira Ticketing:** Add an HTTP request node on the "Clarification" routing branch to automatically open an IT or Procurement Operations support ticket when the AI's confidence is too low to answer securely. Use Case Examples Requisition Status Inquiries:** A requisitioner asks, "Where is REQ-10482?"[cite: 1]. The copilot identifies the user's role, fetches the requisition and approval chain from the sheets, and returns the status while hiding confidential supplier pricing[cite: 1]. Invoice Exception Handling:** An AP Analyst queries "INV-88901". The AI retrieves the 3-way match status and, recognizing the analyst's role, permits the hold_payment suggested action[cite: 1]. Supplier Risk Assessment:** A Category Manager asks about supplier "ACME-44"[cite: 1]. The workflow provides the supplier's ESG score and onboarding status while actively redacting sensitive fields like bank account details[cite: 1]. Contract Utilization Tracking:** A buyer requests data on "CTR-17"[cite: 1]. The assistant pulls the contract data from Google Sheets, calculating the utilized spend and alerting the buyer if the utilization percentage is nearing its limit[cite: 1]. (Note: Because this workflow is highly modular, there can be many more such use cases by simply expanding the Google Sheets tabs and adding new roles!) Troubleshooting Guide | Issue | Possible Cause | Solution | | :--- | :--- | :--- | | Workflow returns "Access limited: add [email] to Users sheet..."[cite: 1] | The user's email was not found in the Google Sheets database, or their assigned role is invalid[cite: 1]. | Ensure the user's email is added to the Users sheet with a valid role (e.g., buyer, approver)[cite: 1]. | | AI returns "I could not produce a grounded answer from Google Sheets context."[cite: 1] | The specific REQ, PO, INV, or Supplier ID was not found in any of the Google Sheets during the data enrichment phase[cite: 1]. | Verify that the record actually exists in the connected Google Sheets and that the ID matches the expected formatting (e.g., REQ-10482)[cite: 1]. | | Suggested actions are missing from the response. | The generated action was blocked by the Role-Based Access Control (RBAC) filter[cite: 1]. | Check the Resolve Identity and Role node to verify if that specific action is listed in the allowedActions array for the user's role[cite: 1]. | | Google Sheets nodes fail to execute. | Missing or expired credentials, or an incorrect Document ID[cite: 1]. | Re-authenticate the googleSheetsOAuth2Api credentials and verify the Document ID in all five sheet loading nodes[cite: 1]. | Need Help? If you need a helping hand to set up these API connections, customize the RBAC code nodes or build custom Add-Ons (like integrating this copilot directly into your Slack workspace or ERP system), contact WeblineIndia. Our n8n technical experts can help you customize this workflow or build similar automated, enterprise-grade AI solutions tailored exactly to your business needs!. An n8n automation workflow template by WeblineIndia.
- 4 nodes
- Automation
- AI
By Ziad Karim
Quick overview This workflow watches a Google Drive folder for new bank-statement PDFs or CSVs, extracts transactions with OpenAI, reconciles opening/closing balances, and appends only new (non-duplicate) transactions to Google Sheets with rule-based categorization, while logging every import and emailing you when a statement fails reconciliation. How it works Triggers when a new file is created in a specified Google Drive folder. Downloads the statement and extracts text from the file (PDF text extraction or CSV-to-text). Sends the extracted text to OpenAI to return structured JSON containing account details, statement period, balances, and a transaction list. Validates that opening balance plus all transaction amounts equals the closing balance (in integer cents) and optionally identifies the first running-balance mismatch. If the statement does not reconcile, logs the refused import to Google Sheets and sends a Gmail email explaining the discrepancy and any suspected sign error. If the statement reconciles, reads category rules and existing transaction fingerprints from Google Sheets, categorizes transactions, and keeps only transactions not previously imported. Appends the new transactions to the Google Sheets Transactions tab and writes a summary entry to the Import log tab. Setup Connect Google Drive credentials, choose the folder to watch, and ensure n8n has permission to download files from it. Connect an OpenAI credential (Chat Model) and select the model used to extract statement data. Connect Google Sheets credentials and set the spreadsheet and sheet names for Transactions, Rules, and Import log in all Google Sheets nodes. Prepare your Google Sheet tabs/columns, including a Transactions column named Fingerprint and a Rules tab with Match, Category, and Direction (in/out/any). Connect Gmail credentials, replace the recipient address in the email action, and confirm your Gmail account can send messages from n8n. Requirements n8n (self-hosted or Cloud); built and tested on n8n 2.x A Google Drive folder for statements (PDF or CSV) and one Google Sheet with Transactions, Rules and Import log tabs An OpenAI API key, or any OpenAI-compatible provider Gmail for the alert when a statement doesn't reconcile Customization Stricter checks: add your own rules to the balance check, such as refusing statements that overlap a closed month Other sources: replace the Drive trigger with a Gmail trigger on your bank's statement emails Accounting tools: swap the Sheets append for QuickBooks, Xero or a database; the fingerprint keeps re-imports safe there too Additional info What you get: one importable workflow file (JSON, 17 nodes) with setup notes pinned beside every step, delivered as an instant download after checkout. Use it in unlimited workflows of your own or your clients'. Payments are handled by Paddle (merchant of record). 14-day full refund, no questions asked. Questions before or after buying: hello@hundredships.com. This is a data-import tool, not accounting or financial advice. An n8n automation workflow template by Ziad Karim.
- 6 nodes
- Automation
- AI
By Incrementors
DESCRIPTION Automate appointment booking through voice calls by integrating VAPI voice agent with AI-powered calendar management. This workflow receives scheduling requests via webhook, uses OpenAI to intelligently check availability, books appointments in Google Calendar, and responds in real-time during the phone call. KEY FEATURES Real-time voice scheduling: Processes appointment requests during live phone calls with instant confirmation, eliminating callback delays and manual scheduling AI-powered decision making: OpenAI GPT-4.1 Mini intelligently interprets caller requests, checks calendar availability, and determines optimal booking slots automatically Google Calendar integration: Seamlessly connects to Google Calendar with two specialized tools - availability checker and appointment booking - for automated calendar management Webhook-based communication: Receives structured data from VAPI voice agent including name, phone, service type, address, priority level, and scheduling status Eastern timezone support: All appointments are automatically timestamped using America/New_York timezone for accurate scheduling across regions Tool-use AI architecture: AI agent has direct access to calendar tools, allowing it to make intelligent decisions based on real availability data WHAT THIS WORKFLOW DOES This workflow acts as an intelligent backend for voice-based appointment scheduling. When a customer calls your business and speaks to a VAPI voice agent about booking an appointment, the voice agent sends the scheduling details to this n8n workflow via webhook. The AI assistant powered by OpenAI GPT-4.1 Mini receives the request, checks your Google Calendar for availability during the requested time slot, and automatically books the appointment if available. The workflow then sends a confirmation response back to the voice agent, which can immediately confirm the booking to the caller while they're still on the phone. Perfect for service businesses, medical offices, consultation services, and any organization using VAPI for phone automation who want to eliminate manual appointment scheduling and provide instant booking confirmations to customers. INPUT Webhook POST request from VAPI voice agent Scheduling details: name, phone, service type, address Priority level (P1, P2, etc.) Status flags (AfterHours, Regular, etc.) Requested appointment time and date PROCESSING Step 1: Receive scheduling request The workflow receives a webhook POST request from the VAPI voice agent containing structured JSON data with customer details, service type, requested time, address, and priority level. Step 2: AI processes the request OpenAI GPT-4.1 Mini AI agent analyzes the scheduling request and determines the appropriate action based on business rules, priority levels, and calendar availability. Step 3: Check calendar availability The AI uses the "Check Calendar Availability" tool to query Google Calendar and verify if the requested time slot is available for booking. Step 4: Book the appointment If the slot is available, the AI uses the "Book Appointment in Calendar" tool to create a new calendar entry with a 3-hour default duration and all customer details. Step 5: Send real-time response The workflow immediately responds to the VAPI voice agent with booking confirmation or alternative availability, allowing the agent to inform the caller during the same phone call. OUTPUT Webhook response with booking confirmation status New appointment created in Google Calendar Calendar entry with customer name, phone, service details Real-time availability status for the voice agent Immediate caller confirmation during the phone call SETUP INSTRUCTIONS Prerequisites n8n instance (cloud or self-hosted) VAPI voice agent account with webhook support Google Calendar with OAuth2 access OpenAI API key (GPT-4.1 Mini recommended) Active phone number connected to VAPI Step 1: Import the Workflow Download or copy the workflow JSON In n8n, go to Workflows → Import from file / JSON Import the workflow Review the imported nodes and connections Step 2: Configure Credentials Set up the required credentials inside n8n's credential manager: Google Calendar OAuth2:** For checking availability and booking appointments OpenAI API:** For GPT-4.1 Mini AI agent processing Important: No credentials are hardcoded. All must be connected via n8n's credential manager. Step 3: Configure Google Calendar Open both calendar tool nodes: "Check Calendar Availability" "Book Appointment in Calendar" Update the calendar email address to your target calendar Verify OAuth2 connection is active Test calendar access by running a manual test Step 4: Configure VAPI Webhook Integration Copy the webhook URL from the "Receive Scheduling Request from VAPI" node Log into your VAPI dashboard Navigate to your voice agent's tool configuration Add a new webhook tool called scheduling_tool Paste the n8n webhook URL Configure the webhook to send POST requests with JSON data Map voice agent variables to webhook payload: name: Customer name from call phone: Customer phone number service: Service type requested address: Customer address priority: Priority level (P1, P2, etc.) status: Call status (Regular, AfterHours, etc.) Step 5: Customize AI System Prompt Open "Process Scheduling with AI Assistant" node Review the system message in options Customize business rules: Service types offered Priority handling logic After-hours scheduling rules Default appointment duration Adjust timezone if not using Eastern time Add specific instructions for your business Step 6: Configure Appointment Duration Open "Book Appointment in Calendar" tool node Review the timeMax field (default: 3 hours after start time) Adjust duration based on your service requirements Use $fromAI() function to let AI determine duration dynamically Test with different service types Step 7: Test the Workflow Test with webhook simulator: Use a tool like Postman or curl Send a POST request to your webhook URL Use this test payload: { "name": "Test Customer", "phone": "919-555-0123", "service": "Consultation", "address": "123 Main St, Raleigh, NC 27601", "priority": "P2", "status": "Regular", "source": "SchedulingAgent" } Verify the workflow executes successfully Check Google Calendar for the new appointment Review the webhook response Test with VAPI voice call: Call your VAPI-enabled phone number Request an appointment naturally (e.g., "I need to book a repair service for tomorrow at 2 PM") Verify the voice agent sends data to n8n Confirm the appointment is created in Google Calendar Ensure the voice agent confirms booking to you during the call Step 8: Activate & Monitor Activate the workflow in n8n Monitor execution logs for the first few real calls Review calendar entries for accuracy Adjust AI prompts based on actual performance Set up error notifications if needed WORKFLOW NODE BREAKDOWN Receive Scheduling Request from VAPI Type: Webhook Trigger Purpose: Receives POST requests from VAPI voice agent containing customer scheduling details Configuration: Webhook path: 12c231db-0a0e-466a-a447-d97a12ba9ed8 Method: POST Response: Wait for webhook response enabled Expected Input: { "name": "string", "phone": "string", "service": "string", "address": "string", "priority": "string", "status": "string", "source": "SchedulingAgent" } Process Scheduling with AI Assistant Type: AI Agent (LangChain) Purpose: Intelligent processing of scheduling requests with access to Google Calendar tools AI Model: OpenAI GPT-4.1 Mini System Role: Backend automation agent Processes VAPI scheduling data Has access to two calendar tools: Check Calendar Availability Book Appointment in Calendar Key Features: Interprets natural scheduling requests Makes intelligent booking decisions Handles priority levels (P1, P2, etc.) Manages after-hours requests Formats Eastern timezone timestamps Tool Access: The AI can autonomously decide when to: Check availability first Book appointment if available Return alternative suggestions if unavailable OpenAI GPT-4.1 Mini Model Type: Language Model (Chat) Purpose: Powers the AI agent with natural language understanding and decision-making Configuration: Model: gpt-4.1-mini Connected to AI agent node Provides language model capabilities for tool use Why GPT-4.1 Mini: Fast response times for real-time calls Cost-effective for high-volume scheduling Strong tool-use capabilities Reliable appointment logic Check Calendar Availability Type: Google Calendar Tool (AI-accessible) Purpose: AI tool for querying calendar availability Configuration: Resource: Calendar Calendar: Target calendar email Operation: Check availability AI-callable: Yes How AI Uses It: The AI agent calls this tool first to verify if the requested time slot is free before attempting to book. It receives availability data and makes decisions based on the response. Book Appointment in Calendar Type: Google Calendar Tool (AI-accessible) Purpose: AI tool for creating calendar appointments Configuration: Resource: Calendar Calendar: Target calendar email Operation: Create event Time Min: $fromAI("StartTime", "The start time the user has requested for booking") Time Max: $fromAI("EndTime", "Assume the end time is 3 hrs after the start time") Dynamic Fields: Uses $fromAI() function to extract: Start time from AI's interpretation of the request End time calculated as 3 hours after start (customizable) AI Logic: The AI determines when to call this tool based on availability check results and business rules defined in the system prompt. Send Response to Voice Agent Type: Respond to Webhook Purpose: Sends booking confirmation or status back to VAPI voice agent Response Format: Returns JSON with booking status, allowing the voice agent to: Confirm successful booking to caller Suggest alternative times if unavailable Provide appointment details Timing: Responds immediately after AI processing completes, ensuring the caller receives feedback during the same phone call. USE CASES HVAC & Plumbing Services: Customers call to schedule repairs or maintenance. The voice agent books appointments instantly without putting callers on hold or requiring callbacks. Medical & Dental Offices: Patients call to book appointments. The AI checks doctor availability and books the appointment while the patient is still on the line, reducing no-shows. Consulting & Coaching: Professionals using VAPI can automate their booking process. Clients get instant confirmation for consultation slots without email back-and-forth. Home Services (Cleaning, Repairs, Installations): Service businesses receive booking calls 24/7. The AI handles after-hours calls and books next-day appointments automatically. Beauty & Wellness (Salons, Spas, Fitness): Customers book appointments via phone. The voice agent accesses real-time availability and confirms bookings immediately. Legal & Financial Services: Law firms and financial advisors using VAPI can automate client meeting scheduling with priority handling for urgent matters. Real Estate Showings: Agents using VAPI for property inquiries can automatically schedule showing appointments based on availability. CUSTOMIZATION OPTIONS Modify Appointment Duration Default: 3 hours for all appointments Customization: Open "Book Appointment in Calendar" node Edit the timeMax formula Options: Fixed duration: {{ $now.plus(2, 'hours') }} Service-based: Add conditional logic based on service type AI-determined: Use $fromAI("Duration", "Appointment duration in hours") Add Google Sheets Logging Current State: Not implemented System Prompt Mentions: Logging to Peachtree_Scheduling_Log sheet Implementation: Add Google Sheets node after AI agent Connect to your logging sheet Map fields: Name, phone, service, address Priority, status, timestamp Booking confirmation status Calendar event ID Use {{ $now.format('America/New_York') }} for timestamp Add Slack/Email Notifications Current State: Optional, mentioned in system prompt Implementation for Slack: Add Slack node after booking success Send to scheduling team channel Include: Customer name, service, time, priority Implementation for Email: Add Gmail/Email node after booking Send to scheduling coordinator Attach booking details and calendar link Handle Multiple Service Types Customize in AI system prompt: Service Types & Durations: Consultation: 1 hour Repair: 3 hours Installation: 4 hours Maintenance: 2 hours Priority Levels: P1: Urgent, book within 24 hours P2: Standard, book within 3 days P3: Flexible, book within week Update the AI agent's system message with your specific service catalog. Add Conditional Routing Example: Different calendars for different services Add Switch node before AI agent Route based on service type Use separate Google Calendar tools for each service category Different technicians/departments get their own calendars Implement After-Hours Logic Customize AI prompt: After-Hours Rules: If status = "AfterHours" and time < 8 AM: Book for next available 8 AM slot If status = "AfterHours" and time > 6 PM: Book for next business day 9 AM If priority = "P1" and after hours: Book emergency slot regardless of time Multi-Calendar Support For larger organizations: Clone calendar tool nodes Create separate tools for each calendar: Technician 1 calendar Technician 2 calendar Manager calendar AI can choose appropriate calendar based on: Service type Availability Priority level TROUBLESHOOTING Webhook not receiving data Verify webhook URL is correctly configured in VAPI dashboard Check that VAPI voice agent is sending POST requests Test with Postman using sample JSON payload Review n8n execution logs for incoming requests Calendar availability check fails Confirm Google Calendar OAuth2 credentials are connected Verify calendar email address is correct in tool node Check that the calendar has proper sharing permissions Test calendar access manually in Google Calendar settings Appointments not being created Ensure "Book Appointment in Calendar" tool has write permissions Verify $fromAI() fields are extracting time data correctly Check if AI is receiving proper time format from VAPI Review AI agent execution logs for tool call attempts AI not using calendar tools Verify both calendar tools are connected to AI agent node Check OpenAI API credentials are valid Ensure GPT-4.1 Mini model supports tool use (it does) Review AI system prompt for conflicting instructions Wrong timezone on appointments The workflow uses America/New_York timezone Update timezone in system prompt if needed Verify Google Calendar timezone settings Check $fromAI() time extraction format VAPI not receiving response Confirm "Respond to Webhook" node is configured correctly Check that "Wait for webhook response" is enabled Verify n8n is returning proper JSON response Test webhook response format in VAPI logs Duplicate bookings created AI might be calling booking tool multiple times Add logic to prevent duplicate calendar entries Check VAPI for repeated webhook calls Review AI execution logs for tool call frequency IMPORTANT NOTES VAPI integration: This workflow is specifically designed for VAPI voice agent platform. It expects structured JSON data from VAPI's webhook system. Other voice platforms may require webhook format adjustments. Real-time requirement: The workflow must respond quickly (under 5 seconds) to maintain natural phone conversation flow. Avoid adding heavy processing nodes that could slow response time. Tool-use architecture: This workflow uses n8n's AI agent with tool-use capabilities. The AI autonomously decides when to check availability and when to book appointments based on the conversation context. Cost considerations: OpenAI GPT-4.1 Mini API calls cost approximately $0.001-0.003 per scheduling request. Google Calendar API is free for normal usage but has rate limits. Timezone handling: All timestamps use America/New_York timezone by default. Adjust the timezone in the system prompt if your business operates in a different region. Default appointment duration: Appointments are set to 3 hours by default. Customize this in the "Book Appointment in Calendar" node or let AI determine duration dynamically. Priority levels: The system prompt mentions priority handling (P1, P2) but doesn't implement specific logic. Customize the AI prompt to add priority-based scheduling rules. After-hours scheduling: The workflow receives "AfterHours" status but doesn't implement special handling. Add conditional logic or AI instructions for after-hours booking rules. Google Sheets logging: The system prompt mentions logging to a Google Sheet named Peachtree_Scheduling_Log, but this functionality is not implemented. Add a Google Sheets node if you need appointment logging. Notification system: Optional Slack/Email notifications are mentioned in the system prompt but not implemented. Add notification nodes for internal team alerts. No error handling: The current workflow doesn't include explicit error nodes. Consider adding error handling for failed bookings or API timeouts. Single calendar only: The workflow currently supports one Google Calendar. For multi-technician scheduling, clone the workflow or add calendar routing logic. RESOURCES n8n AI Agent documentation Google Calendar API guide OpenAI tool use documentation VAPI webhook documentation n8n webhook trigger guide SUPPORT Need help or custom development? 📧 Email: info@incrementors.com 🌐 Contact Form: https://www.incrementors.com/contact-us/. An n8n automation workflow template by Incrementors.
- 6 nodes
- Automation
- AI
By Roman Rozenberger
Quick overview Reads pending keywords from Google Sheets, pulls Google's top 10 with DataForSEO (optionally page content, search volume and traffic per URL), groups the results into search intents with an OpenRouter model, and writes the summary, intents and per-result data back to the sheet. How it works Runs manually and loads settings from Config: sheet URL, model, prompt and the optional data switches. Reads the Keywords tab and keeps rows with an empty status, up to max_keywords. For each keyword, the verified DataForSEO node fetches the live Google top 10, plus People Also Ask, related searches and the AI Overview when present. If enabled, DataForSEO reads every ranking page as markdown; a Code node measures words and counts tables, lists, images and videos, and builds a short digest. If enabled, DataForSEO Labs adds search volume with monthly history (seasonality is computed from it) and estimated traffic per URL. The Labeler (Basic LLM Chain with the OpenRouter Chat Model) groups the results into search intents. It sees titles, snippets and digests only - no numbers. Code nodes count coverage, share and traffic share per intent, the dominant intent, the reference length and warnings, then append rows to Summary, Intents and Results and mark the keyword as done or error. Setup Copy the template sheet (link in the Setup sticky) and paste your copy's URL into Config -> spreadsheet_url. Install the verified DataForSEO node once, then add a DataForSEO API credential with your API login and API password (DataForSEO dashboard -> API access). Add an OpenRouter credential on the OpenRouter Chat Model node. Change the model in Config if you do not want openai/gpt-6-luna. Add a Google Sheets OAuth2 credential to the five Google Sheets nodes. In the Keywords tab add keyword, country_code (2840 US, 2826 UK, 2616 PL, 2276 DE, 2250 FR, 2380 IT) and language_code (en, pl, de...). Leave status empty, then run the workflow. Requirements DataForSEO account with API access OpenRouter API key Google account for Google Sheets The verified DataForSEO node (n8n-nodes-dataforseo) Customization Switch read_pages, search_volume or traffic off in Config to pay less (SERP and model only: about $0.003 per keyword). Pick any OpenRouter model in Config; low-cost models without heavy reasoning are enough for grouping ten results. Edit the prompt in Config -> system_prompt, for example to answer in another language. Raise or lower max_keywords to control how many keywords one run processes. Additional info A full run costs about $0.03 per keyword in API fees, mostly DataForSEO Labs. The model only groups results; every number is computed in Code nodes, so each figure in the sheet can be recomputed by hand. The Basic LLM Chain does not report the model cost (about $0.001 per keyword with openai/gpt-6-luna); check it in your OpenRouter activity. The same method as an open-source Python library and a browser playground: https://romek-rozen.github.io/intent-labeler/. An n8n automation workflow template by Roman Rozenberger.
- 4 nodes
- Automation
- AI
By Thiago Cavalcanti
Quick overview This workflow accepts website leads via a webhook, deduplicates and stores them in an n8n Data Table, emails the owner a Gmail alert with an “answered” link, sends a single reminder after 30 minutes if not marked answered, and delivers a daily Gmail summary. How it works Receives a new lead via a POST webhook (only if an email or phone number is present) or runs nightly on a schedule. Normalizes the lead fields, generates a SHA-256 lead key from email/phone, and checks an n8n Data Table for a recent matching lead. If the lead is new (not seen within the repeat window), inserts it into the Data Table and sends a Gmail alert to the owner containing a private “mark as answered” resume link. Waits until the owner opens the “answered” link or until the reminder time limit expires. If marked answered, updates the Data Table row with an answered timestamp; otherwise, sends one Gmail reminder and records the reminder timestamp. Every evening, pulls today’s Data Table rows, calculates received/answered-in-time/open/reminded counts, and emails the daily summary via Gmail. Setup Create an n8n Data Table with columns lead_key, name, email, phone, source (text) and received_at, answered_at, reminded_at (date/time), then select it in all Data Table nodes. Add a Gmail OAuth2 credential for the Gmail nodes used to send the alert, reminder, and daily summary. Update the “Your settings” values (owner email, reminder minutes, repeat window days, and timezone) to match your team’s requirements. Copy the webhook production URL from the lead webhook and configure your form tool to send a POST request with lead fields (name, email, phone, message, source). Requirements A Gmail account and n8n with Data Tables Customization Swap the Gmail nodes for Slack, Telegram or Outlook, change the evening summary time and timezone, or add Header Auth to the webhook if your form can send a header. Additional info Made by Betterlane. Step-by-step guide: https://betterlaneagency.com/learn/n8n-workflow-runs-twice. An n8n automation workflow template by Thiago Cavalcanti.
- 2 nodes
- Automation
By Mychel Garzon
Quick overview Describe an automation in one sentence in chat. Claude turns it into an n8n workflow. The workflow is checked against n8n's own node catalog, tested or reviewed, and saved to your instance. Monitors are tested against a built-in mock before they go live. How it works You describe what you want in the chat, for example "Alert me when GitHub has an incident". You can add an endpoint URL and an alert webhook, Slack channel or email address. Claude turns the request into a spec. A health check on a service becomes a monitor. Any other automation (forms, digests, AI steps, syncs between apps) becomes a blueprint. If you give an endpoint, it is called once first, so the checks fit what it really returns. Claude builds the workflow JSON. For blueprints, the prompt includes the exact node types, versions and fields from n8n's official node catalog, pinned to one package version. The draft is validated: node types, fields for each version, required values, wiring, expression syntax and node references. Safe mistakes are repaired automatically, and anything else goes back to Claude with clear feedback. There are up to 3 build rounds by default. Monitors run through hidden test cases against a built-in mock (errors, timeouts, DNS failures, failed alerts and each spec check), plus one check of the real endpoint. Blueprints get a second Claude review against your request, with one repair round. The workflow is created in your instance through the n8n API. A monitor with an alert webhook is activated. Blueprints are saved inactive, with a Setup note that lists the accounts to connect and the values to fill in. The chat replies with the result, the test results or checks, a link to the workflow and the next steps. Setup Connect Claude to the three model nodes: Anthropic Model (Spec), Anthropic Model (Build) and Anthropic Model (Review). Use your Anthropic API key, or the built-in AI credits on n8n Cloud. Create an n8n API key (Settings > n8n API) and add it as a credential to Create Workflow and Activate Workflow. Base URL: your instance URL + /api/v1. Open the Settings node. Leave PUBLIC_URL empty to detect your instance URL automatically, or set it when your instance runs behind a proxy. Adjust the daily build limits if you need to. Save and publish the workflow. The sections call the published version, so publish again after every edit. Open the Chat Trigger, copy the chat URL and try it: "Alert me when GitHub has any incident. Send alerts to https://webhook.site/your-id". To limit access, set the Chat Trigger's authentication to Basic Auth. Requirements An n8n instance (Cloud or self-hosted) with public webhook URLs An n8n API key An Anthropic API key, or AI credits on n8n Cloud Outbound access to cdn.jsdelivr.net, to load the node catalog and output schemas Customization MAX_ATTEMPTS and TIME_BUDGET_MINUTES in Settings: the number of build rounds and the time before the loop stops. DAILY_RUNS_PER_CHAT and DAILY_RUNS_TOTAL: limit usage when the chat is public. CORE_NODES_VERSION and AI_NODES_VERSION: pin the node catalog to the n8n version you run. Change both together. Swap the Claude model in the three model nodes, for example a smaller model for lower cost. Additional info Safety by design: built workflows never contain credentials. Code, command, file and self-API nodes are blocked. Monitors cannot target private or local network addresses. Blueprints are always saved inactive, for you to review before you activate them. If no draft passes the checks, the last draft is still saved inactive, with its open problems listed in its Setup note. An n8n automation workflow template by Mychel Garzon.
- 4 nodes
- Automation
- AI
By TidyTools
Quick overview This workflow runs every Monday to check whether AI crawlers can access a list of websites using the Apify AI Crawler Access Checker actor, and posts a single Slack alert only when access rules or signals change. How it works Runs every Monday morning on a scheduled trigger. Defines the list of websites to monitor and a monitor name used for week-to-week comparisons. Runs the Apify actor tidytools/ai-crawler-access-checker to evaluate each site’s robots.txt, llms.txt, and page signals, returning only new or changed results. Filters the results to keep only sites that are being monitored for the first time or whose crawler access status changed. Builds one consolidated Slack message describing what changed per site (for example, allowed/blocked bots, policy changes, or llms.txt/noai signal changes). Sends the message to the selected Slack channel. Setup Add an Apify credential (API token or OAuth) and ensure the Apify node is allowed to run the tidytools/ai-crawler-access-checker actor. Add a Slack credential and set the target channel (for example, #seo-alerts) where alerts should be posted. Update the website domains/URLs list and the monitor name so Apify can persist a baseline and compare results across weekly runs. An n8n automation workflow template by TidyTools.
- 2 nodes
- Automation
By Paolo Ronco
Quick Overview This workflow exposes a secured webhook that powers an English website chatbot, using OpenAI for intent detection and responses and Qdrant (with optional Cohere reranking) to retrieve relevant website content and return structured JSON search results. How it works Receives a POST request on a header-authenticated webhook and normalizes the incoming payload into a chat message and session ID. Uses OpenAI to classify the message intent (smalltalk, search, or reject) and routes the request accordingly. For rejected or out-of-scope requests, returns a fixed safety message as JSON. For smalltalk, uses OpenAI to generate a short English reply and formats it into a simple JSON text response. For knowledge queries, searches a Qdrant vector collection (optionally reranked by Cohere) and compiles the top unique sources into a concise context with titles, URLs, and snippets. Uses an OpenAI-powered agent with a strict JSON schema to produce up to five relevant results (and an optional follow-up question), then parses and cleans the output. Returns the final JSON payload to the original webhook caller. Setup Configure the Webhook header authentication credential and deploy/copy the webhook URL into your website or chat client. Add an OpenAI API credential for the intent classifier, smalltalk generator, and answer generation model. Set up a Qdrant instance, create/populate the target collection (for example, website_knowledge with URL/title metadata), and add Qdrant API credentials. (Optional) Add a Cohere API credential if you want reranking enabled for Qdrant search results. Review the response JSON shape expected by your frontend (text vs. search_results) and adjust prompts/schema if needed. An n8n automation workflow template by Paolo Ronco.
- 8 nodes
- Automation
- AI