GET /v1/jobs/{id} on a loop until status becomes completed, failed, or cancelled.
The minimal loop
client.read for batches and crawls implicitly calls waitForJob, so you get a completed job back without writing any loop yourself. That’s enough for most scripts and CLI tools.
When you want explicit control
If you want to show progress, set a custom timeout, or break out early, callgetJob directly:
Polling interval
Reader’s rate limit is per minute. Polling a single job at 2-second intervals is 30 requests per minute, already eating half your free-tier quota on one job. Tune the interval:| Expected job duration | Interval |
|---|---|
| Under 10 seconds | 1–2 seconds |
| 10 seconds to a minute | 2–5 seconds |
| A few minutes | 5–15 seconds |
| Longer than 5 minutes | Use webhooks instead |
What counts against credits
Polling does not consume credits. Only/v1/read requests spend credits. It does, however, count toward your rate limit (see above).
Next
- SSE streaming: realtime updates instead of polling
- Webhook workflows: skip polling entirely
- Polling vs SSE vs webhooks

