Hi everyone, I’m dealing with a more advanced scaling issue and could use some guidance.
I have multiple workflows running in parallel (triggered by webhooks and cron) that all call the same external API, which has strict rate limits (e.g., 100 requests per minute). As usage grows, I’m starting to hit 429 errors, and retries are making things worse by creating spikes.
Current setup looks like:
Webhook/Cron → Split In Batches → HTTP Request → Process
Right now:
Each workflow handles its own retries
No shared awareness of rate limits
Occasional bursts exceed API limits
Example retry logic:
if ($json.statusCode === 429) {
await new Promise(resolve => setTimeout(resolve, 1000));
return $input.all();
}
The problem:
Multiple workflows retry at the same time → thundering herd effect
Slowing down one workflow doesn’t fix others
I need a global rate limit control, not per-workflow
I’m considering:
Using a queue (Redis / Bull)
Centralizing API calls into a single workflow
Building a custom rate limiter with shared state
Describe the problem/error/question
What’s the best pattern in n8n to handle global rate limiting across multiple workflows while still keeping good throughput?
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: