GenAiHub

Workflows

Browse 12,955 Workflows

Workflows Guide

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.

193–204 of 12,955

久保田 卓磨 logo
Draft Gmail replies to stock and visit inquiries with Claude Haiku
Live

By 久保田 卓磨

Quick Overview This workflow checks a Gmail inbox every 5 minutes for new inquiry emails, uses Anthropic Claude to classify them as stock or store-visit requests, looks up matching data in n8n Data Tables, and saves a suggested reply as a Gmail draft while labeling each message for follow-up. How it works Runs every 5 minutes on a schedule trigger. Fetches up to 10 recent Gmail inbox messages sent to the configured inquiry address that are not already labeled as drafted or needing human review. Processes emails one by one and uses Anthropic Claude to classify each message as a Stock inquiry, Store visit, or Other. For stock inquiries, Claude extracts the product category from the email, the workflow looks up matching items in an n8n Data Table, and Claude drafts a reply using only the returned stock and pricing details. For store-visit requests, Claude extracts the desired date/time from the email, the workflow looks up that day’s slots in an n8n Data Table, and Claude drafts a reply listing available times (or indicating fully booked/unavailable). Creates a Gmail draft reply in the original thread and adds an ai-drafted label to the email, while non-matching inquiries are labeled needs-human for manual handling. Setup Connect Gmail credentials with access to the inbox that receives inquiries. Add an Anthropic API credential for Claude. Create and populate two n8n Data Tables (one for products/stock and one for visit slots) and select their table IDs in the two lookup steps. Create the Gmail labels ai-drafted and needs-human and select them in the two Gmail labeling steps. Update the Config values for inbox address, timezone, currency, and the signature appended to drafted replies. An n8n automation workflow template by 久保田 卓磨.

N8nUpdated 1 hour ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
An
Analyze invoice exceptions weekly and publish RCA reports with Groq and Notion
Live

By WeblineIndia

Quick overview This workflow runs weekly to pull invoice exception data from Google Sheets, uses Groq-hosted LLMs to generate root-cause analysis and upstream process fixes, then publishes a formatted report to a Notion database and posts a Slack notification. How it works Runs every week on a schedule trigger. Reads the latest invoice exception rows from Google Sheets and groups them by exception reason, calculating counts, total amounts, and listing invoice details. Sends the grouped exception summary to a Groq chat model to produce a structured root-cause analysis by exception category. Uses a second Groq chat model to generate structured, category-specific upstream process fixes based on the root-cause analysis. Builds a Markdown report from the recommended fixes and converts it into native Notion block JSON. Creates a new page in a Notion database, injects the generated blocks via the Notion API, and sends a Slack message to notify the team that the report is ready. Setup Connect your Google Sheets account and update the spreadsheet ID and sheet selection used to fetch the invoice exception data. Add a Groq API credential for the two LLM steps and confirm the selected models are available in your Groq account. Add a Notion connection, set the target Notion database ID for page creation, and ensure the integration has access to the database. Add a Slack connection and configure the target channel and message content in the Slack step. Verify your Google Sheet includes the expected columns (for example, Exception_Reason, Amount, Invoice_ID, Vendor_Name, and Notes) so grouping and analysis work correctly. Additional info How To Customize Nodes Tuning the Report Formatting:** The Generate Markdown Report node builds the text structure. You can edit the JavaScript here to add custom headers, include the total financial impact at the top of the report, or change how bullet points are displayed. Adding New Notion Block Types:** The Convert Markdown to Blocks node translates text to Notion's JSON schema. If you want to add bold text parsing, checkboxes, or callout blocks, you can expand the if/else logic within this node's JavaScript. Changing AI Models:** While the workflow uses Groq for speed, you can easily swap the lmChatGroq nodes for OpenAI, Anthropic, or local LLM nodes depending on your data privacy requirements. Add‑ons To extend this workflow, consider adding the following features: Task Creation:** Add a Jira or Asana node at the end of the workflow to automatically generate task tickets for the "High Priority" upstream fixes suggested by the AI. Vendor Email Alerts:** Add a Gmail node to automatically send a polite warning email to vendors who are repeatedly flagged in the Root Cause Analysis for missing documentation. Data Visualization:** Route the grouped exception metrics into a dashboard tool like Datadog, PowerBI, or Google Data Studio to track the financial impact over time. Use Case Examples While tailored for invoice exceptions, this analytical architecture can be repurposed for: Weekly Procurement Audits:** Analyzing why purchase orders are being delayed or rejected by department heads. Customer Support Ticket Analysis:** Grouping weekly customer complaints and using AI to suggest upstream product fixes. Supply Chain Bottlenecks:** Tracking shipping delays and utilizing the dual-LLM setup to propose alternative logistics routing. Software Bug Triage:** Fetching weekly bug reports, grouping them by feature, and generating a weekly technical debt report in Notion. (There are countless ways to utilize this group-and-analyze pattern!) Troubleshooting Guide | Issue | Possible Cause | Solution | | --- | --- | --- | | Workflow fails at "Group Exceptions" | The Google Sheet column names do not match the expected schema. | Check your sheet. The code specifically looks for Exception_Reason, Amount, Invoice_ID, Vendor_Name, and Notes. | | "Extract: Fixes Data" outputs empty arrays | Your exception categories do not match the default strings. | Update the exact text strings (e.g., "Missing PO") in the Set node to perfectly match the data coming from your Google Sheet. | | Notion HTTP Request node returns an error | Missing Notion API version header, or incorrect block schema. | Ensure the Header Notion-Version is set to a valid date (e.g., 2026-09-15). Verify the Notion integration has edit access to the target page. | | AI nodes time out or fail | Groq API rate limits or complex JSON parsing failure. | Check your API limits. Ensure you are using the specific models designated (gpt-oss-120b and qwen3.8-27b) or equivalent models that support strict structured output. | Need Help? Building AI-driven analytical pipelines requires precise prompt engineering, robust data parsing and a solid understanding of external APIs like Notion. If you need assistance configuring this workflow, customizing the JavaScript nodes for your specific data schema or building tailored automation solutions for your enterprise, please reach out to WeblineIndia. Our n8n team of technical automation experts at WeblineIndia is ready to help you implement, scale and maintain high-impact workflows tailored to your unique business needs. An n8n automation workflow template by WeblineIndia.

N8nUpdated 1 hour ago
Free
No ratings
  • 8 nodes
Workflows
  • Automation
  • AI
WeblineIndia logo
Benchmark procurement KPIs with Google Sheets, Gmail, and Google Gemini
Live

By WeblineIndia

Quick Overview This workflow runs monthly to benchmark procurement KPI results stored in Google Sheets against external peer benchmarks, calculates gap and severity, uses Google Gemini to generate management-ready analysis, writes results back to Google Sheets, and emails leadership alerts and a consolidated monthly report via Gmail. How it works Runs on a monthly schedule trigger. Loads benchmarking settings and fetches all procurement KPI rows marked Ready from Google Sheets. For each KPI, looks up the active KPI definition and active external benchmark in Google Sheets, and routes missing items to Review Required. Builds a comparison context, validates numeric inputs, and calculates the benchmark gap percentage, performance status, and severity. Sends the KPI context and calculated results to Google Gemini to generate a structured gap summary, likely causes, recommended actions, and a management comment. Appends the completed benchmark result to a Google Sheets results sheet and marks the source KPI row as Processed. Emails a leadership alert via Gmail when a KPI is below benchmark, and generates and emails an HTML monthly benchmark report summarizing all processed KPIs. Setup Create and connect credentials for Google Sheets, Gmail, and Google Gemini (PaLM/AI Studio) in n8n. Update the Google Sheets document and sheet tabs so they match the workflow’s expected structure (Procurement_KPIs, KPI_Definitions, External_Benchmarks, and Benchmark_Results) and ensure KPI rows have a status column. Fill in recipient addresses (leadership_email and monthly_report_email) and adjust thresholds/status values in the workflow settings (near_benchmark_threshold_pct, warning/critical thresholds in KPI_Definitions, and active flags). Ensure KPI_Definitions and External_Benchmarks contain active rows for each kpi_code you expect to process, and set at least one KPI row to Ready for testing. An n8n automation workflow template by WeblineIndia.

N8nUpdated 1 hour ago
Free
No ratings
  • 6 nodes
Workflows
  • Automation
  • AI
iamvaar logo
Score Immoweb real estate deals with Gemini and log to Sheets and Slack
Live

By iamvaar

Quick overview Youtube Video: https://youtu.be/FGzYp8k-ONY This workflow runs daily or on demand to scrape Immoweb listings via Apify, compare them against historical prices stored in Google Sheets, and uses Google Gemini to label each listing as BUY/MAYBE/AVOID before logging results and sending Slack alerts for notable opportunities. How it works Runs on a schedule (7:00) or manually to start the scan with predefined search and notification settings. Calls the Apify Immoweb scraper API to fetch up to the configured number of listings, and posts a Slack warning if the scrape fails. Loads previously seen listings from Google Sheets and combines them with the fresh scrape to de-duplicate, track price history, and calculate features like €/m², comparable medians, discounts, and anomaly flags. Sends each new listing or price-changed listing to Google Gemini with a structured rubric to return a BUY/MAYBE/AVOID verdict, score, reasons, and red flags. Merges the Gemini verdict back into each listing, builds formatted Slack and email-ready messages, and updates/creates the listing row in Google Sheets. Sends a Slack alert for listings that are not rated AVOID and are either new or have at least the configured minimum price drop. Setup Create an Apify account, add an API token as an HTTP Header Auth credential, and set the Immoweb search URL and maxItems values in the configuration step. Set up a Google Sheets Service Account credential, share the target spreadsheet with the service account email, and update the sheet ID and sheet tab name used to store listing history. Add a Google Gemini (Google PaLM) API credential for the Gemini model used to generate structured verdicts. Add a Slack API credential and set the target channel name (and any channel ID value used for scrape-failure messages) in the configuration step. An n8n automation workflow template by iamvaar.

N8nUpdated 1 hour ago
Free
No ratings
  • 7 nodes
Workflows
  • Automation
  • AI
Khairul Muhtadin logo
Gate personal data before external sends with Jev, Google Sheets, Gmail, Telegram and gpt-6-luna
Live

By Khairul Muhtadin

