Poll Node
Submit an async MCP job, poll until it completes, and download the results
Last updated 24 Jun 2026
The Poll node drives the submit → poll → download lifecycle of an asynchronous MCP tool. It optionally submits a job, repeatedly calls a status tool at a configured interval until a completion (or failure) value is detected, then optionally downloads the result. It is built for long-running platform operations — report generation, bulk exports, audience builds — that return a job handle immediately and produce data later.
When to Use
Use Poll when an MCP server exposes an async job pattern: one tool starts the work and returns a job ID, a second tool reports status, and a third returns the finished payload. If an upstream MCP node has already submitted the job, leave the submit step blank and Poll will start from the status check.
Configuration
| Field | Type | Description |
|---|---|---|
connectionId | string | MCP connection used for all three steps |
submitToolName | string | Optional tool that starts the job (skip if an upstream node already submitted) |
submitArgumentsTemplate | code | Arguments for the submit tool, with template interpolation |
pollToolName | string | Tool that returns the job status |
pollArgumentsTemplate | code | Arguments for the poll tool (e.g. the job ID from submit) |
completionField | string | Field in the poll response to inspect for completion (e.g. status) |
completionValues | string | Comma-separated values that mean "done" (e.g. complete, COMPLETE) |
failureValues | string | Comma-separated values that mean "failed" (stops polling early) |
downloadToolName | string | Optional tool that fetches the finished result |
downloadArgumentsTemplate | code | Arguments for the download tool |
intervalSeconds | number | Seconds between poll attempts (default: 30, range 5–300) |
maxAttempts | number | Maximum poll attempts before timing out (default: 20, range 1–100) |
backoffMultiplier | number | Multiplier applied to the interval after each attempt (default: 1, no backoff) |
maxIntervalSeconds | number | Upper bound on the interval when backoff is enabled (default: 300) |
responseMapping.dataPath | string | Dot-notation path to the records in the final response (e.g. data.rows) |
responseMapping.outputMode | replace | merge | append | How to combine the result with incoming records (default: replace) |
Example
Poll a TikTok report job to completion, then download it:
connectionId: <tiktok-connection-uuid>
submitToolName: tiktok_submit_report
pollToolName: tiktok_check_report_status
completionField: status
completionValues: complete, COMPLETE
failureValues: failed, ERROR
downloadToolName: tiktok_download_report
intervalSeconds: 30
maxAttempts: 20
Every 30 seconds the status tool runs; when status is complete, the download tool fetches the report and its rows pass downstream.
Notes
- The submit call is governed; poll and download calls are read-only and skip guardrail evaluation.
- If
maxAttemptsis exhausted, the node fails withPolling timed out after N attempts— it does not emit a timeout record. - If
completionFieldmatches a value infailureValues, polling stops immediately and the node fails. - Set
backoffMultiplierabove1to space out attempts over time;maxIntervalSecondscaps the growth. - Poll runs on Inngest's durable
step.sleep()between attempts, so long waits survive worker restarts without holding an open connection.
Related articles
Still stuck? Browse the FAQ or contact us.