by Rahi
🛠️ Workflow: Jotform → HubSpot Company + Task Automation Automatically create or update HubSpot companies and generate follow-up tasks whenever a Jotform is submitted. All logs are stored to Google Sheets for traceability, transparency, and debugging. ✅ Use Cases Capture marketing queries from your website’s Jotform form and immediately create tasks for your sales or SDR team. Enrich HubSpot companies with submitted domains, company names, and contact data. Automatically assign tasks to owners and keep all form submissions logged and auditable. Avoid manual handoffs — full automation from form submission → CRM. 🔍 How It Works (Step-by-Step) 1. Jotform Trigger The workflow starts when a new submission is received via the Jotform webhook. Captured fields include: name, email, LinkedIn profile, company name, marketing budget, domain, and any specific query. 2. Create or Update Company in HubSpot + Format Data The “Create Company” node ensures the submitted company is either created in HubSpot or updated if it already exists. A Formatter (Function) node standardizes the data — names, email, LinkedIn URL, domain, marketing budget, and query text. It composes a task title, generates a follow-up timestamp, and dynamically assigns an owner. 3. Loop & HTTP Request – Create HubSpot Task The workflow loops through each formatted item. A Wait node prevents rate limit issues. It then sends an HTTP POST request to HubSpot’s Tasks API, creating a task with: Subject and body including the submission details Task status, priority, and type Assigned owner and associated company 4. Loop & HTTP Request – Set Company Domain After tasks are created, another loop updates each HubSpot company record with the submitted domain. This ensures all HubSpot companies have proper website data for future enrichment. 5. Storing Logs (Google Sheets) All processed submissions, responses, errors, and metadata are appended or updated in a Google Sheets document. This provides a complete audit trail — ideal for debugging, reporting, and performance monitoring. 🧩 Node Structure Overview | Step | Node | Description | |------|------|--------------| | 1️⃣ | Jotform Trigger | Receives form submission data | | 2️⃣ | HubSpot Create Company | Ensures company record exists | | 3️⃣ | Formatter / Function Node | Cleans & structures data, assigns owner, generates task fields | | 4️⃣ | Wait / Delay Node | Controls API call frequency | | 5️⃣ | HTTP Request (Create Task) | Pushes task to HubSpot | | 6️⃣ | HTTP Request (Update Domain) | Updates company domain in HubSpot | | 7️⃣ | Google Sheets Node | Logs inputs, outputs, and status | 📋 Requirements & Setup 🔑 HubSpot Private App Token with permissions to create companies, tasks, and update records 🌐 Jotform Webhook URL pointing to this workflow 📗 Google Sheets Credentials (OAuth or service account) with write access ✅ HubSpot app must have crm.objects.companies.write and crm.objects.tasks.write scopes ⚠️ Add retry or error-handling branches for failed API calls ⚙️ Customization Tips & Variations Add contact association:** Modify the payload to also link the task with a HubSpot Contact (via email) so it appears in both company and contact timelines. Use fallback values:** In the Formatter node, provide defaults like “Unknown Company” or “No query provided.” Dynamic owner assignment:** Replace hash-based assignment with round-robin or territory logic. Conditional task creation:** Add logic to only create tasks when certain conditions are met (e.g., budget > 0). Error branches:** Capture failed HTTP responses and send Slack/Email alerts. Extended logs:** Add response codes, errors, and retry counts to your Google Sheet for more transparency. 🎯 Benefits & Why You’d Use This ⚡ Speed & Automation — eliminate manual data entry into HubSpot 📊 Data Consistency — submissions are clean, enriched, and traceable 👀 Transparency — every action logged for full visibility 🌍 Scalability — handle hundreds of submissions effortlessly 🔄 Flexibility — adaptable for other use cases (support tickets, surveys, partnerships, etc.) ✨ Example Use Case A marketing form on your website captures partnership or franchise inquiries. This workflow instantly creates a HubSpot company, logs the inquiry as a task, assigns it to a regional manager, and saves a record in Google Sheets — all within seconds. Tags: HubSpot Jotform CRM GoogleSheets Automation LeadManagement
by Rahi
Workflow: Track Email Campaign Engagement Analytics with Smartlead and Google Sheets Automatically fetch lead-level email engagement analytics (opens, clicks, replies, unsubscribes, bounces) from Smartlead and update them in Google Sheets. Use this to keep a single, always-fresh source of truth for campaign performance and sequence effectiveness. Summary Pull Smartlead campaign analytics on a schedule and write them to a Google Sheet (append or update). Works with pagination, avoids duplicates via a stable key, and is ready for dashboards, pivots, or BI tools. What This Workflow Does Collects campaign stats from Smartlead (per-lead, per-sequence). Handles pagination safely (offset/limit). Writes to Google Sheets using appendOrUpdate with a matching column to prevent duplicates. Can run on a schedule for near real-time analytics. Node Structure Overview | Step | Node | Purpose | |---|---|---| | 1️⃣ | Schedule Trigger | Starts the workflow on a cadence (e.g., hourly) | | 2️⃣ | Code (Pagination Generator) | Emits {offset, limit} pairs (e.g., 0..9900, step 100) | | 3️⃣ | Split in Batches | Sends each pagination pair to the API sequentially | | 4️⃣ | HTTP Request (Smartlead) | GET /campaigns/{campaign_id}/statistics with offset/limit | | 5️⃣ | Split Out | Turns the API data[] array into one item per lead record | | 6️⃣ | Google Sheets (appendOrUpdate) | Upserts rows by stats_id into EngagedLeads tab | | 7️⃣ | Loop Back | Continues until all batches have been processed | Step-by-Step Setup Prerequisites Smartlead account + API key with access to campaign statistics. Google account + Google Sheets OAuth connected in n8n. Create the Google Sheet Spreadsheet name: Email Analytics (can be anything). Tab name: EngagedLeads. Add these exact headers (first row): lead_name, lead_email, lead_category, sequence_number, stats_id, email_subject, sent_time, open_time, click_time, reply_time, open_count, click_count, is_unsubscribed, is_bounced Configure the Schedule Trigger Choose a frequency (e.g., every 2 hours). If you’re testing, set a single run or a short cadence. Configure the Code Node (Pagination) Emit N items like: { "offset": 0, "limit": 100 } { "offset": 100, "limit": 100 } ... 100 is a good default limit. For up to 10,000 records, generate 100 offsets. Configure the Smartlead API Node Method: GET URL: https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/statistics Query parameters: api_key = <YOUR_SMARTLEAD_API_KEY> offset = {{ $json.offset }} limit = {{ $json.limit }} Map response to JSON. Split Out the Response Use a Split Out (or similar) to iterate over data[] so each lead record is one item. Google Sheets Node (Append or Update) Operation: appendOrUpdate. Document: Your Email Analytics sheet. Sheet/Tab: EngagedLeads. Matching Column: stats_id. Map fields from Smartlead response to sheet columns: lead_name ← lead name (or composed from first/last if provided) lead_email ← email lead_category ← category/type if available sequence_number ← sequence step number stats_id ← stable identifier (e.g., Smartlead stats_id or message id) email_subject ← subject sent_time, open_time, click_time, reply_time ← timestamps open_count, click_count ← integers is_unsubscribed, is_bounced ← booleans If the same stats_id arrives again, the row is updated, not appended. Test and Activate Run once manually to verify API and sheet mapping. Check the sheet for new/updated rows. Activate the workflow to run automatically. Smartlead API Reference (Used by This Workflow) Endpoint** GET https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/statistics Required query parameters** api_key (string) offset (number) limit (number) Typical response (trimmed example)** { "data": [ { "lead_name": "Jane Doe", "lead_email": "jane@example.com", "sequence_number": 2, "stats_id": "15b6ff3a-...-b2b9f343c2e1", "email_subject": "Quick intro", "sent_time": "2025-10-08T10:18:55.496Z", "open_time": "2025-10-08T10:20:10.000Z", "click_time": null, "reply_time": null, "open_count": 1, "click_count": 0, "is_unsubscribed": false, "is_bounced": false } ], "total": 1234 } Google Sheets Structure (Recommended) Spreadsheet: Email Analytics Tab: EngagedLeads Columns:lead_name, lead_email, lead_category, sequence_number, stats_id, email_subject, sent_time, open_time, click_time, reply_time, open_count, click_count, is_unsubscribed, is_bounced Matching Column: stats_id (prevents duplicates and allows updates) Customization Tips Multiple Campaigns** Duplicate the workflow and set a different {campaign_id} and/or write results to a separate tab in your Google Sheet. Batch Size** Increase or decrease the limit value (e.g., 200) in your Code node if you want fewer or more API calls. Filtering** Add a Code or IF node to skip rows where is_bounced = true or is_unsubscribed = true. Dashboards** Create a new tab named Dashboard in Google Sheets and visualize your data using built-in charts or connect it to Looker Studio for advanced visualization. Enrichment** Join this dataset with your CRM data (e.g., HubSpot or Salesforce) using lead_email as a key to gain deeper customer insights. Security and Publishing Notes Do not hardcode** your Smartlead API key in the workflow export. Use n8n credentials or environment variables instead. When sharing the template publicly, replace sensitive values with placeholders like: <YOUR_SMARTLEAD_API_KEY> and <YOUR_GOOGLE_SHEET_ID>. Keep your Google Sheet private unless you intentionally want to share it publicly. Troubleshooting No rows in Sheets** Verify that the API response includes data[], confirm that the Split Out node is configured correctly, and check field mappings. Duplicates** Ensure the Google Sheets node has its matching column set to stats_id. Rate Limits** Increase the schedule interval, add a short Wait node between batches, or reduce the limit size. Mapping Errors** Ensure that column names in Sheets exactly match your field mappings — they are case-sensitive. Timezone Differences** Smartlead timestamps are in UTC. Convert them downstream if your local timezone is different. Example Use Case Run this workflow hourly to maintain a live, company-wide Email Engagement Sheet. Sales teams** can monitor replies and active leads. Marketing teams** can track open and click rates by sequence. Operations** can export monthly summaries — no Smartlead login required. Tags Smartlead EmailMarketing Automation GoogleSheets Analytics CRM MarketingOps
by Abdul Matheen
Automated Invoice-Processing AI Agent for n8n Overview The Automated Invoice-Processing AI Agent in n8n is designed to streamline and optimize invoice management for finance teams and accounts payable (AP) professionals. This solution addresses the common challenge of verifying invoice data manually, cross-checking it against purchase orders (POs), and ensuring compliance before releasing payments. By intelligently fetching invoices from Google Drive, extracting key details, validating them against PO records from Google Sheets, and automating the next actions, this system reduces human intervention, minimizes errors, and accelerates the payment process. Target Audience This automation primarily serves finance and AP teams responsible for managing large volumes of vendor invoices. It also supports finance managers, procurement departments, and auditors who require accuracy in payment reconciliation, ensuring that invoices align with approved POs before processing. Business Problem Addressed Organizations frequently struggle with time-consuming manual invoice verification and data entry. Discrepancies between invoices and purchase orders can lead to payment delays, compliance risks, or duplicate payments. This n8n-based AI agent automates that process—ensuring that every invoice is validated, exceptions are flagged to the finance team promptly, and payments of smaller value (under defined thresholds) are processed automatically. Prerequisites Active n8n account or self-hosted instance Google Drive and Google Sheets connected via n8n credentials LLM (AI node) configured for document extraction (optional but recommended) A Google Sheet set up with existing PO data (including PO Number, Amount, and Date fields) Setup Instructions Connect Google Drive and Google Sheets integrations within n8n. Configure the workflow trigger to monitor a designated "Invoices" folder. Add a document-parsing node to extract invoice details such as PO Number, Invoice Date, and Amount. Implement conditional logic: If the invoice amount > 5000, the agent cross-references PO details from the Google Sheet. If it matches, it updates the PO sheet status to “Process Payment.” If not, an automated email notifies the finance team. If the amount ≤ 5000, the workflow marks it for direct payment. Test the workflow with sample invoices before full deployment. Customization Options Adjust the payment threshold value (e.g., 10,000 instead of 5,000). Customize the email notification template and recipient list. Integrate with accounting systems such as QuickBooks or SAP for end-to-end automation. Add audit logging nodes to create traceability for every action taken. This AI-driven automation brings speed, accuracy, and scalability to invoice verification—empowering finance professionals to focus on analytical and strategic tasks rather than repetitive manual work.
by Karol
Who’s it for This template is designed for small and medium businesses, startups, and agencies that want to automate customer inquiries, provide instant support, and capture leads without losing valuable conversations. It’s especially useful for teams that get many repetitive questions about products, services, or locations but don’t want to miss out on collecting contact details for follow-up. What it does / How it works The workflow creates a 24/7 AI-powered chatbot that answers company-related questions and collects customer information. It uses: • GPT-4o for natural conversations • Pinecone Vector Store for Retrieval-Augmented Generation (RAG) with your company knowledge base • Google Sheets to store structured lead data • Telegram to instantly notify your team When a customer asks about products, services, or hours, the AI answers using the Pinecone database. Afterwards, it politely asks for their name, email, phone number, and interest. The details are saved to Google Sheets and your team receives a Telegram message with a summary. How to set up Connect your OpenAI account. Create a Pinecone index with company FAQs, documents, or policies. Link your Google Sheet with columns: Name, Email, Phone, Interested in. Add your Telegram bot token and chat/group ID. Replace [INSERT_YOUR_COMPANY_NAME_HERE] in the system prompt with your company name. Requirements • OpenAI API key • Pinecone account • Google Sheets access • Telegram bot & chat ID How to customize • Change the system prompt to match your brand’s tone. • Update the Pinecone namespace and embeddings model if needed. • Add extra fields in Google Sheets (e.g., “Budget” or “Preferred product”). • Extend the flow with CRM integrations or automated email follow-ups. With this setup, you get a smart, RAG-powered chatbot that not only answers questions but also turns every conversation into a potential lead.
by Rahul Joshi
Description Automate B2B order invoicing by fetching orders from Airtable, validating paid B2B entries, creating Stripe customers and invoices, finalizing invoices, and logging structured invoice data into Google Sheets. This workflow ensures seamless B2B billing, centralized record-keeping, and reduces manual errors in financial operations. ⚡💳📊 What This Template Does Triggers hourly to check for new B2B orders. ⏱️ Fetches order data from Airtable (Orders table). 📥 Filters only paid orders with “B2B” tag. ✅ Creates a corresponding Stripe customer from order details. 👤 Processes order line items for invoicing. 📦 Creates a Stripe invoice with due date and payment terms. 🧾 Finalizes the invoice automatically. ✔️ Formats invoice details (totals, due dates, customer info, links). 🔄 Logs structured invoice data into Google Sheets for tracking. 📊 Key Benefits Fully automates B2B invoicing workflow from orders to finalized invoices. 🔄 Ensures all invoices are linked, structured, and logged in Sheets. 🧾 Reduces manual effort and eliminates data entry errors. ⚡ Maintains centralized invoice tracking for finance teams. 📂 Creates a consistent billing flow integrated with Stripe. 💳 Features Hourly Trigger – Continuously monitors Airtable for new/updated orders. Airtable Integration – Fetches order details automatically. Conditional Filter – Processes only “B2B” paid orders. Stripe Customer Creation – Automatically creates customers in Stripe. Line Item Processor – Handles Shopify/Order line items or test data. Stripe Invoice Creation – Generates draft invoices with due dates. Invoice Finalization – Auto-finalizes and prepares invoices for payment. Data Formatter – Structures invoice info (totals, links, dates, status). Google Sheets Integration – Logs all invoice data for reporting. Requirements n8n instance (cloud or self-hosted). Airtable Personal Access Token with read access to Orders table. Stripe API credentials with customer + invoice permissions. Google Sheets OAuth2 credentials with read/write access. Target Audience Finance/ops teams handling B2B customer invoicing. 💼 SaaS or eCommerce businesses with B2B order flows. 🛍️ Startups needing automated billing + centralized reporting. 🚀 Teams tracking Stripe invoices inside Google Sheets. 📊 Step-by-Step Setup Instructions Connect Airtable credentials and replace with your base/table IDs. 🔑 Configure Stripe API credentials for invoice + customer creation. 💳 Link Google Sheets credentials and update the target sheet ID. 📊 Adjust order filtering conditions (tags, payment status) as needed. ⚙️ Test with sample data to validate invoices are created + logged. ✅
by Servify
Who is this for Sales teams and agencies using Retell AI for voice outreach who want to automatically analyze every call and push insights into their CRM. Ideal for businesses running AI voice agents that need structured post-call intelligence without manual review. How it works When a Retell AI voice call ends, the platform sends a call_analyzed webhook to this workflow. It parses the transcript, call duration, and metadata, then sends everything to OpenAI for analysis. The AI returns structured data: sentiment, lead score (1-10), key topics, buying signals, objections, action items, and a recommended next step. The enriched data is synced to HubSpot, updating the contact record. If the lead score meets your threshold, the workflow alerts your sales team on Slack and creates a priority follow-up task in HubSpot. Every call is logged to Google Sheets for tracking. How to set up Open the Set user config variables node and enter your Slack channel, lead score threshold (default: 7), Google Sheet ID, and sheet name. Connect your OpenAI, HubSpot, Slack, and Google Sheets credentials in each respective node. Copy the production webhook URL from the trigger node and add it to your Retell AI dashboard under Webhook Settings for the call_analyzed event. Create a Google Sheet with columns: Date, Call ID, From Number, Duration, Sentiment, Lead Score, Summary, Action Items, Qualified. Activate the workflow and make a test call to verify the full pipeline. Requirements Retell AI account with an active voice agent OpenAI API key (GPT-4o-mini or GPT-4o) HubSpot CRM account Slack workspace with a bot token Google Sheets How to customize Adjust the lead score threshold in the config node to control when hot lead alerts fire. Modify the AI analysis prompt to extract industry-specific fields (e.g., appointment booked, insurance type, budget range). Add a Twilio SMS branch for instant text follow-ups to hot leads. Connect additional CRM nodes if you use Pipedrive, Salesforce, or another platform instead of HubSpot.
by Muhammad Mahamid
📋 Weekly Standup with AI Summary — Telegram + Google Sheets Automate your weekly team standups end-to-end. Bot asks each team member three questions on Telegram, waits for responses, then AI summarizes the entire team's update and sends a clean executive summary to the team lead. All logged to Google Sheets for history. Why This Is Useful Standups are essential but consume hours every week. Slack/Teams threads get messy. Calendar invites get ignored. This template runs your standup automatically — questions go out Monday at 9 AM, the team replies on their phone via Telegram, and by lunchtime the team lead has a clean AI-generated summary. No more "what did everyone do last week?" meetings. No more chasing replies. No more manually writing summaries. How It Works Monday 9 AM — workflow triggers automatically (or run manually anytime) Bot sends questions to each team member privately on Telegram Team replies to the bot with their update (1-2 minute task per person) Workflow waits 4 hours (configurable) for everyone to respond AI reads all responses and generates an executive summary Team lead receives the formatted summary on Telegram Everything logged to Google Sheets for history What You Need Telegram bot** — free, 2 minutes via @BotFather Groq API key** — free, no credit card required (console.groq.com) Google Sheet** with a tab named Standup_Log Smart Features 🤖 AI-Generated Executive Summary Powered by Groq's llama-3.1-8b-instant (free tier). Every summary follows the same structured format: 📌 KEY ACCOMPLISHMENTS LAST WEEK bullet point 1 bullet point 2 🎯 THIS WEEK'S PLAN bullet point 1 bullet point 2 🚧 BLOCKERS & RISKS list any blockers, or "None reported" 💪 TEAM HEALTH One sentence assessment: on track / needs attention / at risk Consistent format means leads can scan summaries in seconds across weeks. 🔄 Smart Retry on Rate Limits When Groq hits rate limits (429), the workflow waits and retries automatically. Up to 2 retries per call. Falls back to raw responses if AI is unavailable — never breaks. 📊 Built-in Tracking Standup_Log sheet** — every "sent" event tracked Missing members** flagged in summary (⚠️ Missing: Sarah, Omar) Response count** shown (👥 Responded: 4/5) Run history** queryable for trends over time 🛡️ Resilient by Design continueOnFail on all Telegram and Sheets nodes One member's network error doesn't break the rest AI failure falls back to raw text — team lead still gets the data Manual trigger lets you test anytime without waiting for Monday Customizable Questions** — edit all three in the Settings node Schedule** — change the cron (default: 0 9 * * 1 = Monday 9 AM) Wait time** — default 4 hours, change to whatever suits your team AI model** — swap to any Groq-supported model in the AI node Team size** — works with 1 to 50+ members (just add chat IDs) Setup Time 10 minutes: Create a Telegram bot via @BotFather (get token) Each team member sends /start to your bot once Get each person's chat ID via @userinfobot Import the JSON into n8n Paste credentials in ⚙️ Settings Connect Telegram credential and Google Sheets credential Click ▶️ Manual Test to verify Activate the workflow Setup Step-by-Step 1. Create Your Bot Open @BotFather on Telegram → /newbot → choose a name → copy the token (looks like 7654321:AAGfHJ...). 2. Get Team Chat IDs Each team member opens @userinfobot → /start → copies the Id: number. Important: every team member must send /start to your bot once before the bot can message them. This is a Telegram security policy. 3. Configure ⚙️ Settings | Field | Example | |---|---| | team_chat_ids | 123456789,987654321,555555555 | | team_names | Ahmad,Sarah,Omar | | team_lead_chat_id | 123456789 (whoever gets the summary) | | question_1, _2, _3 | Customize for your team | | telegram_bot_token | Token from @BotFather | | groq_api_key | Free key from console.groq.com | 4. Connect Credentials 📲 Send to Team** → add Telegram credential (token from step 1) 📲 Send Summary to Lead** → same credential 💾 Log Sent** → add Google Sheets credential, select tab Standup_Log 5. Test Click ▶️ Manual Test → you'll get the standup questions on Telegram → reply to the bot → wait 4 hours (or temporarily change to 2 minutes for testing) → receive AI summary. Use Cases Distributed teams** across timezones — async standups via Telegram Engineering teams** — fast 1-minute updates instead of 30-minute meetings Sales teams** — weekly pipeline updates auto-summarized for the manager Remote startups** — keep founders informed without daily syncs Agency project teams** — stakeholder updates compiled automatically Architecture ⏰ Every Monday 9 AM ──→ ▶️ Manual Test ─────────→ ⚙️ Settings ↓ 📝 Prepare Messages ↓ 📲 Send to Team (Telegram) ↓ 💾 Log Sent (Google Sheets) ↓ ⏳ Wait 4 Hours ↓ 📥 Fetch Responses (Telegram getUpdates) ↓ 🤖 AI Summarize (Groq + retry) ↓ 📲 Send Summary to Lead (Telegram) 10 nodes. Single workflow. Production-ready. Monthly Cost $0. Telegram bots are free. Groq's free tier handles 14,400 requests/day on llama-3.1-8b-instant — way more than weekly standups need. Google Sheets is free. What You Get A team that runs itself. Standups happen on autopilot. The team lead gets a structured weekly summary with zero manual effort. New team members ramp up faster because every week's update is searchable in Google Sheets. Time saved per week: 30-45 minutes per team member + 2-3 hours for the team lead.
by WeblineIndia
Android Feature Flag Cleanup Automation This workflow automatically scans an Android GitHub repository, detects feature flags used in the codebase, compares them with Firebase Remote Config flags, identifies unused flags and sends a weekly cleanup report to Slack. This workflow runs every week and checks Android source files (.kt / .java) inside your GitHub repository. It finds possible feature flags used in code, compares them with Firebase Remote Config flags and highlights flags that may no longer be used. It then builds a clean summary report and sends the result to Slack for team review. You receive: Weekly automated Android flag audit** Unused Firebase flag detection** Slack summary report for cleanup review** Better visibility of active vs stale flags** Ideal for Android teams who want cleaner Firebase Remote Config management. Quick Start – Implementation Steps Login to your n8n account. Add your GitHub credential in n8n. Update repository owner, repo name and branch. Add Slack credentials and choose a channel. Add Firebase Remote Config API later (currently test data supported). Activate workflow for weekly automation. What It Does This workflow automates Android feature flag cleanup: Runs automatically every week. Connects to GitHub repository. Fetches all Android .kt and .java files. Reads source code files. Detects possible feature flags inside code. Loads Firebase Remote Config flags. Compares code flags vs Firebase flags. Finds unused Firebase flags. Creates final summary report. Sends report to Slack. This helps teams remove stale flags and maintain clean configuration. Who It's For This workflow is ideal for: Android development teams Tech leads QA teams DevOps / Release teams Firebase Remote Config users Teams maintaining multiple feature flags Requirements to Use This Workflow To run this workflow, you need: n8n account (cloud or self-hosted) GitHub repository access** Slack workspace** Firebase Remote Config project** (optional initially) Basic understanding of Android source files How It Works Weekly Trigger – Workflow starts automatically every week. Load Settings – Reads repository and workflow settings. Connect GitHub – Fetches project files. Filter Android Files – Only .kt and .java files selected. Read Code – Downloads and decodes file content. Detect Flags – Finds feature flags from source code. Load Firebase Flags – Uses Firebase Remote Config flags. Compare Flags – Finds used and unused flags. Create Report – Builds totals and cleanup summary. Send Slack Alert – Posts report to team channel. Setup Steps Import the workflow JSON into n8n. Open Workflow Settings node. Enter: GitHub Owner GitHub Repo Branch Name Connect GitHub credentials. Connect Slack credentials. Select Slack channel. Replace mock Firebase flags with real Firebase API later. Activate workflow. How To Customize Nodes Customize Scan Schedule Change Cron node: Weekly Daily Monthly Customize File Types Change file filter: .kt .java .xml .gradle Customize Flag Detection Improve regex to detect: BuildConfig.FEATURE_* RemoteConfig.getString() Custom wrappers Customize Slack Alerts You may add: Emojis Mentions Team tags Priority warnings Add-Ons (Optional Enhancements) You can extend this workflow to: Create Jira cleanup tickets Update Google Sheets catalog Create GitHub PR with markdown report Track first seen / last seen flags Team ownership by prefix Strict aging rules (30+ days unused) Multi-repository scanning Use Case Examples 1. Firebase Cleanup Remove old Remote Config flags not used in app code. 2. Weekly Engineering Report Send flag health report to Slack. 3. Release Readiness Check unused experiments before release. 4. Tech Debt Reduction Keep feature flag system clean and manageable. 5. Multi-Team Visibility Know which flags are active or stale. Troubleshooting Guide | Issue | Possible Cause | Solution | |------|----------------|----------| | No files found | Wrong repo/branch | Check settings | | Slack message failed | Wrong credentials | Reconnect Slack | | No flags detected | Regex too strict | Improve detection logic | | Too many files | Large repo | Reduce scan scope | | Firebase data empty | API not connected | Use mock data or fix API | | Workflow not running | Disabled trigger | Enable Cron node | Need Help? If you need help customizing this workflow by adding Jira, Google Sheets, GitHub PR creation, real Firebase API integration or scaling for enterprise use then our n8n workflow developers at WeblineIndia can help build an advanced production-ready version.
by Paolo Ronco
Sync n8n Workflow Schedules to Google Calendar Reads every workflow on your n8n instance every 30 minutes, extracts their schedule triggers, and keeps a matching recurring event on Google Calendar — one event per workflow, forever in sync. How it works Schedule Trigger (30 min) → GET /api/v1/workflows — fetch all workflows → Code: parsing — extract scheduleTrigger / cron nodes → Sheets: Lookup — read saved state (schedule, On Calendar, EventID) → Code: detect changes — create / update / skip ├─ create → build RRULE payload → Create event → write EventID to Sheets └─ update → delete old event (parallel) + create new event → write to Sheets State is stored in a Google Sheets tab (n8n Scheduling). The sheet acts as the single source of truth between runs. What gets a Calendar event | Schedule type | Result | | -------------------------------------- | ---------------------------------------------------------- | | Daily | DAILY recurring event | | Weekly (with or without specific days) | WEEKLY recurring event | | Monthly | MONTHLY recurring event | | Hourly | 1 DAILY event at 00:MM (not 24 — avoids GCal rate limit) | | Cron / minutely | Skipped — not supported by Google Calendar RRULE | | This workflow itself | Always skipped | Prerequisites n8n instance with API enabled Google Cloud project with: Service Account (for Sheets — never expires) OAuth 2.0 client (for Google Calendar — expires periodically) A Google Sheets spreadsheet shared with the Service Account A Google Calendar to write events to Credentials | n8n credential type | Used for | | -------------------------- | ------------------------------------------ | | n8n API | Reading the workflow list | | Google Calendar OAuth2 API | Creating / deleting Calendar events | | Google Service Account | Reading and writing the Sheets state store | > ⚠️ The Google Calendar OAuth2 credential expires. Reconnect it from Settings → Credentials when Calendar nodes start failing. Setup Full step-by-step setup in documentation.md. Known limits OAuth token expiry breaks sections D/E silently — set up the error workflow to get notified Hourly schedules map to a single daily event (label includes ogni ora :MM) The disconnected Webhook sub-flow (section F) is a manual maintenance utility — not part of the main pipeline
by Nikan Noorafkan
🛍️ Google Shopping Feed Optimization with Channable + Relevance AI + Google Merchant API 🚀 Automate, Optimize & Sync Your Product Feeds at Scale 🧩 Overview This workflow automates Google Shopping Feed Optimization using Channable, Relevance AI, and the Google Merchant API. It runs daily, enhancing product titles and descriptions, validating feed quality, assigning custom campaign labels, and syncing the optimized feed with Google Merchant Center. The system ensures every product listing meets Google’s content standards, is SEO-friendly, and ready for high-performance Shopping campaigns. 🧠 Key Benefits ✅ Automated daily product feed optimization ✅ AI-enhanced titles and descriptions (via Relevance AI) ✅ Google Merchant API integration (latest version) ✅ Quality scoring and error detection before sync ✅ Custom campaign labels for segmented bidding ✅ Slack alerts for issues and daily summaries ✅ 100% no-code deployment with scalable batch processing ⚙️ System Architecture | Component | Purpose | | ----------------------------- | -------------------------------------------------------- | | n8n | Workflow automation and orchestration | | Channable | Product feed source (can replace with any eCommerce API) | | Relevance AI | AI title and description optimization | | Google Merchant API (NEW) | Product publishing and validation | | Slack | Alerts and reporting | | Cron Trigger | Daily schedule (6 AM sync) | 🧭 Workflow Logic (Visual Summary) Daily Trigger (06:00 AM) ⬇️ 1️⃣ Get Product Feed (Channable) Fetches product data for optimization. ⬇️ 2️⃣ Data Quality Checks Validates titles, GTINs, pricing, categories, and descriptions. Assigns quality scores. ⬇️ 3️⃣ Split Products Breaks the all_products array into single items for AI processing. ⬇️ 4️⃣ Optimize Title (Relevance AI Tool) Enhances product titles for SEO, clarity, and Google compliance. ⬇️ 5️⃣ Generate Description (Relevance AI Tool) Creates 300–400 character, benefit-focused product descriptions. ⬇️ 6️⃣ Assign Custom Labels Adds five segmentation labels: margin, performance, seasonality, stock level, and category. ⬇️ 7️⃣ Aggregate Products Combines optimized items into one unified dataset. ⬇️ 8️⃣ Upload to Merchant Center (NEW Merchant API) Publishes products via Google’s latest /products endpoint. ⬇️ 9️⃣ Check Product Status Verifies successful uploads and identifies disapprovals. ⬇️ 🔍 Analyze Product Issues Summarizes errors and warnings from Merchant API results. ⬇️ ⚖️ IF Disapprovals Found → 🚨 Send Slack alert for issues → ✅ Otherwise, post success summary 🧩 Environment Variables Set these under n8n → Settings → Variables → Add Variable | Variable | Example | Purpose | | ----------------------------------- | -------------------------------------------------- | -------------------------------- | | CHANNABLE_API_URL | https://api.channable.com/v1 | Channable API base | | CHANNABLE_COMPANY_ID | 12345 | Company ID in Channable | | CHANNABLE_PROJECT_ID | abcd | Project ID | | FEED_ID | shopping-feed | Feed endpoint | | RELEVANCE_AI_API_URL | https://api-f1db6c.stack.tryrelevance.com/latest | Relevance AI API base | | RELEVANCE_TOOL_TITLE_OPTIMIZER_ID | tQy48Ld8n0zp | Relevance AI Title Tool ID | | RELEVANCE_TOOL_DESCRIPTION_ID | hJ9bT01r8Lqf | Relevance AI Description Tool ID | | MERCHANT_API_URL | https://merchantapi.googleapis.com/content/v2.1 | Google Merchant API base | | MERCHANT_ACCOUNT_ID | 123456789 | Merchant Center account ID | | SLACK_CHANNEL | #shopping-feed-automation | Slack channel for reports | 🔑 Credential Setup | Service | Type | Setup | | ------------------- | ---------------- | -------------------------------------------------------------- | | Relevance AI | HTTP Header Auth | Header → Authorization: Bearer {{$env.RELEVANCE_AI_API_KEY}} | | Channable | HTTP Header Auth | Header → Authorization: Bearer {{$env.CHANNABLE_API_TOKEN}} | | Google Merchant | Google OAuth2 | Scopes: • https://www.googleapis.com/auth/content | | Slack | Slack API | Add chat:write Bot Token Scope | 🧱 Node-by-Node Breakdown | Node | Description | Key Action | | ----------------------------- | ---------------------------------------- | ----------------------------------------------------------- | | Daily Trigger (6 AM) | Starts workflow every morning | cron: 0 6 * * * | | Get Product Feed | Fetches products from Channable | GET {{$env.CHANNABLE_API_URL}}/.../feeds/{{$env.FEED_ID}} | | Data Quality Checks | Validates GTINs, titles, pricing, images | Returns quality_score + all_products | | Split Products | Splits array into individual products | Operation: splitOut, Field: all_products | | Optimize Title | Calls Relevance AI title tool | /tools/{{$env.RELEVANCE_TOOL_TITLE_OPTIMIZER_ID}}/trigger | | Generate Description | Calls Relevance AI description tool | /tools/{{$env.RELEVANCE_TOOL_DESCRIPTION_ID}}/trigger | | Assign Custom Labels | Adds 5 Smart Bidding Labels | Margin, performance, seasonality, stock, category | | Aggregate Products | Combines optimized product data | For batch upload | | Upload to Merchant Center | Posts via NEW Merchant API | /accounts/{id}/products | | Check Product Status | Retrieves upload results | Lists disapproved or pending items | | Analyze Product Issues | Summarizes product disapprovals | Returns disapproval_count and warnings | | IF Disapprovals Found | Conditional routing | Sends alert or success message | | Slack - Alert | Sends error summary to Slack | Includes product name and issue detail | | Slack - Success Summary | Posts daily completion message | Includes counts and optimizations applied | 🧰 Testing Procedure 1️⃣ Temporarily disable the cron schedule 2️⃣ Run manually using “Execute Workflow” 3️⃣ Start with 3–5 products 4️⃣ Check: Slack → Success message Google Merchant → Updated products n8n Execution logs → No failed nodes Once validated → Re-enable the 6 AM trigger 🧾 Example Output Slack Success Message ✅ Shopping Feed Optimization Complete 📊 Summary: • Total Products Processed: 135 • Products with Quality Issues: 12 • Disapprovals: 0 • Warnings: 3 🎯 Optimizations Applied: • Titles optimized for SEO • Descriptions enhanced • Custom labels added API: NEW Merchant API (merchantapi.googleapis.com) Next Run: Tomorrow 6 AM Timestamp: 2025-10-22T06:00:00Z Slack Alert Message 🚨 Merchant Center Disapprovals Alert Total Disapprovals: 5 Total Warnings: 2 Critical Issues: • Product: Wireless Headphones (ID: 4829) Issue: Missing GTIN • Product: Yoga Mat Eco (ID: 7350) Issue: Invalid price Action Required: Review disapproved products in Merchant Center. Timestamp: 2025-10-22T06:00:00Z 📊 Success Metrics | Metric | Goal | | ---------------------------- | ------------------- | | Feed approval rate | ≥ 90% | | AI optimization success rate | ≥ 95% | | Manual review reduction | 80% | | Daily automation uptime | 99.9% | | Scalable throughput | 5,000+ products/day | 🧩 Maintenance Schedule | Frequency | Task | | ------------- | ------------------------------ | | Daily | Monitor Slack alerts | | Weekly | Check disapproval logs | | Monthly | Refresh API tokens | | Quarterly | Tune AI prompts and thresholds | 🪜 Next Steps ✅ Deploy workflow in production 📈 Connect to your performance dashboard 🌍 Extend to multi-language feeds (Relevance AI translations) 💡 Add conversion optimization loop in Google Ads 🔗 References n8n Documentation Relevance AI Documentation Google Merchant API Docs Channable Help Center 🎉 Conclusion You now have a production-grade, AI-driven Shopping Feed Optimization workflow built on: Channable** for structured data ingestion Relevance AI** for content intelligence Google Merchant API** for publishing n8n** as the automation engine 💡 Result: A fully autonomous product feed system that self-improves daily, keeping your listings compliant, optimized, and performing at scale.
by vinci-king-01
Property Listing Aggregator with Microsoft Teams and Baserow ⚠️ COMMUNITY TEMPLATE DISCLAIMER: This is a community-contributed template that uses ScrapeGraphAI (a community node). Please ensure you have the ScrapeGraphAI community node installed in your n8n instance before using this template. This workflow automatically aggregates commercial real-estate listings from multiple broker and marketplace websites, stores the fresh data in Baserow, and pushes weekly availability alerts to Microsoft Teams. Ideal for business owners searching for new retail or office space, it runs on a timetable, scrapes property details, de-duplicates existing entries, and notifies your team of only the newest opportunities. Pre-conditions/Requirements Prerequisites An n8n instance (self-hosted or n8n.cloud) ScrapeGraphAI community node installed A Baserow workspace & table prepared to store property data A Microsoft Teams channel with an incoming webhook URL List of target real-estate URLs (CSV, JSON, or hard-coded array) Required Credentials ScrapeGraphAI API Key** – Enables headless scraping of listing pages Baserow Personal API Token** – Grants create/read access to your property table Microsoft Teams Webhook URL** – Allows posting messages to your channel Baserow Table Schema | Column Name | Type | Notes | |-------------|---------|--------------------------------| | listing_id| Text | Unique ID or URL slug (primary)| | title | Text | Listing headline | | price | Number | Monthly or annual rent | | sq_ft | Number | Size in square feet | | location | Text | City / neighborhood | | url | URL | Original listing link | | scraped | Date | Timestamp of last scrape | How it works This workflow automatically aggregates commercial real-estate listings from multiple broker and marketplace websites, stores the fresh data in Baserow, and pushes weekly availability alerts to Microsoft Teams. Ideal for business owners searching for new retail or office space, it runs on a timetable, scrapes property details, de-duplicates existing entries, and notifies your team of only the newest opportunities. Key Steps: Schedule Trigger**: Fires every week (or on demand) to start the aggregation cycle. Load URL List (Code node)**: Returns an array of listing or search-result URLs to be scraped. Split In Batches**: Processes URLs in manageable groups to avoid rate-limits. ScrapeGraphAI**: Extracts title, price, size, and location from each page. Merge**: Reassembles batches into a single dataset. IF Node**: Checks each listing against Baserow to detect new vs. existing entries. Baserow**: Inserts only brand-new listings into the table. Set Node**: Formats a concise Teams message with key details. Microsoft Teams**: Sends the alert to your designated channel. Set up steps Setup Time: 15-20 minutes Install ScrapeGraphAI node: In n8n, go to “Settings → Community Nodes”, search for “@n8n-nodes/scrapegraphai” and install. Create Baserow table: Follow the schema above. Copy your Personal API Token from Baserow profile settings. Generate Teams webhook: In Microsoft Teams, open channel → “Connectors” → “Incoming Webhook”, name it, and copy the URL. Open the workflow in n8n and set the following credentials: ScrapeGraphAI API Key Baserow token (Baserow node) Teams webhook (Microsoft Teams node) Define target URLs: Edit the “Load URL List” Code node and add your marketplace or broker URLs. Adjust schedule: Double-click the “Schedule Trigger” and set the cron expression (default: weekly Monday 08:00). Test-run the workflow manually to verify scraping and data insertion. Activate the workflow once results look correct. Node Descriptions Core Workflow Nodes: stickyNote** – Provides inline documentation and reminders inside the canvas. Schedule Trigger** – Triggers the workflow on a weekly cron schedule. Code** – Holds an array of URLs and can implement dynamic logic (e.g., API calls to get URLs). SplitInBatches** – Splits URL list into configurable batch sizes (default: 5) to stay polite. ScrapeGraphAI** – Scrapes each URL and returns structured JSON for price, size, etc. Merge** – Combines batch outputs back into one array. IF** – Performs existence check against Baserow’s listing_id to prevent duplicates. Baserow** – Writes new records or updates existing ones. Set** – Builds a human-readable message string for Teams. Microsoft Teams** – Posts the summary into your channel. Data Flow: Schedule Trigger → Code → Split In Batches → ScrapeGraphAI → Merge → IF → Baserow IF (new listings) → Set → Microsoft Teams Customization Examples Add additional data points (e.g., number of parking spaces) // In ScrapeGraphAI "Selectors" field { "title": ".listing-title", "price": ".price", "sq_ft": ".size", "parking": ".parking span" // new selector } Change Teams message formatting // In Set node return items.map(item => { const l = item.json; item.json = { text: 🏢 ${l.title} — ${l.price} USD\n📍 ${l.location} | ${l.sq_ft} ft²\n🔗 <${l.url}|View Listing> }; return item; }); Data Output Format The workflow outputs structured JSON data: { "listing_id": "12345-main-street-suite-200", "title": "Downtown Office Space – Suite 200", "price": 4500, "sq_ft": 2300, "location": "Austin, TX", "url": "https://broker.com/listings/12345", "scraped": "2024-05-01T08:00:00.000Z" } Troubleshooting Common Issues ScrapeGraphAI returns empty fields – Update CSS selectors or switch to XPath; run in headless:true mode. Duplicate records still appear – Ensure listing_id is truly unique (use URL slug) and that the IF node compares correctly. Teams message not delivered – Verify webhook URL and that the Teams connector is enabled for the channel. Performance Tips Reduce batch size if websites block rapid requests. Cache previous URLs to skip unchanged search-result pages. Pro Tips: Rotate proxies in ScrapeGraphAI for larger scraping volumes. Use environment variables for credentials to simplify migrations. Add a second Schedule Trigger for daily “hot deal” checks by duplicating the workflow and narrowing the URL list.
by Qasim
Quick overview This workflow runs on a weekly schedule (or manually) to compare a competitor’s previous vs current pricing/feature snapshot, analyzes the changes with Google Gemini, and produces a structured market-intelligence record with threat scoring and an alert or digest based on severity. How it works Runs on a weekly Monday 8AM schedule or when you manually test the workflow. Loads a competitor name, pricing URL, and previous/current pricing-and-features snapshots to compare. Builds an analysis prompt that highlights the before/after snapshots and sends it to Google Gemini via an AI chain with structured JSON output parsing. Routes the result by threat score to produce either a critical founder alert, a moderate product digest, or a minor update archive record. Merges the selected alert/digest with the intelligence data and generates a final market-intelligence log entry containing the threat score, summary, detected changes, and recommended counter-actions. Setup Add Google Gemini (PaLM) API credentials for the Google Gemini chat model used by the AI analysis step. Replace the seeded competitor snapshots with your own source data (for example, update the competitor name/URL and feed real “previous” and “current” snapshots from your monitoring process). Adjust the threat-score thresholds used for routing so the critical/moderate/minor paths match your internal escalation criteria.