A payload only leaves your network when the gate says so. This workflow scores every outbound record for personal data before it reaches an external partner API, then blocks, allows or holds the send, logs the decision to Google Sheets and tells the privacy officer what happened. It runs on n8n and only forwards a payload the Jev check has cleared. Last updated: October 2026. Quick Overview This workflow takes a payload record on a webhook, rejects incomplete requests before any model call, and has Jev Classification score the payload text for personal data. Two probability bands decide the outcome: at or above 0.85 the send is blocked, at or below 0.15 it is allowed through to the partner API, and values between the bands are held for the privacy officer. Every outcome writes a row to the "Privacy Gate" tab in Google Sheets first, then notifies by email and Telegram, and a daily 07:00 lane counts the decisions and has gpt-6-luna draft the privacy audit note. How it works Gate Request takes a POST on the jev-c3-privacy-gate webhook with job_id, record_ref, payload_text and destination, and Normalize Payload maps those four fields. Payload And Destination Present? checks that payload_text and destination are filled in. If either is missing the model call is skipped, Mark Unusable Gate Request sets gate_decision UNUSABLE_GATE_REQUEST and external_send_allowed false, and Email Gate Intake Problem tells ops. Jev Check Personal Data (model jev-latest, operation check, confidence threshold 0.5, output field jev) scores the payload text and returns jev.answer and jev.probability. Personal Data Confident? routes a probability at or above 0.85 to Block External Send, which sets decision BLOCK_EXTERNAL_SEND, review_owner privacy_officer and status blocked_pending_officer_ack. Clearly Not Personal? routes a probability at or below 0.15 to Allow External Send, which sets decision ALLOW_EXTERNAL_SEND, review_owner none and status allowed_and_forwarded. Everything between the bands is held for a human: a payload that misses the 0.85 test reaches Hold For Privacy Officer (status held_confident_band_for_officer) and one that misses the 0.15 test reaches Hold Borderline Payload (status held_borderline_for_officer). Both use decision HOLD_HUMAN_REVIEW. Logging comes first. Log Blocked Send, Log Held Payload, Log Allowed Send and Log Borderline Payload append to the "Privacy Gate" tab with gate_id, received_at, destination, payload_type, personal_data, probability, decision, review_owner, payload_excerpt, status and decided_at. Notification comes second. Email Privacy Officer Block and Alert Privacy Officer Urgent cover a block, the two Telegram review nodes cover a hold, and only an allow reaches Forward Payload To Partner API, which POSTs the four fields to https://api.partner.example.com/v1/ingest before Email Sender That Payload Went Out sends the receipt. Daily at 07:00 (cron 0 7 * * *) the Daily Privacy Audit Trigger lane reads the tab, Summarize Gate Decisions counts gate_id per decision, and Draft Daily Privacy Audit Note has gpt-6-luna write the note that Email Daily Privacy Audit sends. Setup Create a Google Sheets file with a tab named "Privacy Gate" and the columns gate_id, received_at, destination, payload_type, personal_data, probability, decision, review_owner, payload_excerpt, status and decided_at, then set the sheet id in the four append nodes and in Read Privacy Gate Log. Add credentials for a Jev (TypeSafe) API, Google Sheets OAuth2, Gmail OAuth2, Telegram and an [OI] chat model credential. Set the privacy officer address in Email Gate Intake Problem, Email Privacy Officer Block and Email Daily Privacy Audit, and the receipt address in Email Sender That Payload Went Out. Set the Telegram chat id in Alert Privacy Officer Urgent, Ask Privacy Officer To Review and Ask Privacy Officer To Review Borderline. Point Forward Payload To Partner API at your real vendor endpoint instead of the placeholder https://api.partner.example.com/v1/ingest. Keep both thresholds for the strict posture: only 0.15 or below lets a payload leave the network, and 0.85 or above stops it. Confirm the 07:00 schedule and the timezone (Asia/Jakarta in the export) match your working day, then activate the workflow. Quick Answers How does a payload get blocked? A jev.probability at or above 0.85 routes to Block External Send. The row is logged first, the privacy officer gets an email, Telegram gets an urgent alert, and nothing reaches the partner API. When is a payload allowed to leave? When the probability is at or below 0.15, Allow External Send marks it ALLOW_EXTERNAL_SEND, the row is logged, and the payload is forwarded to the partner API followed by a receipt email. What happens between the two bands? Anything above 0.15 and below 0.85 is held for the privacy officer instead of being sent, logged with decision HOLD_HUMAN_REVIEW and pushed to Telegram for review. What does gpt-6-luna do here? It runs only in the daily lane, turning the decision counts from Summarize Gate Decisions into the privacy audit note that Email Daily Privacy Audit sends at 07:00. Additional info Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/. An n8n automation workflow template by Khairul Muhtadin.

N8nUpdated 1 hour ago
Free
No ratings
  • 6 nodes
Workflows
  • Automation
  • AI
Khairul Muhtadin logo
Score and route incidents with Jev Classification, Google Sheets, Gmail, Telegram, and GPT-6-Luna
Live

By Khairul Muhtadin

