by WeblineIndia
This workflow automatically fetches newly uploaded files from a specific folder in Google Drive, shares them via email with specified recipients, and logs the file details (name, ID, created time, modified time) into Airtable for easy tracking. It streamlines the process of file sharing and management while keeping track of important metadata in a central place. Step-by-Step Instructions Google Drive Node (Fetch New File) Action: This node fetches newly uploaded files from the specific folder you’ve mentioned in your Google Drive. Configuration: Set the folder ID in the Google Drive node where the files are uploaded. Use the “New File in Folder” trigger to automatically detect new files added to the folder. Send Email Node (Share File via Email) Action: After detecting the new file, this node shares the file via email with the recipient you specify. Configuration: Set the recipient's email address. Include the file URL from the Google Drive node in the email body, allowing easy access to the file. Add the file name as part of the email subject or body to notify the recipient about the new file. Airtable Node (Store File Metadata) Action: This node stores the file’s metadata, such as name, ID, creation time, modification time, and the email address to which it was sent, in your Airtable database. Configuration: Set up Airtable with a table. Map the output from the Google Drive node to store the file metadata, and use the email address from the email node for tracking. About WeblineIndia WeblineIndia specializes in delivering innovative and custom AI solutions to simplify and automate business processes. If you need any help, please reach out to us.
by Jonathan
This workflow automatically posts a message in Slack when a new invoice is uploaded in Stripe, and it updates the fields in the HubSpot CRM. Prerequisites A Slack account and credentials A HubSpot account and credentials A Stripe account and credentials Nodes Stripe Trigger node triggers the workflow when a new invoice is uploaded. IF nodes filter the invoices that don't have a PO number and if there is no deal for the PO. HubSpot nodes retrieve deals with the specific PO number and update the deal status to 'paid'. Slack nodes post messages about the deals in a Slack channel.
by David Olusola
Overview A comprehensive educational workflow that demonstrates practical JavaScript usage in n8n's Code node through real-world business scenarios. Perfect for learning data manipulation, transformation, and automation patterns that you can immediately apply to client projects. What This Template Teaches: Data Filtering & Transformation - Filter employees by age, calculate bonuses, format contact information Statistical Analysis - Generate team statistics, averages, role distributions, and KPIs Multi-Format Export - Create CSV files, email lists, and API-ready payloads from raw data n8n Best Practices - Proper JSON handling, return formats, and data flow patterns How It Works: Manual Trigger starts the workflow with sample employee data Set Sample Data provides realistic business data (employees with roles, salaries, ages) Three Code Node Examples process the same data differently: Filter & Transform: Creates adult employee list with calculated bonuses Calculate Stats: Generates comprehensive team analytics and reports Format for Export: Prepares data for external systems (APIs, emails, CSV) Key Learning Points: Access input data using items[0].json.propertyName Return proper n8n format with [{ json: data }] structure Use JSON.parse() for string-to-object conversion Apply JavaScript array methods (filter, map, reduce) for data processing Handle multiple output scenarios and data aggregation Perfect For: n8n beginners learning Code node fundamentals Developers transitioning to n8n automation Client demos showing data processing capabilities Team training and onboarding sessions Foundation for building custom business automation workflows Business Use Cases: Transform this template for lead qualification, customer segmentation, report generation, data enrichment, and API integrations. Each Code node pattern can be adapted for different industries and automation needs.
by kreonovo
What this does This automation will create tables in your Airtable base and send Webflow form submissions as records in those tables. It keeps track of your Webflow forms with a Form Index table to ensure that form content does not get sent to the wrong table if you have Webflow forms with identical names. This is useful for Enhancing your Webflow form submission management. By sending structured data to your Airtable base you can do more with your Webflow forms. Usage guide Full written and video guide This automation is made to be as low effort as possible to start enhancing your Webflow forms. Simply create credentials for Webflow and a Personal Access Token for your Airtable base and connect them to the relevant nodes. The guide demonstrates a realworld example using a Webflow template and breaksdown the flow and logic for all the nodes.
by Flavien
Audio Generator – Documentation 🎯 Purpose: Generate audio files from text scripts stored in Google Drive. 🔁 Flow: Receive repo IDs. Fetch text scripts. Generate .wav files using local Bark model. Upload back to Drive. 📦 Dependencies: Python script: /scripts/generate_voice.py Bark (voice generation system) n8n instance with access to local shell Google Drive OAuth2 credentials ✏️ Notes: Script filenames must end with .txt Only works with plain text No external API used = 100% free 📦 /scripts/generate_voice.py: import sys import torch import numpy import re from bark import SAMPLE_RATE, generate_audio, preload_models from scipy.io.wavfile import write as write_wav Patch to allow numpy._core.multiarray.scalar during loading torch.serialization.add_safe_globals([numpy._core.multiarray.scalar]) Monkey patch torch.load to force weights_only=False _original_torch_load = torch.load def patched_torch_load(f, args, *kwargs): if 'weights_only' not in kwargs: kwargs['weights_only'] = False return _original_torch_load(f, args, *kwargs) torch.load = patched_torch_load Preload Bark models preload_models() def split_text(text, max_len=300): Split on punctuation to avoid mid-sentence cuts sentences = re.split(r'(?<=[.?!])\s+', text) chunks = [] current = "" for sentence in sentences: if len(current) + len(sentence) < max_len: current += sentence + " " else: chunks.append(current.strip()) current = sentence + " " if current: chunks.append(current.strip()) return chunks Input text file and output path input_text_path = sys.argv[1] output_wav_path = sys.argv[2] with open(input_text_path, 'r', encoding='utf-8') as f: full_text = f.read() voice_preset = "v2/en_speaker_7" chunks = split_text(full_text) Generate and concatenate audio chunks audio_arrays = [] for chunk in chunks: print(f"Generating audio for chunk: {chunk[:50]}...") audio = generate_audio(chunk, history_prompt=voice_preset) audio_arrays.append(audio) Merge all audio chunks final_audio = numpy.concatenate(audio_arrays) Write final .wav file write_wav(output_wav_path, SAMPLE_RATE, final_audio) print(f"Full audio generated at: {output_wav_path}") `
by David Olusola
How It Works – Data Deduplication in n8n This tutorial demonstrates how to remove duplicate records from a dataset using JavaScript logic inside n8n's Code nodes. It simulates real-world data cleaning by generating sample user data with intentional duplicates (based on email addresses) and walks you through the process of deduplication step-by-step. The process includes: Creating Sample Data with duplicates. Filtering Out Duplicates using filter() and findIndex() based on email. Displaying Cleaned Results with simple statistics for before-and-after comparison. This is ideal for scenarios like CRM imports, ETL processes, and general data hygiene. ⚙️ Set-Up Steps 🔹 Step 1: Manual Trigger Node: When clicking 'Test workflow' Purpose: Initiates the workflow manually for testing. 🔹 Step 2: Generate Sample Data Node: Create Sample Data (Code node) What it does: Creates 6 users, including 2 intentional duplicates (by email). Outputs data as usersJson with metadata (totalCount, message). Mimics real-world messy datasets. 🔹 Step 3: Deduplicate the Data Node: Deduplicate Users (Code node) What it does: Parses usersJson. Uses .filter() + .findIndex() to keep only the first instance of each email. Logs total, unique, and removed counts. Outputs clean user list as separate items. 🔹 Step 4: Display Results Node: Display Results (Code node) What it does: Outputs structured summary: Unique users Status Timestamp Prepares results for review or downstream use. 📈 Sample Output Original count: 6 users Deduplicated count: 4 users Duplicates removed: 2 users 🎯 Learning Objectives You'll learn how to: Use .filter() and .findIndex() in n8n Code nodes Clean JSON data within workflows Create simple, effective deduplication pipelines Output structured summaries for reporting or integration 🧠Best Practices Validate input format (e.g., JSON schema) Handle null or missing fields gracefully Use logging for visibility Add error handling for production use Use pagination/chunking for large datasets
by bangank36
This workflow automates the Mark as Fulfilled action in Squarespace for each order, ensuring a seamless fulfillment process without manual intervention. How It Works This workflow retrieves all pending Squarespace orders and processes their fulfillment automatically. The workflow follows these steps: 1️⃣ Get all pending orders using the HTTP Request node (Since Squarespace does not have a n8n node) 2️⃣ Create a fulfillment request using Fulfill Order node The Filter Orders node can be used to filter valid pending order to process. Step-by-step The workflow can be run as requested or on schedule You can adjust these parameters within the Global and filter nodes: Global node for API Setting api-version** (string, required) – The current API version (see Squarespace Orders API documentation). modifiedAfter**={a-datetime} (string, conditional) – Fetch orders modified after a specific date (ISO 8601 format). modifiedBefore**={b-datetime} (string, conditional) – Fetch orders modified before a specific date (ISO 8601 format). cursor**={c} (string, conditional) – Used for pagination, cannot be combined with other filters. fulfillmentStatus**={status} (optional, enum) – Filter by fulfillment status: PENDING, FULFILLED, or CANCELED. maxPage** – Set -1 to enables infinite pagination to fetch all available orders. Filter Orders node Order Filtering – Ensures only valid orders are fulfilled, particularly useful if: You sell digital downloads or gift cards exclusively. You use third-party fulfillment services for all products. Requirements Credentials To use this workflow, you need: Squarespace API Key – Retrieve from your Squarespace settings. Who Is This For? Squarespace store owners looking to automate their fulfillment process. Merchants selling digital or personalized products who need instant fulfillment. Explore More Templates Get all orders in Squarespace to Google Sheets Convert Squarespace Profiles to Shopify Customers in Google Sheets Fetch Squarespace Blog & Event Collections to Google Sheets 👉 Check out my other n8n templates
by n8n Team
This n8n workflow, which runs every Monday at 5:00 AM, initiates a comprehensive process to monitor and analyze network security by scrutinizing IP addresses and their associated ports. It begins by fetching a list of watched IP addresses and expected ports through an HTTP request. Each IP address is then processed in a sequential loop. For every IP, the workflow sends a GET request to Shodan, a renowned search engine for internet-connected devices, to gather detailed information about the IP. It then extracts the data field from Shodan's response, converting it into an array. This array contains information on all ports Shodan has data for regarding the IP. A filter node compares the ports returned from Shodan with the expected list obtained initially. If a port doesn't match the expected list, it is retained for further processing; otherwise, it's filtered out. For each such unexpected port, the workflow assembles data including the IP, hostnames from Shodan, the unexpected port number, service description, and detailed data from Shodan like HTTP status code, date, time, and headers. This collected data is then formatted into an HTML table, which is subsequently converted into Markdown format. Finally, the workflow generates an alert in TheHive, a popular security incident response platform. This alert contains details like the title indicating unexpected ports for the specific IP, a description comprising the Markdown table with Shodan data, medium severity, current date and time, tags, Traffic Light Protocol (TLP) set to Amber, a new status, type as 'Unexpected open port', the source as n8n, a unique source reference combining the IP with the current Unix time, and enabling follow and JSON parameters options. This comprehensive workflow thus aids in the proactive monitoring and management of network security.
by PiAPI
What's the workflow used for? Leverage this Kling API (unofficial) provided by PiAPI workflow to streamline virtual try-on video creation. This tool is designed for e-commerce platforms, fashion brands, content creators and content influencers. By uploading model and clothing images and linking PiAPI account, users can swiftly generate a realistic video of the model sporting the outfit with a 360° turn, offering an immersive viewing experience. Step-by-step Instruction For basic settings of virtual try-on, check API doc to get best practice. Fill in your X-API-Key of your PiAPI account in Preset Parameters node. Upload the model photo and provide target clothing image urls. Click Test Workflow to generate virtual try-on image. Get the video output in the final node. Param Settings If you want to change into a dress, input the model_input URL and the dress_input URL in the parameters. If you want to change into separates, input model_input URL, upper_input URL and lower_input URL in Preset Parameters. Use Case Input images: Output Video The output demonstrates that the model is wearing the clothing from the specified image and showcases a rotating runway-style view. This workflow enables you to efficiently test garment-on-model presentation effects while reducing business model validation costs to a certain extent.
by David w/ SimpleGrow
Scheduled Trigger: Every X day at Y pm, the workflow is automatically triggered. Fetch User Data: The workflow retrieves all user records from the "WhatsApp Engagement Database" in Airtable. Each record contains the user’s WhatsApp ID, current points, and the number of raffle vouchers. Personalized Message Preparation: For each user, a personalized WhatsApp message is prepared. The message includes: The user’s current point total The number of raffle vouchers they have for the week Encouragement to keep engaging for more chances to win Information about the weekly raffle and available prizes Send WhatsApp Message: The workflow sends this personalized message to each user via the Whapi API, using their WhatsApp ID. Result: Every active user receives a weekly update about their engagement status, raffle tickets, and a motivational message to encourage further participation. This helps boost engagement and keeps users informed about their progress and chances in the weekly raffle.
by Pablo
Get Scaleway Server Info with Dynamic Filtering Description This workflow is designed for developers, system administrators, and DevOps engineers who need to retrieve and filter Scaleway server information quickly and efficiently. It gathers data from Scaleway instances and baremetal servers across multiple zones and is ideal for: Quickly identifying servers by tags, names, public IPs, or zones. Automating server status checks in production, staging, or test environments. Integrating Scaleway data into broader monitoring or inventory systems. High-Level Steps Webhook Trigger:** Receives an HTTP POST request (with basic authentication) containing the search criteria (search_by and search). Server Data Collection:** Fetches server data from Scaleway’s API endpoints for both instances and baremetal servers across defined zones. Data Processing:** Aggregates and normalizes the fetched data using a Code node with helper functions. Dynamic Filtering:** Routes data to dedicated filtering routines (by tags, name, public_ip, or zone) based on the input criteria. Response:** Returns the filtered data (or an error message) via a webhook response. Set Up Steps Insert Your Scaleway Token: In the “Edit Fields” node, replace the placeholder Your personal Scaleway X Auth Token with your Scaleway API token. Configure Zones: Review or update the zone lists (ZONE_INSTANCE and ZONE_BAREMETAL) to suit your environment. Send a Request: Make a POST request to the workflow’s webhook endpoint with a JSON payload, for example: { "search_by": "tags", "search": "Apiv1" } View the Results: The workflow returns a JSON array of servers matching your criteria, including details like name, tags, public IP, type, state, zone, and user.
by Eduard
Are you a visual thinker working with n8n? 🎨 View and understand workflow structures at a glance with this template! Built with mermaid.js, Bootstrap 5 and AXAJ to create an interactive web page displaying n8n workflows as flowcharts. 🌟 Perfect for documentation, presentations, or just getting a clearer picture of your automation processes. Need customization help? Reach out to Eduard! Benefits 📊 Instant workflow visualization 📱 Responsive design 🔗 Direct links to n8n workflows 🧩 Special shapes for different node types 🚫 Disabled node indication 🔒 No external dependencies – just paste the workflow and call the webhook 🛠️ Easily customizable – enhance the JS script or add custom styling ⚠️ Important note for cloud users ⚠️ Since the cloud version doesn't support environmental variables, please make the following changes in the CONFIG node: Update the instance_url variable: Enter your n8n URL instead of {{$env["N8N_PROTOCOL"]}}://{{$env["N8N_HOST"]}} Change the webhook_path to simply "webhook" instead of {{$env["N8N_ENDPOINT_WEBHOOK"] || "webhook"}} 🌟 Examples Multiple flowcharts on a single page: Several shapes for different nodes: Langchain nodes with special connections styling: