The 429 is not where you think it is
Almost every "my enrichment flow dies halfway" ticket has the same suspect: a rate limit on the AI provider.
We checked the provider's own documentation and then did the arithmetic on our own batch settings — and the
numbers say the AI node is the least likely place for a 429 to come from. Here is what each
limit really is, what the batch interval buys you, and which error codes are worth retrying at all.
What DeepSeek actually limits: connections, not requests per minute
Read the live docs rather than a blog post from last year. As of October 2026, DeepSeek publishes a concurrency limit per account, not a requests-per-minute quota:
| Model | Concurrent requests per account |
|---|---|
deepseek-flash | 2,500 |
deepseek-v4-pro | 500 |
Two details matter more than the big numbers. First, a request occupies one slot from the moment it is
sent until the response is complete — so a slow completion holds its slot, and "requests per second" is
not the unit being counted. Second, the limit is computed at account level, regardless of which API key you
use: your five workflows share one ceiling, and so does any other app on that account. Exceed it and you
get 429, exactly as if you had sent too many requests per minute.
The kit's arithmetic: 4 in flight against a ceiling of 2,500
Node 05 in the workflow uses n8n's batching options with two values that matter: a batch size of 4 and a batch interval of 1,200 ms. Batching means one HTTP request carries four leads, and n8n waits 1.2 s before opening the next one. Consequences, in plain numbers:
| Quantity | Value | How it is derived |
|---|---|---|
| Requests in flight at any moment | 1 | Sequential batches, not parallel |
| Leads per request | 4 | batchSize |
| Requests per minute, hard ceiling | 50 | 60 ÷ 1.2 s |
| Leads per minute, hard ceiling | 200 | 50 × 4 |
| A full 60-lead run | 15 requests, ≈ 20 s | 15 × 1.2 s of pauses plus latency |
| Share of the flash concurrency limit | 0.16 % | 4 ÷ 2,500 |
So the interval is not there to keep a rate limiter happy in the ordinary case — at 0.16 % of the ceiling it could not. It is there for three cheaper reasons: it keeps a run's duration predictable, it stops a runaway loop from becoming a runaway bill, and it gives you headroom for the day you run ten flows at once on the same account. That last one is the case where the account-level limit really bites.
Which errors deserve a retry, and which are a waste of time
This is the part that turns a bad afternoon into a five-minute fix. DeepSeek's error table lists six codes you will actually meet, and only some of them get better by retrying:
| Code | Meaning | Retry? |
|---|---|---|
400 | Invalid request body format | No — fix the JSON. Retrying sends the same malformed body. |
401 | Authentication fails | No — wrong or missing key; check the credential. |
402 | Insufficient balance | No — top up. This is the one people retry forever at 3 a.m. |
422 | Invalid parameters | No — read the hint in the body, it usually names the field. |
429 | Rate limit reached: too fast, or concurrency/QPS exceeded | Yes, with a real pause (see below). |
500 / 503 | Server error / overloaded | Yes, after a brief wait. Not your fault, and not permanent. |
A rejected request comes back without a usage block, so it is not billed: a 429 costs
you time, not tokens. What it does cost, if you handle it badly, is duplicated work — which is why the retry
belongs in the HTTP node's own options and not in a loop you wrote yourself.
The three settings that fix it in n8n, in order
- Retry on fail, with a wait. On node 05, enable Retry On Fail, set Max Tries to 3 and
Wait Between Tries to 2000 ms. Three attempts with two seconds between them survives a transient
503without touching the rest of the flow. - Raise the batch interval before you shrink the batch. If you see sustained
429s, take the interval from1200to3000. Same work, same tokens, four times slower — and still under one request every three seconds. - Then, and only then, reduce the batch size. Dropping from 4 to 2 does not reduce concurrency (there was only ever one request in flight); it doubles the number of requests. It helps only when a single request is too large for the model, which is a different problem — the one where the response comes back empty, covered in our empty-response article.
Where the 429 really comes from in this pipeline
In our runs, the AI node is not the usual suspect. Ranked by how often it explains the failure:
| Cause | What you see | Fix |
|---|---|---|
| Google pagination with no interval | Error on node 02, before any AI call | The kit ships requestInterval: 2000. Keep it: Google asks for a pause before the next page token. |
| Several flows sharing one account | 429 only when other runs are active | Stagger the schedules, or raise the interval on the busiest node. |
| The same key used by another app | 429 with no load on your side | Account-level limits are shared across keys — give the kit its own account or its own schedule. |
A 503 read as a rate limit | Fails at random, works on manual retry | It is server load: retry after a wait, do not "fix" your batching for it. |
An 402 read as a rate limit | Fails permanently one day, never recovers | Balance. Check it before you spend an hour on intervals. |
Diagnose it in sixty seconds
Open the failed execution and read three things in order: which node is red (that alone separates a Google problem from an AI problem), the HTTP status, and whether it failed on the first batch or after N. Failing on the first batch is almost never a rate limit — it is credentials, parameters or balance. Failing after N batches, only on busy days, is a rate limit, and the interval is the right dial. Failing on one specific lead, every time, is a prompt or payload problem that no amount of waiting fixes.
What we did not test
Honesty about the evidence: we have not induced a 429 on purpose, and we have not run this
pipeline against a live Google key in production. The concurrency figures above come from DeepSeek's
documentation read on 19 October 2026; the timing figures come from our own runs (15 batched requests for 60
leads, about 20 seconds end to end). If DeepSeek changes its limits tomorrow, the arithmetic changes with it —
which is why the document that ships inside the kit lists the source and the date next to every number.
The kit these articles come from
Two n8n workflows, an MCP server, six documents in English and Spanish, a validator and a self-test. USD 49 one time, on the n8n instance you already have.
See pricing