A production incident report lands on a webhook and the right person is paged while everyone else is still reading the alert. This n8n workflow has Jev Classification score each incident for severity, logs the decision to Google Sheets, then routes it into five lanes: SEV1 declares the incident and pages the commander, SEV2 pages the on call engineer, SEV3 queues a service desk ticket, SEV4 waits in the backlog, and a low confidence score is held for the commander to confirm. A monthly cron turns the log into a counted trend brief for the engineering lead. Last updated: October 2026. Quick Overview This workflow takes production incident reports on the Incident Intake webhook, normalizes the id, service, impact, affected users and timestamps, and refuses to score a report with no service name or impact text. Usable reports go to Jev Score Incident Severity (jev-latest, confidence threshold 0.65), which returns a level, a score, a confidence and a needsReview flag that Route By Confidence And Severity turns into five lanes. Every lane appends the full record to the Incident Severity tab in Google Sheets before it pages or emails anyone, and a monthly cron has gpt-6-luna write a counted trend brief for the engineering lead. How it works Incident Intake receives a POST incident report on the jev-c2-incident-intake webhook. Normalize Incident copies incident_id, service, impact_text, affected_users, customer_facing and detected_at from the body and stamps received_at when the report carries none. Incident Report Usable? needs both service and impact_text. If either is missing, Mark Unusable Incident Report records what was missing and sets the status not_scored_report_unusable, and Email Incident Intake Problem mails it back. Nothing is scored. Jev Score Incident Severity scores the service, affected users, customer facing flag, detected time and impact text on jev-latest with operation score and a 0.65 confidence threshold, returning level, score, confidence and needsReview in the jev field, with 3 retries and a 60 second timeout. Route By Confidence And Severity checks needsReview first, then the score: true to the human confirm lane, 2.5 or higher to SEV1, 1.5 or higher to SEV2, 0.5 or higher to SEV3, everything else to SEV4. SEV1 Declare And Page sets sev1_war_room, priority P0 and a 5 minute response SLA. Log SEV1 Incident appends the record, Page Incident Commander And On Call sends the war room message on Telegram, and Draft Stakeholder Update has gpt-6-luna write a 90 word four line update that Email Stakeholder Update sends. SEV2 Page Oncall sets sev2_page, priority P1 and a 15 minute response SLA. Log SEV2 Incident appends the record, then Page On Call Engineer pages the on call engineer on Telegram with the owner and the 1 hour SLA. SEV3 Create Ticket sets sev3_ticket, priority P2 and a 1440 minute (24 hour) SLA. Log SEV3 Incident appends the record, then Create Ticket Notice emails the service desk the impact and the action taken. SEV4 Add To Backlog sets sev4_backlog, priority P4 and a 10080 minute (168 hour) SLA, appends the record and leaves it for the weekly review without paging anyone. Severity Needs Human Decision sets human_confirm, priority P2, a 15 minute response SLA and the reason Jev confidence below 0.65. Log Unconfirmed Severity appends it as awaiting_human_severity_decision, then Ask Incident Commander To Confirm sends the confidence and suggested band to Telegram so a human sets the severity before anyone is paged. Monthly Incident Trend Trigger runs at 08:00 on the first of the month (cron 0 8 1 * *), Read Incident Severity Log reads the Incident Severity tab, Summarize Incidents By Level counts incident_id per severity_level, and Draft Incident Trend Report has gpt-6-luna write the brief that Email Incident Trend Report sends to the engineering lead. Setup Create a Google Sheets file with a tab named "Incident Severity" and the columns the log nodes write: incident_id, received_at, service, severity_level, severity_score, confidence, needs_review, paging_owner, sla_hours, action_taken, impact_excerpt, status, routed_at. Point the six Google Sheets nodes at it. Connect a Jev (TypeSafe) API credential for the scoring node, Google Sheets OAuth2, Gmail OAuth2, a Telegram bot credential and an [OI] chat model credential for the two agent nodes. Set the Telegram chat id on the four Telegram nodes and the recipient address on the four Gmail nodes so pages and mail reach your own rota. Point your alerting tool or status page at the Incident Intake webhook (POST, path jev-c2-incident-intake), which expects incident_id, service, impact_text, affected_users, customer_facing and detected_at. Check the severity bands (2.5, 1.5, 0.5), the confidence threshold (0.65) and the SLA values, then activate the workflow and confirm the monthly cron matches your timezone. Quick Answers What happens to a report that is missing details? It is never scored. Mark Unusable Incident Report records which field was missing and sets the status not_scored_report_unusable, and Email Incident Intake Problem sends it back to the intake address. What does Jev Classification actually decide? It returns a severity level from SEV1 Critical down to SEV4 Negligible, a numeric score, a confidence and a needsReview flag, and the workflow compares the score against 2.5, 1.5 and 0.5 to pick the lane. When does a human get involved? When needsReview is true, which happens when Jev confidence falls below the 0.65 threshold. That lane logs the incident as awaiting_human_severity_decision and asks the commander on Telegram to confirm the band before anyone is paged. Where does the record go before anyone is notified? Every lane appends the full severity record to the Incident Severity tab first, then pages or emails, so the log stays complete even if a notification fails. Additional info Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/. An n8n automation workflow template by Khairul Muhtadin.

N8nUpdated 1 hour ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
Tr
Triage trust and safety reports with Jev Classification, Google Sheets, Gmail and Telegram
Live

By Khairul Muhtadin

Triage trust and safety reports for a moderation team without losing the ones that matter. This workflow takes every report from your form webhook, sorts it into a policy category with Jev Classification, sends each category down its own queue with a real SLA, logs the decision to Google Sheets, and pages the right human on Telegram or email before the clock runs out. Last updated: October 2026. Quick Overview This workflow receives trust and safety reports through the Report Intake webhook, keeps the policy-relevant fields in Normalize Report, and guards against textless submissions. Usable report text goes to the Jev Classify Policy Category node, which sorts it into one of five policy categories at a 0.6 confidence threshold and sends uncertain calls to human review. Each of the six outputs gets its own route with a queue, SLA hours, priority and required action, the row is appended to the Report Triage tab, and the matching human is paged on Telegram or emailed. How it works Report Intake receives a POST webhook at jev-c1-report-intake with report_id, content_id, content_text and reporter_note. Normalize Report keeps report_id, content_id, reporter_note and report_text, so the policy fields survive the rest of the payload. Report Text Usable? checks that report_text is not empty. If it is empty, Mark Incomplete Report sets status to intake_rejected and required_action to ask_reporter_to_resend_the_report, then Email Intake Problem notifies ops and the report is never classified. Jev Classify Policy Category runs the report text against the jev-latest model with a confidence threshold of 0.6 and five categories: Harassment or threat, Scam or fraud, Self-harm risk, Spam or off-topic, and No policy violation. Uncertain calls are sent to the needs review output. Each of the six outputs lands on its own route Set carrying the business decision: Route Harassment Or Threat (trust_and_safety, 4 hours, P1), Route Scam Or Fraud (fraud_review, 8 hours, P1), Route Self Harm Risk (wellbeing_escalation, 1 hour, P0), Route Spam Or Offtopic (bulk_moderation, 24 hours, P3), Route No Violation (closed, 0 hours, P4) and Route Human Review (senior_moderator_review, 2 hours, P2). Every route appends one row to the Report Triage tab with the case id, received time, channel, category, confidence, queue, SLA hours, priority, required action, excerpt, status and routing timestamp. Harassment or threat reports page the on-call person on Telegram and email the safety lead, scam or fraud reports alert the fraud queue and email the reporter, self-harm risk reports page the crisis lead and email the escalation, no violation reports email the reporter that no action was taken, and human review cases reach the senior moderator on Telegram and by email. Weekly Moderation Brief Trigger fires every Monday at 09:00, reads the Report Triage log, counts cases per outcome, and has gpt-6-luna draft a plain text brief under 120 words that is emailed to the owner. Setup Create a Google Sheets file with a tab named "Report Triage" and the columns case_id, received_at, channel, category, confidence, needs_review, queue, sla_hours, priority, required_action, report_excerpt, status and routed_at, then point the Google Sheets nodes at your document id. Connect the Jev (TypeSafe) API credential on the Jev Classify Policy Category node, plus Google Sheets OAuth2, Gmail OAuth2 and Telegram credentials on the sending nodes. Point your report form or helpdesk at the Report Intake webhook with a POST and send report_id, content_id, content_text and reporter_note. Replace the placeholder email addresses and the Telegram chat id with your own destinations. Add an [OI] chat model credential to the Moderation Brief Model node and confirm the Monday 09:00 schedule in your timezone. Adjust the queues, SLA hours, priorities and required actions in the six route nodes to match your policy, then activate the workflow. Quick Answers What happens if a report arrives without usable text? It is not classified. The guard marks it intake_rejected with missing_field report_text and emails ops that the reporter has to resend. How does Jev Classification decide the queue? It scores the report against five policy categories with the jev-latest model at a 0.6 confidence threshold. A confident call picks its category route, and anything under the threshold goes to the human review output instead. How urgent is a self-harm risk report? It routes to wellbeing_escalation with P0 priority and a 1 hour SLA, pages the crisis response lead on Telegram and emails the escalation in the same run. Where do I see the whole week? Every route appends to the Report Triage tab, and a Monday 09:00 lane reads that tab, counts cases per outcome and emails a short brief written by gpt-6-luna. Additional info Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/. An n8n automation workflow template by Khairul Muhtadin.

N8nUpdated 1 hour ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
Fahmi Fahreza logo
Split and track WhatsApp restaurant bills with WAHA, Gemini and Sheets
Live

By Fahmi Fahreza

Quick overview This workflow runs a WhatsApp bill-splitting bot using WAHA, Google Gemini for receipt OCR, OpenRouter for funny bill and reminder messages, and Google Sheets to track sessions, contacts, bills, payment status, and automated daily reminders. How it works Receives an incoming WhatsApp message via a WAHA webhook and ignores messages from numbers that are not on the whitelist. If the message includes receipt media, it downloads the image via WAHA, extracts items/tax/total with Google Gemini, asks the group to reply with “Name: item1, item2”, and stores the OCR result in a Google Sheets Session tab. If a follow-up message matches the “Name: …” assignment format, it loads the latest saved OCR session and contacts from Google Sheets, matches item keywords to receipt items, and calculates each person’s share including proportional tax. For each person, it uses OpenRouter to generate a short humorous bill message, sends it to their WhatsApp number via WAHA, and logs the unpaid bill entry to a Google Sheets Bills tab. If a message contains a payment confirmation (e.g., “paid”/“done”), it looks up the newest matching unpaid bill in Google Sheets by WhatsApp number (or name fallback) and updates the bill status to paid. Every day at 7 PM, it pulls unpaid bills from Google Sheets, determines whether a gentle/firm/savage reminder is needed (with a same-day anti-spam guard), generates the reminder with OpenRouter, sends it via WAHA, and updates lastReminderSent. Setup Add WAHA API credentials and configure your WAHA instance to forward WhatsApp messages to the workflow’s WAHA Trigger webhook URL. Add Google Sheets OAuth credentials and replace the spreadsheet document ID in every Google Sheets node, ensuring your spreadsheet includes Session, Contacts, and Bills tabs with the expected columns. Add a Google Gemini (Google PaLM) API credential for the receipt OCR step. Add an OpenRouter API credential for generating bill messages and reminder messages. Update the whitelist values to the WhatsApp JIDs allowed to use the bot and adjust the currency code/symbol (defaults to IDR/Rp) if needed. An n8n automation workflow template by Fahmi Fahreza.

N8nUpdated 1 hour ago
Free
No ratings
  • 6 nodes
Workflows
  • Automation
  • AI
Khairul Muhtadin logo
Triage tender bids with OpenAI and Google Sheets
Live

By Khairul Muhtadin

