Catch-all recovery in n8n
Catch-all recovery is a batch step keyed by CSV job — which is exactly what n8n’s multi-step HTTP orchestration is good at. This flow uploads a list, triggers recovery on the job, then branches each address by its recommended action. One API key and the shared credit wallet cover the whole chain. Recovery starts from standard validation results whereresult = risky and
is_catchall = true. It adds confidence, reason, and recommended-action fields;
it does not prove mailbox existence deterministically or convert the canonical
result to valid. See Catch-all detection vs recovery
for the validation semantics.
All requests use an HTTP Request node with header auth:
X-API-Key: {{your_api_key}}. The key needs the email:validate:bulk scope —
mint one from the dashboard.
1. Upload the list
POST your CSV through the CSV API and capture the returnedbatch_id. (For large files use the signed-URL upload path; the guide covers
both.)
2. Trigger recovery (HTTP Request node)
The call is idempotent per batch — a retried node won’t double-charge. It
reserves premium credits, scores the risky catch-all candidates, and finalizes
(consume per recovered lead, refund the rest) in one response:
GET https://api.gtmapis.com/v1/csv/jobs/{{batch_id}}/recovery.
3. Branch on the recommended action
Add an Item Lists → Split Out node onresults, then a Switch node on
recommended_action:
Carry the
reason field through so every routing decision is auditable — the
“why” behind each call, not a black-box verdict.
4. You only pay for recovered
Recovery charges 3 credits only on a send-worthy result (likely_deliverable / send_with_caution). manual_review, suppress,
insufficient_signal, and provider_error cost 0; reserved credits are
refunded (see credits_refunded). The buying frame is cost per recovered
lead, not cost per lookup. See Rate Limits for retry and
throttling behavior in long-running flows.