## TL;DR

Scanning 5,000 reports in one run exceeds the agent's time budget. Split the workload into batches of a few hundred reports, checkpoint progress after each batch so a timeout resumes instead of restarting, and run batches in parallel where the API allows.

## Error

```text
audit agent failed with timeout scanning 5k expense reports
```

## Steps

1. Measure the agent's throughput: time how long 100 reports take. Expected: a per-report cost you can extrapolate.
2. Choose a batch size that completes comfortably inside the timeout (for example, 200 reports per batch). Expected: a batch size with headroom.
3. Add checkpointing: after each batch, record the last processed report ID to durable storage. Expected: a resume point that survives a timeout.
4. On timeout, resume from the checkpoint instead of restarting. Expected: the scan continues where it stopped.
5. If the expense API supports it, run multiple batches concurrently within the rate limit. Expected: total scan time drops proportionally.

## When to use

- An audit agent times out on large report volumes.
- Restarting from scratch repeats the timeout.

## When not to use

- A single report crashes the agent (debug that report's content).
- The API rate-limits the scan (see the rate-limit skill).

## Tool compatibility

- Custom audit agents over Expensify, Concur, Ramp, and similar expense APIs.

## Variant phrasings

### Agent timed out on bulk expense scan

Same failure, shorter wording.

### Scan did not complete: deadline exceeded

The scheduler phrasing of the same timeout.

## Why it happens

Agent runs have fixed time budgets, but scan cost grows linearly with report count. Without batching and checkpoints, a large corpus always outruns the budget.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_K2znIY-iawfL5J-RW5vJ7Q