Tenders arrive and somebody has to decide whether they are worth the paperwork. This workflow takes each incoming tender, has gpt-6-luna score the fit out of 100 and flag the risks, logs the decision to Google Sheets, and emails the bid manager the verdict with the requirements to check. A Monday digest keeps the tenders still being tracked and due soon in view. Last updated: October 2026. Quick Overview This workflow collects tender submissions through an n8n webhook, normalizes the tender title, client, due date, estimated value and description, and checks that the required fields are present. Tenders that pass validation go to gpt-6-luna, which scores the fit from 0 to 100, recommends bid, no_bid or needs_review, and lists strengths, risks, key requirements and a deadline risk. Every assessed tender is logged to the "Tenders" tab in Google Sheets and emailed to the bid manager, no-bid tenders get a short note explaining why the company passed, and a Monday digest lists the tracked tenders that are due within 14 days. How it works "When Tender Received" is a POST webhook on the path tender-intake-0925. It accepts a tender payload from a form, a CRM or a script. "Normalize Tender" builds a tender_id (TD- plus timestamp plus a four digit random suffix) and a received_at timestamp, then trims tender_title, client_name, due_date, est_value, tender_summary, source_url and bid_manager_email from the request body. "Validate Tender Input" checks that tender_title, due_date and tender_summary are not empty. Incomplete submissions skip the AI step entirely and "Email Invalid Tender Notice" emails the bid manager the list of required fields. "AI Assess Tender" is the agent node, running on the "Tender Model" gpt-6-luna chat model. It returns JSON with fit_score (0 to 100), recommendation (bid, no_bid or needs_review), strengths, risks, key_requirements, deadline_risk and a two sentence summary. "Parse Tender Assessment" parses that JSON, joins the array fields with semicolons, defaults unreadable values to needs_review and a medium deadline risk, and sets status to Tracking. "Route Bid Decision" sends anything that is not a no_bid to "Log Tracked Tender", which appends the row to the "Tenders" tab with status Tracking, then "Email Tender Assessment" emails the fit score, recommendation, deadline risk, strengths, risks and requirements to check. no_bid tenders go to "Log No Bid Tender", which appends the same row with status No Bid, then "Email No Bid Note" sends the reason, the fit score and the risks so the team stays consistent about why it passed. "Weekly Digest Trigger" runs on the cron expression 0 8 * * 1 (Mondays at 08:00). It reads the "Tenders" tab, "Keep Tracked Tenders" keeps rows with status Tracking, and "Build Digest Text" keeps only those due within the next 14 days. "Email Weekly Digest" sends one digest, and says so when nothing is due in that window. "Tender Error Trigger" catches workflow errors and "Email Error Alert" emails the first 2000 characters of the error payload. Setup Create a Google Sheets spreadsheet with a tab named "Tenders" and columns matching the append nodes: tender_id, tender_title, client_name, est_value, due_date, fit_score, recommendation, status, strengths, risks, key_requirements, deadline_risk and received_at. Add credentials for Google Sheets OAuth2, Gmail OAuth2 and an [OI] chat model credential, then select that credential on the "Tender Model" node. Set the spreadsheet id on the three Sheets nodes (Log Tracked Tender, Log No Bid Tender and Read Tracked Tenders). Point your intake form or script at the webhook path tender-intake-0925. The payload keys it reads are tender_title, client_name, due_date, est_value, tender_summary, source_url and bid_manager_email. Send bid_manager_email in the payload, or change the fallback address on the email nodes. The error alert node has its own recipient to set. Confirm the Monday 08:00 schedule matches your timezone, then activate the workflow. Quick Answers What happens when a tender arrives without the required fields? It is not assessed and not logged. "Validate Tender Input" checks tender_title, due_date and tender_summary after normalization, and the bid manager gets an email listing the missing fields. What does gpt-6-luna actually decide? It returns a fit score from 0 to 100 and one recommendation: bid, no_bid or needs_review, plus strengths, risks, key requirements and a deadline risk of low, medium or high. needs_review means the tender is not obviously good or bad and a person should look closer. Where do the decisions end up? In the "Tenders" tab of your Google Sheets file. Tracked tenders are appended with status Tracking and no-bid tenders with status No Bid, and the bid manager gets the matching email in the same run. How does the weekly digest pick what to show? It runs Mondays at 08:00, reads the Tenders tab, keeps rows with status Tracking, and lists only those due within the next 14 days. If nothing qualifies, the email says no tracked tenders are due in that window. Additional info Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/. An n8n automation workflow template by Khairul Muhtadin.

N8nUpdated 1 hour ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
Khairul Muhtadin logo
Triage tender bid decisions with GPT-6 Luna and Google Sheets
Live

By Khairul Muhtadin

Tenders arrive and somebody has to decide whether they are worth the paperwork. This workflow takes each incoming tender, has gpt-6-luna score the fit out of 100 and flag the risks, logs the decision to Google Sheets, and emails the bid manager the verdict with the requirements to check. A Monday digest keeps the tenders still being tracked and due soon in view. Last updated: October 2026. Quick Overview This workflow collects tender submissions through an n8n webhook, normalizes the tender title, client, due date, estimated value and description, and checks that the required fields are present. Tenders that pass validation go to gpt-6-luna, which scores the fit from 0 to 100, recommends bid, no_bid or needs_review, and lists strengths, risks, key requirements and a deadline risk. Every assessed tender is logged to the "Tenders" tab in Google Sheets and emailed to the bid manager, no-bid tenders get a short note explaining why the company passed, and a Monday digest lists the tracked tenders that are due within 14 days. How it works "When Tender Received" is a POST webhook on the path tender-intake-0925. It accepts a tender payload from a form, a CRM or a script. "Normalize Tender" builds a tender_id (TD- plus timestamp plus a four digit random suffix) and a received_at timestamp, then trims tender_title, client_name, due_date, est_value, tender_summary, source_url and bid_manager_email from the request body. "Validate Tender Input" checks that tender_title, due_date and tender_summary are not empty. Incomplete submissions skip the AI step entirely and "Email Invalid Tender Notice" emails the bid manager the list of required fields. "AI Assess Tender" is the agent node, running on the "Tender Model" gpt-6-luna chat model. It returns JSON with fit_score (0 to 100), recommendation (bid, no_bid or needs_review), strengths, risks, key_requirements, deadline_risk and a two sentence summary. "Parse Tender Assessment" parses that JSON, joins the array fields with semicolons, defaults unreadable values to needs_review and a medium deadline risk, and sets status to Tracking. "Route Bid Decision" sends anything that is not a no_bid to "Log Tracked Tender", which appends the row to the "Tenders" tab with status Tracking, then "Email Tender Assessment" emails the fit score, recommendation, deadline risk, strengths, risks and requirements to check. no_bid tenders go to "Log No Bid Tender", which appends the same row with status No Bid, then "Email No Bid Note" sends the reason, the fit score and the risks so the team stays consistent about why it passed. "Weekly Digest Trigger" runs on the cron expression 0 8 * * 1 (Mondays at 08:00). It reads the "Tenders" tab, "Keep Tracked Tenders" keeps rows with status Tracking, and "Build Digest Text" keeps only those due within the next 14 days. "Email Weekly Digest" sends one digest, and says so when nothing is due in that window. "Tender Error Trigger" catches workflow errors and "Email Error Alert" emails the first 2000 characters of the error payload. Setup Create a Google Sheets spreadsheet with a tab named "Tenders" and columns matching the append nodes: tender_id, tender_title, client_name, est_value, due_date, fit_score, recommendation, status, strengths, risks, key_requirements, deadline_risk and received_at. Add credentials for Google Sheets OAuth2, Gmail OAuth2 and an [OI] chat model credential, then select that credential on the "Tender Model" node. Set the spreadsheet id on the three Sheets nodes (Log Tracked Tender, Log No Bid Tender and Read Tracked Tenders). Point your intake form or script at the webhook path tender-intake-0925. The payload keys it reads are tender_title, client_name, due_date, est_value, tender_summary, source_url and bid_manager_email. Send bid_manager_email in the payload, or change the fallback address on the email nodes. The error alert node has its own recipient to set. Confirm the Monday 08:00 schedule matches your timezone, then activate the workflow. Quick Answers What happens when a tender arrives without the required fields? It is not assessed and not logged. "Validate Tender Input" checks tender_title, due_date and tender_summary after normalization, and the bid manager gets an email listing the missing fields. What does gpt-6-luna actually decide? It returns a fit score from 0 to 100 and one recommendation: bid, no_bid or needs_review, plus strengths, risks, key requirements and a deadline risk of low, medium or high. needs_review means the tender is not obviously good or bad and a person should look closer. Where do the decisions end up? In the "Tenders" tab of your Google Sheets file. Tracked tenders are appended with status Tracking and no-bid tenders with status No Bid, and the bid manager gets the matching email in the same run. How does the weekly digest pick what to show? It runs Mondays at 08:00, reads the Tenders tab, keeps rows with status Tracking, and lists only those due within the next 14 days. If nothing qualifies, the email says no tracked tenders are due in that window. Additional info Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/. An n8n automation workflow template by Khairul Muhtadin.

N8nUpdated 1 hour ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI
Khairul Muhtadin logo
Track prior authorization requests and chase payer responses with OpenAI and Google Sheets
Live

By Khairul Muhtadin

Prior authorization requests rarely fail loudly. They sit at the payer while the procedure date gets closer. This workflow logs every request as it leaves the clinic, has gpt-6-luna score packet completeness and name the missing documents, chases the payer for an answer, and drafts the appeal on a denial. Intake runs on an n8n Form, payer answers arrive on a webhook, and a daily sweep emails the chase list. Last updated: October 2026. Quick Overview Requests are logged on a hosted form, validated, and passed to gpt-6-luna for a packet completeness score, the missing documents and a payer status message. Each request lands in the "PA Tracker" tab in Google Sheets, the requester gets a confirmation email with the next follow up date, and expedited requests raise a Telegram alert. Payer responses (approved, denied or pended) arrive on a webhook and update the matched row, and a denial triggers an AI appeal draft plus a Telegram alert. A daily 08:00 sweep emails a chase brief for every request whose follow up date has passed. How it works "New PA Request Form" collects patient reference, payer, procedure, CPT code, ordering provider, urgency, date sent to payer, clinical notes summary and requester email. "Normalize PA Request" creates the pa_id (PA-yyyyMMdd-HHmmss-####) and the received_at timestamp, then "Validate PA Request" requires patient reference, payer, CPT code and a well formed requester email; misses go to the "Errors" tab and an email to the coordinator. "AI Review PA Packet" has gpt-6-luna judge the paperwork only, returning completeness_score, missing_docs, risk_note, follow_up_days and a payer_message. "Build PA Record" trims the clinical summary to 2500 characters and sets next_follow_up_date to today plus follow_up_days: 1 for expedited, 3 otherwise, capped between 1 and 14. "Log PA To Tracker" appends the row as submitted, and "Email Intake Confirmation" sends the requester the pa_id, follow up date, completeness score and missing documents. "If Expedited Request" raises a Telegram alert naming the pa_id, payer, procedure, the 72 hour decision window and the missing documents. "Payer Response Webhook" (path prior-auth-response) reads the tracker and "Match Response To Request" finds the row with the same pa_id, carrying decision, reason and decision_date; an unmatched response goes to "Errors" and an email asks the coordinator to check the id rather than guess. "If Denied" sends denials to "AI Draft Appeal Summary" for a denial_category, an appeal_subject, an appeal_body of 200 words or fewer, the attachments and a next_step. "Email Appeal To Payer" sends the appeal to the payer appeals address when supplied, marks the row denied and flags the next step on Telegram; other decisions email the requester and update the row. "Daily Chase Sweep" runs at 08:00 and keeps submitted, pending or pended rows whose next_follow_up_date is today or earlier; "AI Write Chase Brief" turns them into a digest, a top_action and a count by email and Telegram. Setup Create a Google Sheets file with a tab named "PA Tracker" and a tab named "Errors", with columns matching the fields written by the Google Sheets nodes, including pa_id, payer, procedure_name, cpt_code, urgency, submitted_date, status, next_follow_up_date, completeness_score, missing_docs, payer_decision, decision_reason and decision_at. Add credentials for Google Sheets OAuth2, Gmail OAuth2 and Telegram, plus an [OI] chat model credential, and connect that model to the three agent nodes. Set the coordinator email in "Normalize PA Request" and the chase brief recipient in "Format Chase Brief". Publish the form, share its URL with the intake team, and keep the clinical notes summary free of patient identifiers as the field placeholder asks. Point your payer answer process at the webhook path prior-auth-response, posting pa_id, decision, reason and decision_date, plus payer_appeal_email if payers accept email appeals. Set the Telegram chat id in the three Telegram nodes, and move the 08:00 cron to your team's start time before activating the workflow. Quick Answers What does gpt-6-luna actually do here? Three jobs: on intake it scores packet completeness, names the missing documents and drafts a payer status message; on a denial it writes the appeal subject, letter and attachments; on the sweep it briefs the overdue lines with a count and one top action. What happens when the packet is incomplete? The request is still logged. The completeness score, missing document list and risk note land in the tracker row and the confirmation email, so the team can collect the paperwork while the payer clock runs. How does a denial turn into an appeal? The webhook carries the decision, the match step finds the tracked request, and gpt-6-luna drafts the appeal from the denial reason and the request details. The appeal is emailed and Telegram flags the next step. What happens if a payer response does not match anything? It is written to the "Errors" tab with the pa_id and the decision, and the coordinator is emailed to check the id or log the request if it was never captured. Additional info Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/. An n8n automation workflow template by Khairul Muhtadin.

N8nUpdated 1 hour ago
Free
No ratings
  • 6 nodes
Workflows
  • Automation
  • AI
Khairul Muhtadin logo
Track retail layaway plans and payment reminders with gpt-6-luna and Google Sheets
Live

By Khairul Muhtadin

Layaway plans are easy to start and easy to lose track of, which is where the money quietly walks out of the store. This workflow logs each new plan to Google Sheets, emails the customer their payment schedule, chases due and overdue payments every morning, and has gpt-6-luna write the owner a monthly review of what is still owed. Last updated: October 2026. Quick Overview Three flows share one Google Sheets tracker. A webhook takes each new layaway plan, validates it, appends it to the "Plans" tab and emails the customer their schedule. Every morning at 08:00 it reads all open plans, finds payments due within three days and payments already overdue, reminds those customers and logs each alert to "Alerts". Overdue plans also roll into one escalation email to the store, and on the 1st at 09:00 gpt-6-luna drafts the owner's monthly review. How it works "When Layaway Plan Created" receives the new plan on a POST webhook (path layaway-intake-0927) that your POS or a form can call. "Normalize Plan" builds the record: plan_id as LAY-YYYYMMDD-1234, the customer name, email and phone, item, price_total, deposit_paid, installment_amount, installments_total, interval_days, payments_made, status, office_email, created_at, balance_due and next_due_date. "Validate Plan" checks that customer_name, item and next_due_date are filled in, otherwise "Email Reject Notice" tells the store office what was posted. Valid plans are appended to the "Plans" tab in Google Sheets across 15 columns, from plan_id through created_at. "Email Plan Confirmation" sends the customer the price, deposit, balance, next installment and due date, plus the payment counter and plan reference. "Daily Payment Sweep" runs every day at 08:00, reads the "Plans" tab, and "Compute Payment State" works out days_until_due for every row. Each plan is tagged overdue, due_soon (0 to 3 days out) or ok, plus a needs_reminder flag. COMPLETE or CANCELLED plans are skipped. Overdue rows go to "Prepare Overdue Pack", then "Log Overdue Alert" appends the record to "Alerts" and "Email Overdue Reminder" emails the customer. "Aggregate Office Escalations" folds that run's overdue plans into one body dated in Asia/Pontianak, and "Email Office Escalation" sends it as "Overdue layaway plans: " for the office to call. Due-soon rows go to "Prepare Reminder Pack", then "Log Reminder Alert" appends the record to "Alerts" and "Email Payment Reminder" sends the reminder. On the 1st at 09:00 "Monthly Plan Review" reads "Plans" again and "Compute Month Stats" reduces it to active plans, total balance, overdue count and value, due-soon count and the top 8 overdue customers. "AI Write Review" passes those stats to gpt-6-luna through "Monthly Review Model", which drafts a plain text body under 180 words, and "Email Monthly Review" sends it to the store. Setup Create a Google Sheets file with a "Plans" tab using these columns: plan_id, customer_name, customer_email, customer_phone, item, price_total, deposit_paid, balance_due, installment_amount, installments_total, interval_days, next_due_date, payments_made, status, created_at. Add an "Alerts" tab using these columns: alert_id, plan_id, customer_name, item, alert_type, sent_to, sent_at, customer_email, office_email. Add credentials for Google Sheets OAuth2, Gmail OAuth2 and an [OI] chat model, then pick your spreadsheet in the Google Sheets nodes (Log Plan, Read Plans, Log Overdue Alert, Log Reminder Alert, Read Plans Monthly). Point your POS or form at the webhook URL for path layaway-intake-0927, posting customer_name, customer_email, item, price_total, deposit_paid, installment_amount and interval_days. Set the store email in the office_email field of the payload, or change the fallback in "Normalize Plan". Confirm both schedules match your timezone, daily at 08:00 and on the 1st at 09:00, then activate the workflow. Optional: change the 3 day reminder window in "Compute Payment State" or the 30 day interval default in "Normalize Plan". Quick Answers What happens when a layaway plan is created? The webhook receives it, "Normalize Plan" builds the plan_id, balance_due and next_due_date, "Validate Plan" checks the customer name, item and due date, the row lands in "Plans" and the customer gets a confirmation email. How does the daily sweep decide who gets a reminder? "Compute Payment State" works out days_until_due for every open plan. Due in 0 to 3 days is due_soon, past its date is overdue, and COMPLETE or CANCELLED plans are skipped. What is the difference between the customer email and the office escalation? Due-soon customers get one friendly reminder with the amount and date. Overdue customers get an action needed email, and every overdue plan from that run is also collected into one escalation email to the store. What does gpt-6-luna do here? On the 1st of the month it takes the stats, active plans, total balance, overdue count and value, payments due soon and the largest overdue balances, and writes the owner's review email in plain language under 180 words. Additional info Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/. An n8n automation workflow template by Khairul Muhtadin.

N8nUpdated 1 hour ago
Free
No ratings
  • 5 nodes
Workflows
  • Automation
  • AI