Concurrent Processing within n8n

Here are a few ways to paraphrase your request, focusing on different aspects::memo: Option 1: Formal & Problem-FocusedI’ve developed an automated workflow using n8n to generate SEO page titles. The process involves:Scraping a website whose URLs are sourced from a Google Sheet (using Python).The scraped data is processed in a JavaScript Code node, yielding a JSON output.This JSON is then routed to two distinct AI models, Grok and Gemini, for title generation.The Issue: The workflow executes the Grok task and the Gemini task sequentially (serialized), rather than concurrently (in parallel), despite being structured as a “fork.” I currently use a Loop Over Items node to manage rate limits, but the lack of true parallel processing significantly increases the execution time.Request: As a beginner to n8n, I am seeking guidance on how to achieve concurrent or parallel execution for the Grok and Gemini processing branches to improve efficiency.:rocket: Option 2: Concise & Action-OrientedI built an n8n workflow to generate SEO page titles by scraping Google Sheet URLs, processing the data into JSON, and sending it to Grok and Gemini for AI-based generation.The problem is that this “fork” runs sequentially (Grok completes entirely before Gemini starts) instead of concurrently. I use a “Loop Over Items” node to handle rate limits, but the lack of parallelism is a major bottleneck.How can I configure my n8n workflow to execute the Grok and Gemini branches in parallel to save time?:light_bulb: Option 3: Technical SummaryMy n8n automation for SEO title generation pulls URLs, scrapes the content via Python, and outputs a JSON data structure. This JSON is then input to two separate processing paths for Grok and Gemini.The current execution is serialized (Grok $\rightarrow$ Gemini), despite the intended structure for concurrency. I am using Loop Over Items for iteration and rate limit control. I need to know how to modify this n8n setup to enable true parallel/concurrent execution of the Grok and Gemini nodes to drastically reduce runtime.

Describe the problem/error/question

What is the error message (if any)?

Please share your workflow

(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)

Share the output returned by the last node

Information on your n8n setup

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

Hey @logidy Sub workflows should do the trick.

1 Like

Sub-workflows, implemented in n8n using the Execute Workflow node, are a very effective way to achieve concurrency and manage complexity, particularly for your Grok/Gemini task.

They are the most advanced solution for this problem, offering better isolation than simply modifying your main workflow.

1 Like

Okay, but wait, using a whole Sub-Workflow seems kinda intense, right? Like, is that the only way to make things run at the same time? I mean, what if I just connect both the Grok and the Gemini nodes in parallel right after my input?

Like, I figure that should trigger both of them at the same time, yeah? And then I could just put a node in to wait for the result from both of them like, whoever finishes last and then move on. That would work, wouldn’t it?

i know how n8n works though: stuff runs left-to-right, then top-to-bottom. So if my line splits into two vertical tracks, the top one will definitely run first. But if I use a Merge node to pull them back together later, that node will totally wait, and we’ll sync back up!

Workflow execution nodes in canvas are from left to right, and top to bottom.

If you place both grok and Gemini connected to a single node, you won’t achieve concurrency, it will start sequential from top-bottom / left-right depending which node is on top of each other in canvas.

1 Like

@logidy You’re absolutely right that sub-workflows aren’t the only way to achieve parallel execution in n8n.

The method you described simply connecting the two nodes (Grok and Gemini) in parallel after the main input is the simpler, “single-workflow” approach.

1 Like

Thank you I will look into these.

P.S

If you need true parallelism (for example, running sub-workflows or HTTP calls in parallel), you must use workarounds such as triggering sub-workflows asynchronously (e.g., via HTTP Webhook calls) and not waiting for their completion, or running n8n in queue mode with multiple workers.

Cheers!

Hope this helps to clarify things.

1 Like