# List workflow runs

> List a Revnu workflow's runs through the API, newest first. Inspect run status, per-step outcomes, and counts of leads, contacts and people found by each run.

Canonical: https://revnu.com/docs/workflow-runs
Last updated: 2026-10-21

```bash
curl -H "Authorization: Bearer $REVNU_API_TOKEN" "https://revnu.com/api/v1/workflows/h97…/runs?limit=10"
```

## Query

| Param | Meaning |
|---|---|
| `limit` | 1 to 50. Default 10. |

## Response

`{ "runs": [run, …] }`, newest first, each with its per-step outcomes. `404` for an unknown or another account's workflow.

A run's `status` is `queued` (started with [`POST /workflows/{id}/runs`](https://revnu.com/docs/workflow-run.md) and not picked up yet), `running`, `done`, `failed` or `abandoned` (it never started or never reported back).

Each run has `found: { leads, contacts, people }`: how many leads and contacts this run created, and how many people it added to a company's research list without saving them as contacts. Counting started on 2026-10-02, so runs before then show zero. List them with [`GET /leads?workflowRunId=<run id>`](https://revnu.com/docs/leads.md).

## Frequently asked questions

### How do I tie a lead back to the run that found it?

Every lead and contact carries `workflowRunId`: the workflow run that created it, or `null` when it was created outside a workflow (for example in chat) or before 2026-10-02. A run that saves a company again does not take it over, so each lead counts once. A later run is credited with new people it adds to that company: the company appears in that run's list with `runCreatedLead: false`, the new contacts in `runContactIds` and the new people on its research list who are not contacts in `runPeople`. A run that returns people the company already had lists that company too, with those people in `runPeople` marked `alreadyKnown: true`; they don't count in `found.people`.

### Which scope does this need?

`results:read`. A token without it gets `403` with `requiredScope` in the body. `GET /me` shows a token's scopes.

### Are responses cached?

No. Every response is `Cache-Control: no-store`, so what you read is current.
