Skip to main content

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 where result = 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 returned batch_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:
If you’d rather poll instead of reading the trigger response, fetch results later with GET https://api.gtmapis.com/v1/csv/jobs/{{batch_id}}/recovery. Add an Item Lists → Split Out node on results, 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.