Robert Breen
Professional services consultant with over 10 years of experience solving complex business problems across industries. I specialize in n8n and process automation—designing custom workflows that integrate tools like Google Calendar, Airtable, GPT, and internal systems. Whether you need to automate scheduling, sync data, or streamline operations, I build solutions that save time and drive results.
Categories
Templates by Robert Breen
Talk to your Google Sheets using ChatGPT-5
This n8n workflow template creates an intelligent data analysis chatbot that can answer questions about data stored in Google Sheets using OpenAI's GPT-5 Mini model. The system automatically analyzes your spreadsheet data and provides insights through natural language conversations. What This Workflow Does Chat Interface: Provides a conversational interface for asking questions about your data Smart Data Analysis: Uses AI to understand column structures and data relationships Google Sheets Integration: Connects directly to your Google Sheets data Memory Buffer: Maintains conversation context for follow-up questions Automated Column Detection: Automatically identifies and describes your data columns 🚀 Try It Out! --- Set Up OpenAI Connection Get Your API Key Visit the OpenAI API Keys page. Go to OpenAI Billing. Add funds to your billing account. Copy your API key into your OpenAI credentials in n8n (or your chosen platform). --- Prepare Your Google Sheet Connect Your Data in Google Sheets Data must follow this format: Sample Marketing Data First row contains column names. Data should be in rows 2–100. Log in using OAuth, then select your workbook and sheet. --- Ask Questions of Your Data You can ask natural language questions to analyze your marketing data, such as: Total spend across all campaigns. Spend for Paid Search only. Month-over-month changes in ad spend. Top-performing campaigns by conversion rate. Cost per lead for each channel. --- 📬 Need Help or Want to Customize This? 📧 rbreen@ynteractive.com 🔗 LinkedIn 🔗 n8n Automation Experts
Get started with Google Sheets in n8n
A hands-on starter workflow that teaches beginners how to: Pull rows from a Google Sheet Append a new record that mimics a form submission Generate AI-powered text with GPT-4o based on a “Topic” column Write the AI output back into the correct row using an update operation Along the way you’ll learn the three essential Google Sheets operations in n8n (read → append → update), see how to pass sheet data into an OpenAI node, and document each step with sticky-note instructions—perfect for anyone taking their first steps in no-code automation. 0️⃣ Prerequisites Google Sheets Open Google Cloud Console → create / select a project. Enable Google Sheets API under APIs & Services. Create an OAuth Desktop credential and connect it in n8n. Share the spreadsheet with the Google account linked to the credential. OpenAI Create a secret key at <https://platform.openai.com/account/api-keys>. In n8n → Credentials → New → choose OpenAI API and paste the key. Sample sheet to copy (make your own copy and use its link) <https://docs.google.com/spreadsheets/d/15i9WIYpqc5lNd5T4VyM0RRptFPdi9doCbEEDn8QglN4/edit?usp=sharing> --- 1️⃣ Trigger Manual Trigger – lets you run on demand while learning. (Swap for a Schedule or Webhook once you automate.) --- 2️⃣ Read existing rows Node: Get Rows from Google Sheets Reads every row from Sheet1 of your copied file. --- 3️⃣ Generate a demo row Node: Generate 1 Row of Data (Set node) Pretends a form was submitted: Name, Email, Topic, Submitted = "Yes" --- 4️⃣ Append the new row Node: Append Data to Google Operation append → writes to the first empty line. --- 5️⃣ Create a description with GPT-4o OpenAI Chat Model – uses your OpenAI credential. Write description (AI Agent) – prompt = the Topic. Structured Output Parser – forces JSON like: { "description": "…" }. --- 6️⃣ Update that same row Node: Update Sheets data Operation update. Matches on column Email to update the correct line. Writes the new Description cell returned by GPT-4o. --- 7️⃣ Why this matters Demonstrates the three core Google Sheets operations: read → append → update. Shows how to enrich sheet data with an AI step and push the result right back. Sticky Notes provide inline docs so anyone opening the workflow understands the flow instantly. --- 👤 Need help? Robert Breen – Automation Consultant ✉️ robert.j.breen@gmail.com 🔗 <https://www.linkedin.com/in/robert-breen-29429625/>
Add Project Tasks to Google Sheets with GPT-4.1-mini Chat Assistant
Let your team create, track, and manage project tasks through natural conversation. This workflow uses an AI Project Manager Agent that chats with users, gathers the task details it needs, and automatically adds them to a Google Sheet. --- ✅ What this template does Lets you chat naturally with an AI to add new project tasks Automatically detects if the user wants to create or update an item (updates coming soon) Collects Task, Description, and Status fields — allows “don’t know” responses Appends new entries directly into your connected Google Sheets Provides real-time confirmation when the task is added > Trigger: n8n Chat Trigger > Integrations: OpenAI GPT-4.1-mini + Google Sheets (OAuth2) --- 🧠 How it works The Chat Trigger starts a chat with the user. The AI Project Manager Agent asks guiding questions to gather the task name, description, and status. When all fields are complete (all Info = Yes), the data is passed to the Google Sheets node. The task is automatically added to your project tracker sheet. The AI confirms completion in chat. --- ⚙️ Setup instructions Connect OpenAI Go to OpenAI Platform → copy your API key. In n8n, create New Credentials → OpenAI API and paste your key. Ensure your account has active billing under OpenAI Billing. Connect Google Sheets (OAuth2) In n8n → Credentials → New → Google Sheets (OAuth2) Sign in with your Google account and grant access. Select your spreadsheet and tab (e.g., “Tasks”) when prompted. Example sheet: https://docs.google.com/spreadsheets/d/1pbK-B-Q9p8fVjxJIsjEVrAfRgqEPCeYw8rZojZPAb84/edit Test your chat Click Execute Workflow, then start chatting: > “Add a task for reviewing the project report tomorrow.” The agent will ask questions if needed, then add the record to your sheet. --- 🧩 Customization ideas Add a Date Added or Assigned To column to the Google Sheet Integrate with Slack or Outlook to message assigned users Extend the agent to support task updates and deletes Replace Google Sheets with Airtable or Notion if preferred --- 🪄 Requirements n8n version ≥ 1.100 OpenAI API key Google Sheets account --- 📬 Contact Need help customizing this (e.g., adding deadlines, linking to Notion, or Slack notifications)? 📧 robert@ynteractive.com 🔗 Robert Breen 🌐 ynteractive.com
Talk to your Google Sheets using ChatGPT-5
This n8n workflow template creates an intelligent data analysis chatbot that can answer questions about data stored in Google Sheets using OpenAI's GPT-5 Mini model. The system automatically analyzes your spreadsheet data and provides insights through natural language conversations. What This Workflow Does Chat Interface: Provides a conversational interface for asking questions about your data Smart Data Analysis: Uses AI to understand column structures and data relationships Google Sheets Integration: Connects directly to your Google Sheets data Memory Buffer: Maintains conversation context for follow-up questions Automated Column Detection: Automatically identifies and describes your data columns 🚀 Try It Out! --- Set Up OpenAI Connection Get Your API Key Visit the OpenAI API Keys page. Go to OpenAI Billing. Add funds to your billing account. Copy your API key into your OpenAI credentials in n8n (or your chosen platform). --- Prepare Your Google Sheet Connect Your Data in Google Sheets Data must follow this format: Sample Marketing Data First row contains column names. Data should be in rows 2–100. Log in using OAuth, then select your workbook and sheet. --- Ask Questions of Your Data You can ask natural language questions to analyze your marketing data, such as: Total spend across all campaigns. Spend for Paid Search only. Month-over-month changes in ad spend. Top-performing campaigns by conversion rate. Cost per lead for each channel. --- 📬 Need Help or Want to Customize This? 📧 rbreen@ynteractive.com 🔗 LinkedIn 🔗 n8n Automation Experts
Beginner Outlook calendar summary with OpenAI
A step-by-step demo that shows how to pull your Outlook calendar events for the week and ask GPT-4o to write a short summary. Along the way you’ll practice basic data-transform nodes (Code, Filter, Aggregate) and see where to attach the required API credentials. --- 1️⃣ Manual Trigger — Run Workflow | Why | Lets you click “Execute” in the n8n editor so you can test each change. | | --- | --- | --- 2️⃣ Get Outlook Events — Get many events Node type: Microsoft Outlook → Event → Get All Fields selected: subject, start API setup (inside this node): Click Credentials ▸ Microsoft Outlook OAuth2 API If you haven’t connected before: Choose “Microsoft Outlook OAuth2 API” → “Create New”. Sign in and grant the Calendars.Read permission. Save the credential (e.g., “Microsoft Outlook account”). Output: A list of events with the raw ISO start time. > Teaching moment: Outlook returns a full dateTime string. We’ll normalize it next so it’s easy to filter. --- 3️⃣ Normalize Dates — Convert to Date Format js // Code node contents return $input.all().map(item => { const startDateTime = new Date(item.json.start.dateTime); const formattedDate = startDateTime.toISOString().split('T')[0]; // YYYY-MM-DD return { json: { ...item.json, startDateFormatted: formattedDate } }; }); 4️⃣ Filter the Events Down to This Week After we’ve normalised the start date-time into a simple YYYY-MM-DD string, we drop in a Filter node. Add one rule for every day you want to keep—for example 2025-08-07 or 2025-08-08. Rows that match any of those dates will continue through the workflow; everything else is quietly discarded. Why we’re doing this: we only want to summarise tomorrow’s and the following day’s meetings, not the entire calendar. --- 5️⃣ Roll All Subjects Into a Single Item Next comes an Aggregate node. Tell it to aggregate the subject field and choose the option “Only aggregated fields.” The result is one clean item whose subject property is now a tidy list of every meeting title. It’s far easier (and cheaper) to pass one prompt to GPT than dozens of small ones. --- 6️⃣ Turn That List Into Plain Text Insert a small Code node right after the aggregation: js return [{ json: { text: items .map(item => JSON.stringify(item.json)) .join('\n') } }]; Need a Hand? I’m always happy to chat automation, n8n, or Outlook API quirks. Robert Breen – Automation Consultant & n8n Instructor 📧 robert@ynteractive.com | LinkedIn
Loop over items — beginner example
This workflow introduces beginners to one of the most fundamental concepts in n8n: looping over items. Using a simple use case—generating LinkedIn captions for content ideas—it demonstrates how to split a dataset into individual items, process them with AI, and collect the output for review or export. --- ✅ Key Features 🧪 Create Dummy Data: Simulate a small dataset of content ideas. 🔁 Loop Over Items: Process each row independently using the SplitInBatches node. 🧠 AI Caption Creation: Automatically generate LinkedIn captions using OpenAI. 🧰 Tool Integration: Enhance AI output with creativity-injection tools. 🧾 Final Output Set: Collect the original idea and generated caption. --- 🧰 What You’ll Need ✅ An OpenAI API key ✅ The LangChain nodes enabled in your n8n instance ✅ Basic knowledge of how to trigger and run workflows in n8n --- 🔧 Step-by-Step Setup 1️⃣ Run Workflow Node: Manual Trigger (Run Workflow) Purpose: Manually start the workflow for testing or learning. --- 2️⃣ Create Random Data Node: Create Random Data (Code) What it does: Simulates incoming data with multiple content ideas. Code: js return [ { json: { row_number: 2, id: 1, Date: '2025-07-30', idea: 'n8n rises to the top', caption: '', complete: '' } }, { json: { row_number: 3, id: 2, Date: '2025-07-31', idea: 'n8n nodes', caption: '', complete: '' } }, { json: { row_number: 4, id: 3, Date: '2025-08-01', idea: 'n8n use cases for marketing', caption: '', complete: '' } } ]; --- 3️⃣ Loop Over Items Node: Loop Over Items (SplitInBatches) Purpose: Sends one record at a time to the next node. Why It Matters: Loops in n8n are created using this node when you want to iterate over multiple items. --- 4️⃣ Create Captions with AI Node: Create Captions (LangChain Agent) Prompt: text idea: {{ $json.idea }} System Message: text You are a helpful assistant creating captions for a LinkedIn post. Please create a LinkedIn caption for the idea. Model: GPT-4o Mini or GPT-3.5 Credentials Required: OpenAI Credential Go to: OpenAI API Keys Create a key and add it in n8n under credentials as “OpenAi account” --- 5️⃣ Inject Creativity (Optional) Node: Tool: Inject Creativity (LangChain Tool) Purpose: Demonstrates optional LangChain tools that can enhance or manipulate input/output. Why It’s Cool: A great way to show chaining tools to AI agents. --- 6️⃣ Output Table Node: Output Table (Set) Purpose: Combines original ideas and generated captions into final structure. Fields: idea: ={{ $('Create Random Data').item.json.idea }} output: ={{ $json.output }} --- 💡 Educational Value This workflow demonstrates: Creating dynamic inputs with the Code node Using SplitInBatches to simulate looping Sending dynamic prompts to an AI model Using Set to structure the output data Beginners will understand how item-level processing works in n8n and how powerful looping combined with AI can be. --- 📬 Need Help or Want to Customize This? Robert Breen Automation Consultant | AI Workflow Designer | n8n Expert 📧 robert@ynteractive.com 🌐 ynteractive.com 🔗 LinkedIn --- 🏷️ Tags n8n loops OpenAI LangChain workflow training beginner LinkedIn automation caption generator
Course recommendation system for surveys with data tables and GPT-4.1-Mini
Use the n8n Data Tables feature to store, retrieve, and analyze survey results — then let OpenAI automatically recommend the most relevant course for each respondent. --- 🧠 What this workflow does This workflow demonstrates how to use n8n’s built-in Data Tables to create an internal recommendation system powered by AI. It: Collects survey responses through a Form Trigger Saves responses to a Data Table called Survey Responses Fetches a list of available courses from another Data Table called Courses Passes both Data Tables into an OpenAI Chat Agent, which selects the most relevant course Returns a structured recommendation with: course: the course title reasoning: why it was selected > Trigger: Form submission (manual or public link) --- 👥 Who it’s for Perfect for educators, training managers, or anyone wanting to use n8n Data Tables as a lightweight internal database — ideal for AI-driven recommendations, onboarding workflows, or content personalization. --- ⚙️ How to set it up 1️⃣ Create your n8n Data Tables This workflow uses two Data Tables — both created directly inside n8n. 🧾 Table 1: Survey Responses Columns: Name Q1 — Where did you learn about n8n? Q2 — What is your experience with n8n? Q3 — What kind of automations do you need help with? To create: Add a Data Table node to your workflow. From the list, click “Create New Data Table.” Name it Survey Responses and add the columns above. --- 📚 Table 2: Courses Columns: Course Description To create: Add another Data Table node. Click “Create New Data Table.” Name it Courses and create the columns above. Copy course data from this Google Sheet: 👉 https://docs.google.com/spreadsheets/d/1Y0Q0CnqN0w47c5nCpbA1O3sn0mQaKXPhql2Bc1UeiFY/edit?usp=sharing This Courses Data Table is where you’ll store all available learning paths or programs for the AI to compare against survey inputs. --- 2️⃣ Connect OpenAI Go to OpenAI Platform Create an API key In n8n, open Credentials → OpenAI API and paste your key The workflow uses the gpt-4.1-mini model via the LangChain integration --- 🧩 Key Nodes Used | Node | Purpose | n8n Feature | |------|----------|-------------| | Form Trigger | Collect survey responses | Forms | | Data Table (Upsert) | Stores results in Survey Responses | Data Tables | | Data Table (Get) | Retrieves Courses | Data Tables | | Aggregate + Set | Combines and formats table data | Core nodes | | OpenAI Chat Model (LangChain Agent) | Analyzes responses and courses | AI | | Structured Output Parser | Returns structured JSON output | LangChain | --- 💡 Tips for customization Add more Data Table columns (e.g., email, department, experience years) Use another Data Table to store AI recommendations or performance results Modify the Agent system message to customize how AI chooses courses Send recommendations via Email, Slack, or Google Sheets --- 🧾 Why Data Tables? This workflow shows how n8n’s Data Tables can act as your internal database: Create and manage tables directly inside n8n No external integrations needed Store structured data for AI prompts Share tables across multiple workflows All user data and course content are stored securely and natively in n8n Cloud or Self-Hosted environments. --- 📬 Contact Need help customizing this (e.g., expanding Data Tables, connecting multiple surveys, or automating follow-ups)? 📧 robert@ynteractive.com 🔗 Robert Breen 🌐 ynteractive.com
Generate AI images in bulk with Freepik, Google Sheets & Drive
This n8n workflow automates bulk AI image generation using Freepik's Text-to-Image API. It reads prompts from a Google Sheet, generates multiple variations of each image using Freepik's AI, and automatically uploads the results to Google Drive with organized file names. This is perfect for content creators, marketers, or designers who need to generate multiple AI images in bulk and store them systematically. Key Features: Bulk image generation from Google Sheets prompts Multiple variations per prompt (configurable duplicates) Automatic file naming and organization Direct upload to Google Drive Batch processing for efficient API usage Freepik AI-powered image generation Step-by-Step Implementation Guide Prerequisites Before setting up this workflow, you'll need: n8n instance (cloud or self-hosted) Freepik API account with Text-to-Image access Google account with access to Sheets and Drive Google Sheet with your prompts Step 1: Set Up Freepik API Credentials Go to Freepik API Developer Portal Create an account or sign in Navigate to your API dashboard Generate an API key for Text-to-Image service Copy the API key and save it securely In n8n, go to Credentials → Add Credential → HTTP Header Auth Configure as follows: Name: "Header Auth account" Header Name: x-freepik-api-key Header Value: Your Freepik API key Step 2: Set Up Google Credentials Google Sheets Access: Go to Google Cloud Console Create a new project or select existing one Enable Google Sheets API Create OAuth2 credentials In n8n, go to Credentials → Add Credential → Google Sheets OAuth2 API Enter your OAuth2 credentials and authorize with spreadsheets.readonly scope Google Drive Access: In Google Cloud Console, enable Google Drive API In n8n, go to Credentials → Add Credential → Google Drive OAuth2 API Enter your OAuth2 credentials and authorize Step 3: Create Your Google Sheet Create a new Google Sheet: sheets.google.com Set up your sheet with these columns: Column A: Prompt (your image generation prompts) Column B: Name (identifier for file naming) Example data: | Prompt | Name | |-------------------------------------------|-------------| | A serene mountain landscape at sunrise | mountain-01 | | Modern office space with natural lighting | office-02 | | Cozy coffee shop interior | cafe-03 | Copy the Sheet ID from the URL (the long string between /d/ and /edit) Step 4: Set Up Google Drive Folder Create a folder in Google Drive for your generated images Copy the Folder ID from the URL when viewing the folder Note: The workflow is configured to use a folder called "n8n workflows" Step 5: Import and Configure the Workflow Copy the provided workflow JSON In n8n, click Import from File or Import from Clipboard Paste the workflow JSON Configure each node as detailed below: Node Configuration Details: Start Workflow (Manual Trigger) No configuration needed Used to manually start the workflow Get Prompt from Google Sheet (Google Sheets) Document ID: Your Google Sheet ID (from Step 3) Sheet Name: Sheet1 (or your sheet name) Operation: Read Credentials: Select your "Google Sheets account" Double Output (Code Node) Purpose: Creates multiple variations of each prompt JavaScript Code: javascript const original = items[0].json; return [ { json: { ...original, run: 1 } }, { json: { ...original, run: 2 } }, ]; Customization: Add more runs for additional variations Loop (Split in Batches) Processes items in batches to manage API rate limits Options: Keep default settings Reset: false Create Image (HTTP Request) Method: POST URL: https://api.freepik.com/v1/ai/text-to-image Authentication: Generic → HTTP Header Auth Credentials: Select your "Header Auth account" Send Body: true Body Parameters: Name: prompt Value: ={{ $json.Prompt }} Split Responses (Split Out) Field to Split Out: data Purpose: Separates multiple images from API response Convert to File (Convert to File) Operation: toBinary Source Property: base64 Purpose: Converts base64 image data to file format Upload Image to Google Drive (Google Drive) Operation: Upload Name: =Image - {{ $('Get Prompt from Google Sheet').item.json.Name }} - {{ $('Double Output').item.json.run }} Drive ID: My Drive Folder ID: Your Google Drive folder ID (from Step 4) Credentials: Select your "Google Drive account" Step 6: Customize for Your Use Case Modify Duplicate Count: Edit the "Double Output" code to create more variations Update File Naming: Change the naming pattern in the Google Drive upload node Adjust Batch Size: Modify the Loop node settings for your API limits Add Image Parameters: Enhance the HTTP request with additional Freepik parameters (size, style, etc.) Step 7: Test the Workflow Ensure your Google Sheet has test data Click Execute Workflow on the manual trigger Monitor the execution flow Check that images are generated and uploaded to Google Drive Verify file names match your expected pattern Step 8: Production Deployment Set up error handling for API failures Configure appropriate batch sizes based on your Freepik API limits Add logging for successful uploads Consider webhook triggers for automated execution Set up monitoring for failed executions Freepik API Parameters Basic Parameters: prompt: Your text description (required) negative_prompt: What to avoid in the image guidance_scale: How closely to follow the prompt (1-20) numinferencesteps: Quality vs speed trade-off (20-100) seed: For reproducible results Example Enhanced Body: json { "prompt": "{{ $json.Prompt }}", "negative_prompt": "blurry, low quality", "guidance_scale": 7.5, "numinferencesteps": 50, "num_images": 1 } Workflow Flow Summary Start → Manual trigger initiates the workflow Read Sheet → Gets prompts and names from Google Sheets Duplicate → Creates multiple runs for variations Loop → Processes items in batches Generate → Freepik API creates images from prompts Split → Separates multiple images from response Convert → Transforms base64 to binary file format Upload → Saves images to Google Drive with organized names Complete → Returns to loop for next batch Contact Information Robert A Ynteractive For support, customization, or questions about this workflow: 📧 Email: rbreen@ynteractive.com 🌐 Website: https://ynteractive.com/ 💼 LinkedIn: https://www.linkedin.com/in/robert-breen-29429625/ Need help implementing this workflow or want custom automation solutions? Get in touch for professional n8n consulting and workflow development services.
Email new leads from Google Sheets via Outlook on a schedule
Send a templated outreach email to new leads in a Google Sheet on a daily schedule, then mark each lead as contacted so they won’t be emailed twice. Built with: Schedule Trigger → Google Sheets → Filter → Outlook Send Email → Google Sheets (append/update). --- Who’s it for Teams that collect leads in Sheets and want automatic, once-per-lead outreach Solo founders/consultants running simple top-of-funnel follow-ups Anyone prototyping CRM-lite flows in n8n --- How it works / What it does Schedule Trigger runs daily (e.g., 09:00). Get rows (Google Sheets) pulls leads from your sheet. Filter keeps only rows where Contacted is empty. Outlook – Send a message emails each remaining lead (to = {{$json.Email}}). Google Sheets (appendOrUpdate) writes back Contacted = Yes (match on Email) to prevent re-sending. --- How to set up 1) Google Sheets (OAuth2) In n8n → Credentials → New → Google Sheets (OAuth2), sign in and grant access. In Get rows: select your Lead Source sheet (e.g., “New Leads”). In Append/Update: select the sheet you want to mark as contacted (can be the same sheet or a CRM sheet). Make sure your sheet has at least: Email, Contacted (blank for new). 2) Outlook (Microsoft Graph) OAuth2 n8n Cloud (quick connect): In Credentials → New → Microsoft Outlook OAuth2, choose Connect, sign in with your Microsoft account, and accept permissions. Self-hosted (Azure App Registration): 1) Azure Portal → App registrations → New registration. 2) Add redirect URL: https://YOURN8NURL/rest/oauth2-credential/callback. 3) API permissions (Delegated): offline_access, Mail.Send, User.Read. Grant admin consent if required. 4) Create a Client secret; copy Application (client) ID and Directory (tenant) ID. 5) In n8n, create Microsoft Outlook OAuth2 credential with those values and scopes: offline_access Mail.Send openid email profile. In the Send a message node, select that credential and keep To mapped to {{$json.Email}}. Customize Subject and Body to your brand (default provided). --- Requirements A Google Sheet of leads with an Email column (and an optional Contacted column). A Microsoft account with permission to send mail via Microsoft Graph (Outlook). --- How to customize the workflow Email content: Edit subject/body (add variables like {{$json.FirstName}}). Send window: Change Schedule Trigger time/interval. Idempotency: Use the same sheet for read+write (match on Email) or separate source/CRM sheets. Logging: Add a Sheet or Notion append step after send for an audit trail. --- Security & best practices No hardcoded secrets: Always use OAuth2 credentials (Sheets & Outlook). Sanitize PII: If publishing, remove real spreadsheet IDs/URLs and personal emails/phone numbers. Sticky notes are mandatory: Add a yellow sticky note in the workflow with this description and a short setup checklist. Use neutral sticky notes for per-node tips. --- Troubleshooting No emails sent: Ensure Contacted is blank for new rows and the Filter checks “is empty.” Auth errors (Outlook): Reconnect credential; confirm Graph scopes and tenant consent. Sheets errors: Re-select spreadsheet/tab; verify headers (Email, Contacted). Duplicates: Confirm Append/Update uses matching column = Email. --- Tags & category Category: Sales & CRM Tags: outreach, follow-up, google-sheets, outlook, schedule, dedupe, cold-email --- Changelog v1.0.0 — Initial release: scheduled outreach, Outlook email, de-dupe via Contacted = Yes. --- Contact Need help customizing (personalization, rate-limits, CRM sync, bounce checks)? 📧 rbreen@ynteractive.com 🔗 Robert Breen — https://www.linkedin.com/in/robert-breen-29429625/ 🌐 ynteractive.com — https://ynteractive.com
Bulk AI video generation with Freepik Minimax Hailuo & Google Suite integration
This n8n workflow automates bulk AI video generation using Freepik's Image-to-Video API powered by Minimax Hailuo-02-768p. It reads video prompts from a Google Sheet, generates multiple variations of each video using Freepik's AI, handles asynchronous video processing with intelligent polling, and automatically uploads completed videos to Google Drive with organized file names. This is perfect for content creators, marketers, or video producers who need to generate multiple AI videos in bulk and store them systematically. Key Features: Bulk video generation from Google Sheets prompts Multiple variations per prompt (configurable duplicates) Asynchronous processing with smart status polling Automatic retry mechanism for processing delays Direct upload to Google Drive with organized naming Freepik Minimax Hailuo-02 AI-powered video generation (768p quality) Intelligent wait/retry system for video rendering Step-by-Step Implementation Guide Prerequisites Before setting up this workflow, you'll need: n8n instance (cloud or self-hosted) Freepik API account with Video Generation access Google account with access to Sheets and Drive Google Sheet with your video prompts Step 1: Set Up Freepik API Credentials Go to Freepik API Developer Portal Create an account or sign in Navigate to your API dashboard Generate an API key with Video Generation permissions Copy the API key and save it securely In n8n, go to Credentials → Add Credential → HTTP Header Auth Configure as follows: Name: "Header Auth account" Header Name: x-freepik-api-key Header Value: Your Freepik API key Step 2: Set Up Google Credentials Google Sheets Access: Go to Google Cloud Console Create a new project or select existing one Enable Google Sheets API Create OAuth2 credentials In n8n, go to Credentials → Add Credential → Google Sheets OAuth2 API Enter your OAuth2 credentials and authorize with spreadsheets.readonly scope Google Drive Access: In Google Cloud Console, enable Google Drive API In n8n, go to Credentials → Add Credential → Google Drive OAuth2 API Enter your OAuth2 credentials and authorize Step 3: Create Your Google Sheet Create a new Google Sheet: sheets.google.com Set up your sheet with these columns: Column A: Prompt (your video generation prompts) Column B: Name (identifier for file naming) Example data: | Prompt | Name | |-------------------------------------------------|---------------| | A butterfly landing on a flower in slow motion | butterfly-01 | | Ocean waves crashing on rocky coastline | ocean-waves | | Time-lapse of clouds moving across blue sky | clouds-timelapse | Copy the Sheet ID from the URL (the long string between /d/ and /edit) Step 4: Set Up Google Drive Folder Create a folder in Google Drive for your generated videos Copy the Folder ID from the URL when viewing the folder Note: The workflow is configured to use a folder called "n8n workflows" Step 5: Import and Configure the Workflow Copy the provided workflow JSON In n8n, click Import from File or Import from Clipboard Paste the workflow JSON Configure each node as detailed below: Node Configuration Details: Get prompt from google sheet (Google Sheets) Document ID: Your Google Sheet ID (from Step 3) Sheet Name: Sheet1 (or your sheet name) Operation: Read Credentials: Select your "Google Sheets account" Duplicate Rows2 (Code Node) Purpose: Creates multiple variations of each prompt JavaScript Code: javascript const original = items[0].json; return [ { json: { ...original, run: 1 } }, { json: { ...original, run: 2 } }, ]; Customization: Add more runs for additional variations Loop Over Items (Split in Batches) Processes items in batches to manage API rate limits Options: Keep default settings Reset: false Create Video (HTTP Request) Method: POST URL: https://api.freepik.com/v1/ai/image-to-video/minimax-hailuo-02-768p Authentication: Generic → HTTP Header Auth Credentials: Select your "Header Auth account" Send Body: true Body Parameters: Name: prompt Value: ={{ $json.Prompt }} Get Video URL (HTTP Request) Method: GET URL: https://api.freepik.com/v1/ai/image-to-video/minimax-hailuo-02-768p/{{ $json.data.task_id }} Authentication: Generic → HTTP Header Auth Credentials: Select your "Header Auth account" Timeout: 120000 (2 minutes) Purpose: Polls the API for video completion status Switch (Switch Node) Purpose: Routes workflow based on video generation status Conditions: Completed: {{ $json.data.status }} equals COMPLETED Failed: {{ $json.data.status }} equals FAILED Created: {{ $json.data.status }} equals CREATED In Progress: {{ $json.data.status }} equals IN_PROGRESS Wait (Wait Node) Amount: 30 seconds Purpose: Waits before re-checking video status Webhook ID: Auto-generated for resume functionality Download Video as Base64 (HTTP Request) Method: GET URL: ={{ $json.data.generated[0] }} Purpose: Downloads completed video file Upload to Google Drive1 (Google Drive) Operation: Upload Name: =video - {{ $('Get prompt from google sheet').item.json.Name }} - {{ $('Duplicate Rows2').item.json.run }} Drive ID: My Drive Folder ID: Your Google Drive folder ID (from Step 4) Credentials: Select your "Google Drive account" Step 6: Customize for Your Use Case Modify Duplicate Count: Edit the "Duplicate Rows2" code to create more variations Update File Naming: Change the naming pattern in the Google Drive upload node Adjust Wait Time: Modify the Wait node duration based on typical processing times Add Video Parameters: Enhance the Create Video request with additional Freepik parameters Step 7: Test the Workflow Ensure your Google Sheet has test data Click Execute Workflow on the manual trigger (if present) Monitor the execution flow - note that video generation takes time Watch the Switch node handle different status responses Verify videos are uploaded to Google Drive when completed Step 8: Production Deployment Set up error handling for API failures and timeouts Configure appropriate batch sizes based on your Freepik API limits Add logging for successful uploads and failed generations Consider webhook triggers for automated execution Set up monitoring for stuck or failed video generations Freepik Video API Details Video Generation Process: Submit Request: Send prompt to generate video Get Task ID: Receive task_id for tracking Poll Status: Check generation status periodically Download: Retrieve completed video URL Status Types: CREATED: Video generation task created IN_PROGRESS: Video is being generated COMPLETED: Video ready for download FAILED: Generation failed Model Specifications: Model: minimax-hailuo-02-768p Resolution: 768p Duration: Typically 5-10 seconds Format: MP4 Example Enhanced Parameters: json { "prompt": "{{ $json.Prompt }}", "duration": 5, "aspect_ratio": "16:9", "fps": 24 } Workflow Flow Summary Start → Read prompts from Google Sheets Duplicate → Create multiple runs for variations Loop → Process items in batches Generate → Submit video generation request to Freepik Poll → Check video generation status Switch → Route based on status: Completed → Download video Processing/Created → Wait and retry Failed → Handle error Download → Retrieve completed video file Upload → Save to Google Drive with organized naming Continue → Process next batch Troubleshooting Tips Common Issues: Long Processing Times: Video generation can take 2-5 minutes per video Timeout Errors: Increase timeout in "Get Video URL" node Rate Limits: Reduce batch size and add longer waits between requests Failed Generations: Check prompt complexity and API limits Upload Failures: Verify Google Drive folder permissions Error Handling: Add Try/Catch nodes around API calls Implement exponential backoff for retries Log failed generations to Google Sheets Set up email notifications for critical failures Performance Optimization: Adjust wait times based on typical generation duration Use smaller batch sizes for more reliable processing Monitor API usage and costs in Freepik dashboard Cost Considerations Freepik API: Video generation typically costs more than image generation Check your plan's video generation limits Monitor usage through Freepik dashboard Consider upgrading for higher volume needs Processing Time: Each video can take 2-5 minutes to generate Plan workflow execution time accordingly Consider running during off-peak hours for large batches --- Contact Information Robert A Ynteractive For support, customization, or questions about this workflow: 📧 Email: rbreen@ynteractive.com 🌐 Website: https://ynteractive.com/ 💼 LinkedIn: https://www.linkedin.com/in/robert-breen-29429625/ Need help implementing this workflow or want custom automation solutions? Get in touch for professional n8n consulting and workflow development services.
Beginner manager agent with sub-agent tools
This guide walks you through building an intelligent AI Agent in n8n that routes tasks to the appropriate sub-agent using the new @n8n/n8n-nodes-langchain agent framework. You’ll create a Manager Agent that evaluates user input and delegates it to either an Email Agent or a Data Agent—each with its own role, memory, and OpenAI model. This is perfect for use cases where you want a single entry point but intelligent branching behind the scenes. --- 🔧 Step 1: Set Up the Manager Agent Start by dragging in an Agent node and name it something like ManagerAgent. This agent will act as the “brain” of your system, analyzing the user's input and determining whether it should be handled by the email-writing sub-agent or the data-summary sub-agent. Open the node’s settings and paste the following into the System Message: You are an AI Manager that delegates tasks to specialized agents. Your job is to analyze the user's message and decide whether it requires: An EmailAgent for writing outreach, follow-up, or templated emails, or A DataAgent for tasks involving data summaries, metrics, or analysis. Send the instructions to the sub agents. This instruction gives the Manager Agent clarity on what roles exist and what types of tasks belong to each one. --- 🧠 Step 2: Add Memory to the Manager Agent Drag in a Memory (BufferWindow) node and label it Manager Memory. Connect it to the ai_memory input of the Manager Agent. This ensures the agent can remember recent inputs and outputs from the user and agents during the conversation. No extra configuration is needed in this memory node—just connect it to the agent. --- 🔌 Step 3: Connect a Language Model to the Manager Agent Next, add a Language Model node and choose OpenAI Chat Model. Select a model like gpt-4o-mini or gpt-4, depending on what you have access to. Under Credentials, connect your OpenAI API key. If you haven’t created this credential yet: Click "OpenAI API" under Credentials. Choose "Create New". Paste your OpenAI API key (found at https://platform.openai.com/account/api-keys). Save it and return to the workflow. Once the model is set, connect it to the ai_languageModel input of the Manager Agent. --- ✉️ Step 4: Create the Email Agent Tool Now you’ll create a specialized sub-agent that only writes emails. Add an Agent Tool node and call it EmailAgent. In the tool’s settings, describe its job clearly. For example: Writes professional, friendly, or action-oriented emails based on instructions. Then scroll down to the System Message section and enter the following: You are a professional Email Writing Assistant. You write polished, effective emails for tasks such as outreach, follow-ups, and client communication. Follow the instruction provided exactly and return only the email content. Use a warm, business-appropriate tone. For the text input field, use the expression: {{ $fromAI('PromptUserMessage', , 'string') }} This allows the Email Agent to receive exactly what the Manager Agent wants it to handle. Add another Memory node and link it to this tool to help it maintain short-term context. Then add a second Language Model node, configured just like the first one (you can even clone it), and connect it to the EmailAgent. Finally, connect this entire EmailAgent setup back to the ManagerAgent by attaching it to its ai_tool input. --- 📊 Step 5: Create the Data Agent Tool Repeat the same steps, but this time for data summaries and analysis. Add another Agent Tool node and name it DataAgent. In the Tool Description, write something like: Responds to instructions requiring metrics, summaries, or data analysis explanations. For its input text field, you can use: {{json.query}} If desired, provide a system message that gives the agent more detailed instruction on how to behave: You are a helpful Data Analyst. Summarize trends, explain metrics, and break down data clearly based on user instructions. As with the EmailAgent, you’ll also need: A dedicated Memory node A dedicated Language Model node A connection to the ai_tool input of the Manager Agent Now the Manager Agent has two tools it can delegate to: one for communication and one for insights. --- 🧪 Step 6: Test Your AI Agent System Deploy the workflow and start testing by sending prompts like: > “Write a cold outreach email to a software company.” The ManagerAgent should route that to the EmailAgent. Then try: > “Summarize how our lead volume changed last month.” The DataAgent should receive that task. If routing isn’t working as expected, double-check your system messages and input bindings in each agent tool. --- ✅ You’re Done! You now have a modular, multi-agent AI system powered by n8n. The Manager Agent delegates intelligently, each sub-agent is optimized for its role, and all of them benefit from context memory. For more advanced setups, you can chain tools, add additional memory types, or use retrieval (RAG) tools for external document support. ---
Automate Power BI dataset refreshes with history monitoring
This workflow contains community nodes that are only compatible with the self-hosted version of n8n. This n8n workflow provides automated Power BI dataset refresh capabilities with built-in refresh history monitoring. It triggers a dataset refresh in Power BI and simultaneously checks the refresh history to track data update status. This is perfect for data analysts, business intelligence teams, or anyone who needs to automate Power BI dataset refreshes and monitor their success rates without manual intervention. Key Features: Automated Power BI dataset refresh triggering Simultaneous refresh history monitoring Manual trigger for on-demand execution Real-time status tracking Integration with Power BI REST API Support for workspace and personal datasets Step-by-Step Implementation Guide Prerequisites Before setting up this workflow, you'll need: n8n instance (cloud or self-hosted) Power BI account (Pro or Premium) Microsoft Azure App Registration for API access Power BI dataset that you want to refresh Step 1: Set Up Azure App Registration Go to Azure Portal Navigate to Azure Active Directory → App registrations Click New registration Configure your app: Name: n8n-powerbi-integration Supported account types: Accounts in this organizational directory only Redirect URI: https://your-n8n-instance.com/rest/oauth2-credential/callback Click Register Note down the Application (client) ID and Directory (tenant) ID Step 2: Configure App Permissions In your app registration, go to API permissions Click Add a permission → Power BI Service Select Delegated permissions and add: Dataset.ReadWrite.All Dataset.Read.All Workspace.Read.All Click Grant admin consent for your organization Step 3: Create Client Secret In your app registration, go to Certificates & secrets Click New client secret Add description: n8n-powerbi-secret Set expiration (recommended: 24 months) Click Add and copy the secret value immediately Step 4: Configure Power BI API Credentials in n8n In n8n, go to Credentials → Add Credential → Power BI OAuth2 API Configure as follows: Client ID: Your Application (client) ID from Step 1 Client Secret: Your client secret from Step 3 Scope: https://analysis.windows.net/powerbi/api/.default Save and test the connection Step 6: Import and Configure the Workflow Copy the provided workflow JSON In n8n, click Import from File or Import from Clipboard Paste the workflow JSON Configure each node as detailed below: Node Configuration Details: When clicking 'Execute workflow' (Manual Trigger) Type: Manual Trigger Purpose: Allows manual execution of the workflow No configuration needed Refresh Datasource (Power BI) Resource: dataset Operation: refresh Group ID: me (for personal workspace) or your workspace ID Dataset ID: Your Power BI dataset ID (from Step 5) Credentials: Select your "Power BI account" Check Refresh History (Power BI) Resource: dataset Operation: getRefreshHistory Group ID: me (for personal workspace) or your workspace ID Dataset ID: Your Power BI dataset ID (same as above) Top: 10 (number of recent refresh records to retrieve) Credentials: Select your "Power BI account" Workflow Flow Summary Manual Trigger → User initiates workflow execution Parallel Execution: Refresh Dataset → Triggers Power BI dataset refresh Get History → Retrieves recent refresh history Results → Both operations complete simultaneously providing: Confirmation of refresh initiation Historical context of previous refreshes Contact Information Robert A Ynteractive For support, customization, or questions about this workflow: 📧 Email: rbreen@ynteractive.com 🌐 Website: https://ynteractive.com/ 💼 LinkedIn: https://www.linkedin.com/in/robert-breen-29429625/ Need help implementing this workflow or want custom automation solutions? Get in touch for professional n8n consulting and workflow development services.